9. Diffie-Hellman 密钥交换

最后更新于:2022-04-01 04:46:01

## 9. **Diffie-Hellman 密钥交换** 应该使用NaCl,Curve25519,或者DH-2048 适用场景:*如果你在设计加密消息传输系统,并且无法使用固定对称密码* 这是很棘手的一条,主要考量如下: * 如果你能使用NaCl库,那就使用NaCl库。你甚至不需要管NaCl是什么。 * 如果你能使用一个可信赖的第三方库,那就使用Curve25519,这是一条现代的ECDH曲线,有丰富的开源代码,性能经过高度优化,被彻底地安全分析过。并且Curve25519即将进入TLS 1.3版本标准。 * 但是绝对不要自己实现Curve25519,也绝对不要自己移植Curve25519的C代码 * 如果你不能使用第三方ECDH库,但是可以使用DH库,那就使用DH-2048,使用1个标准的2048 bit的群。 * 但是不要使用传统的DH,如果你需要协商DH参数,或者和其他实现互操作 * 如果你一定要做握手协商,或者和旧软件互操作,那么考虑使用NIST P-256, NIST P-256 有广泛的软件支持。 * 写死在代码里的DH-2048参数,比NIST P-256更安全。NIST P-256比协商出来的DH更安全。 * 但是,由于NIST P-256的实现有一些陷阱,所以一定要谨慎选择可信赖的,广泛使用使的第三方库 * P-256 可能是NIST曲线中最安全的,不要使用P-224。 DH(密钥协商)算法确实很难用,但是它很重要。 * 避免,传统常规的 DH, SRP, J-PAKE 握手和协商 * 避开任何只使用了块加密算法和srand(time())的密钥协商模式(肯定有漏洞)
';