在观看Diffie-Hellman Key Exchange上的 YouTube 视频后,我想尝试用 JavaScript(阿特伍德定律)实现。
我用以下规则在 Node.js 上勾勒出一个密码:
第 1 步:客户端和服务器就共享密钥达成一致:
客户端和服务器以 512 位素数公钥 pK 开始
客户端生成一个 512 位的素数私钥 kC 并发送 powMod(3, kC, pK)
服务器生成一个 512 位素数私钥 kS 并发送 powMod(3, kS, pK)
Client & Server 使用 powMod(response, privatekey, pK) 作为共享密钥
第 2 步:沟通
在客户端发送数据之前,它使用斯坦福 Javascript 加密库(256 位 AES、HMAC 身份验证、PBKDF2 密码强化和 CCM 身份验证加密)使用共享密钥进行加密。
一旦服务器使用共享密钥解密数据,它就会生成一个新的 512 位素数私钥并将其作为 SJCL 加密响应发送。
客户端和服务器使用 powMod(3, prevSharedKey, newPrivKey) 切换到新的共享密钥
现在我有几个问题..
与 HTTPS 或其他算法相比,这样的系统有多安全?这种系统的弱点是什么?
在安全性/实用性方面,使用 1024 位密钥会更好吗?HMAC/PBKDF2/CCM 选项是否矫枉过正?是否值得调制共享密钥?谢谢阅读!