javascript – 使用Diffie-Hellman密钥交换和AES通过HTTP进行客户端加密

Diffie-Hellman Key Exchange上观看YouTube视频后,我想尝试使用JavaScript实现(Atwood定律).

我使用以下规则在Node.js上绘制了一个密码:

>步骤1:客户端和服务器就共享密钥达成一致:

>客户&服务器以512位主公钥pK启动
>客户端生成512位主要私钥kC并发送powMod(3,kC,pK)
>服务器生成512位主要私钥kS并发送powMod(3,kS,pK)
>客户&服务器使用powMod(response,privatekey,pK)作为共享密钥

>第2步:沟通

>在客户端发送数据之前,使用Stanford Javascript加密库(256位AES,HMAC身份验证,PBKDF2密码加密和CCM身份验证加密)使用共享密钥对其进行加密.
>一旦服务器使用共享密钥解密数据,它就会生成一个新的512位主要私钥,并将其作为SJCL加密响应发送.
>客户端和服务器使用powMod切换到新的共享密钥(3,prevSharedKey,newPrivKey)

现在我有几个问题..

与HTTPS或其他算法相比,这样的系统有多安全?这种系统最薄弱的地方是什么?

在安全性/实用性方面,使用1024位密钥以提高安全性会更好吗? HMAC / PBKDF2 / CCM选项是否过度杀伤?是否值得调整共享密钥?谢谢阅读!

最佳答案
我见过这样的问题before – 这是完全不安全的for a number of reasons,其中最重要的是JavaScript客户端无法验证服务器的密钥是否真实.

简而言之,如果没有SSL,您很容易受到中间人攻击.没有基于浏览器的JavaScript加密实现可以克服这个事实.

转载注明原文:javascript – 使用Diffie-Hellman密钥交换和AES通过HTTP进行客户端加密 - 代码日志