通过 Hawk 保护 REST API

信息安全 验证 api
2021-09-09 07:52:52

我目前正在使用Hawk作为 API 的身份验证方案。基本上,当前流程(强制 SSL)涉及:

  1. 用户在应用程序上输入电子邮件/密码
  2. 应用程序使用电子邮件作为盐执行 1000 轮 PBKDF2,将结果与电子邮件一起发送以进行注册
  3. 服务器使用 scrypt (64k/8/1) 和随机的 32 字节 salt 对密码进行哈希处理,并将加盐密码存储在用户帐户中
  4. 服务器创建一个 hawk 共享密钥并将其发送回(id 和共享密钥),以便客户端可以在密码正确的情况下创建适当的标头有效负载。

但是,在阅读有关实施的讨论时,出现了一些问题:

我想不出这有什么问题,但由于它很有创意,安全人员不喜欢它。主要问题是您创建的新模式不像正常流程那样容易理解。您应该将其视为/实现为两个系统。一个接受用户名/密码并返回一个令牌(无论是 cookie 还是 rsvp),另一个接受该令牌并获得新的凭据,绑定到使用它的任何人。如果您没有公共 API 或多个应用程序,您的解决方案会走捷径。

关联

抱歉,如果它太笨拙,但是如何添加另一层(如我所见的间接级别)更有益?

查看生产中的 hawk 实现,例如:Mozilla 的onepw 协议,我注意到它们返回一个会话令牌,然后使用 HKDF 派生该令牌以组成 hawk 凭据。

1个回答

我不会说你的方法有什么问题。安全人员真的很喜欢总是使用公认的方法。以 CSRF 缓解为例。有很多方法可以成功缓解 CSRF,但安全人员总是建议使用 CSRF 令牌,因为这是缓解 CSRF 攻击的公认标准。我认为将交易分成两个步骤的主要好处是交易更容易推理,因为交易的每一步都有一个特定的目标。你的结合了一些步骤,但我看不出有任何理由说明这一定很糟糕,只是稍微复杂了一点。