密码基础原理和对称加密
参考:图解密码技术
密码学的六种工具
- 对称密码
- 公钥密码
- 单向散列函数
- 消息认证码
- 数字签名
- 伪随机数生成器.
六种工具分别用来应对不同的密码威胁

密码信息的常识
- 不要使用保密的密码算法:
- 密码算法不可能永远保密
- 开发高强度的密码算法本身很困难
- 使用低强度的密码比不使用密码更危险(虚假的安全感)
- 密码总会被破解,一次性密码本(ongetime pad)除外
历史上的密码
凯撒密码
凯撒密码是通过将明文中所使用的字母按照一定的个数,对照字母表进行平移实现的

一种密码所能够使用的所有密码数量(密钥集合)称为密钥空间,凯撒密码的密钥空间很小,通过暴力破解或穷举搜索能够很容易破解
简单替换密码
凯撒密码是简单替换密码的一种,与凯撒密码的按字数平移不同,简单替换密码是字母表的随机映射

简单替换密码的密钥空间远远大于凯撒密码,通过暴力破解很困难,但是可以通过频率分析的方式逐个击破。在字母的使用过程中,由于单词的固定单配,字母出现的频率是不同的
其中,低频字母,高频字母,单词开头结尾,分隔符都可以成为破译的线索
enigma密码机
enigma是二战时期德国使用的一种能够进行加密和解密操作的机器。enigma由键盘,齿轮,电池和灯泡组成

每当按下一个键,就会点亮相应的灯泡,加密和解密的操作是相同的。通过改变接线板的方式九合一改变字母的对应关系,接线板的接线方式按照国防军密码本的每日密码决定
enigma中出现了每日密码和通信密码,实际上每日密码实现了对通信密码的加密,是一种密钥加密密码(KEK)
enigma的弱点很明显
- 为了避免通信错误需要将通信密码重复两次
- 通信密码是认为选定的
- 必须派发国防军密码本(容易被盗)
enigma并不依赖隐蔽式安全(security by obscurity),即使破译者得到了机器也无法破译密码
编码与解码
现代密码建立在计算机技术上,计算机操作的对象不是文本,而是比特序列。编码就是将现实中的事物映射为比特序列,并执行加密操作转换为密文序列。例如,ascii码将字符编码为01bit序列
xor是计算机加密算法中常用的bit序列算法,通过对同一bit序列进行两次xor操作能够得到原始的数据。

一次性密码本
一次性密码本是永远不会被破译的,即使是用暴力破解的方式。一次性密码本的加密和解密就是用一串和明文长度相同的bit序列进行xor操作。之所以无法破解一次性密码本,是因为我们无法判断破译出的结果是否是正确的明文,明文中所有的组合都有可能出现。
一次性密码本由维纳在1917年提出,其无法破译这一特性是由香农与1949年通过数学方法加以证明的,因此一次性密码本是无条件安全的,在理论上是无法破译的
然而一次性密码本没有被广泛使用,最大的问题在于密钥的配送和密钥的保存,因为如果我们能构实现密钥的安全配送和保存,那就没有理由认为不能实现明文的安全配送和保存。其次,一次性密码本不能重用,传输过程中不能出现丝毫错误。一次性密码本的密钥生成需要大量随机数(并非伪随机数)
虽然一次性密码本没有实用性,但是却孕育了流密码的思想
DES
DES(data enryption standard)是1977年FIPS采用的一种对称密码,现在计算机已经能够暴力破解DES。
DES是一种能够将64bit的明文加密成64bit的密文的对称加密算法,每个7bit会设置错误校验的1bit,所以实质上其密钥长度为56bit
DES以64bit的明文为单位进行加密,称为分组。以分组为单位进行处理的密码算法称为分组密码
DES每次只能加密64bit的书籍,如果明文较长,就需要对DES进行迭代,迭代的具体方式称为模式

Feistel网络
DES的基本结构是由Feistel设计的,在Feistel网络中,加密的每个步骤被称为轮,DES是一种16轮循环的Feistel网络。

子密钥是本轮加密所使用的密钥,在Feistel网络中,每一轮需要使用一个不同的子密钥,并且仅在一轮中使用(局部密钥)
轮函数根据右侧和子密钥生成比特序列,对左侧进行加密,是密码系统的核心
DES的具体步骤
- 将输入的数据等分为左右两部分。
- 将输入的右侧直接发送到输出的右侧。
- 将输入的右侧发送到轮函数。
- 轮函数根据右侧数据和子密钥,计算出一串看上去是随机的比特序列。
- 将上一步得到的比特序列与左侧数据进行XOR运算,并将结果作为加密后的左侧。
DES的右边没有实现加密,因而需要不停调转左右两侧,Feistel可以实现任意轮加密。DES的解密过程和加密过程恰好相反。

DES的特点:
- 加密时无论使用任何函数作为轮函数都可以正确解密
- 加密和解密可以使用完全相同的结构
MARS,RC6,Twofish都使用了feistel网络
三重DES
三重DES就是为了增加DES的强度,将DES重复3次所得到的的一种加密算法,简写为3DES
之所以采用加密->解密->加密的方式,是因为IBM公司设计能够让3DES兼容DES算法

如果密钥1和密钥3使用相同的密钥,密钥2使用不同的密钥,则成为DES-EDE2
密钥1,密钥2,密钥3全部使用不同密钥的三重DES称为DES-EDE3

AES
AES( Advanced Encryption Standard)是取代其前任标准(DES)而成为新标准的一种对称密码算法。AES的选拔过程是对全世界公开的。对密码算法的评审不是由NIST来完成的而是由全世界的企业和密码学家共同完成的,这其中也包括AES竞选的参加者。
Rijlndael
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)按照一定的规则向左平移,且每一行平移的字节数是不同的。

- Shiftrows之后需要进行 MixColumns处理。这一步是对一个4字节的值进行比特运算,将其变为另外一个4字节值

- 需要将 MixColumns的输出与轮密钥进行XOR,即进行 AddRoundKey处理,到此一轮处理完毕

输入的所有比特在一轮中都会被加密。和每一轮都只加密半输入的比特的 Feistel网络相比,这种方式的优势在于加密所需要的轮数更少。此外 SubBytes、 Shiftrows和 MixColumns可以分别以字节、行和列为单位进行并行计算。
解密时和加密时进行相反操作


浙公网安备 33010602011771号