深入理解密码技术
对称加密:
DES
DES是1977年美国联邦信息处理标准中使用的一种对称密码技术,曾今被美国和其他国家政府银行使用。
不过现在已被暴力破解,我们除了用它解密以前的密文外,已不再使用DES了。不过这里我们可以用它来了解下什么是对称加密。
加密和解密
DES是一种把64比特明文加密成64比特的密文的对称密码算法,密钥长度56位,其中每隔7比特有个错误检查比特。结果DES密钥总长度为64比特。
分组密码
DES以64比特明文为一个单位进行加密,这64比特单位称为分组。so,以分组为单位处理密码的算法称为分组密码。DES属于分组密码。
DES每次只能加密64比特数据,如果明文较长,就需要对DES加密进行迭代,迭代的具体方式称为模式。后文会描述。
图DES加密与解密流程
三重DES
三重DES只是将DES重复3次,为了增加DES强度
AES
目前很安全
。。。。。
分组密码模式
.....好多.....
非对称加密
公钥密码
在对称密码中,由于加密解密的密钥是相同的,因此密钥配送就成了问题。如过使用公钥密码,就解决了配送问题。
密钥配送问题:

基于口令的密码(PBE)
基于口令的密码就是一种根据口令生成的密钥并用该密钥进行加密的方法。其中加密和解密使用同一种密钥
PBE加密过程如图:

3个步骤:
- 生成KEK
- 生成会话密钥并加密
- 加密消息
PBE解密过程:
个人觉得是不是箭头反了?

随机数
随机数的用途
-
生成密钥
用于对称密码和消息认证码 -
生成密钥对
用于公钥密码和数字签名 -
生成初始化向量(IV)
用于分组密码的CBC,CFB和OFB模式 -
生成nonce
用于防御重放攻击以及分组密码的CTR模式等 -
生成盐
用于基于口令的密码(PBE)等
其中生成密钥和生成密钥对是最重要的,即使密码强度再高,只要攻击者知道了密钥,就会立刻变得形同虚设。因此我们需要用随机数来生成密钥,使之无法被攻击者看穿。
随机数的性质
- 随机性
- 不可预测性
- 不可重现性
如图

伪随机数生成器
通过硬件生成的随机数列是根据传感器收集的热量,声音的变化等事实上是无法预测的。像这样的设备就称为随机数生成器。
而可以生成随机数的软件则称为伪随机数生成器。因为软件无法生成真随机数。
伪随机数生成器具有“内部状态”,并根据外部输入的“种子”来生成伪随机数列

伪随机数生成器的内部状态
伪随机数生成器的内部状态,是指伪随机数生成器岁管理的内存中的数值。
当有一条伪随机数的请求时,伪随机数生成器会根据内存中的数值进行技术,并将结果输出。随后改变自己的内部状态。因此,根据内部状态计算伪随机数的方法和改变内部状态的方法组合起来,就是伪随机数生成的算法。
伪随机数生成器的种子
伪随机数的种子是用来对伪随机数生成器的内部状态进行初始化。伪随机数生成器是公开的,但种子是需要自己保密的。由于种子不可以被攻击者知道,因此不可以使用容易被预测的值。
PGP---密码技术的完美组合
用PGP加密

用PGP解密

用PGP生成数字签名

PGP验证数字签名

PGP生成数字签名并加密

PGP解密并验证数字签名
