从明文通信到对称加密
明文通信
为什么要加密呢?不妨先看看明文通信
Eve 可以直接窃听到Alice与Bob的通信过程,通过抓包就可以查看到通信内容,如果邮件内容是羞答答的,怎么可以被其他人看到呢?(邪魅微笑)
在逼格满满的咖啡厅,你正在愉快的刷着微博,逛着知乎,浏览豆瓣,你以为你连着免费WiFi爽歪歪,
图,喝咖啡,玩手机
然后其实被他笔记本造的WiFi,
图,黑客
顺便一提,关于抓包,现成的抓包工具很多,如 wireshark,charles 等,这里有一篇使用charles抓APP包的文章,要不要 看看
开始加密
凯撒密码(字母代换)
将一个字母表向指定方向平移N位,解密反之,N为密钥 。
密钥只可能是0-25共26个,用1-25每个数作为密钥尝试解密,很容易发现明文,从而得出密钥是几。(暴力破解)
简单替换密码
两个字母表中字母之间随机一一对应, 密钥是替换表。
密钥空间是 26!= 2^88。所以考虑使用(频率破解)。
对称密码标准
- DES(Data Encryption Standard)(不再推荐)
- AES(Advanced Encryption Standard) (应该使用)
AES
目前采用的是Rijndael
算法,Rijndael
的分组长度可以是以32bit为单位在128到256范围内选择。目前AES 规定分组长度只能有128,192,256三种。
AES 一轮的步骤:
- 加密:SubBytes —> ShiftRows —> MixColumns —> AddRoundKey
- 解密:AddRoundKey —> InvMixColumns —> InvShiftRows —> InvSubBytes
其中步骤的含义为:
- SubBytes: 每个字节的值(0-255的任意值)为索引,从一张拥有256个值的替换表(S-Box)中查找对应的值处理。将一个1字节的值替换成另一个1字节的值。
- ShiftRows:将4个字节为单位的行(Row)按照一定的规则左平移。
- MixColumns:将一个4字节的值进行比特运算,变成另一个4字节的值。
- AddRoundKey :将MixColumns的输出与轮密钥XOR。
对称加密
Alice 和 Bob 使用相同的秘钥来加解密消息,也就是对称加密,上面提到的加密算法都是对称加密。
这样,即使第三者 Eve 窃听到通信过程,那么 Eve 也只能看到奇奇怪怪符号组成的密文
这样Alice和Bob就可以放心的互相通信了吗?对啊!当然不是,这只是解决了机密性的问题,对称加密的密钥需要被发送给对方,对方才能解密,但直接发送,秘钥也会被窃听,这就是秘钥配送问题。
解决秘钥配送
- 事先当面将秘钥给对方,不通过网络传输秘钥,避免了被窃听的机会;
- 通过密钥分配中心解决;
- 通过 Diffie-Hellman 密钥交换来解决;
- 通过公钥密码来解决。
公钥加密
简述
公钥加密又叫非对称加密,这类加密算法中存一对秘钥:
- 公钥——用来加密信息,公开给任何人
- 私钥——用来解密信息,自己私藏
公钥和私钥匙是天生一对,一个确定的公钥加密的信息,只有他的私钥才能解密信息。
使用公钥加密对信息进行加密通信的流程如下:
公钥算法——RSA
RSA是一种非对称加密算法,是1977年由