Encryption

hash_df 是否對要傳遞給散列函式的數字使用二進製或 ASCII 十六進製表示?

  • December 10, 2011

我正在實現 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 算法,而是別的東西。

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