本文介绍目前现代密码学的最先进技术,
前半部分主要翻译自 《Cryptographic Right Answers》,附上收集的资料,和byron个人的理解。
密码学理论艰深,概念繁多,本人知识水平有限,错误难免,如果您发现错误,请务必指出,非常感谢!
下文分类介绍在各种适用场景下,你应该使用的现代密码学算法
1. 加密数据 :
按照优先级,应该选择:
(1) 首选 NaCl库,或者libsodium库,使用里面的crypto_secretbox()/crypto_secretbox_open() 函数
(2) Chacha20-Poly1305 算法
(3) AES-GCM 算法
适用场景:当你需要避免把明文数据在网络上传输的时候。
以上3种算法,都是AEAD类的算法,AEAD是2015年最好的选择。
其中的(2)和(3)在结构上类似:一个流加密模式的算法,配合一个多项式结构的MAC。
(2)是一个流加密算法,配合一个为通用cpu优化的MAC算法,
对密码学库的实现者来说,Poly1305也比GCM更容易安全地实现。
AES-GCM是工业标准(TLS目前主要用的就是AES-GCM),现代CPU通常都有专门为AES-GCM设计的硬件指令,但是在没有硬件指令支持的CPU上(比如32位的arm),(3)性能低于(2)。