2012-09-26 40 views
2

我期待implment HMAC我的REST API基于HMAC认证对REST

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

的一两件事,我仍然感到困惑的就是如何让这个秘密给客户端。客户端将是iPhone,Android和从市场上下载

我在想什么,用什么用户输入像一针的秘密时,服务器将通过

1)客户端获得具有该引脚从服务器 2)的公开密钥加密与公开密钥 3)服务器存储在从该点分贝 4)引脚的引脚转发PIN在用作本秘密

任何孔?

+0

密码是否可以从双方都知道的密码中派生出来? – ixe013

+0

对不起,PIN码表示4位数字由客户端输入并用公钥加密。服务器将纯文本引脚存储在数据库中。客户使用PIN作为秘密来计算HMAC – user1177292

回答

2

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

+0

好建议 – user1177292

1

有一个洞。

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

对于这个工作,你必须保存PIN两种:

  • 在帐户创建
  • 当旧的PIN提供

话虽这么说,一个引脚保持非常虚弱,容易打破。平均来说,一个4位数的引脚会被大约5000次尝试猜出。

0

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