Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SECCON Beginners Live 2023-Crypto

motimotipurinn
September 03, 2023

SECCON Beginners Live 2023-Crypto

SECCON Beginners Live 2023-Cryptoで使用したスライドです

motimotipurinn

September 03, 2023
Tweet

Other Decks in Programming

Transcript

  1. 2 ⚫ 竹内悠人-もちもち Twitter:@motimoti_purinn ⚫ 所属 ◼ SECCON BIGINNERS運営 ◼

    灘高校二年 ⚫ 部活: ◼ 水泳部、生物研究部、アマチュア無線研究部 ⚫ 趣味: ◼ 将棋:アマ1級 ◼ APEX:S17初マスター ⚫ その他: ◼ LAC すごうで2023採択 NLPを使った開発 ◼ SecHack365’23 トレーニー OS,コンパイラ自作 ◼ セキュリティキャンプ全国大会’21 修了生 0.自己紹介
  2. 3 ⚫ 本日話す内容: ◼ Cryptoとは何か? ◼ CTFでの出題傾向 ◼ 事前知識 ◼

    用語や数学の話 ◼ RSA暗号について ◼ 暗号化、復号の話 ◼ 実装 ◼ 攻撃の紹介 ◼ 本日のコード git clone https://github.com/SECCON/2 023_beginnerslive 6.Crypto
  3. 5 ⚫CTFでの出題傾 向: ◼文字コード変換 ◼ 2018: Veni, vidi, vici ◼

    2020: R&B ◼AES ◼ 2020: Encrypter ◼ 2021: Imaginary ◼ 2022: command ◼ElGamal ◼ 2018: Well Known 6.Crypto ◼ 乱数 ◼ 2022: unpredictable_pad ◼ 2023: switchable_cat ◼ 格子 ◼ 2021: Field_trip ◼ その他 ◼ 2019: Party ◼ 2020: Noisy equations ◼ 2021: Logical_SEESAW,GFM ◼ 2022: CoughingFox ◼ 2023: CoughingFox2 ◼ 2023:cooking ◼ 2023:Conquer
  4. 6 ⚫CTFでの出題傾向: ◼RSA ◼ 2018: 2018: RSA is Power ◼

    2019: Go RSA ◼ 2020: RSA Calc ◼ 2021: simple_RSA ◼ 2021: p-8RSA ◼ 2022: PrimeParty ◼ 2022: omni-RSA ◼ 2023: Choice 6.Crypto
  5. 8 ⚫RSA暗号の暗号化と復号: ◼ 鍵の生成 ◼ 素数p,qを生成し、n=pqとする ◼ nと互いに素である数eを用意し(n,e)を公開鍵とする ◼ 𝒅

    = 𝒆−𝟏 𝒎𝒐𝒅 φ(𝒏) とおき、これを秘密鍵とする ◼ 暗号化 ◼ 平文mに対し、暗号文cを𝒄 = 𝒎𝒆 𝒎𝒐𝒅 𝒏とする ◼ 復号 ◼ 平文mは𝒎 = 𝒄𝒅 𝒎𝒐𝒅 𝒏とする 6.Crypto
  6. 10 ⚫事前知識: ◼ 用語 ◼ 平文、暗号文 ◼ 公開鍵と秘密鍵 ◼ 数学

    ◼ 最大公約数 ◼ モジュロ演算 ◼ 逆元 ◼ 拡張ユークリッドの互除法 ◼ オイラーのトーシェント(φ)関数 ◼ オイラーの定理 6.Crypto
  7. 11 ⚫用語 ◼ 平文 ◼ 暗号化する前のデータ のこと ◼ 人間が簡単によめる ◼

    暗号文 ◼ 鍵を持った人しか読め ないデータのこと 6.Crypto 暗号化 復号
  8. 12 ⚫公開鍵と秘密鍵 ◼ 公開鍵 ◼ 全世界に公開する ◼ 公開鍵暗号方式で暗号 化に使用 ◼

    秘密鍵 ◼ 自分以外には絶対に渡 してはいけない ◼ 公開鍵暗号方式にて復 号に使用 6.Crypto 暗号化 復号
  9. 14 ⚫数学:最大公約数 ◼ ある整数の組a,bに対してそれぞれを割り切る最も大きい整数 を最大公約数と呼びGCD(a,b)と表記する GCD:Greatest Common Divisor ◼ 例

    ◼ 𝑮𝑪𝑫 𝟏𝟒, 𝟐𝟏 = 𝟕 ◼ 𝑮𝑪𝑫 𝟑, 𝟏𝟏 = 𝟏 ◼ ユークリッドの互除法によって簡単に計算できる ◼ GCDが1であることを互いに素と呼ぶ 6.Crypto
  10. 16 ⚫合同式 ◼ 整数a,bと正整数nに対しaとbがnで割った余りが等しい場合 aとbはnを法として合同といい、𝒂 ≡ 𝒃 𝒎𝒐𝒅 𝒏と表記する ◼

    ほとんどの公開鍵暗号では合同式を使用 ◼ 例 ◼ 𝟏𝟐 ≡ 𝟎 𝒎𝒐𝒅 𝟒 ◼ 𝟓𝟎 ≡ 𝟔 𝒎𝒐𝒅 𝟏𝟏 6.Crypto
  11. 17 ⚫逆元 ◼ 整数aと法nに対し𝒂・𝒂−𝟏 ≡ 𝟏 𝒎𝒐𝒅 𝒏を満たす𝒂−𝟏をaの逆元と 呼ぶ ◼

    例 ◼ 𝟓・𝐚−𝟏 ≡ 𝟏 𝒎𝒐𝒅 𝟕 の時𝒂−𝟏 = 𝟑 なぜなら𝟓・𝟑 = 𝟏𝟓 = 𝟕・𝟐 + 𝟏 ◼ 逆元の計算方法 ◼ 拡張ユークリッドの互除法 ◼ オイラーの定理 6.Crypto
  12. 18 ⚫拡張ユークリッドの互除法 ◼ 1次不定方程式𝒂𝒙 + 𝒃𝒚 = 𝒄を求めるアルゴリズム ◼ 例

    ◼ 𝟑𝟕𝒙 + 𝟏𝟎𝒚 = 𝟏となるx,yを求めたい 𝟑𝟕 = 𝟏𝟎・𝟑 + 𝟕 𝟏𝟎 = 𝟕・𝟏 + 𝟑 𝟕 = 𝟑・𝟐 + 𝟏 𝟑 = 𝟏・𝟑 6.Crypto
  13. 19 ⚫拡張ユークリッドの互除法 ◼ 1次不定方程式𝒂𝒙 + 𝒃𝒚 = 𝒄を求めるアルゴリズム ◼ さっきの互除法を再構築していく

    ◼ 𝟑𝟕𝒙 + 𝟏𝟎𝒚 = 𝟏となるx,yを求めたい 1=7−3×2 =7−(10−7)×2 =3×7−2×10 =3×(37−10×3)−2×10 =3×37−9×10 よってx=37,y=-10 𝒄 = 𝑪𝑮𝑫(𝒂, 𝒃)・𝐝である時、𝒂𝒙 + 𝒃𝒚 = 𝑮𝑪𝑫(𝒂, 𝒃)を求めた後x,yを それぞれd倍してあげればよい 6.Crypto
  14. 20 ⚫オイラーのトーシェント(φ)関数 ◼ 正整数nに対しn以下の正整数のうち、nと互いに素である個 数をφ(n)とおく ◼ 例 ◼ p,qを異なる素数とし、𝒏 =

    𝒑𝒒である時 φ 𝒏 = 𝐩 − 𝟏 𝐪 − 𝟏 ◼ n=15の時 φ 𝒏 = 𝟑 − 𝟏 𝟓 − 𝟏 = 𝟖 実際に1,2,4,7,8,11,13,14の8個ある 6.Crypto
  15. 21 ⚫オイラーの定理 nが正整数で𝑮𝑪𝑫 𝒂, 𝒏 = 𝟏 の時、𝒂φ(𝐧) ≡ 𝟏

    𝒎𝒐𝒅 𝒏 が成り立ち、これをオイラーの定理という ◼ 例 ◼a=7、𝒏 = 𝟏𝟓である時 𝟕φ(𝟏𝟓) ≡ 𝟕𝟖 ≡ 𝟏 𝒎𝒐𝒅 𝟏𝟓 ◼pythonだとpow(7,8,15)で計算できる ◼有名なフェルマーの小定理を 一般化したのがオイラーの定理 𝒂𝒑−𝟏 ≡ 𝟏 𝒎𝒐𝒅 𝒑 6.Crypto
  16. 22 ⚫RSA暗号の暗号化と復号(再) ◼ 鍵の生成 ◼ 素数p,qを生成し、n=pqとする ◼ Nと互いに素である数eを用意し(n,e)を公開鍵とする ◼ 𝒅

    = 𝒆−𝟏 𝒎𝒐𝒅 φ(𝒏) とおき、これを秘密鍵とする ◼ 暗号化 ◼ 平文mに対し、暗号文cを𝒄 = 𝒎𝒆 𝒎𝒐𝒅 𝒏とする ◼ 復号 ◼ 平文mは𝒎 = 𝒄𝒅 𝒎𝒐𝒅 𝒏とする 6.Crypto
  17. 23 ⚫RSA暗号(演習) ◼ 鍵の生成 ◼ p=5,q=11,e=3としてみてください ◼ 平文mを32としてみましょう ◼ 暗号化

    ◼ 𝒄 = 𝒑𝒐𝒘(𝒎, 𝒆, 𝒑 ∗ 𝒒) ◼ 復号 ◼ 𝒆𝒅 = 𝟏 𝒎𝒐𝒅 (𝒑 − 𝟏)(𝒒 − 𝟏)よりd=27 ◼ 𝒎′ = 𝒑𝒐𝒘(𝒄, 𝒅, 𝒑 ∗ 𝒒) 6.Crypto
  18. 25 ⚫RSA暗号の完全性の証明 ◼ 仮定より𝒎’ = 𝒄𝒅 = 𝒎𝒆𝒅 𝒎𝒐𝒅 𝒏

    ◼ 𝒆𝒅 = 𝟏 𝒎𝒐𝒅 φ(𝒏)より𝒆𝒅 = 𝟏 + 𝒌φ(n) ◼先ほどの式に代入して 𝒎’ = 𝒎𝒌φ(𝒏)+𝟏 = 𝒎𝟏・(𝒎𝝋 𝒏 )𝒌 ◼ ここでオイラーの定理より 𝒎φ 𝒏 = 𝟏 𝒎𝒐𝒅 𝒏であることを思い出すと 𝒎’ ≡ 𝒎𝟏・ 𝟏 𝒌 = 𝒎 となり元の平文mに戻ってくることがわかる 6.Crypto
  19. 26 ⚫RSA暗号の安全性の根拠 ◼ 公開鍵nの素因数分解の困難性を安全性の根拠としている ◼ これが素因数分解できると何がまずいのか? ◼ 𝒏 = 𝒑𝒒であることを思い出すとこれが素因数分解できた時

    p,qの値が取得できる。eは公開鍵なので (𝒆, −𝟏, (𝒑 − 𝟏)(𝒒 − 𝟏))をすることで秘密鍵dが取得できてしま う ◼ 秘密鍵が入手されると𝒑𝒐𝒘(𝒄, 𝒅, 𝒏)で暗号文を復号できる 6.Crypto
  20. 27 ⚫ RSAの攻撃その1: Low Public-Exponent Attack ◼ 公開鍵eが十分に小さいときに秘密鍵dを取得することなく暗 号文が取得できてしまう ◼

    RSA暗号の定義より𝐜 = 𝒎𝒆 𝒎𝒐𝒅 𝒏より𝒎𝒆 < 𝒏であるとき、 暗号文はnの影響を受けることなく𝒎 = 𝒆 𝒄とすることで平文 mを復元できる 6.Crypto
  21. 31 ⚫ RSAの攻撃その2: Common Modulus Attack ◼ RSA公開鍵 𝒏, 𝒆𝟏

    , {𝒏, 𝒆𝟐 }と暗号文{𝒄𝟏 , 𝒄𝟐 }が与えられ、 𝑮𝑪𝑫 𝒆𝟏 , 𝒆𝟐 = 𝟏である時平文mが復元できる ◼ 𝑮𝑪𝑫 𝒆𝟏 , 𝒆𝟐 = 𝟏であることより、𝒆𝟏 𝒔𝟏 + 𝒆𝟐 𝒔𝟐 = 𝟏を満たす整 数𝒔𝟏 , 𝒔𝟐 が存在する。ここで拡張ユークリッドの互除法で 𝒔𝟏 , 𝒔𝟐 が入手できれば 𝒄𝟏 𝒔𝟏𝒄 𝟐 𝒔𝟐 = 𝒎𝒆𝟏𝒔𝟏𝒎𝒆𝟐𝒔𝟐 = 𝒎𝒆𝟏𝒔𝟏+𝒆𝟐𝒔𝟐 = 𝒎𝟏 となる 6.Crypto
  22. 37 ⚫ RSAのctf4b過去問その1: [Beginner] simple_RSA ( 289solves ) ◼ 𝒑,

    𝒒 ∈ 𝒈𝒆𝒕𝑷𝒓𝒊𝒎𝒆 𝟏𝟎𝟐𝟒 , 𝒆 = 𝟑, 𝒏 = 𝒑𝒒 で定義されるn,e,cが与えられる。平文mを求めよ ◼ 1分ほど時間をとります。方針を考えてみてください 6.Crypto
  23. 38 ⚫ RSAのctf4b過去問その1: [Beginner] simple_RSA ( 289solves ) ◼ 答え

    eが3でとても小さいため Low Public-Exponent Attackが適応出来る 実装はさっきの通り 6.Crypto
  24. 39 ⚫ RSAのctf4b過去問その2: [Easy] PrimeParty (58solves ) ◼ 自分で最大3つまで素数を選び、ランダムな4つの256bit 素数との積をとってnが作られる

    flag(m)は455bit 問題サーバーに素数を送信すると、こうして作られnを用 いてn,e=65537,cを返す。平文mを求めよ ◼1分ほど時間をとります。方針を考えてみてください 6.Crypto
  25. 40 ⚫ RSAのctf4b過去問その2: [Easy] PrimeParty (58solves ) ◼ 答え 平文mよりも十分大きな素数pを入力してあげることで

    𝒄 = 𝒎𝒆 𝒎𝒐𝒅 𝒏を解く問題から𝒄 = 𝒎𝒆 𝒎𝒐𝒅 𝒑を考える問 題に書き換えれる。 すると𝒆𝒅 = 𝟏 𝒎𝒐𝒅 φ(𝒑)、つまり𝒆𝒅 = 𝟏 𝒎𝒐𝒅 𝒑 − 𝟏とな り、秘密鍵dを取得できる。あとは復号してやればいい 6.Crypto
  26. 41 ⚫ RSAのctf4b過去問その3: [midium] Choice(31solves) ◼ n(=pqr),e,c,pq+qr+rpが与えられる。 またn<kを満たす好きなkに対して𝒑𝒌 + 𝒒𝒌

    + 𝒓𝒌を何度で も問題サーバーから取得できる。平文mを求めよ ◼ 数分時間をとります。方針を考えてみてください ネタバレ要素が強いので、ネタバレが嫌な人は休憩して いてください 6.Crypto
  27. 42 ⚫ RSAのctf4b過去問その3: [midium] Choice(31solves) ◼ 答え RSA問題の一つのゴールはφ(n)を求めることである。 φ 𝒏

    = 𝒑 − 𝟏 𝒒 − 𝟏 𝒓 − 𝟏 = 𝒑𝒒𝒓 − 𝒑𝒒 + 𝒒𝒓 + 𝒓𝒑 + 𝒑 + 𝒒 + 𝒓 − 𝟏 = 𝐧 − 𝒑𝒒 + 𝒒𝒓 + 𝒓𝒑 + 𝒑 + 𝒒 + 𝒓 − 𝟏 よってp+q+rを求めてあげたい 6.Crypto
  28. 43 ⚫ RSAのctf4b過去問その3: [midium] Choice(31solves) ◼ 答え 何度でも𝒑𝒌 + 𝒒𝒌

    + 𝒓𝒌が入手できることと、先ほどの式を 合わせると、対象式が思い浮かんでくる人もいると思い ます。次数をうまく合わせてやると、、 6.Crypto
  29. 44 ⚫ RSAのctf4b過去問その3: [midium] Choice(31solves) ◼ 答え 連続する4整数でこの値をとってあげ、 これらを𝑨𝟏 ,

    𝑨𝟐 , 𝑨𝟑 , 𝑨𝟒 とすると以下の式が成立します 𝑨𝟏 = 𝒑 + 𝒒 + 𝒓 𝑨𝟐 − 𝒑𝒒 + 𝒒𝒓 + 𝒓𝒑 𝑨𝟑 + 𝒑𝒒𝒓𝑨𝟒 つまり 𝒑 + 𝒒 + 𝒓 = 𝑨𝟏 𝒑𝒒 + 𝒒𝒓 + 𝒓𝒑 𝑨𝟑 − 𝒑𝒒𝒓𝑨𝟒 𝑨𝟐 となる。よってφ(n)が出たのでdが求められ復号できた 6.Crypto