Security REST的HMAC身份验证
我希望在我的RESTAPI中基于 有一件事我仍然感到困惑,那就是如何把秘密告诉客户。客户端将是iphone、android和从市场上下载的 我想的是使用用户输入的密码,比如pin,服务器将通过 1) 客户端从服务器获取公钥 2) 使用公钥加密pin 3) 服务器将pin存储在数据库中 4) 从这一点开始,别针就被用作秘密Security REST的HMAC身份验证,security,rest,hmac,Security,Rest,Hmac,我希望在我的RESTAPI中基于 有一件事我仍然感到困惑,那就是如何把秘密告诉客户。客户端将是iphone、android和从市场上下载的 我想的是使用用户输入的密码,比如pin,服务器将通过 1) 客户端从服务器获取公钥 2) 使用公钥加密pin 3) 服务器将pin存储在数据库中 4) 从这一点开始,别针就被用作秘密 这上面有洞吗?原则上可以。但是,pin通常只有4位数字。攻击者获取公钥并加密所有9999组合并不困难。然后,他可以将自己的加密密钥与来自客户机的加密数据进行比较,找到秘密。您
这上面有洞吗?原则上可以。但是,pin通常只有4位数字。攻击者获取公钥并加密所有9999组合并不困难。然后,他可以将自己的加密密钥与来自客户机的加密数据进行比较,找到秘密。您可以通过使用50个随机字符填充pin来避免此问题。服务器必须解密填充的数据,只需扔掉最后50个字符。有一个漏洞 在步骤3,PIN存储在数据库中。服务器无法知道保存PIN的请求来自合法用户 要使其正常工作,必须保存PIN码:
- 创建帐户时
- 当提供旧PIN时
也就是说,别针非常脆弱,很容易折断。一个4位数的pin码平均需要5000次尝试。我不是安全专家,但是如果客户端在每个请求中随机发送一个种子会怎么样?客户端和服务器都将使用此种子基于共享算法生成密钥。然而,我不确定给定种子和返回哈希之间的关系有多容易攻击 这个秘密可以从双方都知道的密码中获得吗?很抱歉,下面的PIN码是由客户端输入的4位数字,并用公钥加密。服务器在数据库中存储纯文本pin。客户端使用PIN作为密码来计算HMAC