2014-03-26 94 views
1

我寫的對基於私人/公共密鑰對信任等網絡協議。要驗證和刪除主機發送的消息,我使用時間戳驗證。如果簽名時間戳的增量(當前值)大於30秒左右,則主機不相信另一主機的消息。密碼:驗證簽名時間戳

我只是碰到了有趣的問題,我的測試服務器,我的第二個客戶端是約40秒的同步(通過更新ntp固定)。

我在想,在可接受的時間差將是什麼,如果有防止重放攻擊的更好的辦法?據說我可以讓一個客戶端提供一個隨機文本來散列和簽名,但不幸的是這不會工作,因爲在這種情況下我必須寫一次消息。

回答

2

如果簽名時間戳的增量(到當前)大於30秒左右,則主機不相信另一主機的消息。基於

時間是非常困難的。我無法告訴你我使用移動設備時遇到的問題,它們無法或無法將其時鐘與網絡同步。基於

計數器通常更容易,並且不拒絕服務本身。


我在想,在可接受的時間差將是什麼......

微軟的Active Directory使用5分鐘。


是否有防止重放攻擊基於與挑戰/響應

計數器的更好的方法。


我能有一個客戶端提供一個隨機文本散列和簽署,但不幸的是這不會工作,因爲在這種情況下,我不得不一次寫郵件......

也許你可以使用{time,nonce}對。如果現時沒有記錄,則在時間增量內對消息進行處理。然後保持消息({time,nonce})爲一個窗口(5分鐘?)。

如果再次遇到同樣的隨機數,不採取行動。如果你遇到了一個看不見的隨機數,但它超出了時間增量,那麼不要採取行動。有時候清理你的隨機清單(每5分鐘?)。


我正在寫一個對等網絡協議基於...

如果你看看周圍,那麼你可能會發現在學術文獻的協議。

+0

TL; DR:使用計數器。 – erickson

+0

這裏的問題是我證實了來自作者的消息(因此是密鑰簽名),但我不能讓每個看到該消息的同伴請求與發起者的額外驗證通信。所以我想通過計數器來表示每條消息的ID,以及類似重複數據刪除的布隆過濾器的內容。 –