【问题标题】:Protection measures against hash cracking when transmitting hashed credentials using a nonce使用随机数传输散列凭证时防止散列破解的保护措施
【发布时间】:2014-04-24 15:08:28
【问题描述】:

我需要使用 api 密钥对用户进行身份验证,但在将其交给他们之前,我显然需要检查他们的凭据。我认为这个过程需要这样:

客户端->服务器:GET /user?username=fred

服务器->客户端:nonce=XYXY

client->server: POST /login?hashval={hash(username + password + nonce)}&nonce=XYXY&username=fred

服务器将 hash(username + passwordFromDB + nonce) 的结果与 hashval 进行比较,如果相等则返回 API-key

但是如果有人窃听连接,虽然它无法直接发现我的用户密码,因为它已经知道用户名和随机数,如果密码足够简单,中间人将能够通过尝试密码的所有通用可能值来匹配我的哈希值。(暴力攻击)

我知道通过 HTTPS 的连接和强密码可以确保此过程的安全,但是否有任何其他建议或方法可以使此过程更安全?

谢谢

【问题讨论】:

    标签: rest authentication token api-key


    【解决方案1】:

    这基本上是digest access authentication 的一种形式,因此具有相同的限制。

    由于计算哈希的所有详细信息都与哈希一起发送,因此攻击者唯一需要“反转”的就是密码。如果它很弱,那么彩虹表或暴力攻击可以破解它。延迟攻击者的唯一方法是拥有一个非常长且强度高的密码。

    但是由于您使用 API 密钥进行服务身份验证,作为中间人攻击者,我会让您使用密码进行身份验证,然后从响应中获取 API 密钥。我假设您使用 API 密钥对其余请求进行身份验证(就像会话 cookie 对 Web 应用程序所做的那样)?

    当然有other variations of securing a service,这取决于你在做什么,但实际上使它安全意味着使用你自己提到的HTTPS。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 2011-12-22
      相关资源
      最近更新 更多