小弟我只是個普通的後端工程師,最近在研究AES加密,與同事聊天時發現各方文件都寫上'每次加密IV需使用完全隨機方式產生,而產生的IV本身並不需要保護,它是可以被公開的',但是卻找不到解釋為何IV需要使用隨機方式與IV值被公開為何不會有問題。
目前有個使用情境為確認AB站身分
A Server向B Server傳遞Data, B Server使用AES加密後將密文與IV回傳A Server, A Server將使用者Redirect到B Client並帶上密文與IV傳遞給B Server去解密確認身分。
想請問各位大神:
1.IV使用隨機方式產生並公開與使用固定IV並隱藏在Server中有什麼區別呢?
2.另外請問以上流程中是否存有安全疑慮呢?
AES 只對 16 byte 加密
但現實中資料是任意長度的
所以會搭配區塊加密法工作模式來加密資料
假設有明文 A 跟明文 B
他們一開始有一段文字是相同的
那麼對 A 跟 B 加密的話,前面那段會產生相同的結果
這會讓攻擊者可以分析蒐集到的密文
IV 就是為了避免這種狀況而生
為何IV需要使用隨機方式
IV 共同的要求是「不要重複」
有時候也看得到用計數器的方式作為 IV
用計數器方式是否安全似乎與區塊加密法工作模式有關
(這部分我沒研究很深,目前我是都採用隨機就是)
IV值被公開為何不會有問題
因為缺了密鑰,就算有 IV 也無法解開。
而且 IV 因為不能重複使用,所以無法寫死在程式內,只能透過傳輸的方式給予對方。
IV 這個東西的用途,簡單說就是「讓你的資料,即使是相同的內容,用相同的密碼,加密後也會是不一樣的密文」。
如果沒有用 IV,那麼相同的內容,用相同的密碼,就會有一樣的加密結果。只要駭客拿到幾份你用同樣密碼加密的資料,暴力比對就能知道密文的意思,甚至不需要解密就能猜出內容。
不過 IV 只不過是幫助混淆,所以他不需要隱藏。但如果你又使用相同 IV 去加密每一份資料,那就失去它的意義了。又變成是一樣的資料、一樣的密碼、一樣的 IV,會有一樣的密文。
這樣知道 IV 的用處了嗎。
1.IV使用隨機方式產生並公開與使用固定IV並隱藏在Server中有什麼區別呢?
相對而言,安全性
隨機方式:較高/固定IV:較低
隱藏在Server:較高/公開:較低
2.另外請問以上流程中是否存有安全疑慮呢?
安全疑慮只有「相對」高低,沒有「絶對」的有
或沒有
就像「用了 xx 比不用 xx 安全,但不代表用了 xx 就沒有安全疑慮」
與同事聊天時發現各方文件都寫上'每次加密IV需使用完全隨機方式產生,而產生的IV本身並不需要保護,它是可以被公開的'
我實在 Google 不到「各方文件」有提到這點(IV不需要保護,它是可以被公開的)
可以的話請提供一兩個連結,我去讀一下
SP 800-38A(Recommendation for Block Cipher Modes of Operation: Methods and Techniques)
The IV need not be secret; however, for the CBC and CFB modes, the IV for any particular execution of the encryption process must be unpredictable, and, for the OFB mode, unique IVs must be used for each execution of the encryption process.
羊小咩大大的文章中有提到:https://ithelp.ithome.com.tw/articles/10249953
還有另一篇文章:http://ijecorp.blogspot.com/2013/08/python-m2crypto-aes-encrypt-decrypt.html
淺水員感謝提供 第8頁 5.3 有提到 'The IV need not be secret;'