Initialization-Vector
大文件的 SHA256
我有一個可以處理 64K 數據的 SHA256 硬體引擎,但我得到的輸入數據大小約為 1MB。我應該怎麼做才能處理 1MB 大小。
第一個 64KB 之後我的輸入應該是什麼,我的 IV(初始向量)是什麼?任何人都可以提供任何想法嗎?
最有可能的是,硬體引擎有一個 API 接受 256 位(32 字節)的 IV 和 512 位(64 字節)的某個大小倍數的數據塊,並返回 32 字節的結果。
鑑於 SHA-256 是Merkle-Damgård雜湊,為了連結該 API 的呼叫,您希望將 SHA-256 IV(由FIPS 186-4 第 5.3.3 節給出)作為第一次呼叫的 IV,並將上一次呼叫的結果作為下一次呼叫的 IV。API 返回的最後一個結果將是雜湊。
假設 API 不執行填充,傳遞給連續呼叫的數據塊應為填充消息(即 $ S $ 位後跟一個位為 1,然後 $ 511-(S+64\bmod512) $ 位為 0,然後 $ S $ 在大端二進制的 64 位上),按照它們在填充消息中的順序截斷為適合 API 的塊。
如果傳遞給 API 的塊只能有 64kB 大小,那麼只有在以下情況下,該 API 才能用於處理整個消息 $ 2^{19}-576\le S\bmod 2^{19}<2^{19}-64 $ ; 否則,某些計算結束需要在軟體中完成。