首页 > 解决方案 > 如何使用 HMAC 使 API 安全?

问题描述

我正在尝试设计一个 API 端点,在那里我使用 HMAC 验证请求的真实性。

我了解我需要向客户提供API_KEYAPI_SECRET.

我的问题是:

标签: apisecurityhmac

解决方案


API_SECRET 是否应该使用服务器上的一些秘密盐从 API_KEY 派生?

不,密钥是公共信息,秘密应该使用加密安全的 PRNG 随机生成。如果秘密是从密钥派生的,那么任何发现派生方法的人都可以为他们发现的任何密钥派生秘密!

我应该将 API_SECRET 存储在某处吗?

是的。您还将如何使用它来验证 HMAC 签名?

您可以通过存储使用保存在数据库之外的密钥加密的秘密来添加额外的保护层,尽管更完整的黑客也能够发现它。

您不能像使用密码那样对秘密进行哈希处理,因为您需要将其作为 HMAC 的输入来验证签名,因此您需要某种可逆加密。

拥有 API_KEY 和 API_SECRET 有什么意义?API_KEY 是否类似于用户名?

广泛地说,是的。对于 HMAC,您只需要一个共享密钥。但是,您需要知道尝试使用哪个共享密钥来验证请求。API_KEY 为您提供了一种查找请求声称由其签名的秘密的方法,然后您可以通过使用您自己的秘密副本计算签名并与提供的签名进行(恒定时间)比较来验证请求.


推荐阅读