PRG的擴展

PRG的並行擴展

PRG可以通過一個較短的輸入得到一個較長的輸出,但是如果這個輸出的長度仍然達不到我們的要求怎麼辦呢?一個很自然的想法是將多個PRG拼起來,假設有n個PRG拼到了一起,那麼我們便可以得到nL長的輸出。那麼這個新的\mathcal{G}^\prime的安全性怎麼樣呢?直觀來看,似乎只要n不是很大,\mathcal{G}是安全的就可以保證\mathcal{G}^\prime安全的。事實上,我們有如下定理:

定理1:如果存在一個安全的PRG \mathcal{G},那麼n\mathcal{G}拼起來得到的新的PRG \mathcal{G}^\prime就是安全的,即\mathcal{G}^\prime(s_1,\cdots,s_n):=(\mathcal{G}(s_1),\cdots,\mathcal{G}(s_n))是安全的。其中s_1,\cdots,s_n從輸入空間中獨立隨機選取,n是一個不超過關於安全參數的多項式界的一個參數。

證明:這個定理的證明用到了密碼學中一個非常重要的證明方法就是混合論證(hybrid argument)。爲了證明這個定理,我們可以先考察n=2時的情況。當n=2時,類似於前面定義PRG的安全性(https://blog.csdn.net/pllt1991/article/details/103915625),我們定義下面兩個experiment:

PPrgExp_0^{\mathcal{G}^\prime,\mathcal{A}}

\mathcal{C}(s_1,s_2)作爲\mathcal{G}^\prime的輸入得到一個2L比特長的輸出(r_1,r_2)併發送給\mathcal{A};

\mathcal{A}\mathcal{C}返回一個比特b^\prime\in\{0,1\}

輸出b^\prime

PPrgExp_1^{\mathcal{G}^\prime,\mathcal{A}}

\mathcal{C}隨機選取(r_1,r_2)\in\{0,1\}^L\times\{0,1\}^L併發送給\mathcal{A};

\mathcal{A}\mathcal{C}返回一個比特b^\prime\in\{0,1\}

輸出b^\prime

那麼我們的目標就是證明敵手\mathcal{A}在這兩個experiment上的優勢是可忽略的。現在我們定義3個attack game如下:

Game 0:

\mathcal{C}(s_1,s_2)作爲\mathcal{G}^\prime的輸入得到一個2L比特長的輸出(r_1,r_2)併發送給\mathcal{A};

\mathcal{A}\mathcal{C}返回一個比特b^\prime\in\{0,1\}

Game 1:

\mathcal{C}選取r_1\xleftarrow{R}\{0,1\}^L以及r_2=\mathcal{G}(s_2)組成(r_1,r_2)併發送給\mathcal{A};

\mathcal{A}\mathcal{C}返回一個比特b^\prime\in\{0,1\}

Game 2:

\mathcal{C}隨機選取(r_1,r_2)\in\{0,1\}^L\times\{0,1\}^L併發送給\mathcal{A};

\mathcal{A}\mathcal{C}返回一個比特b^\prime\in\{0,1\}

可以看出,Game 0實際上就是PPrgExp_0^{\mathcal{G}^\prime,\mathcal{A}},Game 2實際上就是PPrgExp_1^{\mathcal{G}^\prime,\mathcal{A}},而Game 1則混合了Game 0和Game 2中的挑戰串來源,這也是這種證明方法被稱爲混合論證的原因。現在,令p_i(i=0,1,2)分別代表\mathcal{A}返回1(即敵手認爲它收到的挑戰是隨機串)的概率,然後我們還是按照通過PRG的安全性來論證流密碼語義安全性的思路將對於\mathcal{G}^\prime的敵手\mathcal{A}作爲子程序來調用對於\mathcal{G}的敵手\mathcal{B}。需要注意的是,由於\mathcal{A}接受的挑戰是兩個串,而\mathcal{B}接受的挑戰是一個串,因此\mathcal{B}需要“分裂成”兩個\mathcal{B}_1\mathcal{B}_2才能完成對\mathcal{A}。對\mathcal{B}_1來說,它首先接受它自己的挑戰r_1,然後通過\mathcal{G}自己生成另一個比特串r_2,組合成(r_1,r_2)以後作爲\mathcal{A}挑戰發送,然後\mathcal{B}_1返回\mathcal{A}返回的比特。顯然,當\mathcal{B}_1處於PrgExp_0^{\mathcal{G},\mathcal{B}}的時候,就相當於在執行Game 0;當\mathcal{B}_1處於PrgExp_1^{\mathcal{G},\mathcal{B}}的時候,就相當於在執行Game 1,而因爲\mathcal{G}是安全的,即敵手優勢是可忽略的,因此|p_0-p_1|是可忽略的。同樣的,可以證明|p_1-p_2|是可忽略的,而\mathcal{G}^\prime的敵手優勢其實就是|p_0-p_2|(=|p_0-p_1+p_1-p_2|\le|p_0-p_1|+|p_1-p_2|)也是可忽略的,從而證明了\mathcal{G}^\prime是安全的。這種方法雖然可以證明n=2時的情況,但對於一般的n證明起來比較麻煩,因此還有另外一種證明方法。

我們在\mathcal{B}_1\mathcal{B}_2的基礎上再包上一層,即現在再構造一個\mathcal{G}的新的敵手\mathcal{B}來調用\mathcal{B}_1\mathcal{B}_2。具體來說,\mathcal{B}接受到挑戰r以後隨機選取\omega\in\{1,2\}並將r發送給\mathcal{B}_{\omega}來調用,那麼可以看出對於\mathcal{B}來說有\begin{align*}P(W_0)=P(\omega=1)P(W_0|\omega=1)+P(\omega=2)P(W_0|\omega=2)=\frac{1}{2}(P(W_0|\omega=1)+P(W_0|\omega=2))=\frac{1}{2}(p_0+p_1) \end{align*}

\begin{align*}P(W_1)=P(\omega=1)P(W_1|\omega=1)+P(\omega=2)P(W_1|\omega=2)=\frac{1}{2}(P(W_1|\omega=1)+P(W_1|\omega=2))=\frac{1}{2}(p_1+p_2) \end{align*}

因此\mathcal{B}的優勢爲PrgAdv[\mathcal{B},\mathcal{G}]=\frac{1}{2}|p_0-p_2|,從而同樣有\mathcal{G}^\prime的敵手優勢是可忽略的。現在將情況擴展到一般的n上,我們定義n+1個attack game,Game i(0\le\up{i}\le n)如下定義:

Game i:

\mathcal{C}分別選取r_1\xleftarrow{R}\{0,1\}^L,\cdots,r_i\xleftarrow{R}\{0,1\}^L以及r_{i+1}=\mathcal{G}(s_{i+1}),\cdots,r_n=\mathcal{G}(s_n)組成(r_1,\cdots,r_n)發送給敵手\mathcal{A}

\mathcal{A}\mathcal{C}返回一個比特b^\prime\in\{0,1\}

有了attack game的定義以後,令p_0,\cdots,p_n分別代表n+1個game中敵手返回1的概率,那麼顯然\mathcal{G}^\prime的敵手優勢爲|p_0-p_n|。還是通過上面的論證思路,在\mathcal{B}_1,\cdots,\mathcal{B}_n再包上一層\mathcal{B},通過隨機選取\omega\in\{1,\cdots,n\}來決定使用哪個真正的敵手,那麼我們就有

\begin{align*} P(W_0)=\sum\limits_{i=1}^n P(W_0|\omega=i)P(\omega=i)=\frac{1}{n}\sum\limits_{i=1}^n P(W_0|\omega=i)=\frac{1}{n}\sum\limits_{i=1}^np_{i-1} \end{align*}

\begin{align*} P(W_1)=\sum\limits_{i=1}^n P(W_1|\omega=i)P(\omega=i)=\frac{1}{n}\sum\limits_{i=1}^n P(W_1|\omega=i)=\frac{1}{n}\sum\limits_{i=1}^np_{i} \end{align*}

從而我們有\mathcal{G}的敵手優勢爲PrgAdv[\mathcal{B},\mathcal{G}]=\frac{1}{n}|p_0-p_n|。而因爲n有一個關於安全參數的多項式上界,因此\mathcal{G}^\prime的敵手優勢爲n\cdot PrgAdv[\mathcal{B},\mathcal{G}]依然是可忽略的,從而得到\mathcal{G}^\prime還是安全的。                                                                                                        \blacksquare

PRG的串行擴展

上面展示的是PRG的一種並行擴展方式,不過這種方式需要n個輸入種子,因此其擴展率(輸出比特長度與輸入比特長度之比)與原始的PRG是一樣的,並未得到提高。Blum和Micali提出了一種PRG的串行擴展方式,它把\mathcal{G}擴展爲一個如下工作的\mathcal{G}^\prime:從最初輸入s_0開始,得到\mathcal{G}的輸出(r_1,s_1),然後用s_1作爲\mathcal{G}新的輸入,得到新的輸出後和上一個輸出拼到一起得到(r_1,r_2,s_2),以此類推,n步之後得到最終的輸出(r_1,\cdots,r_n,s_n),那麼(r_1,\cdots,r_n)就是最終生成的僞隨機串。注意這裏的\mathcal{G}和原始的PRG有所不同,原來的PRG輸入空間爲\mathcal{S}輸出空間爲\mathcal{R},而這裏的\mathcal{G}輸出空間爲\mathcal{R}\times\mathcal{S}。有了這種串行構造方式以後,\mathcal{G}^\prime的安全性是怎樣的呢?我們可以看出,並行和串行最主要的區別實際上就是每一輪的輸入產生方式不同,但是如果假設\mathcal{G}安全的話,這個區別是可忽略的,因此從直觀上來看,串行構造的\mathcal{G}^\prime的安全性應該和並行構造差不多。事實上,我們有如下定理:

定理2:如果存在一個安全的PRG \mathcal{G},那麼由此串行構造的\mathcal{G}^\prime也是安全的。

證明:這個定理的證明和定理1的證明是很類似的,都是通過在一系列attack game中不斷將一個輸出替換爲真正的隨機串,從而得到最終結果。具體來說,第i個game如下定義:

Game i:

\mathcal{C}分別選取r_1\xleftarrow{R}\{0,1\}^L,\cdots,r_i\xleftarrow{R}\{0,1\}^L,s_i\xleftarrow{R}\{0,1\}^l以及(r_{i+1},s_{i+1})=\mathcal{G}(s_i),\cdots,(r_{i+1},\cdots,r_n,s_n)=\mathcal{G}(s_{n-1})組成(r_1,\cdots,r_n)發送給敵手\mathcal{A}

\mathcal{A}\mathcal{C}返回一個比特b^\prime\in\{0,1\}

剩下的證明過程和定理1中的過程是完全一樣的,不再贅述。                                                                                                                 \blacksquare

發佈了2 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章