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
Exploring: Partial and Independent Composables
blackbracken
0
100
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
170
なまけものオバケたち -PHP 8.4 に入った新機能の紹介-
tanakahisateru
1
130
Security_for_introducing_eBPF
kentatada
0
110
Fibonacci Function Gallery - Part 1
philipschwarz
PRO
0
220
MCP with Cloudflare Workers
yusukebe
2
220
StarlingMonkeyを触ってみた話 - 2024冬
syumai
3
280
20年もののレガシープロダクトに 0からPHPStanを入れるまで / phpcon2024
hirobe1999
0
690
見えないメモリを観測する: PHP 8.4 `pg_result_memory_size()` とSQL結果のメモリ管理
kentaroutakeda
0
590
103 Early Hints
sugi_0000
1
250
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
2
330
rails stats で紐解く ANDPAD のイマを支える技術たち
andpad
1
300
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
521
39k
Visualization
eitanlees
146
15k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
How to Think Like a Performance Engineer
csswizardry
22
1.2k
How to train your dragon (web standard)
notwaldorf
88
5.7k
Adopting Sorbet at Scale
ufuk
73
9.1k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Thoughts on Productivity
jonyablonski
68
4.4k
VelocityConf: Rendering Performance Case Studies
addyosmani
326
24k
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
Building an army of robots
kneath
302
44k
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