上节我们讲到加密所围绕的三个方面:机密性、完整性、身份验证

    

    为了实现A与B之间通讯是机密,让第三者即便截获了信息都无法看得懂,那就要对明文数据进行加密。

    我们知道加密其实就是运用一些算法去实现的(这也就是为啥计算机与数学家之间关系是这么紧密的了,计算机就是各种逻辑运算^_^)。例如最简单的算法就例如将a-e向又移动5位成为f-j,那么解密就是向左移动5位,这样加密和解密使用同一套算法的就称之为对称加密算法。

    又例如,大家有没有看过《风语者》里纳瓦霍密码,“战斗机”被称为“达-哈-提-西”(dah-he-tih-hi),纳瓦霍语意为“蜂鸟 ”;“俯冲轰炸机”被称为“几尼”,意为“小鹰”。就有一份密码对照本。

示例:

[root@rhel7-01 ~]# cat /etc/issue

\S
Kernel \r on an \m

[root@rhel7-01 ~]# cat /etc/issue | tr "a-e" "f-j"

\S
Kjrnjl \r on fn \m

    有些算法能容易的被人破解,那就会有个问题,开发一个算法的成本很高(要考虑算法本身被破解需要的条件,还要考虑到计算机未来10年、20年的发展,能不能被暴力破解等问题),不可能每个人都使用一套算法,而且有些算法是公开的,那么如果能将算法和密码(密钥)结合来加密,至少更换密码(密钥)的成本比算法本身低得多。

    假设A与B之间使用了对称加密算法并协商了一串密码(密钥):123456,这样就能A与B之间通讯是机密的了。

TIM图片20180315100226.png

    可是问题又来了,A与B通信之间的机密性是得到保证了,可是A与C,A与D,A甚至与更多机器需要通讯,50个,100个,如果与之通讯的主机都协商一个密码的话,光维护密码表就是一个很困难的事情了。如果A与其他机器通讯都使用同一个算法和密码的话,不怀好意的E得知A与B正在进行一个非常重要的合同签订,使用了A与E之前通讯的密码,通过各种手段篡改了A与B之间的合同,导致A损失惨重。

    又例如,我们不会将QQ,银行卡、支付宝、微信等等设置为同一个密码,否则一个被攻破,那么其他就会殃及池鱼,全盘都over了。

TIM图片20180315101053.png

    对称加密虽然能解决了通讯的机密性,但是信息的完整性就无法得到保证,那么怎么保证信息的完整性?在A发送给B的之后,B能通过某种手段验证收到的信息没有被篡改或者因其他问题导致无法通过信息完整性的验证呢?欲知详情,请各位听下回分解。^_^