【问题标题】:Cryptography: Verifying Signed Timestamps密码学:验证签名时间戳
【发布时间】:2014-03-26 03:06:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: cryptography pem


    【解决方案1】:

    如果签名时间戳的增量(相对于当前)大于 30 秒左右,则主机不信任其他主机的消息。

    基于时间是出了名的困难。我无法告诉您我在使用无法或无法将时钟与网络同步的移动设备时遇到的问题。

    基于计数器通常更容易,并且本身不会 DoS。


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

    Microsoft 的 Active Directory 使用 5 分钟。


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

    基于挑战/响应的计数器。


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

    也许您可以使用 {time,nonce} 对。如果之前没有记录过随机数,那么如果它在时间增量内,则对消息采取行动。然后将消息(使用 {time,nonce})按住窗口(5 分钟?)。

    如果您再次遇到相同的随机数,请不要采取行动。如果你遇到一个看不见的 nonce 但它超出了时间增量,那么不要对它采取行动。偶尔(每 5 分钟?)清除你的 nonce 列表。


    我正在编写基于点对点网络协议...

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

    【讨论】:

    • TL;DR:使用计数器。
    • 这里的问题是我证明消息来自作者(因此密钥签名),但我不能让每个看到消息的同行都请求与发起者进行额外的验证通信。所以我想你所说的计数器是指每条消息的 ID,以及用于重复数据删除的布隆过滤器之类的东西?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2016-05-29
    相关资源
    最近更新 更多