我遗漏了哈希的用处

时间:2009-05-21 11:30:21

标签: .net security hash

因此,哈希很有用,因为它们将密码/登录名/盐值组合更改为无法撤消的代码。客户端将此哈希发送到服务器。服务器将哈希值与存储的哈希值列表进行比较,以查看客户端的用户是否可以被授予访问权限。 但是,如何防止恶意用户拦截散列密码并编写自己的客户端以将此散列发送到服务器?

7 个答案:

答案 0 :(得分:13)

对于Man in The Middle Attack并没有任何问题,以减轻我们使用Secure Sockets Layer和类似技术的攻击。<​​/ p>

答案 1 :(得分:10)

如果有人获取数据库备份或获取实时数据库的只读访问权限,则哈希非常有用。然后他们无法计算出密码并将其发送到您的实时系统。这就是你salt他们的原因,因此具有只读访问权限的黑客无法设置密码,然后查看其他人是否拥有相同的密码。

正如您所指出的那样,他们不会停止请求拦截(Man in the middle attacks)以阻止您需要使用带有数据包加密和签名的安全连接。 HTTPS&amp; SSL是最常见的方法。

答案 2 :(得分:4)

在中间人拦截的情况下,一个简单的解决方案就是挑战 - 响应协议。

最简单的形式如下:用户将他的名字发送到服务器,服务器选择一个随机数( challenge )并将其发送给客户端。客户端以某种预定方式将密码与挑战相结合,散列结果并将其发送到服务器。服务器也是这样做的 - 组合和散列并检查它是否与客户端发送的结果相同。

每次选择不同的挑战,因此即使对于相同的密码,计算的值也会不同,因此稍后重新发送计算值将不会导致成功授权。

没有必要将原始密码存储在服务器上 - 它只能存储密码哈希,客户端也可以使用哈希并将该哈希与挑战结合起来。

答案 3 :(得分:2)

没有使用哈希值。客户端首先发送密码(我建议使用SSL),然后服务器根据该密码计算哈希值,并将其与密码存储中的数据进行比较。这样,坏用户就不可能获得密码。

答案 4 :(得分:1)

您使用与服务器的安全连接,并以明文形式发送密码。服务器对其进行哈希处理并将其与数据库中的哈希值进行比较。散列点是如果服务器的密码db被泄露,则无法从中检索密码。

答案 5 :(得分:1)

这取决于拦截方法。

如果用户的计算机被泄露到恶意软件可以读取其cookie的程度,那么,您可以做的事情并不多。

要停止拦截网络通信,请确保使用SSL(即HTTPS而非HTTP)。 HTTP可能在家庭或办公室网络中最容易受到攻击,尤其是安全性较差的无线网络。 HTTPS将为您提供针对受损网络的一些保护。这还包括本地网络上的数据包嗅探器。

要考虑的最后一个选项是多人使用的计算机。网吧就是一个例子。工作PC可以是另一种。您可以设置低超时以最大限度地降低此风险。

有些人可能会争论的一个选择是IP地址过滤,这意味着如果您从其他IP获得请求,则会使会话无效。这是一种粗略的方法,可能会导致比它解决的问题更多的问题。基本上有很多合法的情况,用户的IP地址会发生变化。许多企业网络以这种方式工作。包括移动宽带在内的无线漫游将频繁改变IP,特别是在用户移动时(例如在火车上)。

答案 6 :(得分:1)

在许多系统中,散列的值不是静态的,但每次请求需要身份验证的操作时都使用nonce。服务器向客户端发送唯一值,该值与秘密和散列相结合。这可以防止重放中间人攻击。