现代密码学3.7--CCA安全
現(xiàn)代密碼學(xué)3.7--CCA安全
- CCA安全
- 含oracle的實(shí)驗(yàn)過(guò)程PrivKA,Πcca(n)PrivK^{cca}_{\mathcal{A},\Pi}(n)PrivKA,Πcca?(n)
- CCA安全定義
- 對(duì)不滿(mǎn)足CCA安全的密碼方案的攻擊
- 簡(jiǎn)單例子:對(duì)基于PRF構(gòu)造的密碼方案的攻擊
- 復(fù)雜例子:對(duì)CBC的攻擊,padding-oracle
- 求出bbb
- 求出mmm的每一位
博主正在學(xué)習(xí)INTRODUCTION TO MODERN CRYPTOGRAPHY (Second Edition) --Jonathan Katz, Yehuda Lindell,做一些筆記供自己回憶,如有錯(cuò)誤請(qǐng)指正。整理成一個(gè)系列現(xiàn)代密碼學(xué),方便檢索。
- 第二章定義了完美安全及其對(duì)應(yīng)的密碼方案“一次一密”,
- 第三章3.1、3.2定義了計(jì)算安全,3.3介紹了PRG和基于PRG構(gòu)造的滿(mǎn)足計(jì)算安全的密碼方案;
- 3.4節(jié)定義了CPA安全,3.5節(jié)介紹了PRF和基于PRF構(gòu)造的滿(mǎn)足CPA安全的密碼方案,3.6節(jié)介紹了PRG和PRF構(gòu)造的流密碼和分組密碼;
- 3.7節(jié)
- 將介紹一種新的安全性:CCA安全,這種安全性是之前我們構(gòu)造的密碼方案都不滿(mǎn)足的,non-malleability/不可延展性是滿(mǎn)足CCA安全的必要條件;
- 并以CBC分組密碼為例,表示對(duì)于這種不滿(mǎn)足CCA安全的密碼方案,可以進(jìn)行怎樣的攻擊。
CCA安全
跟CPA安全很類(lèi)似,除了encryption oracle外,多了decryption oracle,只有一個(gè)要求:不能問(wèn)oracle跟挑戰(zhàn)密文一樣的密文。
含oracle的實(shí)驗(yàn)過(guò)程PrivKA,Πcca(n)PrivK^{cca}_{\mathcal{A},\Pi}(n)PrivKA,Πcca?(n)
- 敵手A\mathcal{A}A已知安全參數(shù)1n1^n1n,有一個(gè)連接Enck(?)Enc_k(\cdot)Enck?(?)的oracle和連接Deck(?)Dec_k(\cdot)Deck?(?)的oracle,輸出等長(zhǎng)明文m0,m1m_0,m_1m0?,m1?給加密者;
- 加密者任選b∈{0,1}b\in\{0,1\}b∈{0,1},輸出密文c←Enck(mb)c\leftarrow Enc_k(m_b)c←Enck?(mb?)給敵手A\mathcal{A}A,ccc是挑戰(zhàn)密文;
- 敵手A\mathcal{A}A在獲得ccc后,仍有一個(gè)連接Enck(?)Enc_k(\cdot)Enck?(?)的oracle和連接Deck(?)Dec_k(\cdot)Deck?(?)的oracle(可以根據(jù)ccc調(diào)整,繼續(xù)查詢(xún)),輸出猜測(cè)的b′b'b′;
- 如果b′=bb'=bb′=b輸出1,否則輸出0。
CCA安全定義
私鑰加密方案Π=(Gen,Enc,Dec)\Pi=(Gen,Enc,Dec)Π=(Gen,Enc,Dec)如果對(duì)于任意PPT敵手A\mathcal{A}A,都有一個(gè)可忽略函數(shù)negl滿(mǎn)足Pr[PrivKA,Πcca(n)=1]≤12+Pr[PrivK_{\mathcal{A},\Pi}^{cca}(n)=1]\le \frac{1}{2}+Pr[PrivKA,Πcca?(n)=1]≤21?+negl(n)(n)(n),則稱(chēng)該方案Π\PiΠ在選擇明文攻擊下有不可區(qū)分的加密,是滿(mǎn)足CCA安全的。
安全性:多次加密的CCA安全=單次加密的CCA安全。
對(duì)不滿(mǎn)足CCA安全的密碼方案的攻擊
簡(jiǎn)單例子:對(duì)基于PRF構(gòu)造的密碼方案的攻擊
- 根據(jù)3.5節(jié)構(gòu)造基于PRF的密碼方案Π\PiΠ:m0=0n:m_0=0^n:m0?=0n,m1=1nm_1=1^nm1?=1n,Enck(m)=<Fk(r)⊕m>Enc_k(m)=<F_k(r)\oplus m>Enck?(m)=<Fk?(r)⊕m>,c=<r,s>c=<r,s>c=<r,s>
- 如果修改ccc的第一個(gè)比特sss,記作c′c'c′;
- 因?yàn)?span id="ze8trgl8bvbq" class="katex--inline">c≠c′c\neq c'c?=c′,所以可以問(wèn)decryption oracle;得到10n?110^{n-1}10n?1或者01n?101^{n-1}01n?1,那么就可以判斷是m0m_0m0?還是m1m_1m1?,這不滿(mǎn)足CCA安全。
所以,滿(mǎn)足CCA安全的密碼方案的必要條件是不可延展性:如果敵手修改一個(gè)給定密文,結(jié)果是一個(gè)無(wú)效密文或者解密得到一個(gè)與原始明文完全無(wú)關(guān)的明文。
復(fù)雜例子:對(duì)CBC的攻擊,padding-oracle
- LLL:塊長(zhǎng)度
- bbb:需要被填充的字節(jié)數(shù),b≠0b\neq 0b?=0,如果已經(jīng)是不需要填充,則填充LLL個(gè)字節(jié),有1≤b≤L1\le b\le L1≤b≤L
- 填充規(guī)則:如果需要填充1個(gè)字節(jié),則填010101;如果需要填充4個(gè)字節(jié),則填040404040404040404040404;如果需要填充bbb個(gè)字節(jié),則填bbb個(gè)0b0b0b
- 加密:對(duì)明文mmm填充至LLL的倍數(shù),對(duì)填充后的信息進(jìn)行CBC加密
- 解密:按CBC解密,得到填充后的信息,找到最后一個(gè)字節(jié)0b0b0b,
- 如果后bbb個(gè)都是0b0b0b,刪去這bbb個(gè)0b0b0b,得到原始明文;
- 如果后bbb個(gè)不都是0b0b0b,則不符合填充規(guī)則,返回"bad padding" error。
- 根據(jù)這兩種不同的返回,我們可以求出bbb,進(jìn)而求出明文信息的每一位。這種decryption oracle被稱(chēng)為padding-oracle,對(duì)于不滿(mǎn)足CCA安全的CBC分組加密模式可以進(jìn)行攻擊。
以3-block為例:IV,c1,c2IV,c_1,c_2IV,c1?,c2?,每個(gè)block長(zhǎng)度為LLL,解密m2=Fk?1(c2)⊕c1m_2=F_k^{-1}(c_2)\oplus c_1m2?=Fk?1?(c2?)⊕c1?,c1c_1c1?改變則m2m_2m2?會(huì)相應(yīng)改變
求出bbb
- 本來(lái)解密是正確的,改變c1c_1c1?的第一個(gè)字節(jié),如果解密m2m_2m2?返回"bad padding"error,則說(shuō)明c1c_1c1?(LLL長(zhǎng))的第一個(gè)字節(jié)就屬于padding位(那么后面都屬于padding位),而padding位1≤b≤L1\le b\le L1≤b≤L最多只有LLL位,那么b=Lb=Lb=L;
- 同理,如果改變第一個(gè)字節(jié)解密還是正確的,改變第二個(gè)字節(jié)返回error,則b=L?1b=L-1b=L?1。
求出mmm的每一位
- 取△i=(0…0∣∣0i∣∣0(b+1)…0(b+1)⊕(0…0∣∣00∣∣0b…0b)\triangle_i=(0…0 ||0i||0(b+1)…0(b+1)\oplus (0…0||00||0b…0b)△i?=(0…0∣∣0i∣∣0(b+1)…0(b+1)⊕(0…0∣∣00∣∣0b…0b),0≤i≤28?10\le i\le 2^8-10≤i≤28?1
- m2m_2m2?的最后一位是B0b…0bB0b…0bB0b…0b
- 現(xiàn)在修改c1c_1c1?為“c1⊕△ic_1\oplus \triangle_ic1?⊕△i?”,則m2m_2m2?最后一位相應(yīng)改變?yōu)?span id="ze8trgl8bvbq" class="katex--inline">B⊕i∣∣(b⊕(b+1)…b⊕(b+1)B\oplus i||(b\oplus (b+1)…b\oplus (b+1)B⊕i∣∣(b⊕(b+1)…b⊕(b+1)
- 除非B⊕△i=b⊕(b+1)B\oplus \triangle_i=b\oplus (b+1)B⊕△i?=b⊕(b+1),解密m2m_2m2?會(huì)返回"bad padding" error;
- 我們只需要遍歷iii,找到某個(gè)iii使得解密m2m_2m2?不返回"bad padding " error,此時(shí)B=△i⊕b⊕(b+1)B=\triangle_i \oplus b\oplus (b+1)B=△i?⊕b⊕(b+1)。
- 按照求最后一位BBB的方式去求其他位。
總結(jié)
以上是生活随笔為你收集整理的现代密码学3.7--CCA安全的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 初等数论--整除--两数乘积保持整除性
- 下一篇: 现代密码学5.1--哈希函数定义