2

我正在寻找基于我的 REST API 实现 HMAC

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

我仍然困惑的一件事是如何将秘密传递给客户。客户端将是 iphone、android 并从市场上下载

我在想的是使用用户输入的密码作为密码,服务器将通过

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

这有什么坑吗?

4

3 回答 3

2

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

于 2012-09-26T20:34:20.607 回答
1

有一个洞。

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

为此,您必须保存 PIN 码:

  • 创建帐户时
  • 提供旧 PIN 时

话虽如此,PIN 仍然非常脆弱且容易破解。平均而言,大约 5000 次尝试会猜出一个 4 位数的密码。

于 2012-09-26T21:12:02.557 回答
0

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

于 2012-10-09T14:06:53.997 回答