防重放(Anti Replay)

timestamp/counter

timestamp/counter 单调递增。

  1. 发送方使用当前 timestamp,或 counter+1 。

  2. 发送方对 { sender_id, data, timestamp/counter } 计算数字签名sig/消息认证码mac。

  3. 发送方发送 { sender_id, data, timestamp/counter, sig/mac }。

  4. 接收方校验sig/mac。

  5. 接收方检查收到timestamp/counter是否高于已记录的timestamp/counter,即,timestamp > record_timestamp, 或 counter > record_counter。

  6. 检查通过,接收方记录新的timestamp/counter,接收方接受data。

challenge

  1. 发送方向接放方请求challenge。

  2. 发送方对 { sender_id, data, challenge } 计算数字签名sig/消息认证码mac。

  3. 发送方发送 { sender_id, data, challenge, sig/mac }。

  4. 接收方校验sig/mac。

  5. 接收方检查收到challenge是否与自身发出的challenge相符。

  6. 如果相符,接收方接受data。

合规建议

  • 时延敏感的业务可选择timestamp/counter的防重放方案。

  • 高风险业务应选择challenge,或timestamp/counter + challenge的防重放方案。