我想在用户登录时使用 JavaScript 来加密用户的密码和用户名(使用 Ajax)。我知道有几个用于 JavaScript 的非对称加密库。这是安全传送密码的可行策略吗?
我知道 SSL 存在,但这不是问题所在。
最佳答案
第一步:不要相信互联网上的人,我会提出一个弱算法来确保我可以破解它。
第二步:在获得计算机安全博士学位之前,不要设计自己的算法,也不要在生产系统中实现其他人的算法
加密不足以防止重放攻击,如果攻击者获得加密密码,如果足以进行身份验证,那么它与未加密密码一样有用。
我建议:
- 用户在那里输入密码
- 客户端向服务器请求token
- 服务器返回一个唯一的随机 token ,并将其存储在用户 session 中(由存储在服务器上的 cookie 键控)
- 客户端使用您的公钥加密密码 + token 并将其传递给服务器。
- 服务器使用您的私钥对此进行解密,并检查 token 是否与此 session 匹配,之前未使用过并且不早于 30 秒。
- 服务器检查密码的哈希值是否与存储在数据存储区中的用户密码的哈希值相匹配。
所有传输的数据仍然可见,因此用户不会获得任何隐私(就像在 https 中那样)。您的加密算法、加密实现和公钥将是公开的。这是当前大量密码学的情况,大量算法被设计为在攻击者知道这一点的情况下是安全的。
这不会防止任何键盘记录器或 spy 软件攻击,因为它们会在密码加密之前瞄准。
我不知道在 javascript 中实现的非对称加密的实现,但这种方法从根本上没有任何不安全之处。
关于javascript - 使用 JavaScript 对密码进行非对称加密是否可行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5704926/