我希望在客户端使用较高阶时间值(<1分钟分辨率)对JS中的哈希用户名和密码(通过http POST提交)进行加密,以避免将用户名和密码哈希作为常量发送可以用于未经授权的用户(即嗅探器)通过POST制作进行登录尝试的值。
这将对传递的哈希的有用性施加短暂的到期。
如果他们检查JS并且看到它使用了这个时间盐,那么如果他们知道盐是什么,它会更容易破坏MD5吗?
斯蒂芬
答案 0 :(得分:3)
salt doesn't need to be secret。从这个意义上说,你的解决方案是可以的。
MD5在某些应用中被打破;这可能没问题,但为什么不使用SHA-2 family的哈希?就此而言,为什么不使用SSL来提供保密通道,以及更好的安全性呢?
答案 1 :(得分:2)
基于时间的盐不会使MD5更容易破碎。你仍然依赖1)用户有一个好的密码来打败暴力计算,2)MD5是一个不错的哈希。这是你问题的基本答案。但是,无论如何,这可能不是一个好主意。一些评论 -
除非您可以确保客户端或服务器的时间是同步的(或者您使用Javascript来伪造同步),否则客户端必须将其用作salt的时间发送出去。服务器必须决定使用的时间是否足够接近服务器的时间。
即使已同步,由于互联网上的延迟,您可能不得不接受哈希加减一分钟左右。另一个问题是,如果我在嗅探,只要我还在这个时间窗口内,我就可以立即重用这个哈希值。
由于上面的问题,更好的想法是使用一次性服务器分配的盐与哈希,因为它听起来你不想使用SSL。换句话说,每次将登录表单发送到客户端时,服务器都会生成一个随机的唯一salt字符串,将其发送到客户端并跟踪这是一个可接受的盐。然后客户端将其用作密码的盐。在提交一次之后,服务器将其作为可接受的盐字符串丢弃。没有两个哈希应该是相同的。这样做的缺点是你必须跟踪这些可接受的盐串。
答案 2 :(得分:1)
他们的工作将变得不可行,因为如果正确地使用哈希值就不能使用彩虹表,并且你不能在不到一分钟的时间内破坏MD5,到那时哈希无论如何都会失效。 / p>
答案 3 :(得分:-2)
你可以使用代码混淆来使盐更难找到