防重放(Anti Replay)
timestamp/counter
timestamp/counter 单调递增。
发送方使用当前 timestamp,或 counter+1 。
发送方对 { sender_id, data, timestamp/counter } 计算数字签名sig/消息认证码mac。
发送方发送 { sender_id, data, timestamp/counter, sig/mac }。
接收方校验sig/mac。
接收方检查收到timestamp/counter是否高于已记录的timestamp/counter,即,timestamp > record_timestamp, 或 counter > record_counter。
检查通过,接收方记录新的timestamp/counter,接收方接受data。
challenge
发送方向接放方请求challenge。
发送方对 { sender_id, data, challenge } 计算数字签名sig/消息认证码mac。
发送方发送 { sender_id, data, challenge, sig/mac }。
接收方校验sig/mac。
接收方检查收到challenge是否与自身发出的challenge相符。
如果相符,接收方接受data。
合规建议
时延敏感的业务可选择timestamp/counter的防重放方案。
高风险业务应选择challenge,或timestamp/counter + challenge的防重放方案。