简述
常见的加密算法分为对称加密算法和非对称加密算法。他们应用的领域有所不同,但都保证了信息的安全性。
对称加密算法:最符合直觉的加密算法,只有一个密钥:原始数据通过该密钥进行加密;加密后的数据也能通过该密钥进行解密。
非对称加密算法:很常用的加密算法,密钥分为公钥和私钥。公钥用来加密,私钥用来解密。
非对称加密的应用场景主要如下:假如说某一种信息,用了对称加密,假设密钥被泄露了,那么这段数据将十分危险。任何人都能通过这个密钥来尝试进行解密。但非对称加密就不会出现这样的问题,即使公钥泄露,公钥也不可能将加密后的数据进行解密(以目前的算力不会)。为什么会有这样的特性,我们之后会详细讲解。
对称加密算法
DES
DES是对称性加密的一种,是使用密钥加密的块算法。DES算法的关键组成如下:
密钥
DES算法西药随机生成一个64位的密钥,超过位数的密钥将会被忽略。实际上这段密钥中只有56个位是有效的密钥。
轮函数
对于整个数据,分块后,先进行如下步骤:
扩散:在每一轮的开始,将输入的32位数据经过一个扩展置换,扩展到48位。这样让明文和密文的关系变得复杂,让统计法无从下手。
混淆:密钥和处理后的明文做异或操作。这是对称密码的核心。48位数据经过S盒变换后,位数变回32位。
随机置换:不同比特位进行随机置换。
以上三个步骤,完成了轮函数的核心,一段明文需要经过16次这样的轮函数变换,每次轮函数变换所需要的密钥都基于原密钥旋转,移位得来。
DES也可以将加密后的数据通过同样的方式,解密出来。
问题
密钥的总数是2^64,随着计算机算力的提高,破译DES也许不是什么大问题。
这种算法由美国国安局监督修改而成,无人知晓是否有一种特定的只有美国当局知道的算法进行简易的破译。
DES自公布以来,到上世纪90年代,应用的十分广泛。在这之后,不少民间组织通过暴力枚举的方法,破译了密文。随着人们对于安全性的重视,DES已经在2023年进入了自己的坟墓。取而代之的是AES。
AES
AES加密算法比DES更安全,用于替代DES。这种加密方式又称为Rijndael加密法。在实际应用中,AES可以使用128位、192位和256位作为密钥。
在这个加密算法中,明文需要进行初始变换,进行分块。然后进行循环运算:
密钥扩展:将密钥通过密钥扩展算法生成多个轮密钥,每一轮加密过程使用的轮密钥不同。
初始轮:初始数据块和第一个轮密钥进行异或;
主轮:先使用S盒进行非线性替换,然后处理单独处理每行,像是移动字节,增强了扩散效果。再处理每一列,实现混淆。之后将处理好的数据和密钥异或。
最终轮:与主轮相似,没有行处理。
AES算法至今仍在使用。更高位数的密钥保证了暴力破解的不可行,在扩散和混淆效率上页高于DES。例如在HTTPS中,接收方和发送方提前拟定一个公共的密钥,就能实现数据的加密传输。
但是又出现了新的问题,发送方和接收方需要提前拟定一个密钥,可能的解决办法是:发送方提前生成一个密钥,将其用明文的方式发送给接收方,然后再进行加密传输。
但是如果有一个坏人劫持到了密钥,那么两方的传输数据就相当于没有加密。非对称加密就这样被提出来。
非对称加密算法
RSA
RSA算法是如今仍被经常使用的算法。例如我们使用Git推送代码,就需要提前在本地生成一对RSA密钥,然后将公钥传输给代码服务器。
RSA的核心思想是大整数分解的困难性。看下面一个例子:
选择质数p = 61,q = 53。计算(p - 1)(q - 1) = 3120, pq = 3233。选择一个比3120小的整数(例如17),且两数互质。计算d , 17d mod 3120 = 2753。因此得出公钥是(3233, 17),私钥是(3233, 2753)。
例如明文m = 123,加密方式如下:c = 123^17 mod 3233 = 855;
解密方式如下:m = 855 ^ 2753 mod 3233 = 123。
RSA的加密效率并不高,只能进行小范围的数据加密。用它来传递密钥是个不错的选择
应用:HTTPS如何实现数据加密
普通的HTTP采用的是明文传输,这就会导致一些问题。假如说网络供应商很缺德,在服务器向你返回网页页面时,它对页面进行劫持,往其中插入牛皮癣弹窗,再发送给你,导致网页原始内容被篡改。
此外还有窃听风险,例如转账信息等;基于这种情况,HTTPS在上世纪被提出,率先应用在网景浏览器上。S就代表Security,表示安全。
在一开始,客户端持有一个私钥,服务端持有一个公钥。服务端先生成一个AES密钥,在对其使用RSA公钥加密,传输给客户端。某中间人即使持有公钥,也无法解密这个密文。在现实称呼中,服务器持有的公钥称作证书。

整个密钥协商的过程称作SSL握手。
问题来了,服务器客户端怎么拥有相匹配的公钥和私钥的?你可能会想,客户端直接将公钥通过明文传输出去就好了,即使中间人拿到了公钥,也无法破解信息。事实果真如此吗?
如果中间人拿到了公钥,然后用自己再生成一对密钥,将自己生成的公钥发给服务端,服务端察觉不到异常,就自动把加密好的密钥传输出去。中间人收到这个密钥后,用自己的私钥解密,再用客户端发来的公钥加密发送出去,就这样,中间人知道了两者之间的密钥。
不少抓包软件抓取HTTPS的包就是使用这种方法。
因此,服务端需要一种方法来证明自己。这是就引出了一个第三方机构,称作CA,译为证书授权机构。服务端要一开始向CA申请一张证书,里面包含了服务器的一些信息。CA会用这些信息进行加密,加密成一段密文。这些信息和密文就是证书。
客户端收到证书后,会对证书的密文进行解密,查看是否与其他信息一致。这个解密的密钥是由CA颁发的。即使中间人不仅篡改了证书信息和密文,没有CA的密钥,我们也无法解密。
证书信息和密文结果一致,表明连接是安全的,否则就是不安全的,浏览器会有相应的弹窗提醒。
这样就实现安全加密了……吗?
这些步骤里有一个关键决策者,就是CA,如果CA搞鬼,那么安全性就无从谈起。例如给中间人发一张合格的证书,就有可能导致泄密事件发生。再例如用社会工程学的一些方法来骗取信息,安全也是无稽之谈。
评论区