DES是一个标准的分组密码
知识储备
对称密码
- 在一个密码体制上,需要有一个发送方和接收方,发送方对明文进行加密得到密文,接收方对密文进行解密得到明文。
- 在整个过程中有两把钥匙,加密的钥匙控制加密的算法,解密的钥匙控制解密的算法。
- 对于对称密码有一个特点,加密钥匙和解密钥匙是相等的。使用的是同一把钥匙。
分类
- 流密码
- 如果抛开密钥生成算法不谈,单单看下方的过程,很明显,流密码就是使用单纯的异或操作实现的加密和解密。
- 异或运算有两个重要的性质,叫做归零律和自反律,归零律是指A异或A等于0,自反律是指,A异或0还等于A。所以明文m异或两次密钥之后,还是自身。
- 逐比特处理就像是水流一样,所以称为流密码。
- 分组密码
- 分组密码的要求较多,它对于明文的长度要求为b比特,经过一个密钥K加密之后形成密文也是b比特。
- 分组密码顾名思义,就是把数据当成一个等长的分组。
- 分组密码的加/解密运算是:输出块中的每一位是由输入块的每一位和密钥的每一位共同决定。
- 加密算法中重复地使用代替(替代)和置换(移位)两种基本的加密变换,此即Shannon 1949年发现的隐藏信息的两种技术:混淆和扩散。
- 混淆(Confusion):就是改变数据块,使得输出位与输入位之间没有明显的统计关系(代替、XOR);
- 扩散(Diffusion):就是密钥位转移到密文的其它位上(移位)。
- 分组密码的特点:有良好的扩散性;对插入信息的敏感性,较强的适应性;差错的扩散和传播。
- 代换(代替、替换)技术
- 将明文字母替换成其他字母、数字或者符号的方法。
- 置换(换位)技术
- 保持明文的所有字母不变,只是打乱明文字母的位置和次序。
- 一次一密
- Vernam代数密码,加解密算法都是模2加。
1.代替与换位
- 代替Substitution
- 在输入一组数据时,输出另一组数据。
- 输入和输出的长度未必一样长(压缩,等长,扩展)
- 输入和输出未必一一对应(一对多,多对一)。
- 操作:算术/逻辑运算,非线性映射
- 由于计算机字长和计算能力的限制,代替所处理的数据长度很有限,所以在处理长明文块时,需要多个代替模块。
- 各个代替模块之间没有关联。
- 换位(置换)Permutation
- 交换各个数据位之间的位置。
- 交换各个子代替,使得混淆和扩散效果在更大的范围内实施。
- 代替和换位使得数据变得复杂,难以反向推测。如图:
- 如果只看第一行的话,他就是一个简单的S盒,每一个盒子输入的3比特信息,比会影响到另一个盒子的3比特信息流。
- 但是经历过一次P置换之后,每个盒子之间就会产生影响了。这仅仅时一次S和P,在真实的加密过程中会经历多次的S和P操作,使得数据变得更加复杂,很难进行反向推测。
- 通过对包含密钥的数据进行代替和换位,可以获得复杂的数据,可以当作密钥流,加密明文数据。
Feistel网络结构
- 一次加密
- 加密
- 解密
- 过程和传统密码加密的思想基本一致,明文经过钥匙异或之后形成密文。当然钥匙是经过代替和换位产生。
- 多次加密
- 如图:
- 明文经过多次一次一密,多次混淆和扩散之后,形成的密文将会变得更加安全。
- 标准的Feistel结构
- 该结构会把数据分成左右两个部分,左块L0不变,而右块R0与一个钥匙直接放到F函数里面与进行一些复杂运算。
- 接着让L0与R0进行异或(XOR)运算。第一次的运算结果作为第二次的右块R,而第一次的R块R0作为第二次的左块L0。
- 依次类推,得到Ln,Rn。
- 由图知,前面的n-1次的运算都要用到交叉,但是最后一次运算并没有使用交叉。而最后一轮不交换可以使得加密和解密公用一个流程。
- 扩展的Feistel结构
- 更加复杂,如图
- 这种结构在现今也在大量应用。暂不了解。