2014-03-26 92 views
1

我写的对基于私人/公共密钥对信任等网络协议。要验证和删除主机发送的消息,我使用时间戳验证。如果签名时间戳的增量(当前值)大于30秒左右,则主机不相信另一主机的消息。密码:验证签名时间戳

我只是碰到了有趣的问题,我的测试服务器,我的第二个客户端是约40秒的同步(通过更新ntp固定)。

我在想,在可接受的时间差将是什么,如果有防止重放攻击的更好的办法?据说我可以让一个客户端提供一个随机文本来散列和签名,但不幸的是这不会工作,因为在这种情况下我必须写一次消息。

回答

2

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

时间是非常困难的。我无法告诉你我使用移动设备时遇到的问题,它们无法或无法将其时钟与网络同步。基于

计数器通常更容易,并且不拒绝服务本身。


我在想,在可接受的时间差将是什么......

微软的Active Directory使用5分钟。


是否有防止重放攻击基于与挑战/响应

计数器的更好的方法。


我能有一个客户端提供一个随机文本散列和签署,但不幸的是这不会工作,因为在这种情况下,我不得不一次写邮件......

也许你可以使用{time,nonce}对。如果现时没有记录,则在时间增量内对消息进行处理。然后保持消息({time,nonce})为一个窗口(5分钟?)。

如果再次遇到同样的随机数,不采取行动。如果你遇到了一个看不见的随机数,但它超出了时间增量,那么不要采取行动。有时候清理你的随机清单(每5分钟?)。


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

如果你看看周围,那么你可能会发现在学术文献的协议。

+0

TL; DR:使用计数器。 – erickson

+0

这里的问题是我证实了来自作者的消息(因此是密钥签名),但我不能让每个看到该消息的同伴请求与发起者的额外验证通信。所以我想通过计数器来表示每条消息的ID,以及类似重复数据删除的布隆过滤器的内容。 –