最近在知乎上读了一篇讲非对称加密的帖子 如何用通俗易懂的话来解释非对称加密? 正好借此机会来总结下对称加密和非对称加密的知识。
对称加密
在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。对称加密的优点是效率更高;缺点是加解密双方使用相同的密钥,对密钥保存和传输的安全性要求较高。
非对称加密
加密和解密使用的是两个不同的密钥,这两个不同的密钥一个叫作公开密钥,另一个叫私有密钥,公开密钥对外公开,任何人均可获取,而私有密钥则由自己保存。公钥和私钥都是成对出现的,用公钥加密的内容只能用私钥解密,而用私钥加密的内容也只能用公钥解密。
例如 A 有公钥和私钥两把钥匙,他把公钥给了他的朋友 B,如果 B 想给 A 发送信息,只要用公钥加密发送信息,只要 A 的私钥不泄露,信息就是安全的,即使落在别人手里,也无法解密。
数字签名
数字签名就是对非对称加密和摘要算法的一种应用。
摘要算法
摘要算法是将任意长度的一块数据转换为一个定长的、不可逆转的数字,其长度通常在 128~256 位之间。摘要算法有如下特点:
只要源文本不同,计算得到的结果,必然不同(或者说机会很少)。
无法从结果反推出源数据。
摘要算法用于对比信息源是否一致,因为只要源数据发生变化,得到的摘要必然不同。
签名
为了防止发布内容中途被篡改,发布者可以通过摘要算法提取发布内容的摘要,用私钥加密之得到密文即签名,这时候将加密内容、签名以及公钥一起发布出去。
接收者收到数据时,首先验证公钥是否是发布者的公钥,然后用公钥对密文进行解密,得到摘要,使用发布者对文本同样的摘要算法得到摘要文本,比对摘要是否一致即可确认信息是否被篡改或者是指定发布者发布的。
还有个问题是怎么确认公钥没有被中途替换,是合法的?
数字证书
数字证书就是网络通讯中标志通讯各方身份信息的一系列数据,其作用类似于现实生活中的身份证。它是由一个权威机构发行的,人们可以在交往中用它来识别对方的身份。
HTTPS
HTTPS 其实是有两部分组成:HTTP + SSL/ TLS,也就是在 HTTP 上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。
RSA 性能是非常低的,原因在于寻找大素数、大数计算、数据分割需要耗费很多的 CPU 周期,所以一般的 HTTPS 连接只在第一次握手时使用非对称加密,通过握手交换对称加密密钥,在之后的通信走对称加密。