这篇文章上次修改于 2019 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

对称密码

对称密码(共享秘钥密码)

从文字密码到比特序列

编码(encoding)
XOR( exclusive or 异或)

0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0

一次性密码本(one-time pad)

不可破译,因为即使能够遍历所有秘钥空间,也无法判断结果是否正确。
无条件安全(unconditionally secure) ,理论上无法破解(theoretically unbreakable)。
为何未被使用:
秘钥的配送 : 如果有办法安全传输秘钥,那为何不直接传输明文
秘钥的保存: 如果有办法安全保存和明文同样长的秘钥,为何不直接保存明文。
秘钥的重用: 一次性密码本中绝对不能重用过去的随机比特序列
秘钥的同步: 明文很长时密码本的秘钥也会同样变长,任何错位都会使错位后的所有信息无法解密。
秘钥的生成: 一次性密码本需要大量随机数,必须是真正的随机数。

虽然一次性密码本没有实用性,该思路产生的流密码(stream cipher)

DES(Data Encryption Standard)

1977年美国联邦信息处理标准(FIPS)中采用的一种对称密码(FIPS 46-3).
目前DES可以短时间内破译,除了用来解密以前的密码外,不应该再使用DES。

DES :对称加密算法,秘钥长度为56bit (秘钥长度64,每隔7bit设置一个错误校验位,实质56bit)
DES以64bit的明文为一个单位进行加密,这个64比特的单位称为分组。以分组进行处理的密码算法称为分组密码(block cipher),DES是分组密码的一种。
DES加密解密

DES的结构(Feistel网络)

DES是 Horst Feistel 设计的,也称Feistel网络(Feistel network)、Feistel结构(Feistel structure)、Feistel密码(Feistel cipher).
Feistel网络中加密步骤称为轮(round),整个加密过程是若干次的循环。
下图是一轮计算流程:
Feistel网络的一轮

三重DES (triple DES) TEDA (triple Data encryption Algotrithm)

三重DES解密

AES的选定过程

AES(advanced Encryption Standard)是取代DES称为新标准的一种对称密码算法
参选必须提交ANSI C和Java编写的实现代码以及抗密码破译强度的评估材料。在详细设计和程序代码公开的情况下,保证较高的强度,彻底杜绝隐蔽式安全性(security by obsecurity)
通过竞争实现标准化(standardization by competition)
1997 年进入评审的15个算法: CAST-256 , Crypton, DEAL, DFC, E2 , Frog, HPC, LOK197, Magenta, MARS, RC6, Rigndael, SAFER+, Serpent, Twofish
1999 年5个算法入围最终候选名单, MARS (IBM公司), RC6(RSA公司), Rigndael(Daemen , Rigmen) , Serpent(Anderson, Biham, Knudsen), Twofish(Counterpane公司)
2000 年Rigndael被选定为AES标准