客户端MD5哈希与时间盐
我想在客户端用JS的哈希用户名和密码(通过http POST提交)用更高阶的时间值(<1分钟分辨率)避免发送用户名和密码散列作为常量值,可以是用于未经授权的用户(即嗅探器)通过POST制造进行的登录尝试。
这将对通过的散列的有用性施加短暂的期满。
如果他们检查JS并看到它使用这次盐,那么如果他们知道盐是什么,它会使MD5的工作变得容易多少?
斯蒂芬
盐不需要保密。 从这个意义上说,你的解决方案是可以的。
某些应用程序中MD5被破坏; 这可能是好的,但为什么不使用SHA-2系列的散列呢? 对于这个问题,为什么不使用SSL来提供一个保密的频道,以及更好的安全性?
基于时间的盐不会让MD5更容易破坏。 你仍然依靠1)用户有一个很好的密码来击败蛮力计算,2)MD5是一个体面的散列。 这是你的问题的基本答案。 但是,无论如何,这可能不是一个好主意。 一些评论 -
除非您可以确保客户端或服务器的时间同步(或者您使用Javascript来伪造同步),否则客户端将不得不发送它用作盐的时间。 服务器必须决定使用的时间是否足够接近服务器的时间。
即使同步,由于Internet上的延迟,您可能必须接受大约一分钟左右的散列。 另一个问题是,如果我嗅探,只要我仍在这个时间窗口内,我就可以立即重用这个散列。
由于上述问题,更好的主意是使用一次性的服务器分配的哈希值,因为它听起来像你不想使用SSL。 换句话说,每次登录表单发送到客户端时,服务器都会生成一个随机的,唯一的salt字符串,并将其发送给客户端并跟踪这是否是可接受的盐。 然后客户端使用它作为密码的盐。 在提交一次之后,服务器将其丢弃为可接受的盐串。 没有两次哈希应该是相同的。 这个缺点是你必须跟踪这些可接受的盐串。
他们的工作将变得不可行,因为如果哈希被正确地腌制,你根本不能使用彩虹表,并且不能在不到一分钟的时间内破坏MD5,到那时哈希会被无效化。
链接地址: http://www.djcxy.com/p/21541.html