是否建议使用签名(使用私钥散列的查询数据)作为nonce来避免重放攻击?

时间:2015-04-24 15:26:56

标签: security cryptography

我正在构建一个API,其中每个请求查询字符串包含以下内容:

  • 时间戳
  • 一些数据参数
  • 公钥
  • 签名(数据参数和时间戳用私钥散列)

当收到请求时,服务器会检查时间戳并拒绝过旧的请求。服务器还验证签名。

建议将签名保存在数据库中一段时间​​,以确保在有效时间范围内没有重放攻击吗?这显然与nonce的工作方式非常接近,但我很高兴听到你对这种方法的看法。

1 个答案:

答案 0 :(得分:0)

这是一种非常标准的技术。

但是,我会在列表中添加“nonce”字段。原因是如果在同一秒内发出两个合法请求会发生什么?只需存储签名,您就会拒绝有效请求。

但是,如果您让客户端生成128位以上的nonce并将其包含在请求中,那么他们可以根据需要每秒提交尽可能多的请求。

然后,只需维护一个看到的随机数列表以及时间戳。您可以根据时间戳的到期清除该列表。