7.迪菲-赫尔曼密钥交换
这是一种所有交换都公开,但仍然安全可靠的密钥交换方式;具体而言。它倚仗这样一种“混合密钥的算法”,特点有:
- 算法可以将两种密钥混合,生成和原来的密钥毫不相关的新密钥
- 新密钥的特性只由构成参与运算的密钥决定,也就是说把三种密钥运算为一个新密钥时,即使顺序不同结果也是相同的;
上面的过程完全是在通信不加密的情况下进行的,但是得益于优秀的密钥交换和生成策略,这么做仍然是相对安全的;窃听者可能拦截中间所有的信息,但收发信息的两人没有将各自生成的私钥在互联网上传输,因此窃听者什么也做不了;
8.消息认证码
上面的加密策略可以防止被窃听,但是不能防止信息被篡改;因为我们目前没有手段识别信息是否被篡改,消息认证码是合理的方式;
假设双方使用安全的方式交换了一次密钥(这个密钥是单独作为消息认证码验证用的);发信息的一方使用某个算法计算数据和密钥的特征值,并将这个特征值和数据一起发送,接收者只要使用密钥重复计算数据的特征值,和收到的特征值比对就能知道数据是否完好;
倘若消息不完整,则双方计算出来的特征码会出现差异;
这样的加密策略已经接近完美了,但还有最后一个问题:如果我自己给自己发了一条消息,我骗别人说是另一个人发送的,怎么办?
这种情况需要使用下面提到的数字签名;
9.数字签名
数字签名实际上很有用;数字签名不仅可以实现认证和检测篡改功能,还能预防发消息的人事后否认;数字签名只能由发消息的一方生成,因此使用它就能确定谁是发消息的人了;
我们前面提到:公开密钥加密时所有人都可以加密信息,但是只有接收信息的人可以解密信息;而数字签名使用的公开密钥加密正好相反:它只能由加签名的人加密,任何人都可以解密;
因此只有发消息的人能生成签名,除他之外的任何人都只能检查签名;不过这种方式仍然有问题:进行数字签名的一方需要公开一个用于检测签名的公开密钥,如果攻击者替换了这个密钥,那么也就无法正确判断签发签名的人了;
针对这个问题,需要使用下面提到的数字证书;
10.数字证书
数字签名的出现,就是为了解决公开密钥可能被替换的问题的;首先让我们一句话概括一下数字证书的逻辑:找个很靠谱的家伙来当见证者
首先是数字证书的形成过程:将自己生成的公钥和自己的相关资料发送给认证中心,认证中心会用自己的私钥加密这份文档并检查这份资料确实来自正确的人,然后这份加密过的文档就是数字签名;
现在接收到这份文档的人用认证中心提供的公钥进行解码,就能看到两样东西:发送者的相关信息和一个公钥;
公钥被正确的送到了收件人手中,现在正常的公开密钥加密就可以正常且安全的进行了;