我想在登录时使用JavaScript加密用户的密码和用户名(使用Ajax)。我知道JavaScript存在几个非对称加密库。这是安全通信密码的可行策略吗?
我知道SSL存在,但这不是问题。
答案 0 :(得分:5)
第一步:不要相信互联网上的人,我会提出一个弱算法,以确保我可以打破它。
第二步:在计算机安全中拥有博士学位之前,不要设计自己的算法,也不要在生产系统中实现其他任何人的算法
加密不足以防止重放攻击,如果攻击者获得加密密码,如果足以进行身份验证,那么它与未加密的密码一样多。
我建议:
所有传输的数据仍然可见,因此用户不会获得任何隐私(就像在https中一样)。您的加密算法,加密实施和公钥将是公开的。这是大量当前加密的情况,大量算法被设计为安全,攻击者知道这一点。
这不会防止任何键盘记录程序或间谍软件攻击,因为它们会在加密密码之前定位。
我不了解javascript中实现的非对称加密的实现,但这种方法没有任何根本的不安全感。
答案 1 :(得分:4)
您可以使用诸如Secure Remote Password protocol之类的算法来提供知道密码的零知识证明。窃听者将无法使用此功能复制您的登录信息。但是,请注意一个活跃的攻击者用直接向他发送密码的东西替换你的Javascript代码。
SRP有几种Javascript实现:
答案 2 :(得分:2)
没有。如果攻击者获得密码或加密密码,两者都被发送到服务器“未加密”,则没有区别,因此加密密码可用于登录。
JavaScript不能用于安全性。您 使用HTTPS。
答案 3 :(得分:1)
我认为你不会从这方面获得太多收益,肯定会低于这样一个数学上密集的JavaScript所带来的性能。如果您在通过HTTP将数据发送到服务器之前使用它来加密数据,那么当您保护黑客无法准确发现密码时,您就不会阻止它们通过简单的方式获取访问权限使用您发送的同一段加密数据运行重播攻击。
保护表单提交的唯一可行方法是使用HTTPS。我知道设置HTTPS是一件很麻烦的事,那些只能在一个域中运行的证书以及所有这些,但如果信息确实很重要,那么与尝试在JavaScript中进行加密相比,这是一个更好的投入。
答案 4 :(得分:1)
此模型仍然存在问题,因为您仍然只是通过连接传递文本。如果没有加密/解密/比较过程中的某个日期衡量标准,您仍然有可能进行重播攻击。
即使超出了仍然普遍存在的中间人攻击,你仍然会有加密和公钥算法存在的事实。如果有人要获得加密密码,他们就会有一个永久性的来源,可以轻易地强制使用该密码。
答案 5 :(得分:0)
如果您从非身份验证通信开始,那么您总是面临中间人的风险。
无论如何,传输salted和哈希密码总是更好比传输普通密码。因为您的登录系统可能很弱,但至少您不能共享用户的密码(可以与其他系统共享,可能用于银行帐户)。
另外,不要存储该值,而是再次对其进行加盐处理。
如果您还使用非对称加密,则可以添加针对窃听的保护。但同样,不要反对中间人。