爱丽丝和鲍勃想要通过AES来加密他们的通讯
首先他们需要通过安全的方式约定好加密方式。例如他们可以在线下见面,约定好用 AES-GCM 加密,并用一段 32 位的随机密钥当作密码。
为什么他们要先下约定好密钥,因为如果他们没有安全的通讯方式,他们的密钥就会被窃听到,例如他们通过微信发送密钥,腾讯后台就看到他们的密钥了,以后他们的通讯都可以用这个密钥解密,他们却不知道。如果他们有现有的线上安全通讯方式,例如通过安全邮箱发送,也是可以的。例如这些安全邮箱:inbox.lv tuta.com protonmail.com
32 位的随机密钥如何获取?如果他们有工具本地生成也可以。或者用线上的服务也可以,例如这个 https://nanojs.net/tool/encode/key-generator ,可以生成一段 base64 格式的 32 位密钥作为两人的密钥。这个网站是没有服务端的,所有代码在浏览器上运行,网站后台无法获取你的密钥。
例如两人约定的密钥如下
cR8uBj02LnW1zllyV9KkvxDTRFTxz8awXGuyCoQ+ico=
现在,两人约定好了使用 AES-GCM 加密,密钥使用上面的 32 位的 base64 编码密钥。他们可以开始安全的通讯了。
他们分开后,回到家里,拿起不安全的微信、QQ、网易邮箱等 APP ,开始通讯。爱丽丝想说:hello Bob
,但她不直接发这条信息,她把这条信息用 AES-GCM 配合她与鲍勃约定好的密钥加密。如果她本地能运行加密算法,例如用一些加密软件,或者自己编程,她可以本地加密,如果没有条件也可以用线上的服务,例如:https://nanojs.net/tool/encode/aes-gcm 。这个网站没有后台,加密操作在浏览器上完成,不用担心后台偷看她的内容。
加密后得到一段 base64 编码的密文:
cXW/hPMvwYhnD8d6E/OdsM4jDbY3w8+PcboKJlatmVmdSg4Uxw==
(注意,每次加密会用到随机的 iv ,所以每次加密后的密文都不一样,你可以亲自操作试试,结果肯定和我不一样,但用同一个密钥是可以解开的,你可以尝试一下)
爱丽丝把上面的密文发给鲍勃。微信企图监听他们的通讯,但只截取到密文,没有密钥无法破解。鲍勃收到之后用密钥解密,得到明文 hello Bob
。如果鲍勃有办法本地解密,他可以本地解密。如果没有的话就用线上服务吧:https://nanojs.net/tool/encode/aes-gcm
同理,鲍勃想要回消息,他也用同样的密钥加密,从此他们实现了安全加密通讯。
微信在后台监听了他们大量的谈话,但都是密文无法解密。偷听者可以尝试暴力破解,但 32 位密钥的安全性是在太高了,有 2 的 256 次方种组合,比地球上的原子多多了。哪怕全国的电脑一起破解,到世界末日也破解不出来。
还有哪些漏洞呢?
虽然通讯方式安全了,但是还有一些漏洞:
浏览器,操作系统,输入法,都有可能泄漏你的通讯内容。浏览器要用安全的,例如 chrome firefox brave ,最起码也用 edge ,不要用任何国内浏览器,除了广告多,还不安全。操作系统不要用国内的。输入法可以用安全操作系统自带的,或者 rime 输入法,不要用国内的。
要限制 app 读取剪切板内容,限制 app 录制屏幕,使用摄像头和麦克风。
密钥建议用随机的,增加安全性。可以用一段 32 字节的字符转为密钥,例如 abcdabcdabcdabcdabcdabcdabcdabcd ,这样好记,但不安全(相对于随机密钥不安全,但也足够安全了)。
约定密钥一定要通过安全的方式,不能在不安全的通讯方式上传递,线下最好,能保证没有人监听,且对方收到的是和自己一样的密钥。储存密钥也要注意,如果你发在朋友圈里,或者记在说说里,就泄漏给腾讯后台了。保存在纸上,例如两维码,或者安全的地方,确保没人知道。
定期更换密钥可以增加安全性。如果一个礼拜更换一次,一旦泄漏,别人最多监听你们一个礼拜。
常见问题
- 多人通讯怎么办?
可以多人共享一个密钥,但要确保每个人可靠,没有人是内鬼泄漏密钥。人越多越不安全
- 如果使用 16 位密钥安全吗?
16 位相当于 128 比特,2 的 128 次方的组合,也非常安全了,集全国之力也很难破解。
- 非对称加密怎么样?
非对称加密使用公钥加密,私钥解密,私钥签名。非对称加密可以公开自己的公钥,可以签名,但私钥泄漏同样不安全,也同样需要解决中间人攻击的问题。非对称加密常用与交换密钥。如果一群人使用私钥加密,大家就需要记住每一个人的公钥,会更复杂,但一个人的私钥泄漏了,不会影响其他人,其他人仍然可以安全通讯。
评论