Security 登录期间是否应使用nonce?
显示以下基于nonce的身份验证示例:Security 登录期间是否应使用nonce?,security,authentication,login,hash,nonce,Security,Authentication,Login,Hash,Nonce,显示以下基于nonce的身份验证示例: 客户端从服务器请求nonce 服务器以nonce(即,以下简称“服务器”)响应 暂时”) 客户端使用服务器nonce、它自己的客户端nonce和用户输入的nonce 生成哈希的密码 客户端将用户输入的用户名、客户端nonce和哈希发送到 服务器 服务器从其数据库中检索服务器nonce和用户密码 数据库,大概是通过用户名 服务器将服务器nonce、客户端nonce和密码组合到 生成一个散列 服务器将刚刚生成的哈希与从客户端发送的哈希进行比较 如果哈希匹配,则
这是否意味着服务器以纯文本形式存储用户密码?严重违反了安全原则,即建议保存密码的附加哈希而不是实际密码本身?该协议基本上是一种安全协议。它用于避免发送实际的秘密(例如密码),但响应只能在知道秘密的情况下有效。为了避免重放攻击,合并了nonce 然而,上述协议要求服务器以可检索的形式(例如,明文或加密)存储秘密 但您可以通过要求客户端生成相同的密码散列来更改协议,以允许使用密码散列而不是明文密码:
这个协议基本上是一个协议。它用于避免发送实际的秘密(例如密码),但响应只能在知道秘密的情况下有效。为了避免重放攻击,合并了nonce 然而,上述协议要求服务器以可检索的形式(例如,明文或加密)存储秘密 但您可以通过要求客户端生成相同的密码散列来更改协议,以允许使用密码散列而不是明文密码:
美好的我想到了客户机本身的散列,但随后又担心通过网络发送散列密码(即服务器数据库中的值)。您的技术解决了这个问题。非常好的解释,但有一点需要注意:我不建议客户机立即将
服务器发送回来。这将允许中间人攻击,因为他可以只替换nonce,而如果服务器存储它直到客户端响应,则无法在服务器端修改nonce,现在如果在通信过程中修改了nonce,则nonce哈希将不匹配(因为客户端和服务器上的nonce将不同)@Gumbo此方法存在的问题是服务器没有对passhash
进行任何进一步的哈希运算,因此任何有权访问数据库的人都可以使用存储的passhash
生成nonce hash
,并成功登录。只需遵循合法登录过程,但使用检索到的密码哈希
,而不是从用户输入生成密码。这就是为什么只有客户端哈希
被认为是不安全的。如果您还可以添加服务器端哈希
,此方法将几乎完美。将服务器端哈希
添加到此算法的问题是,您必须同时发送passhash
和nonce哈希
,因此,服务器可以使用服务器salt
对passhash
进行散列,并将其与存储的服务器salt散列passhash
进行比较。noncehash
将仅用于防止回复攻击,而不是用于实际登录过程。如果您有权访问SSL(如HTTPS),这已经包括在内,这使得nonce在这种方法中毫无用处。我想到了客户机本身的散列,但随后又担心通过网络发送散列密码(即服务器数据库中的值)。您的技术解决了这个问题。非常好的解释,但有一点需要注意:我不建议客户机立即将服务器发送回来。这将允许一名男子在中间攻击,因为他可以重赛