我正在基于私钥/公钥对信任编写对等网络协议。要验证和删除主机发送的消息,我使用时间戳验证。如果签名时间戳的增量(对于当前值)大于30秒左右,则主机不信任其他主机的消息。
我遇到了一个有趣的问题,即我的测试服务器和我的第二个客户端大约40秒不同步(通过更新ntp
修复)。
我想知道可接受的时差是多少,以及是否有更好的方法可以防止重播攻击?据说我可以让一个客户端提供随机文本来散列和签名,但不幸的是,这不会起作用,因为在这种情况下我必须写一次消息。
答案 0 :(得分:2)
如果签名时间戳的增量(到当前值)大于30秒左右,则主机不信任其他主机的消息。
基于时间是非常困难的。我无法告诉您移动设备遇到的问题,这些移动设备无法或无法将其时钟与网络同步。
基于计数器通常更容易,而不是自己的DoS。
我想知道可接受的时差是多少......
Microsoft的Active Directory使用5分钟。
如果有更好的方法可以阻止重播攻击
基于挑战/回应的计数器。
我可以让一个客户端提供随机文本来散列和签名,但不幸的是,这不会起作用,因为在这种情况下我必须写一次消息...
也许你可以使用{time,nonce}对。如果之前没有记录过nonce,那么如果它在时间增量内,则对该消息进行操作。然后保持窗口的消息({time,nonce})(5分钟?)。
如果您再次遇到相同的nonce,请不要采取行动。如果你遇到一个看不见的nonce但它超出了时间delta,那么就不要采取行动。偶尔清除你的nonce列表(每5分钟?)。
我正在编写基于对等网络协议的...
如果你环顾四周,那么你可能会在学术文献中找到一个协议。