加密解密基础
2 逐位加密、分块加密
根据加密过程中对目标数据单元划分的不同分为 逐位加密跟分块加密
。
2.1 逐位加密(stream ciphers)
对每个byte进行加密。
2.2 分块加密
如以8Byte为单位进行加密, 这里被加密的块称为 cipher blocks
。
可以想象, 逐位加密币分块加密消耗更多的资源。因此通常
- 逐位加密通过硬件实现。
- 分块加密使用软件实现。
3 填充
分块加密时,如以56Byte为单位,如果最后剩余的数据 小于56Byte
那么就需要把不足的部分进行填充。填充有多种算法。
4 模式(mode)
可以控制对称加密算法执行的具体过程,这称为模式。
5 非对称加密
非对称加密在数据交互过程中使用两套钥匙,公钥和秘钥。公钥公开、秘钥私有。
5.1 交互过程
- 假设A和B进行交互,A使用B的
公钥
对数据进行加密
, 发送。 - B接收数据,使用
秘钥
对数据进行解密
。 - B接受A的
公钥
对数据进行加密
, 发送。 - A接收数据,使用自己的
秘钥
对数据进行解密
。
这样的交互过程存在问题。
如果A与B之前插入另一个C,那么C可以随意截获数据,之后把自己的数据利用对应的公钥加密后发送出去。
而接收者会无条件的接收数据。
因此加入 消息签名 一种消息签名的机制- 数字签名
。
5.2 数字签名
如上的问题可以通过这种方式来解决。A在发送数据时,除了数据本身,还要发送一个信息摘要,并且使用自己的私钥加密。
这样,即便C截获数据,篡改并发送给B,因为B接收数据后,首先会 使用A的公钥
得到A发送的信息摘要 ,
之后通过对比就可以知道数据是否被篡改,所以就可以 保证数据传输过程中不会被篡改
。
5.3 数字证书
上面过程中,B会保存 A 和其公钥映射关系
. 正常情况下, 这样没有问题, 但是如果C通过一些不法手段把B所持有的 A的公钥换成了自己的公钥
,那么数字签名也无法保证安全。可以看到, 这里的关键问题是 B 自己不加保护的保存了 A与其公钥的映射信息
, 因此这个问题可以通过如下方式解决:
- A 拿着自己的公钥到大家都信任的D那里,让他使用自己的秘钥对A的公钥进行加密。
- A发送数据时,除了以上几项,再加上一个自己的公钥证书。
- B接收到数据后,使用
D的公钥解密证书得到A的公钥
。 - 再进行后续操作。
这样就可以保证B得到数据的确是A发送的数据, 即 通过数字证书验证了A的身份
。
步骤4中B 最终仍然需要保存 D 与其公钥的映射信息, 这样跟直接保存 C 的映射信息有什么区别呢?
区别在于直接保存 C, 那么还有 E,F,G,H,I…, 这样需要保护映射信息会非常困难, 而如果使用 D, 那么只需要保护 D 的映射信息.
5.3.1 证书链
上面数字证书的流程中, D扮演的是一个大家都信任的角色
, 因此所有的想要能够证明自己身份的人都要到D那里去。
这样如果 人非常多
的情况下,D就不太可能一个人来完成所有这些工作。
因此, D首先找到一个他信任的E,然后 利用自己的私钥把E的公钥加密
,之后允许E去为需要证明身份的人颁布证书。
这样,E就可以为需要证书的人颁布证书了。
颁布证书时,E在使用自己的私钥为申请人加密的同事之后,
把加密后的数据以及自己从D处得到的证书一同交给申请人。
这样就实现了一个链结构。
接受了带有证书的加密信息的人,验证证书的过程如下:
5.4 结论
通过如上过程得出:
5.4.1 数字签名
可以保证
数据在两端交互过程中不被破坏
不能保证
数据发送方的真实身份
5.4.2 数字证书
可以解决数字签名的问题:它能够验证数据发送方的身份。