Key-Derivation
PKCS12 密鑰派生
在舊版本的 PKCS#12 中,有一個密鑰派生函式,據我所知,該函式在該標準之外的任何地方都沒有使用:
https://www.rfc-editor.org/rfc/rfc7292#appendix-B
那討論它。所以在那個標準中有一個循環:
6. For i=1, 2, ..., c, do the following: A. Set A2=H^r(D||I). (i.e., the r-th hash of D||1, H(H(H(... H(D||I)))) B. Concatenate copies of Ai to create a string B of length v bits (the final copy of Ai may be truncated to create B). C. Treating I as a concatenation I_0, I_1, ..., I_(k-1) of v-bit blocks, where k=ceiling(s/v)+ceiling(p/v), modify I by setting I_j=(I_j+B+1) mod 2^v for each j. 7. Concatenate A_1, A_2, ..., A_c together to form a pseudorandom bit string, A.
有一個針對 RFC 的公開勘誤表表明步驟 A 應該更像這樣:
Set A2=H^r(D||I). (i.e., the r-th hash of D||I, H(H(H(... H(D||I))))
IE。它應該替換
D||1
為D||I
. 我的問題是…應該A2
替換為Ai
? 因為如果不是,那麼它似乎不會在A2
任何地方實際使用,而AI
is。當然,即使這樣做了……如果我每次都被改變,那麼在我看來你必須做很多雜湊。就像
c
您需要多次執行雜湊操作而不是執行雜湊操作一樣:$$ \sum _{ n=1 }^{ c }{ n } $$
這是正確的解釋嗎?
是的,它應該是 Ai,或者更準確地說是 A_i 表示下標。請注意,i(塊下標)不是 I(加鹽密碼輸入)。我在 2 月將其送出給 rfc-editor(請參閱https://security.stackexchange.com/questions/112627/what-password-based-key-derivation-does-pkcs-12-use),他們說他們要修理它; 估計是丟了
為了確認,您可以在此處查看來自 RSAlabs-now-EMC 的源文件,至少只要戴爾沒有像多年來 EMC 破壞 RSAlabs 網站那樣開始破壞 EMC 網站。
儘管現在推薦使用 PKCS5v2 中的 PBES2/PBKDF2(以及其他選項,例如 bcrypt、scrypt、Argon2 甚至更多),但仍然使用 PKCS12 PBE。