概念
# 基本概念
密码学(英语:Cryptography)可分为古典密码学和现代密码学。古典密码学主要关注信息的保密书写和传递,以及与其相对应的破译方法。而现代密码学不只关注信息保密问题,还同时涉及信息完整性验证(消息验证码)、信息发布的不可抵赖性(数字签名)、以及在分布式计算中产生的来源于内部和外部的攻击的所有信息安全问题。古典密码学与现代密码学的重要区别在于,古典密码学的编码和破译通常依赖于设计者和敌手的创造力与技巧,作为一种实用性艺术存在,并没有对于密码学原件的清晰定义。而现代密码学则起源于 20 世纪末出现的大量相关理论,这些理论使得现代密码学成为了一种可以系统而严格地学习的科学。
# 古典密码学
# 替代法
# 单表代换加密
用固定的信息将原文替换成无法直接阅读的密文信息。例如将 b
替换成 w
, e
替换成 p
,这样 bee
单词就变换成了 wpp
,不知道替换规则的人就无法阅读出原文的含义。
笔记
存在一张密码表,知道里密码表就被破解了。
# 多表代换加密
多表替换即有多张原文密文对照表单,不同字母可以用不同表单的内容替换。
例如约定好表单为:表单 1: abcde-swtrp
、表单 2: abcde-chfhk
、表单 3: abcde-jftou
。
规定第一个字母用第三张表单,第二个字母用第一张表单,第三个字母用第二张表单,这时 bee 单词就变成了
(312) fpk ,破解难度更高,其中 312 又叫做密钥,密钥可以事先约定好,也可以在传输过程中标记出来。
笔记
存在多张密码表和一个密钥,只有同时知道全部密码表和密钥信息才可以被破解。
# 移位法
凯撒密码(Caesar)加密时会将明文中的 每个字母 都按照其在字母表中的顺序向后(或向前)移动固定数目(循环移动)作为密文。例如,当偏移量是左移 3 的时候(解密时的密钥就是 3):
明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC
使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。例如:
明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ
# 破解
# 频率分析法
频率分析 - 维基百科,自由的百科全书 (opens new window)
在密码学中,频率分析是指研究字母或者字母组合在文本中出现的频率。应用频率分析可以破解古典密码。
在英语中,字母 E 出现的频率很高,而 Z 则出现得较少。类似地,ST、NG、TH,以及 QU 等双字母组合出现的频率非常高,NZ、QJ 组合则极少。英语中出现频率最高的 12 个字母可以简记为 “ETAOIN SHRDLU”。
在现代标准汉语中,汉字 “的”、“不”、“是” 出现的频率很高,而汉字 “翊”、“谧”、“觑” 则出现的较少,见常用国字标准字体表,后三个字属于次常用字。
# 现代密码学
# 散列函数
散列函数,也见杂凑函数、摘要函数或哈希函数,可将任意长度的消息经过运算,变成固定长度数值,常见的有 MD5、SHA-1、SHA256,多应用在文件校验,数字签名中。
MD5 可以将任意长度的原文生成一个 128 位(16 字节)的哈希值
SHA-1 可以将任意长度的原文生成一个 160 位(20 字节)的哈希值
# 对称加密
对称密码应用了相同的加密密钥和解密密钥。对称密码分为:** 序列密码 (流密码),分组密码 (块密码)** 两种。
流密码是对信息流中的每一个元素(一个字母或一个比特)作为基本的处理单元进行加密
块密码是先对信息流分块,再对每一块分别加密。
例如原文为 1234567890,流加密即先对 1 进行加密,再对 2 进行加密,再对 3 进行加密…… 最后拼接成密文;块加密先分成不同的块,如 1234 成块,5678 成块,90XX (XX 为补位数字) 成块,再分别对不同块进行加密,最后拼接成密文。前文提到的古典密码学加密方法,都属于流加密。
# 非对称加密
对称密码的密钥安全极其重要,加密者和解密者需要提前协商密钥,并各自确保密钥的安全性,一但密钥泄露,即使算法是安全的也无法保障原文信息的私密性。
在实际的使用中,远程的提前协商密钥不容易实现,即使协商好,在远程传输过程中也容易被他人获取,因此非对称密钥此时就凸显出了优势。
非对称密码有两支密钥,公钥(publickey)和私钥(privatekey),加密和解密运算使用的密钥不同。用公钥对原文进行加密后,需要由私钥进行解密;用私钥对原文进行加密后(此时一般称为签名),需要由公钥进行解密(此时一般称为验签)。公钥可以公开的,大家使用公钥对信息进行加密,再发送给私钥的持有者,私钥持有者使用私钥对信息进行解密,获得信息原文。因为私钥只有单一人持有,因此不用担心被他人解密获取信息原文。