这是我的REST API的基本HMAC身份验证系统的安全实现吗?

时间:2014-05-19 10:01:58

标签: api rest hash restful-authentication hmac

我正在为我的网站构建一个非常基本的REST API。我目前使用的唯一动词是GET,它只是输出我网站上的帖子列表。

对于身份验证,我一直在阅读有关HMAC的内容,特别是本文:

http://websec.io/2013/02/14/API-Authentication-Public-Private-Hashes.html

我的问题在于“散列内容”应该是什么。因为我没有向API发布任何数据,所以我只是使用我的私钥对我的公钥(使用简单的盐)进行哈希处理。

这是一种安全的方法还是应该使用不同的“内容哈希”?数据在任何方面都不敏感 - 这只是一次学习练习。

1 个答案:

答案 0 :(得分:0)

你会想要考虑“重播攻击者”。当攻击者在您的API客户端和服务器之间捕获数据包时,她在以后重播时会有什么损害?

在您的情况下,如果您仅在HMAC中使用用户的API密钥,则攻击者将能够在重播请求时模拟该用户。她可以调用任何API请求,只需将HMAC设置为她捕获的内容,因为它将验证。

如果没有包含请求的任何参数,攻击者将能够调用请求并指定自己的参数。因此,如果参数也包含在HMAC中,那就更好了。但是,它不会阻止使用这些特定参数重播请求。

您可以在请求和HMAC中包含timestamp参数。服务器将重新计算HMAC,包括传入的时间戳,并且还将验证时间戳是否足够新。由于攻击者无法凭空创造新的HMAC,因此她只能使用具有匹配时间戳的时间戳,这些时间戳将根据年龄拒绝。