HTTP(四)HTTP 摘要认证
目录
¶用摘要保护密码
对于第三者,如果单独只有摘要的话,想要逆向获得密码,他除了将所有的密码都拿来试试之外,没有其他方法可以找出摘要是来自哪个密码,这样就可以保证最终用户密码的安全性!
⛵ 在上图,客户端请求了某个受保护文档。
在客户端能够证明其知道密码从而确认其身份之前,服务器拒绝提供文档,随后服务器向客户端发起质询,询问用户名和摘要形式的密码。
随后,客户端传递了密码的摘要,证明它是知道密码的。服务器知道所有用户的密码(实际上,服务器只需要知道密码的摘要即可)因此可以将客户提供的摘要与服务器自己计算得到的摘要进行比较,以验证用户是否知道密码。另一方在不知道密码的情况下,很难伪造出正确的摘要。
最终,服务器将客户端提供的摘要与服务器内部计算出的摘要进行对比。 如果匹配,就说明客户端知道密码,服务器会将文档提供给客户端——整个过程都没有在网络上发送密码
¶单向摘要
理论上来讲,我们将数量无限的输入值转换成了数量有限的输出值,所以两个不同的输入值就可能映射为同一个摘要。这种情况被称为冲突(collision)。实际上,由于可用输出值的数量足够大,所以在现实生活中,出现冲突的可能是微乎其微的,对我们要实现的密码匹配来说并不重要
对这些摘要来说,同时满足以下两点就可以说明设计了一个很好的摘要函数:
¶用随机数防止重放攻击
为防止此类重放攻击的发生,服务器可以向客户端发送一个称为随机数(nonce)的特殊令牌,这个数会经常发生变化(可能是每毫秒,或者是每次认证都变化)。客户端在计算摘要之前要先将这个随机数令牌附加到密码上去。在密码中加入随机数会使摘要随着随机数的每一次变化而变化。记录下的密码摘要只对特定的随机值有效,而没有密码的话,攻击者就无法计算出正确的摘要,这样就可以防止重放攻击的发生
随机数是在 WWW-Authenticate 质询中从服务器传送给客户端的,随机数这个词表示「 本次 」或「 临时的 」。