Hmac

如何實現隨機數以使用 hmac 及其密鑰對 6 位敏感數字進行散列

  • February 6, 2020

我必須通過不安全的網路傳遞一個 6 位數字,該數字必須非常保密。

我正在考慮使用 hmac 和只有我和接收者知道的密鑰對其進行雜湊處理

所以散列的程式碼是

key = b'SOME_SECRET_KEY'
message = b'6_DIGIT_NUMBER' # eg: b'123456'
hash = hmac.new(key, message, sha1)

我聽說如果消息相同,這將具有相同的雜湊值。

為了保持雜湊的唯一性,我讀到我們必須使用一種叫做 nonce 的東西。我對 nonce 完全陌生,不知道如何在我的情況下使用它。有人可以幫助如何在這裡實施

在 Crypto.SE,熟悉的成員會建議您查看 AEAD - Authenticated Encryption with Associated Data。這是一種加密類型,可確保您的消息的機密性,此外還有“標頭”及其完整性。AEAD 算法還通過在執行加密時包含“標籤”並在解密時對其進行驗證來幫助辨識格式錯誤的密文消息。

典型的 AEAD 算法包括 AES-GCM、ChaCha20-Poly1305 等。應該有可用於 django 的 python 模組(我去了你的 SO 配置文件)。然而,在客戶端 JS 中,通常只有 AES-GCM 可用。

https://www.rfc-editor.org/rfc/rfc5116

現在,需要在應用程序級別進行加密可能不如在傳輸級別進行加密那樣好的解決方案 - 在這種情況下,您應該考慮使用 TLS(1.2 或 1.3 版)保護您的連接。這需要一個證書,萬用字元域名約為 1k USD,但對於單域情況可能更便宜。

您所描述的看起來更像是一種密碼雜湊算法,在這種情況下,您的隨機數應該是鹽(隨機數是唯一的,因為鹽必須是隨機的)。還應該有一個可以使用的 bcrypt 或 argon python 模組。

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