本文共 2243 字,大约阅读时间需要 7 分钟。
现代密码建立在计算机技术上,计算机操作的对象不是文本,而是比特序列。编码就是将现实中的事物映射为比特序列,并执行加密操作转换为密文序列。例如,ascii码将字符编码为01bit序列
xor是计算机加密算法中常用的bit序列算法,通过对同一bit序列进行两次xor操作能够得到原始的数据。
一次性密码本是永远不会被破译的,即使是用暴力破解的方式。一次性密码本的加密和解密就是用一串和明文长度相同的bit序列进行xor操作。之所以无法破解一次性密码本,是因为我们无法判断破译出的结果是否是正确的明文,明文中所有的组合都有可能出现。
一次性密码本由维纳在1917年提出,其无法破译这一特性是由香农与1949年通过数学方法加以证明的,因此一次性密码本是无条件安全的,在理论上是无法破译的
然而一次性密码本没有被广泛使用,最大的问题在于密钥的配送和密钥的保存,因为如果我们能构实现密钥的安全配送和保存,那就没有理由认为不能实现明文的安全配送和保存。其次,一次性密码本不能重用,传输过程中不能出现丝毫错误。一次性密码本的密钥生成需要大量随机数(并非伪随机数)
虽然一次性密码本没有实用性,但是却孕育了流密码的思想
DES(data enryption standard)是1977年FIPS采用的一种对称密码,现在计算机已经能够暴力破解DES。
DES是一种能够将64bit的明文加密成64bit的密文的对称加密算法,每个7bit会设置错误校验的1bit,所以实质上其密钥长度为56bit
DES以64bit的明文为单位进行加密,称为分组。以分组为单位进行处理的密码算法称为分组密码
DES每次只能加密64bit的书籍,如果明文较长,就需要对DES进行迭代,迭代的具体方式称为模式
DES的基本结构是由Feistel设计的,在Feistel网络中,加密的每个步骤被称为轮,DES是一种16轮循环的Feistel网络。
子密钥是本轮加密所使用的密钥,在Feistel网络中,每一轮需要使用一个不同的子密钥,并且仅在一轮中使用(局部密钥)轮函数根据右侧和子密钥生成比特序列,对左侧进行加密,是密码系统的核心
DES的具体步骤
DES的右边没有实现加密,因而需要不停调转左右两侧,Feistel可以实现任意轮加密。DES的解密过程和加密过程恰好相反。
DES的特点:MARS,RC6,Twofish都使用了feistel网络
三重DES就是为了增加DES的强度,将DES重复3次所得到的的一种加密算法,简写为3DES
之所以采用加密->解密->加密的方式,是因为IBM公司设计能够让3DES兼容DES算法
如果密钥1和密钥3使用相同的密钥,密钥2使用不同的密钥,则成为DES-EDE2 密钥1,密钥2,密钥3全部使用不同密钥的三重DES称为DES-EDE3AES( Advanced Encryption Standard)是取代其前任标准(DES)而成为新标准的一种对称密码算法。AES的选拔过程是对全世界公开的。对密码算法的评审不是由NIST来完成的而是由全世界的企业和密码学家共同完成的,这其中也包括AES竞选的参加者。
Rijndael于2000年被选为新的AES算法。
Rijndael的分组长度和密钥长度可以分别以32比特为单位在128比特到256比特的范围内进行选择。不过在AES的规格中,分组长度固定为128比特,密钥长度只有128、192和256比特三种。
和DES一样, Rijndael算法也是由多个轮构成的,其中每一轮分为 Sub Bytes、 Shiftrows、MixColumns和 AddRoundKey共4个步骤。DES使用 Feistel网络作为其基本结构,而 Rijndael没有使用 Feistel网络,而是使用了SPN结构。
Rijndael的输入分组为128比特,也就是16字节。需要逐个字节地对16字节的输入数据进行 SubBytes处理。所谓 Sub Bytes,就是以每个字节的值(0~25的任意值)为索引从一张拥有256个值的替换表(S-Box)中查找出对应值的处理。
SubBytes之后需要进行 ShiftRows处理。这一步是将以4字节为单位的行(row)按照一定的规则向左平移,且每一行平移的字节数是不同的。
输入的所有比特在一轮中都会被加密。和每一轮都只加密半输入的比特的 Feistel网络相比,这种方式的优势在于加密所需要的轮数更少。此外 SubBytes、 Shiftrows和 MixColumns可以分别以字节、行和列为单位进行并行计算。
解密时和加密时进行相反操作
参考:
转载地址:http://nzksi.baihongyu.com/