7. 非对称加密

最后更新于:2022-04-01 04:45:56

## 7. **非对称加密** 应该使用NaCl库 适用场景:当你需要加密消息,发给陌生人,并且对方异步接收消息,做离线解密时。这是一个很窄的应用案例,这种用法有个名字叫*电子信封(digital envelope)*,典型比如gpg加密文件后发送。 这条是几条之中最难做正确的,不要使用底层的密码学库,比如OpenSSL或者BouncyCastle。 你应该停止使用RSA,并且切换到椭圆曲线类体制,原因是: * 对RSA的攻击能力的进步 —– 定义在传统质数域上的乘法运算(应用包括DH,DSA,ElGamal等),要比椭圆曲线域上的乘法运算快得多。这是由于质数域上数域筛法(number field sieve,NFS)的进展,而在椭圆曲线域上,没有NFS这类算法。 * RSA (和DH) 或迫使你考虑“向后兼容性”,而椭圆曲线体制没有这种兼容性包袱。TLS最近的几个安全漏洞,部分愿意也是由于这种向后兼容性,导致已经被破解的陈旧算法存在 * RSA在一般场景中,都是直接用公钥做非对称加密,这种用法丧失了**前向安全性(Perfect Forward Secrecy)**。而椭圆曲线就不提倡,也很难这样使用,这样你就不会害死自己了。 * 在椭圆曲线体制下,保证正确性和安全性的重任,主要由密码学家承担,密码学家会提供一组曲线参数,在某一性能水平下,针对安全性和性能做优化。这样程序员不容易误用而害死自己。在RSA体制下,正好相反,程序员必须提供参数来保证正确性和安全性,就算是RSA-OAEP这种很好的设计,程序员也必须知道怎么提供参数,这样程序员很容易搞错。 如果你必须使用RSA,一定要使用RSA-OAEP with SHA256,指数使用 65537 * 避免 RSA-PKCS1v15 * 避免 ElGamal * 避免 RSA
';