Authentication

如何通過公開渠道進行身份驗證?

  • August 20, 2012

我正在做一個 arduino 項目來打開我的車庫門。我想這樣做,這樣有密碼的使用者就可以開門。由於計算限制,不可能進行加密。在只有散列算法可用的假設下,保護門的安全方法是什麼?我的想法:

客戶發送開門請求。伺服器遞增計數器。

伺服器以目前計數器值、時間戳和日期以及上述的 hmac 進行響應。客戶端以 H(passphrase + counter) + 上面的伺服器響應響應。伺服器驗證伺服器響應的 hmac,時間戳在有效視窗內,並且發送的雜湊匹配已知秘密並附加計數器。

我是否正確地考慮了這一點,或者我錯過了什麼?

幾點:

  • 確保您驗證您發送的所有內容,而不僅僅是其中的一部分。因此,將 HMAC(密碼,所有內容)附加到每條消息的末尾(這意味著兩條消息,而不僅僅是客戶端發送的消息)。如果您這樣做,則消息本身不需要包含密碼或其任何散列,儘管它應該包含計數器和/或時間戳,並且對於客戶端和伺服器來說是不同的。
  • 不要使用 MD5。雖然它的計算速度非常快,但它現在享有“損壞”的名聲(因為碰撞攻擊速度非常快)。雖然還沒有使 HMAC-MD5 可攻擊的中斷,但最好保存並使用更好的散列函式,例如 SHA-2 系列中的一個(SHA-265 應該足夠了)。
  • 正如 Ilmari 在評論中所說,安全塊密碼不一定比安全散列函式更難實現(或占用更多資源)。實際上,許多散列函式在壓縮函式內部使用某種分組密碼。您也可以從分組密碼(例如 CMAC)構造 MAC。

引用自:https://crypto.stackexchange.com/questions/2199