Hmac
HMAC 的 ASCII 輸入比原始字節弱?
在我編寫的各種加密程序中(大多數都是玩具問題,但目前的不是)我採取了一種懶惰的方法來執行數字輸入的消息摘要(散列)。我一直在將數字轉換為字元串,將它們連接起來,然後執行散列。(實際上,這是一個鍵控雜湊,或 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')
好吧,現在顯然你有麻煩了。