Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security REST的HMAC身份验证_Security_Rest_Hmac - Fatal编程技术网

Security REST的HMAC身份验证

Security REST的HMAC身份验证,security,rest,hmac,Security,Rest,Hmac,我希望在我的RESTAPI中基于 有一件事我仍然感到困惑,那就是如何把秘密告诉客户。客户端将是iphone、android和从市场上下载的 我想的是使用用户输入的密码,比如pin,服务器将通过 1) 客户端从服务器获取公钥 2) 使用公钥加密pin 3) 服务器将pin存储在数据库中 4) 从这一点开始,别针就被用作秘密 这上面有洞吗?原则上可以。但是,pin通常只有4位数字。攻击者获取公钥并加密所有9999组合并不困难。然后,他可以将自己的加密密钥与来自客户机的加密数据进行比较,找到秘密。您

我希望在我的RESTAPI中基于

有一件事我仍然感到困惑,那就是如何把秘密告诉客户。客户端将是iphone、android和从市场上下载的

我想的是使用用户输入的密码,比如pin,服务器将通过

1) 客户端从服务器获取公钥 2) 使用公钥加密pin 3) 服务器将pin存储在数据库中 4) 从这一点开始,别针就被用作秘密


这上面有洞吗?

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

有一个漏洞

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

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

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

也就是说,别针非常脆弱,很容易折断。一个4位数的pin码平均需要5000次尝试。

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

这个秘密可以从双方都知道的密码中获得吗?很抱歉,下面的PIN码是由客户端输入的4位数字,并用公钥加密。服务器在数据库中存储纯文本pin。客户端使用PIN作为密码来计算HMAC