使用JavaScript可以对密码进行非对称加密吗?

Chr*_*nte 6 javascript encryption cryptography

我想在登录时使用JavaScript加密用户的密码和用户名(使用Ajax).我知道JavaScript存在几个非对称加密库.这是安全通信密码的可行策略吗?

我知道SSL存在,但这不是问题.

Dav*_*ers 5

第一步:不要相信互联网上的人,我会提出一个弱算法,以确保我可以打破它.

第二步:在计算机安全性拥有PHD之前,不要设计自己的算法,也不要在生产系统中实现其他任何人

加密不足以防止重放攻击,如果攻击者获得加密密码,如果它足以进行身份​​验证,则它与未加密的密码一样多.

我会建议:

  1. 用户输入密码
  2. 客户端从服务器请求令牌
  3. 服务器返回一个唯一的随机令牌,并将其存储在用户会话中(由存储在服务器上的cookie键控)
  4. 客户端使用您的公钥加密密码+令牌并将其传递给服务器.
  5. 服务器使用您的私钥对此进行解密,并检查与此会话匹配的令牌,之前未使用过,并且不超过30秒.
  6. 服务器检查密码的哈希值是否与存储在数据存储区中的用户密码的哈希值相匹配.

传输的所有数据仍然可见,因此用户不会获得任何隐私(就像在https中一样).您的加密算法,加密实施和公钥将是公开的.这是大量当前加密的情况,大量算法被设计为安全的,攻击者知道这一点.

这不会防止任何键盘记录程序或间谍软件攻击,因为它们会在加密密码之前定位.

我不知道在javascript中实现的非对称加密的实现,但在这种方法中没有任何根本不安全的东西.

  • @David Waters:即使你拥有博士学位,你也需要检查你教授的博士学位和你教授的教授的博士学位等,以确保他们所教授的内容实际上是安全的.然后你需要检查那些教授是否有任何隐藏的动机来故意教授不安全的计划. (4认同)

RoT*_*oRa 2

不会。攻击者获取密码或加密密码都没有什么区别,两者都是“未加密”发送到服务器的,因此可以使用加密密码登录。

JavaScript 不能用于安全性。您必须使用 HTTPS。

  • @Greg Agnew:如何分类并不重要。加密算法必须在用户的客户端计算机上使用。这意味着它是公开可读的。即使您通过混淆过程发送您的方法,您也无法阻止这种情况。 (3认同)
  • @Zach Rattner:如果您每次向服务器传递相同的令牌,那么攻击者是否拥有您的密码或他们可以通过您的服务器进行身份验证的密码散列并不重要。因此,发送密码的哈希值可能会阻止某些类型的黑客获取您的密码(请参阅加盐图和彩虹图),但如果您所需的身份验证只是密码的哈希值,则不会阻止他们进行身份验证。 (3认同)
  • @Zach Rattner - 如果该方法接受已经散列的密码并将其与数据库中的密码进行比较,那么它很容易受到重放攻击。在数据库中存储哈希值并不是不安全的,因为输入是经过哈希处理然后进行比较的。在 OP 情况下,哈希值按原样接受并进行比较。 (2认同)