Hmac

HMAC 的 ASCII 輸入比原始字節弱?

  • November 14, 2019

在我編寫的各種加密程序中(大多數都是玩具問題,但目前的不是)我採取了一種懶惰的方法來執行數字輸入的消息摘要(散列)。我一直在將數字轉換為字元串,將它們連接起來,然後執行散列。(實際上,這是一個鍵控雜湊,或 HMAC,如RFC_2104中所述。)

例子:

# I desire to hash a single bit with a sequence number.
# bit is either 0 or 1
# sequence_number is some 64-bit number.
# key is some 32-bit number/value used to create an HMAC.
make_HMAC(key, str(bit) + str(sequence_number))

# make_HMAC works on longs as well, but would become ambiguous because:
# make_HMAC(key, 0 + sequence_number) == make_HMAC(key, 1 + (sequence_number - 1))

我一直在避免模棱兩可,但我擔心我已經以一種微妙的方式削弱了我的散列功能的強度。

將這些值轉換為字元串是否會導致 HMAC 以任何方式變得不那麼安全?

如果重要的話,我正在使用 python 2.7 和 pycrypto 庫。

從某種意義上說,不,編碼不應該對 HMAC 的安全性產生影響。

另一方面,它可能會產生依賴於應用程序的影響。

考慮以下。‘26’ 和 26 具有相同的 HMAC。現在,假設您的程式碼收到一條消息 M 和一個 HMAC MAC,然後執行類似這樣的操作

if HMAC(M, private_key) == MAC:
 if isinstance(M, basestring):
   grant_admin_privileges()
 else:
   grant_non_admin_privileges()
else:
 raise Exception('Bad HMAC')

好吧,現在顯然你有麻煩了。

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