在選擇明文攻擊下,哪些類別的密碼在語義上是安全的?
我試圖弄清楚在選擇明文攻擊下密碼在語義上是(或不是)安全的情況。
我似乎找不到一個很好的參考來解釋這一點。
我想我錯過了一個基本概念,所以如果我按照我的理解解釋它,也許有人可以糾正我。
語義安全意味著對手無法從密文中了解任何關於明文的資訊(除了事先知道的消息長度)。
即消息與隨機位完全無法區分。
所以在我看來,如果流密碼使用真正的 PRG,它的輸出將始終與隨機無法區分,選擇的明文攻擊不會幫助對手。
但是,如果加密是確定性的,那麼選擇的明文攻擊將揭示有關消息的“資訊”,因為密文可以相互比較。
我錯過了什麼嗎?
通過將明文塊直接傳遞給加密函式來使用諸如 AES 之類的塊密碼進行加密被稱為電子密碼本模式 (ECB),並且不是CPA 安全的,因為(正如您在問題中所說)它是完全確定性的並且兩個相同的明文塊將產生兩個相同的密文塊。
為了防止這種情況,可以將初始化向量或隨機數與密碼模式(例如密碼塊連結或隨機計數器模式)結合使用,這將防止加密具有確定性並允許比較密文。
為了防止選擇明文攻擊,加密方案必須是非確定性的——也就是說,它的輸出必須包含一個隨機元素,這樣例如兩次加密相同的明文將導致兩個不同的密文。
事實上,如果不是這樣,攻擊者只需使用加密預言機預先對挑戰密文進行加密,然後將對挑戰的響應與從預言機獲得的密文進行比較,就可以輕鬆贏得IND-CPA 遊戲。
現在,實現這種非確定性的通常方法是選擇一個足夠長(比如 128 位)的隨機“調整”或“IV”,以某種方式將其與密鑰組合以改變明文的加密方式,然後將其作為密文的一部分包含在內。這樣一來,就好像每個明文都使用不同的隨機密鑰進行了加密,並且有很多可能的有效密鑰,以至於它們中的任何一個基本上都不可能被使用兩次。
當然,調整或 IV 本身不一定是真正隨機的;它只需要被任何可能的攻擊者與隨機無法區分。例如,一個加密安全的偽隨機數生成器(它與流密碼幾乎相同)的輸出中播種了一個真正的隨機數(或者,再次,與它無法區分的東西)就可以了。