日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

现代密码学3.7--CCA安全

發布時間:2025/3/21 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 现代密码学3.7--CCA安全 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

現代密碼學3.7--CCA安全

  • CCA安全
    • 含oracle的實驗過程PrivKA,Πcca(n)PrivK^{cca}_{\mathcal{A},\Pi}(n)PrivKA,Πcca?(n)
    • CCA安全定義
  • 對不滿足CCA安全的密碼方案的攻擊
    • 簡單例子:對基于PRF構造的密碼方案的攻擊
    • 復雜例子:對CBC的攻擊,padding-oracle
      • 求出bbb
      • 求出mmm的每一位

博主正在學習INTRODUCTION TO MODERN CRYPTOGRAPHY (Second Edition) --Jonathan Katz, Yehuda Lindell,做一些筆記供自己回憶,如有錯誤請指正。整理成一個系列現代密碼學,方便檢索。

  • 第二章定義了完美安全及其對應的密碼方案“一次一密”,
  • 第三章3.1、3.2定義了計算安全,3.3介紹了PRG和基于PRG構造的滿足計算安全的密碼方案;
  • 3.4節定義了CPA安全,3.5節介紹了PRF和基于PRF構造的滿足CPA安全的密碼方案,3.6節介紹了PRG和PRF構造的流密碼和分組密碼;
  • 3.7節
    • 將介紹一種新的安全性:CCA安全,這種安全性是之前我們構造的密碼方案都不滿足的,non-malleability/不可延展性是滿足CCA安全的必要條件;
    • 并以CBC分組密碼為例,表示對于這種不滿足CCA安全的密碼方案,可以進行怎樣的攻擊。

CCA安全

跟CPA安全很類似,除了encryption oracle外,多了decryption oracle,只有一個要求:不能問oracle跟挑戰密文一樣的密文

含oracle的實驗過程PrivKA,Πcca(n)PrivK^{cca}_{\mathcal{A},\Pi}(n)PrivKA,Πcca?(n)

  • 敵手A\mathcal{A}A已知安全參數1n1^n1n,有一個連接Enck(?)Enc_k(\cdot)Enck?(?)的oracle和連接Deck(?)Dec_k(\cdot)Deck?(?)的oracle,輸出等長明文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)cEnck?(mb?)給敵手A\mathcal{A}Accc是挑戰密文;
  • 敵手A\mathcal{A}A在獲得ccc后,仍有一個連接Enck(?)Enc_k(\cdot)Enck?(?)的oracle和連接Deck(?)Dec_k(\cdot)Deck?(?)的oracle(可以根據ccc調整,繼續查詢),輸出猜測的b′b'b
  • 如果b′=bb'=bb=b輸出1,否則輸出0。

CCA安全定義

私鑰加密方案Π=(Gen,Enc,Dec)\Pi=(Gen,Enc,Dec)Π=(Gen,Enc,Dec)如果對于任意PPT敵手A\mathcal{A}A,都有一個可忽略函數negl滿足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),則稱該方案Π\PiΠ在選擇明文攻擊下有不可區分的加密,是滿足CCA安全的。

安全性:多次加密的CCA安全=單次加密的CCA安全

對不滿足CCA安全的密碼方案的攻擊

簡單例子:對基于PRF構造的密碼方案的攻擊

  • 根據3.5節構造基于PRF的密碼方案Π\PiΠ:m0=0n:m_0=0^nm0?=0nm1=1nm_1=1^nm1?=1nEnck(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的第一個比特sss,記作c′c'c
  • 因為c≠c′c\neq c'c?=c,所以可以問decryption oracle;得到10n?110^{n-1}10n?1或者01n?101^{n-1}01n?1,那么就可以判斷是m0m_0m0?還是m1m_1m1?,這不滿足CCA安全。

所以,滿足CCA安全的密碼方案的必要條件是不可延展性:如果敵手修改一個給定密文,結果是一個無效密文或者解密得到一個與原始明文完全無關的明文

復雜例子:對CBC的攻擊,padding-oracle

  • LLL:塊長度
  • bbb:需要被填充的字節數,b≠0b\neq 0b?=0,如果已經是不需要填充,則填充LLL個字節,有1≤b≤L1\le b\le L1bL
  • 填充規則:如果需要填充1個字節,則填010101;如果需要填充4個字節,則填040404040404040404040404;如果需要填充bbb個字節,則填bbb0b0b0b
  • 加密:對明文mmm填充至LLL的倍數,對填充后的信息進行CBC加密
  • 解密:按CBC解密,得到填充后的信息,找到最后一個字節0b0b0b
    • 如果后bbb個都是0b0b0b,刪去這bbb0b0b0b,得到原始明文;
    • 如果后bbb個不都是0b0b0b,則不符合填充規則,返回"bad padding" error。
    • 根據這兩種不同的返回,我們可以求出bbb,進而求出明文信息的每一位。這種decryption oracle被稱為padding-oracle,對于不滿足CCA安全的CBC分組加密模式可以進行攻擊。

以3-block為例:IV,c1,c2IV,c_1,c_2IV,c1?,c2?,每個block長度為LLL,解密m2=Fk?1(c2)⊕c1m_2=F_k^{-1}(c_2)\oplus c_1m2?=Fk?1?(c2?)c1?c1c_1c1?改變則m2m_2m2?會相應改變

求出bbb

  • 本來解密是正確的,改變c1c_1c1?的第一個字節,如果解密m2m_2m2?返回"bad padding"error,則說明c1c_1c1?(LLL長)的第一個字節就屬于padding位(那么后面都屬于padding位),而padding位1≤b≤L1\le b\le L1bL最多只有LLL位,那么b=Lb=Lb=L
  • 同理,如果改變第一個字節解密還是正確的,改變第二個字節返回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?=(000i0(b+1)0(b+1)(00000b0b)0≤i≤28?10\le i\le 2^8-10i28?1
  • m2m_2m2?的最后一位是B0b…0bB0b…0bB0b0b
  • 現在修改c1c_1c1?為“c1⊕△ic_1\oplus \triangle_ic1?i?”,則m2m_2m2?最后一位相應改變為B⊕i∣∣(b⊕(b+1)…b⊕(b+1)B\oplus i||(b\oplus (b+1)…b\oplus (b+1)Bi(b(b+1)b(b+1)
  • 除非B⊕△i=b⊕(b+1)B\oplus \triangle_i=b\oplus (b+1)Bi?=b(b+1),解密m2m_2m2?會返回"bad padding" error;
  • 我們只需要遍歷iii,找到某個iii使得解密m2m_2m2?不返回"bad padding " error,此時B=△i⊕b⊕(b+1)B=\triangle_i \oplus b\oplus (b+1)B=i?b(b+1)
  • 按照求最后一位BBB的方式去求其他位。

總結

以上是生活随笔為你收集整理的现代密码学3.7--CCA安全的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。