Encryption
hash_df 是否對要傳遞給散列函式的數字使用二進製或 ASCII 十六進製表示?
我正在實現 HASH_DRBG 算法。根據用於 HASH DRBG 生成的NIST-SP800 90文件,第 10.4.1 節“使用散列函式 (Hash_df) 的推導函式”,Hash_df 算法包含此步驟 4.1:
溫度 = 溫度 || 雜湊(計數器 || no_of_bits_to_return || input_string)。
我相信|| 這裡代表“追加”操作。根據算法,我是否必須對 ASCII 十六進製字元串或二進製字元串進行附加操作和散列?
例如,我可以
Hash ("000102030405060708090A0B0C0D0E0F101112131415161718191A1B1")
在輸入是 ASCII 字元串字元的地方做。或者我可以Hash(&bytearray)
在 bytearray 以二進制形式儲存非 ASCII 數字的地方做些什麼?根據算法預期哪一個?我打算在這裡使用 SHA-1 或 SHA-256 作為 Hash。
在算法的步驟 4.1 中:
- 計數器應為 1 字節二進制值
- no_of_bits_to_return 是一個 4 字節的 bigendian 二進制值
- input_string 是一個可變長度的二進制值
- $ || $ 是連接(就像你猜的一樣)
所以,
Hash(&bytearray)
應該是合適的。最棘手的部分是“no_of_bits_to_return”——這是 bigendian(因此 24 的值將由四個字節表示
0x00 0x00 0x00 0x18
),這與最常見的處理器內部表示 4 字節值的方式相反。現在,如果您先轉換為(例如)ASCII 十六進制,那麼它可能不會影響算法的安全性;但是,它不會是 HASH_DRBG 算法,而是別的東西。