【发布时间】:2013-08-22 17:32:27
【问题描述】:
我正在为论坛编写登录名,并且需要在将密码发送到服务器之前在 javascript 中对客户端密码进行哈希处理。我无法确定我真正可以信任的 SHA-256 实现。我期待有某种权威的脚本,每个人都在使用,但我发现很多不同的项目都有自己的实现。
我意识到使用其他人的加密货币总是一种信仰的飞跃,除非你有资格自己审查它,而且“值得信赖”没有普遍的定义,但这似乎是一件很普遍和重要的事情,应该就使用什么达成某种共识。我是不是太天真了?
编辑,因为它在 cmets 中出现了很多:是的,我们再次在服务器端进行更严格的哈希。客户端散列不是我们保存在数据库中的最终结果。客户端散列是因为人类客户端请求它。他们没有给出具体原因,可能他们只是喜欢过度杀伤。
【问题讨论】:
-
不想跑题,但你为什么要在客户端散列密码?
-
@ddyer 甚至没有接近。 “不要自己动手”适用于发明自己的算法、编写自己的算法实现、在加密算法之上开发自己的协议,或者几乎任何上述用作高级别的东西可用的抽象。如果你认为坚持一个安全的核心是安全的,并且只编写胶水代码,那么你将度过一段糟糕的时光。
-
如果您使用没有挑战/响应协议的哈希密码,那么哈希密码就是密码,它实际上与以明文形式传输密码相同。
-
@ddyer 保护用户的明文密码对于他们可能使用的所有其他网站是有一定价值的,如果不是特别是我们的网站。这是一个简单的解决方法,可能对我们没有帮助,但如果我们在某个地方搞砸了,可能会帮助用户。就像我说的,客户请求,即使我想,我也无能为力。
-
@Anorov 我非常愿意改变我的想法:) 但在这种情况下,我真的不明白你的观点是如何适用的。我们对密码进行两次哈希处理:一次在客户端使用简单的 SHA-256,一次在服务器端使用要求更高的密码。第一个在 MITM 或类似情况下保护明文,第二个用于暴力保护。即使您掌握了数据库和管理员哈希,您也无法直接使用它来验证登录。
标签: hash javascript sha256 sha2