Cryptography 密码学:验证签名时间戳

Cryptography 密码学:验证签名时间戳,cryptography,pem,Cryptography,Pem,我正在编写一个基于私钥/公钥对信任的对等网络协议。为了验证和消除主机发送的消息,我使用时间戳验证。如果签名的时间戳的增量(到当前值)大于30秒左右,则主机不信任另一主机的消息 我刚刚遇到了一个有趣的问题,我的测试服务器和第二个客户端大约有40秒不同步(通过更新ntp修复) 我想知道可以接受的时差是多少,是否有更好的方法来防止重播攻击?假设我可以让一个客户端提供一个随机文本进行散列和签名,但不幸的是,这不起作用,因为在这种情况下,我必须写一次消息 如果签名的时间戳的增量(到当前值)大于30秒左右,

我正在编写一个基于私钥/公钥对信任的对等网络协议。为了验证和消除主机发送的消息,我使用时间戳验证。如果签名的时间戳的增量(到当前值)大于30秒左右,则主机不信任另一主机的消息

我刚刚遇到了一个有趣的问题,我的测试服务器和第二个客户端大约有40秒不同步(通过更新
ntp
修复)

我想知道可以接受的时差是多少,是否有更好的方法来防止重播攻击?假设我可以让一个客户端提供一个随机文本进行散列和签名,但不幸的是,这不起作用,因为在这种情况下,我必须写一次消息

如果签名的时间戳的增量(到当前值)大于30秒左右,则主机不信任另一主机的消息

以时间为基础是出了名的困难。我无法告诉你我在移动设备上遇到的问题,这些设备无法或无法将时钟与网络同步

基于计数器的操作通常更容易,而且不需要DoS本身


我想知道可以接受的时差是多少

Microsoft的Active Directory使用5分钟


如果有更好的方法防止重播攻击

基于挑战/响应的计数器


我可以让一个客户提供一个随机文本进行散列和签名,但不幸的是,这不会工作,因为在这种情况下,我必须写一次消息

也许您可以使用{time,nonce}对。如果先前未记录nonce,则如果消息在时间增量内,则对其执行操作。然后将消息(使用{time,nonce})保持一段时间(5分钟?)

如果你再次遇到同样的情况,不要采取行动。若你们遇到一个看不见的暂时现象,但它超出了时间增量,那个么就不要对它采取行动。偶尔(每5分钟?)清除你的临时列表


我正在写一个基于对等网络协议的


如果你环顾四周,你可能会在学术文献中找到一个协议。

TL;DR:使用计数器。这里的问题是我要证明消息来自作者(因此是密钥签名),但我不能让看到消息的每个对等方都请求与发起者进行额外的验证通信。所以我想计数器是指每条消息的ID,以及类似于重复数据消除的bloom过滤器的东西?