Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SECCON Beginners Live 2023-Crypto
Search
motimotipurinn
September 03, 2023
Programming
1
1.4k
SECCON Beginners Live 2023-Crypto
SECCON Beginners Live 2023-Cryptoで使用したスライドです
motimotipurinn
September 03, 2023
Tweet
Share
Other Decks in Programming
See All in Programming
約9000個の自動テストの 時間を50分->10分に短縮 Flakyテストを1%以下に抑えた話
hatsu38
23
11k
プロジェクト新規参入者のリードタイム短縮の観点から見る、品質の高いコードとアーキテクチャを保つメリット
d_endo
1
1k
Kotlin2でdataクラスの copyメソッドを禁止する/Data class copy function to have the same visibility as constructor
eichisanden
1
130
AWS IaCの注目アップデート 2024年10月版
konokenj
3
3.1k
Synchronizationを支える技術
s_shimotori
1
150
飲食業界向けマルチプロダクトを実現させる開発体制とリアルな現状
hiroya0601
1
390
PHP でアセンブリ言語のように書く技術
memory1994
PRO
1
150
macOS でできる リアルタイム動画像処理
biacco42
6
1.7k
ECSのサービス間通信 4つの方法を比較する 〜Canary,Blue/Greenも添えて〜
tkikuc
11
2.3k
Kaigi on Rails 2024 - Rails APIモードのためのシンプルで効果的なCSRF対策 / kaigionrails-2024-csrf
corocn
5
3.3k
Importmapを使ったJavaScriptの 読み込みとブラウザアドオンの影響
swamp09
4
1.2k
リリース8年目のサービスの1800個のERBファイルをViewComponentに移行した方法とその結果
katty0324
5
3.6k
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
95
5.2k
Embracing the Ebb and Flow
colly
84
4.4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Optimizing for Happiness
mojombo
376
69k
For a Future-Friendly Web
brad_frost
175
9.4k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
Building Better People: How to give real-time feedback that sticks.
wjessup
363
19k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
43
6.6k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
92
16k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
YesSQL, Process and Tooling at Scale
rocio
167
14k
Transcript
SECCON BEGINNERS LIVE 2023-Crypto入門 2023/9/3 SECCON BEGINNERS LIVE 2023 竹内悠人(灘高校2年)
2 ⚫ 竹内悠人-もちもち Twitter:@motimoti_purinn ⚫ 所属 ◼ SECCON BIGINNERS運営 ◼
灘高校二年 ⚫ 部活: ◼ 水泳部、生物研究部、アマチュア無線研究部 ⚫ 趣味: ◼ 将棋:アマ1級 ◼ APEX:S17初マスター ⚫ その他: ◼ LAC すごうで2023採択 NLPを使った開発 ◼ SecHack365’23 トレーニー OS,コンパイラ自作 ◼ セキュリティキャンプ全国大会’21 修了生 0.自己紹介
3 ⚫ 本日話す内容: ◼ Cryptoとは何か? ◼ CTFでの出題傾向 ◼ 事前知識 ◼
用語や数学の話 ◼ RSA暗号について ◼ 暗号化、復号の話 ◼ 実装 ◼ 攻撃の紹介 ◼ 本日のコード git clone https://github.com/SECCON/2 023_beginnerslive 6.Crypto
4 ⚫CTFでの出題傾向: ◼CryptoはCryptographyの略で、暗号のことです ◼ 暗号化されたメッセージの解読を主に行います ◼配布ファイル ◼暗号化スクリプト、暗号文 ◼サーバーのスクリプト ◼ほぼpython ◼
多倍長整数をサポートしていてライブラリも充実 6.Crypto
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
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
7 ⚫RSA暗号: ◼ Rivest, Shamir, Adlemanによって作られた公開鍵暗号 ◼ 現代でもデジタル署名で使用されている ◼ 素因数分解の困難性を安全性の根拠にしている
◼ 一番有名な暗号。サマーウォーズのあれ! ◼ 数式が美しい ◼ 数式を弄ると脆弱にしやすい 6.Crypto
8 ⚫RSA暗号の暗号化と復号: ◼ 鍵の生成 ◼ 素数p,qを生成し、n=pqとする ◼ nと互いに素である数eを用意し(n,e)を公開鍵とする ◼ 𝒅
= 𝒆−𝟏 𝒎𝒐𝒅 φ(𝒏) とおき、これを秘密鍵とする ◼ 暗号化 ◼ 平文mに対し、暗号文cを𝒄 = 𝒎𝒆 𝒎𝒐𝒅 𝒏とする ◼ 復号 ◼ 平文mは𝒎 = 𝒄𝒅 𝒎𝒐𝒅 𝒏とする 6.Crypto
9 ⚫よくわからん 6.Crypto
10 ⚫事前知識: ◼ 用語 ◼ 平文、暗号文 ◼ 公開鍵と秘密鍵 ◼ 数学
◼ 最大公約数 ◼ モジュロ演算 ◼ 逆元 ◼ 拡張ユークリッドの互除法 ◼ オイラーのトーシェント(φ)関数 ◼ オイラーの定理 6.Crypto
11 ⚫用語 ◼ 平文 ◼ 暗号化する前のデータ のこと ◼ 人間が簡単によめる ◼
暗号文 ◼ 鍵を持った人しか読め ないデータのこと 6.Crypto 暗号化 復号
12 ⚫公開鍵と秘密鍵 ◼ 公開鍵 ◼ 全世界に公開する ◼ 公開鍵暗号方式で暗号 化に使用 ◼
秘密鍵 ◼ 自分以外には絶対に渡 してはいけない ◼ 公開鍵暗号方式にて復 号に使用 6.Crypto 暗号化 復号
13 ⚫おまけ: 秘密鍵暗号方式 ◼ 暗号化も復号も両方秘密 鍵でやる ◼ 今日やっていくRSA暗 号は公開鍵暗号方式 6.Crypto
暗号化 復号
14 ⚫数学:最大公約数 ◼ ある整数の組a,bに対してそれぞれを割り切る最も大きい整数 を最大公約数と呼びGCD(a,b)と表記する GCD:Greatest Common Divisor ◼ 例
◼ 𝑮𝑪𝑫 𝟏𝟒, 𝟐𝟏 = 𝟕 ◼ 𝑮𝑪𝑫 𝟑, 𝟏𝟏 = 𝟏 ◼ ユークリッドの互除法によって簡単に計算できる ◼ GCDが1であることを互いに素と呼ぶ 6.Crypto
15 ⚫モジュロ演算 ◼ 整数a,nに対して aをnで余りをとる演算をモジュロ演算と呼ぶ ◼ aをnで割った余りは𝒂 𝒎𝒐𝒅 𝒏と表記する ◼
例 ◼ 𝟏𝟐 𝒎𝒐𝒅 𝟒 = 𝟎 ◼ 𝟓𝟎 𝒎𝒐𝒅 𝟏𝟏 = 𝟔 ◼ Pythonだと𝒂%𝒏 6.Crypto
16 ⚫合同式 ◼ 整数a,bと正整数nに対しaとbがnで割った余りが等しい場合 aとbはnを法として合同といい、𝒂 ≡ 𝒃 𝒎𝒐𝒅 𝒏と表記する ◼
ほとんどの公開鍵暗号では合同式を使用 ◼ 例 ◼ 𝟏𝟐 ≡ 𝟎 𝒎𝒐𝒅 𝟒 ◼ 𝟓𝟎 ≡ 𝟔 𝒎𝒐𝒅 𝟏𝟏 6.Crypto
17 ⚫逆元 ◼ 整数aと法nに対し𝒂・𝒂−𝟏 ≡ 𝟏 𝒎𝒐𝒅 𝒏を満たす𝒂−𝟏をaの逆元と 呼ぶ ◼
例 ◼ 𝟓・𝐚−𝟏 ≡ 𝟏 𝒎𝒐𝒅 𝟕 の時𝒂−𝟏 = 𝟑 なぜなら𝟓・𝟑 = 𝟏𝟓 = 𝟕・𝟐 + 𝟏 ◼ 逆元の計算方法 ◼ 拡張ユークリッドの互除法 ◼ オイラーの定理 6.Crypto
18 ⚫拡張ユークリッドの互除法 ◼ 1次不定方程式𝒂𝒙 + 𝒃𝒚 = 𝒄を求めるアルゴリズム ◼ 例
◼ 𝟑𝟕𝒙 + 𝟏𝟎𝒚 = 𝟏となるx,yを求めたい 𝟑𝟕 = 𝟏𝟎・𝟑 + 𝟕 𝟏𝟎 = 𝟕・𝟏 + 𝟑 𝟕 = 𝟑・𝟐 + 𝟏 𝟑 = 𝟏・𝟑 6.Crypto
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
20 ⚫オイラーのトーシェント(φ)関数 ◼ 正整数nに対しn以下の正整数のうち、nと互いに素である個 数をφ(n)とおく ◼ 例 ◼ p,qを異なる素数とし、𝒏 =
𝒑𝒒である時 φ 𝒏 = 𝐩 − 𝟏 𝐪 − 𝟏 ◼ n=15の時 φ 𝒏 = 𝟑 − 𝟏 𝟓 − 𝟏 = 𝟖 実際に1,2,4,7,8,11,13,14の8個ある 6.Crypto
21 ⚫オイラーの定理 nが正整数で𝑮𝑪𝑫 𝒂, 𝒏 = 𝟏 の時、𝒂φ(𝐧) ≡ 𝟏
𝒎𝒐𝒅 𝒏 が成り立ち、これをオイラーの定理という ◼ 例 ◼a=7、𝒏 = 𝟏𝟓である時 𝟕φ(𝟏𝟓) ≡ 𝟕𝟖 ≡ 𝟏 𝒎𝒐𝒅 𝟏𝟓 ◼pythonだとpow(7,8,15)で計算できる ◼有名なフェルマーの小定理を 一般化したのがオイラーの定理 𝒂𝒑−𝟏 ≡ 𝟏 𝒎𝒐𝒅 𝒑 6.Crypto
22 ⚫RSA暗号の暗号化と復号(再) ◼ 鍵の生成 ◼ 素数p,qを生成し、n=pqとする ◼ Nと互いに素である数eを用意し(n,e)を公開鍵とする ◼ 𝒅
= 𝒆−𝟏 𝒎𝒐𝒅 φ(𝒏) とおき、これを秘密鍵とする ◼ 暗号化 ◼ 平文mに対し、暗号文cを𝒄 = 𝒎𝒆 𝒎𝒐𝒅 𝒏とする ◼ 復号 ◼ 平文mは𝒎 = 𝒄𝒅 𝒎𝒐𝒅 𝒏とする 6.Crypto
23 ⚫RSA暗号(演習) ◼ 鍵の生成 ◼ p=5,q=11,e=3としてみてください ◼ 平文mを32としてみましょう ◼ 暗号化
◼ 𝒄 = 𝒑𝒐𝒘(𝒎, 𝒆, 𝒑 ∗ 𝒒) ◼ 復号 ◼ 𝒆𝒅 = 𝟏 𝒎𝒐𝒅 (𝒑 − 𝟏)(𝒒 − 𝟏)よりd=27 ◼ 𝒎′ = 𝒑𝒐𝒘(𝒄, 𝒅, 𝒑 ∗ 𝒒) 6.Crypto
24 ⚫RSA暗号(演習) 6.Crypto
25 ⚫RSA暗号の完全性の証明 ◼ 仮定より𝒎’ = 𝒄𝒅 = 𝒎𝒆𝒅 𝒎𝒐𝒅 𝒏
◼ 𝒆𝒅 = 𝟏 𝒎𝒐𝒅 φ(𝒏)より𝒆𝒅 = 𝟏 + 𝒌φ(n) ◼先ほどの式に代入して 𝒎’ = 𝒎𝒌φ(𝒏)+𝟏 = 𝒎𝟏・(𝒎𝝋 𝒏 )𝒌 ◼ ここでオイラーの定理より 𝒎φ 𝒏 = 𝟏 𝒎𝒐𝒅 𝒏であることを思い出すと 𝒎’ ≡ 𝒎𝟏・ 𝟏 𝒌 = 𝒎 となり元の平文mに戻ってくることがわかる 6.Crypto
26 ⚫RSA暗号の安全性の根拠 ◼ 公開鍵nの素因数分解の困難性を安全性の根拠としている ◼ これが素因数分解できると何がまずいのか? ◼ 𝒏 = 𝒑𝒒であることを思い出すとこれが素因数分解できた時
p,qの値が取得できる。eは公開鍵なので (𝒆, −𝟏, (𝒑 − 𝟏)(𝒒 − 𝟏))をすることで秘密鍵dが取得できてしま う ◼ 秘密鍵が入手されると𝒑𝒐𝒘(𝒄, 𝒅, 𝒏)で暗号文を復号できる 6.Crypto
27 ⚫ RSAの攻撃その1: Low Public-Exponent Attack ◼ 公開鍵eが十分に小さいときに秘密鍵dを取得することなく暗 号文が取得できてしまう ◼
RSA暗号の定義より𝐜 = 𝒎𝒆 𝒎𝒐𝒅 𝒏より𝒎𝒆 < 𝒏であるとき、 暗号文はnの影響を受けることなく𝒎 = 𝒆 𝒄とすることで平文 mを復元できる 6.Crypto
28 ⚫ RSAの攻撃その1: Low Public-Exponent Attack ◼ cのe乗根を取得する際にgmpy2というツールを使用する 6.Crypto
29 ⚫ RSAの攻撃その1: Low Public-Exponent Attack ◼ gmpy2.irootを使用します この関数はaにはcのe乗根が整数で返されて、bにはcのe乗根 が整数であったかがbool型で返されます
6.Crypto
30 ⚫ RSAの攻撃その1: Low Public-Exponent Attack ◼ 実装 6.Crypto
31 ⚫ RSAの攻撃その2: Common Modulus Attack ◼ RSA公開鍵 𝒏, 𝒆𝟏
, {𝒏, 𝒆𝟐 }と暗号文{𝒄𝟏 , 𝒄𝟐 }が与えられ、 𝑮𝑪𝑫 𝒆𝟏 , 𝒆𝟐 = 𝟏である時平文mが復元できる ◼ 𝑮𝑪𝑫 𝒆𝟏 , 𝒆𝟐 = 𝟏であることより、𝒆𝟏 𝒔𝟏 + 𝒆𝟐 𝒔𝟐 = 𝟏を満たす整 数𝒔𝟏 , 𝒔𝟐 が存在する。ここで拡張ユークリッドの互除法で 𝒔𝟏 , 𝒔𝟐 が入手できれば 𝒄𝟏 𝒔𝟏𝒄 𝟐 𝒔𝟐 = 𝒎𝒆𝟏𝒔𝟏𝒎𝒆𝟐𝒔𝟐 = 𝒎𝒆𝟏𝒔𝟏+𝒆𝟐𝒔𝟐 = 𝒎𝟏 となる 6.Crypto
32 ⚫ RSAの攻撃その2: Common Modulus Attack ◼ 実装 6.Crypto
33 ⚫ RSAの攻撃その2: Common Modulus Attack ◼ 実装 6.Crypto
34 ⚫ RSAの攻撃その3: Håstad's broadcast attack ◼ 同じ平文m,e、異なるnによって作られた暗号文cがe個あると きmを復元することができる。 ◼
中国剰余定理を用います 6.Crypto
35 ⚫ RSAの攻撃その3: Håstad's broadcast attack ◼ 同じ平文m,e、異なるnによって作られた暗号文cがe個あると きmを復元することができる。 ◼
中国剰余定理を用います 6.Crypto
36 ⚫ RSAの攻撃その3: Håstad's broadcast attack 6.Crypto
37 ⚫ RSAのctf4b過去問その1: [Beginner] simple_RSA ( 289solves ) ◼ 𝒑,
𝒒 ∈ 𝒈𝒆𝒕𝑷𝒓𝒊𝒎𝒆 𝟏𝟎𝟐𝟒 , 𝒆 = 𝟑, 𝒏 = 𝒑𝒒 で定義されるn,e,cが与えられる。平文mを求めよ ◼ 1分ほど時間をとります。方針を考えてみてください 6.Crypto
38 ⚫ RSAのctf4b過去問その1: [Beginner] simple_RSA ( 289solves ) ◼ 答え
eが3でとても小さいため Low Public-Exponent Attackが適応出来る 実装はさっきの通り 6.Crypto
39 ⚫ RSAのctf4b過去問その2: [Easy] PrimeParty (58solves ) ◼ 自分で最大3つまで素数を選び、ランダムな4つの256bit 素数との積をとってnが作られる
flag(m)は455bit 問題サーバーに素数を送信すると、こうして作られnを用 いてn,e=65537,cを返す。平文mを求めよ ◼1分ほど時間をとります。方針を考えてみてください 6.Crypto
40 ⚫ RSAのctf4b過去問その2: [Easy] PrimeParty (58solves ) ◼ 答え 平文mよりも十分大きな素数pを入力してあげることで
𝒄 = 𝒎𝒆 𝒎𝒐𝒅 𝒏を解く問題から𝒄 = 𝒎𝒆 𝒎𝒐𝒅 𝒑を考える問 題に書き換えれる。 すると𝒆𝒅 = 𝟏 𝒎𝒐𝒅 φ(𝒑)、つまり𝒆𝒅 = 𝟏 𝒎𝒐𝒅 𝒑 − 𝟏とな り、秘密鍵dを取得できる。あとは復号してやればいい 6.Crypto
41 ⚫ RSAのctf4b過去問その3: [midium] Choice(31solves) ◼ n(=pqr),e,c,pq+qr+rpが与えられる。 またn<kを満たす好きなkに対して𝒑𝒌 + 𝒒𝒌
+ 𝒓𝒌を何度で も問題サーバーから取得できる。平文mを求めよ ◼ 数分時間をとります。方針を考えてみてください ネタバレ要素が強いので、ネタバレが嫌な人は休憩して いてください 6.Crypto
42 ⚫ RSAのctf4b過去問その3: [midium] Choice(31solves) ◼ 答え RSA問題の一つのゴールはφ(n)を求めることである。 φ 𝒏
= 𝒑 − 𝟏 𝒒 − 𝟏 𝒓 − 𝟏 = 𝒑𝒒𝒓 − 𝒑𝒒 + 𝒒𝒓 + 𝒓𝒑 + 𝒑 + 𝒒 + 𝒓 − 𝟏 = 𝐧 − 𝒑𝒒 + 𝒒𝒓 + 𝒓𝒑 + 𝒑 + 𝒒 + 𝒓 − 𝟏 よってp+q+rを求めてあげたい 6.Crypto
43 ⚫ RSAのctf4b過去問その3: [midium] Choice(31solves) ◼ 答え 何度でも𝒑𝒌 + 𝒒𝒌
+ 𝒓𝒌が入手できることと、先ほどの式を 合わせると、対象式が思い浮かんでくる人もいると思い ます。次数をうまく合わせてやると、、 6.Crypto
44 ⚫ RSAのctf4b過去問その3: [midium] Choice(31solves) ◼ 答え 連続する4整数でこの値をとってあげ、 これらを𝑨𝟏 ,
𝑨𝟐 , 𝑨𝟑 , 𝑨𝟒 とすると以下の式が成立します 𝑨𝟏 = 𝒑 + 𝒒 + 𝒓 𝑨𝟐 − 𝒑𝒒 + 𝒒𝒓 + 𝒓𝒑 𝑨𝟑 + 𝒑𝒒𝒓𝑨𝟒 つまり 𝒑 + 𝒒 + 𝒓 = 𝑨𝟏 𝒑𝒒 + 𝒒𝒓 + 𝒓𝒑 𝑨𝟑 − 𝒑𝒒𝒓𝑨𝟒 𝑨𝟐 となる。よってφ(n)が出たのでdが求められ復号できた 6.Crypto