目录
1 密码学概述
1.1 密码学的基本概念
1.1.1 为什么要学密码学
信息安全是密码学的目标,密码学是保障信息安全的核心技术。
1.1.2 什么是密码学
密码是指采用特定变换的方法对信息进行加密保护、安全认证的技术、产品和服务。--------《中华人民共和国密码法》
密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保护通信秘密的成为密码编码学,应用于破译密码以获取通信情报的,称为密码分析学。
如上图,在Alice向Bob发送信息的过程中存在着许多安全问题,是否有其他人看到信息内容(机密性),信息内容是否被改动(完整性),是否是Alice发送的信息(消息源认证),是否是发给Bob的信息(通信实体认证),是否Alice真的给Bob发过信息(不可否认性)。而密码学就是来解决这些问题的关键技术。
1.1.2 密码算法的基本模型
基本概念:
明文(planintext): 被隐蔽的消息
密文(ciphertext): 隐蔽后的消息
加密算法(encryption algorithm):发送者对明文进行加密时所采用的规则
解密算法(decryption algorithm):接受者对密文进行解密时所采用的规则
密钥(key):加密和解密通常在一组key(encryption key;decryption key)控制下进行
1.1.3 密码算法的分类
(1)对称密钥加密算法:指加密密钥和解密密钥相同的密码算法,分为分组密码算法和流密码算法。 常见算法:DES、AES、SM4。
(2)非对称密码算法:指加密密钥和解密密钥不同的密码算法,加密密钥可以公开(公钥),解密密钥必须保密(私钥)。常见算法:RSA、ECC、SM2。
(3)无密钥密码算法:指把任意长度的输入消息数据转化为固定长度的输出数据的一种密码算法,又称为 散列函数 、 哈希函数 、 杂凑函数 、单向函数。通常用来做数据完整性的判定。常见算法:SHA系列、MD5、SM3。
1.2 密码分析学
密码分析学的目标:恢复合法密文相应的明文,恢复密钥。
Kerckhoffs假设:假定密码分析者和敌手知道所使用的密码系统。即密码体制的安全性仅依赖于对密钥的保密(一切秘密皆蕴含在密钥中!),而不依赖于算法的保密。现代密码学基本观点:在Kerckhoffs假设下达到安全性。
密码分析者攻击密码体制的方法:
(1)穷举攻击:通过试遍所有的密钥来进行破译。
对抗:可增大密钥的数量。
(2)统计分析攻击:通过分析密文和明文的统计规律来破译。
对抗:设法使明文和密文的统计规律不同。
(3)解密变换攻击:针对加密变换的数学基础,通过数学求解设法找到解密变换。
对抗:选用具有坚实的数学基础和足够复杂的加密算法。
密码体制的攻击(密码破译):
唯密文攻击:密码分析者仅知道一些密文
已知明文攻击:密码分析者知道一些明文和相应的密文
选择明文攻击:密码分析者可以选择一些明文,并得到相应的密文
选择密文攻击:密码分析者可以选择一些密文,并得到相应的明文
密码算法只要满足一下两条准则之一就行:
(1)破译密文的代价超过被加密信息的价值。
(2)破译密文所花的时间超过信息的有用期。
满足以上两个准则的密码算法在实际中是可用的。
1.3 古典密码算法
1.3.1 置换密码
置换密码(Permutation Cipher)又叫换位密码(Transposi-tionCipher),对明文字符或字符组进行位置移动,以便打破明文的结构特性。
置换密码的特点:保持明文的所有字符不变,只是利用置换打乱了明文字符的位置和次序。
1.3.2 单表代替密码算法
代替密码算法针对英文字母进行处理。构造一个或多个密文字母表,然后用密文字母表中的字母或者字母组来代替明文字母或字母组,各字母或字母组的相对位置不变,但本身的值发生了改变。
单表代替密码可分为:加法密码、乘法密码、仿射密码。
1.3.3多表代替密码算法
维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。
在一个凯撒密码中,字母表中的每一字母都会作一定的偏移,例如偏移量为3时,A就转换为了D、B转换为了E……而维吉尼亚密码则是由一些偏移量不同的恺撒密码组成。
为了生成密码,需要使用表格法。这一表格包括了26行字母表,每一行都由前一行向左偏移一位得到。具体使用哪一行字母表进行编译是基于密钥进行的,在过程中会不断地变换。
例如,假设为:ATTACKATDAWN
选择某一关键词并重复而得到密钥,如关键词为LEMON时,密钥为:LEMONLEMONLE
对于明文的第一个字母A,对应密钥的第一个字母L,于是使用表格中L行字母表进行加密,得到第一个字母L。类似地,明文第二个字母为T,在表格中使用对应的E行进行加密,得到密文第二个字母X。
以此类推,可以得到:
明文:ATTACKATDAWN 密钥:LEMONLEMONLE 密文:LXFOPVEFRNHR
解密的过程则与加密相反。例如:根据密钥第一个字母L所对应的L行字母表,发现密文第一个字母L位于A列,因而明文第一个字母为A。密钥第二个字母E对应E行字母表,而密文第二个字母X位于此行T列,因而明文第二个字母为T。以此类推便可得到明文。
用数字0-25代替字母A-Z,维吉尼亚密码的加密文法可以写成的形式:
解密方法则能写成:
2 分组密码
2.1 分组密码的基本概念
分组密码属于对称加密算法,消息接收方与发送方拥有同一个密钥、能力对等。
将明文划分为m比特长的组,每一块依次进行加密算法。
由密钥k决定一个明文到密文的可逆映射。
2.2 分组密码的设计
2.2.1 理想分组密码
Feistel提出: 理想的分组密码,可以允许生成最大数量的加密映射,来映射明文分组。加密和解密映射用表定义。
对于n比特到n比特的可逆置换,共有!种可能的置换表。密钥长度:n*
bits。
若要抵抗统计攻击,,密钥至少
比特。
理想的分组密码,虽然安全性高,可能的置换非常多,但并不可行。
2.2.2 安全性原则
混淆与扩散:分组密码设计的本质
混淆:打乱密文、明文、密钥之间的依赖关系。
扩散:明文的统计特性消散在密文中。每个明文比特尽可能地影响多个密文,密文每个比特受多个明文比特影响。
乘积密码:
实现混淆扩散的一种有效方法——“乘积密码”。
先用一种密码体制对明文加密得到密文
,再用另一种密码体制
对
加密,得到最终的密文
,香农称之为“乘积”组合密码体制。
2.2.3 主要设计结构
Feistel结构:DES、CAST、Skipjack
SPN网络(Substitution-PermutationNetwork):AES、Serpent
迭代分组密码:一个内部函数(轮函数)的连续重复。参数包括轮数r、分组的比特长度n和输入密钥K的比特长度k,