【发布时间】:2010-09-25 19:26:38
【问题描述】:
我想在客户端的 JS 中使用更高阶的时间值(
这将对传递的哈希的有用性施加短暂的有效期。
如果他们检查 JS 并发现它使用了这次 salt,如果他们知道 salt 是什么,那么破解 MD5 的工作会容易多少?
斯蒂芬
【问题讨论】:
我想在客户端的 JS 中使用更高阶的时间值(
这将对传递的哈希的有用性施加短暂的有效期。
如果他们检查 JS 并发现它使用了这次 salt,如果他们知道 salt 是什么,那么破解 MD5 的工作会容易多少?
斯蒂芬
【问题讨论】:
您可以使用代码混淆来使盐更难找到
【讨论】:
基于时间的盐不会使 MD5 更容易破解。您仍然依赖 1) 具有良好密码的用户来击败暴力计算,以及 2) MD5 是一个不错的哈希值。这是您问题的基本答案。但是,无论如何,这可能不是一个好主意。一些cmets--
除非您可以确保客户端或服务器的时间是同步的(或者您使用 Javascript 来伪造同步),否则客户端将不得不发送它用作盐的时间。服务器必须决定使用的时间是否足够接近服务器的时间。
即使是同步的,由于 Internet 上的延迟,您也可能不得不接受正负一分钟左右的哈希值。另一个问题是,如果我在嗅探,只要我还在这个时间窗口内,我就可以立即重用这个哈希。
由于上述问题,一个更好的想法是使用带有哈希的一次性服务器分配的盐,因为听起来您不想使用 SSL。换句话说,每次向客户端发送登录表单时,服务器都会生成一个随机的唯一盐字符串,将其发送给客户端并跟踪这是一个可接受的盐。然后客户端将其用作带有密码的盐。提交一次后,服务器将其丢弃为可接受的盐字符串。没有两个哈希值应该是相同的。这样做的缺点是您必须跟踪这些可接受的盐字符串。
【讨论】:
salt doesn't need to be secret。从这个意义上说,您的解决方案是可以的。
MD5 在某些应用程序中被破坏;这个可能没问题,但为什么不使用来自SHA-2 family 的哈希呢?就此而言,为什么不使用 SSL 来提供机密通道和更好的安全性?
【讨论】:
他们的工作将变得不可行,因为如果哈希正确加盐,您根本无法使用彩虹表,而且您无法在不到一分钟的时间内破解 MD5,届时哈希无论如何都会失效。
【讨论】: