PRG的並行擴展
PRG可以通過一個較短的輸入得到一個較長的輸出,但是如果這個輸出的長度仍然達不到我們的要求怎麼辦呢?一個很自然的想法是將多個PRG拼起來,假設有個PRG拼到了一起,那麼我們便可以得到長的輸出。那麼這個新的的安全性怎麼樣呢?直觀來看,似乎只要不是很大,是安全的就可以保證安全的。事實上,我們有如下定理:
定理1:如果存在一個安全的PRG ,那麼個拼起來得到的新的PRG 就是安全的,即是安全的。其中從輸入空間中獨立隨機選取,是一個不超過關於安全參數的多項式界的一個參數。
證明:這個定理的證明用到了密碼學中一個非常重要的證明方法就是混合論證(hybrid argument)。爲了證明這個定理,我們可以先考察時的情況。當時,類似於前面定義PRG的安全性(https://blog.csdn.net/pllt1991/article/details/103915625),我們定義下面兩個experiment:
:
以作爲的輸入得到一個比特長的輸出併發送給;
向返回一個比特;
輸出
:
隨機選取併發送給;
向返回一個比特;
輸出
那麼我們的目標就是證明敵手在這兩個experiment上的優勢是可忽略的。現在我們定義3個attack game如下:
Game 0:
以作爲的輸入得到一個比特長的輸出併發送給;
向返回一個比特;
Game 1:
選取以及組成併發送給;
向返回一個比特;
Game 2:
隨機選取併發送給;
向返回一個比特;
可以看出,Game 0實際上就是,Game 2實際上就是,而Game 1則混合了Game 0和Game 2中的挑戰串來源,這也是這種證明方法被稱爲混合論證的原因。現在,令分別代表返回1(即敵手認爲它收到的挑戰是隨機串)的概率,然後我們還是按照通過PRG的安全性來論證流密碼語義安全性的思路將對於的敵手作爲子程序來調用對於的敵手。需要注意的是,由於接受的挑戰是兩個串,而接受的挑戰是一個串,因此需要“分裂成”兩個和才能完成對。對來說,它首先接受它自己的挑戰,然後通過自己生成另一個比特串,組合成以後作爲挑戰發送,然後返回返回的比特。顯然,當處於的時候,就相當於在執行Game 0;當處於的時候,就相當於在執行Game 1,而因爲是安全的,即敵手優勢是可忽略的,因此是可忽略的。同樣的,可以證明是可忽略的,而的敵手優勢其實就是也是可忽略的,從而證明了是安全的。這種方法雖然可以證明時的情況,但對於一般的證明起來比較麻煩,因此還有另外一種證明方法。
我們在和的基礎上再包上一層,即現在再構造一個的新的敵手來調用和。具體來說,接受到挑戰以後隨機選取並將發送給來調用,那麼可以看出對於來說有
因此的優勢爲,從而同樣有的敵手優勢是可忽略的。現在將情況擴展到一般的上,我們定義個attack game,Game i()如下定義:
Game i:
分別選取以及組成發送給敵手;
向返回一個比特;
有了attack game的定義以後,令分別代表個game中敵手返回1的概率,那麼顯然的敵手優勢爲。還是通過上面的論證思路,在再包上一層,通過隨機選取來決定使用哪個真正的敵手,那麼我們就有
從而我們有的敵手優勢爲。而因爲有一個關於安全參數的多項式上界,因此的敵手優勢爲依然是可忽略的,從而得到還是安全的。
PRG的串行擴展
上面展示的是PRG的一種並行擴展方式,不過這種方式需要個輸入種子,因此其擴展率(輸出比特長度與輸入比特長度之比)與原始的PRG是一樣的,並未得到提高。Blum和Micali提出了一種PRG的串行擴展方式,它把擴展爲一個如下工作的:從最初輸入開始,得到的輸出,然後用作爲新的輸入,得到新的輸出後和上一個輸出拼到一起得到,以此類推,步之後得到最終的輸出,那麼就是最終生成的僞隨機串。注意這裏的和原始的PRG有所不同,原來的PRG輸入空間爲輸出空間爲,而這裏的輸出空間爲。有了這種串行構造方式以後,的安全性是怎樣的呢?我們可以看出,並行和串行最主要的區別實際上就是每一輪的輸入產生方式不同,但是如果假設安全的話,這個區別是可忽略的,因此從直觀上來看,串行構造的的安全性應該和並行構造差不多。事實上,我們有如下定理:
定理2:如果存在一個安全的PRG ,那麼由此串行構造的也是安全的。
證明:這個定理的證明和定理1的證明是很類似的,都是通過在一系列attack game中不斷將一個輸出替換爲真正的隨機串,從而得到最終結果。具體來說,第i個game如下定義:
Game i:
分別選取以及組成發送給敵手;
向返回一個比特;
剩下的證明過程和定理1中的過程是完全一樣的,不再贅述。