REST的HMAC身份验证

时间:2012-09-26 19:03:45

标签: security rest hmac

我希望基于

为我的REST API实现HMAC

http://www.smartjava.org/content/protect-rest-service-using-hmac-play-20

我仍然困惑的一件事是如何将SECRET送到客户端。客户将是iphone,android和从市场下载

我在想的是使用用户输入的东西作为SECRET就像一个引脚,服务器将通过这个引脚

1)客户端从服务器获取公钥 2)用公钥加密引脚 3)服务器存储在db中的引脚 4)从那时起将PIN用作SECRET

这有什么漏洞吗?

3 个答案:

答案 0 :(得分:2)

这原则上可以。但是,引脚通常只有4位数。攻击者获取公钥并加密所有9999组合并不困难。然后,他可以将他的加密密钥与来自客户端的加密数据进行比较,并找到秘密。你可以通过用50个随机字符填充引脚来避免这个问题。服务器必须解密填充的数据,然后丢弃最后50个字符。

答案 1 :(得分:1)

有一个洞。

在步骤3,PIN存储在数据库中。服务器无法知道保存PIN的请求来自合法用户。

要使其正常工作,您必须保存PIN:

  • 创建帐户
  • 提供旧PIN时

话虽如此,PIN仍然非常弱并容易破解。平均而言,在大约5000次尝试中将猜测一个4位数的引脚。

答案 2 :(得分:0)

我不是安全专家,但是如果客户端随每个请求发送随机种子怎么办?客户端和服务器都将使用此种子基于共享算法生成密钥。但是,我不确定给定种子和返回哈希之间的关系是多么可攻击。