使用雜湊函式實現 5 種操作模式
是否可以使用散列函式實現 5 種操作模式(ECB、CBC、OFB、CFB、CTR)中的任何一種?
您引用的模式是塊密碼的特定操作模式,因此不能直接應用於散列函式。分組密碼操作採用 2 個輸入,即密鑰和塊大小的輸入值,並輸出輸入的塊大小的鍵控排列。雜湊函式採用可變長度輸入,並輸出固定長度值。
但是,它們中的 3 種工作方式可以應用散列函式,通過使用 HMAC 或 NMAC 將散列轉換為鍵控偽隨機函式。
點擊率:
在分組密碼中,我們有:
$ C_i = P_i \oplus Enc_k(Nonce \ || \ Ctr_i) $
應用於我們擁有的雜湊:
$ C_i = P_i \oplus HMAC_k(Nonce \ || \ Ctr_i) $
OFB:
在分組密碼中,我們有:
$ O_0 = IV $
$ O_i = Enc_k(O_{i-1}) $
$ C_i = P_i \oplus O_i $
應用於我們擁有的雜湊:
$ O_0 = IV $
$ O_i = HMAC_k(O_{i-1}) $
$ C_i = P_i \oplus O_i $
循環流化床:
在分組密碼中,我們有:
$ C_0 = IV $
$ C_i = P_i \oplus Enc_k(C_{i-1}) $
應用於我們擁有的雜湊:
$ C_0 = IV $
$ C_i = P_i \oplus HMAC_k(C_{i-1}) $
由於這些模式的工作方式,不需要解密操作,密鑰單向函式可以執行相同的功能,即輸入到明文的 XOR 的密碼轉換並生成密文。他們使這些方案成為流密碼。
由於安全散列函式(SHA256 或 SHA512)的輸出大小通常大於塊密碼 (AES) 的塊大小,因此使用這些散列函式可能能夠在遇到這些模式可能出現的問題之前對大量明文進行編碼使用分組密碼的經驗。可變長度輸入的額外靈活性還允許散列函式具有更大的隨機數/IV。
但是,由於它們不是排列,因此適用於塊密碼的安全證明在這些模式下使用時可能不適用於散列函式。可以通過在加密明文之前截斷散列函式的輸出來提供額外的安全性,但在 OFB 和 CFB 的情況下仍將完整的輸出回饋回來。
從性能的角度來看,大多數散列函式比大多數塊密碼慢很多。使用 HMAC 還需要額外的散列操作來生成秘密初始值,但是如果散列函式的 IV 和輸入長度可以任意更改,則實現可以對每個明文執行一次這些操作。