SlideShare une entreprise Scribd logo
1  sur  59
Télécharger pour lire hors ligne
CTF勉強会 #4
Crypto
2016.01.23 TOKYO / 2016.02.06 OSAKA
trmr (@trmr105)
katagaitai
注意事項
 本スライドは勉強会で利用したものを元に作成しています。
 勉強会では問題サーバを利用しましたが既に停止しています。
 問題サーバのIPやホスト名が出てくる箇所がありますが、随時
読み替えをお願いいたします。
 リンク切れ等ご容赦ください。
 勉強会時点で誤っていた個所を一部修正しています。
 問題は下記URLに配置しています。
 http://pastebin.com/RfwJn2MM
 次ページに勉強会参加者有志のwriteupを載せています。
 私のwriteupよりも100倍いい出来なので、ぜひそちらも参照し
てください。
2
Writeup & Impression3
 katagaitai勉強会#4 開催後、reconで見つけたwriteupや感想です。
 http://syagi.hatenablog.com/entry/2016/01/29/225258
 linus404さん作。今頃は実装も終わってるはず。
 http://encry1024.hatenablog.com/entry/2016/02/02/154645
 encry1024さんによる感想。Rubyで回りきったのだろうか。
 http://www.slideshare.net/YOKARO-MON/csaw-ctf-2014-quals-crypto300
 you_0708さんによるwriteup。英語ですね。グローバルですね。
 http://turn-up.hatenablog.com/entry/2016/02/01/192814
 turn_upさんによる感想。加筆期待wktk。
 https://fish.minidns.net/news/58
 Kanataさんによる感想。上級編も感想書いてくれてましたね。ありがとうございます。
 http://ydfj.blogspot.jp/2016/02/katagaitai-ctf-2016-med.html
 Yudai Fujiwara さんによる感想。暇なときにコード書いたら連絡ください。
 http://furutsuki.hatenablog.com/entry/2016/02/10/053531
 Furutsukiさんによる感想。いずれ書いてください。
 他載せられてない人。私のRecon力不足です。ごめんなさい。
 もしwriteup書いたらtwitter等で連絡いただけると助かります。
Katagaitai勉強会とはなんぞや
好きなことを分かり合える人を増やしたい!
4
楽しみにしていること
Twitterの巡回 Writeup収集
#katagaitaiCTF
5
katagaitaiと愉快な仲間たち
 今回発表する人
 bata(@bata_24) リーダー
 trmr(@trmr105) センセイ
 資料レビュー
 askn(@asai_ken) エース
 運営手伝い
 yagihash(@yagihashoo) シンジン
# 実は他にもいるらしい
# 総数は誰も知らない
We are katagaitai!
6
今日の問題
 [CSAW CTF 2014] Crypto300 - FEAL
CODE
7
今日FEALをやるべき4つの理由
 共通鍵暗号だから
 公開鍵暗号の解き方がパターン化してる問題
 2014年のCTFベスト暗号問題に選ばれていたから
 Golden Flag Awards - http://golden-flags.com/
 12月の上級編がこの問題と関連していたから
 fealの後にsubmeに取り組むことをおすすめ
 中級編と上級編の順番を逆にすればよかった…
 最近の問題についていけてないから
 子育てに追われている…
 世の中の父親はすごい
8
とりあえずやってみよう
① 問題につなげてみよう
$ nc katagaitai.orz.hm 8888 (18888 or 28888)
※ホスト名がリアルだけど、気にしない
つながりますか?
つながらない人は手をあげてください
9
とりあえずやってみよう
② ファイルを落としてみよう
以下のパスにサーバで動作しているpythonコードを置いてます
https://goo.gl/9XymPK
10
Pythonコードを見てみよう。11
本番サーバは違う値が
入ってます。
※鍵の生成方法もちょっ
と変えてます。
(固定値にしてます)
最初の問題
 まずはじめに次のSHA1ハッシュを要求される
 SHA1ハッシュの末尾16ビットが”1”
 入力値が与えられた文字列で始まる
 入力長は21バイト
 腕慣らしにやってみましょう。
 終わったら問題を解き始めてください。
 Solver: https://goo.gl/WUbcgb
20分12
C実装のが速度的によい
注意事項
 CSAW CTFの問題はFEAL4.3ですが、元となった暗号FEAL
を解説します。
 ほんのちょっとだけ仕様が違います。
 スライド中に出てくる「+」はXoRです
13
暗号問題の解き方
 CTFの暗号問題は二つに分けられる
 「公表されている暗号」か「独自に作った暗号」
 公表されている暗号
 RSA, AESなど
 過去に様々な研究者が解析し脆弱性を報告
 独自に作った暗号
 暗号を独自に作るのはものすごく大変
 多くは公表されている暗号を基にして作成
14
暗号のソースコード15
コードを読んで脆弱性を
見つけるのは難しい
暗号問題の解き方手順16
いかに初動であたりをつけるかが重要
 マルウェアの解析手順 by JPCERTの中の人
 表層解析
 動的解析
 静的解析
 暗号の解析も同じ
 表層解析 → 何の暗号かあたりをつける
 動的解析 → 動かしてどのような問題か把握
 静的解析 → 問題の重要な場所だけちゃんと読む
暗号問題の解き方
 CTFの暗号問題は二つに分けられる
 「公表されている暗号」か「独自に作った暗号」
 公表されている暗号
 RSA, AESなど
 過去に様々な研究者が解析し脆弱性を報告
 独自に作った暗号
 暗号を独自に作るのはものすごく大変
 多くは公表されている暗号を基にして作成
17
まずぐぐる
まずぐぐる
暗号問題はぐぐることが大事
ぐぐってみた18
Wikipedia!!
Wikipedia19
Differencial Cryptanalysis!!
さらにぐぐってみた20
攻撃コードがあった!!!!!
解けた!!!!!21
これで勝つる!!!!!
本番ならOKですが
勉強会なので勉強します
共通鍵暗号と公開鍵暗号
 公開鍵暗号 – 暗号化と復号に異なる鍵を利用
 共通鍵暗号 – 共通の鍵を利用して暗号化/復号を実施
22
今日はこれ
共通鍵暗号のカテゴリー
 大体このようなカテゴリわけできる(はず)
 ストリーム暗号
 LFSR型:snow, K-Cipher2 etc.
 状態遷移型:RC4, trivium, chacha-20 etc.
 ブロック暗号
 Feistel構造:DES, MISTY, Camellia, FEAL etc.
 SPN構造:AES, Serpent etc.
今日はこれ
23
上級編はこっち
[参考]Feistel構造24
暗号に求められること
Key (K) Key (K)
暗号化 暗号化
 入力情報(鍵・平文)の適切な攪拌
出力の値は全く異なるのが望ましい
25
少しでも入力が違えば
差分解析
Plaintext A Plaintext A + ⊿
Key (K) Key (K)
暗号化 暗号化
diff
入力に差分
 入力情報(鍵・平文)ペアに差分を与える
 出力の差分を見ることで偏りがないか確認
出力差分に相関が出現!
26
FEAL-4のアルゴリズム
 FEAL-4
 4ラウンドFeistel構造
 ラウンド毎にf関数にて処理
27
http://www.theamazingking.com
FEAL-4のラウンド関数
 FEAL-4のラウンド関数f
 Byte(8-bit)ごとの処理
 G0,G1の2つの関数が存在
 G関数は入力a,bが「0」ならば、出力は「0」 or 「4 (1<<2)」
となる
28
http://www.theamazingking.com
FEALのラウンド関数の解析
 次の条件を満たす入力を考える
 X0=X1 and X2=X3
 XoRで打ち消しが発生し、Y1およびY2が固定値に
29
http://www.theamazingking.com
4(1<<2) 16(1<<4)G(X0+4) G(X3+16)
X0=X1 X2=X3
FEALのラウンド関数の差分
 次の条件を満たす入力の出力差分を考える
 X0=X1 and X2=X3
 入力X, X’の出力の差分ΔYは?
30
http://www.theamazingking.com
FEALのラウンド関数の差分
 次の条件を満たす入力の出力差分を考える
 X0=X1 and X2=X3
 入力X, X’の出力の差分ΔYは?
31
http://www.theamazingking.com
4 16G(X0+4) G(X3+16) 4 16G(X’0+4) G(X’3+16)
ΔY0 = G(X0+4)+G(X’0+4), ΔY1 = 0, ΔY2 = 0, ΔY3 = G(X’3+16)+G(X’3+16)
ΔYに大きな偏り
X’0=X’1 X’2=X’3X0=X1 X2=X3
FEALのラウンド関数の解析
 次のような入力ペアの出力差分を考える
 X = 0x00000000 (X0=0x00, X1=0x00, X2=0x00, X3=0x00)
 X’ = 0x80800000 (X0=0x80, X1=0x80, X2=0x00, X3=0x00)
32
http://www.theamazingking.com
G0(4)=0x10 G1(16) G1(16)G0(84)=0x12
FEALのラウンド関数の解析
 次のような入力ペアを考える
 X = 0x00000000 (X0=0x00, X1=0x00, X2=0x00, X3=0x00)
 X’ = 0x80800000 (X0=0x80, X1=0x80, X2=0x00, X3=0x00)
33
http://www.theamazingking.com
G0(4)=0x10 G1(16) G1(16)G0(84)=0x12
ΔY0 = 0x02, ΔY1 = 0, ΔY2 = 0, ΔY3 =0
ΔX=0x80800000ならば必ずΔY=0x02000000
特定の入力差分において、出力差分が一定となる
FEALの差分解析34
http://www.theamazingking.com
1ラウンドなら
特定の入力差分の際に
出力差分に偏り
途中の値はわからない
出力の値はわかる
FEALの差分解析35
http://www.theamazingking.com
全体を通した際に
出力差分は出るか?
1ラウンドなら
特定の入力差分の際に
出力差分に偏り
FEALの差分解析36
http://www.theamazingking.com
 次の差分を持つ平文ペアを入力する
 0x8080000080800000
0x80800000 0x80800000
暗号文に相関が出てほしい
FEALの差分解析37
http://www.theamazingking.com
 次の差分を持つ平文ペアを入力する
 0x8080000080800000
 同じ鍵で暗号化されているため鍵の入力差分は0
0x80800000 0x80800000
0 0
0
FEALの差分解析38
http://www.theamazingking.com
 次の差分を持つ平文ペアを入力する
 0x8080000080800000
 同じ鍵で暗号化されているため鍵の入力差分は0
0x80800000 0x80800000
0x80800000
0
0x02000000
ここの差分は不明
0
最終ラウンドへの
左入力の差分は
0x02000000
右入力の差分は
不明…
途中で出力の
差分が出せなくなる
FEALの差分解析39
http://www.theamazingking.com
 次の差分を持つ平文ペアを入力する
 0x8080000080800000
 同じ鍵で暗号化されているため鍵の入力差分は0
0x80800000 0x80800000
入力に差分を与えることで
最終ラウンドの入力差分を
操作可能
今度は出力から考える
最終ラウンドに
フォーカス
FEALの最終ラウンドの差分解析
 左入力差分=0x02000000
 右入力差分は特定できない
40
0x02000000
key
f
Output
?????
Output
FEALの最終ラウンドの解析
 差分ではなく通常の処理で考える
41
key
f
暗号文(C1) 暗号文(C2)
入力(X1) 入力(X2)
FEALの最終ラウンドの解析42
key
f
暗号文(C1) 暗号文(C2)
C1+C2(=X2)
入力(X1) 入力(X2)
 差分ではなく通常の処理で考える
FEALの最終ラウンドの差分解析
 出力ペアの差分より最終ラウンドの右側の入力差分は
C1+C2+C1’+C2’=ΔC1+ΔC2
43
key
f
暗号文(C1) 暗号文(C2)
入力(X1) 入力(X2)
key
f
暗号文(C1’) 暗号文(C2’)
入力(X1’) 入力(X2’)
C1+C2 C1’+C2’
出力から右入力差分を特定可能
FEALの最終ラウンドの差分解析44
0x02000000
key
f
出力差分(ΔC1)
ΔC1+ΔC2
入力差分(ΔX1) 入力差分(ΔX2)
出力差分(ΔC2)
最終ラウンドの全入出力差分を特定できた!
この値は?
FEALの最終ラウンドの差分解析
 出力ペアの差分より最終ラウンドの右側の入力差分は
C1+C2+C1’+C2’=ΔC1+ΔC2
 f関数の出力差分はf(C1+C2+key)+f(C1’+C2’+key)
45
key
f
暗号文(C1) 暗号文(C2)
入力(X1) 入力(X2)
key
f
暗号文(C1’) 暗号文(C2’)
入力(X1’) 入力(X2’)
C1+C2 C1’+C2’
f(C1+C2+key) f(C1’+C2’+key)
FEALの最終ラウンドの差分解析46
0x02000000
key
f
出力差分(ΔC1)
ΔC1+ΔC2
入力差分(ΔX1) 入力差分(ΔX2)
出力差分(ΔC2)
f(C1+C2+key)+f(C1’+C2’+key)
この値は?
ΔC1 = f(C1+C2+key)+f(C1’+C2’+key)+0x02000000
FEALの最終ラウンドの差分解析47
0x02000000
key
f
出力差分(ΔC1)
ΔC1+ΔC2
入力差分(ΔX1) 入力差分(ΔX2)
出力差分(ΔC2)
f(C1+C2+key)+f(C1’+C2’+key)
この値は?
ΔC1 = f(C1+C2+key)+f(C1’+C2’+key)+0x02000000
この式を満たすkeyを
探索することで、値を特定可能!!!
何ができたか?48
http://www.theamazingking.com
K3を導出できた!
FEALの次のラウンド鍵解読49
http://www.theamazingking.com
K3を解読したので
暗号文から逆算することで
3ラウンド目の出力が手に入る
FEALの次のラウンド鍵解読50
http://www.theamazingking.com
K3を解読したので
暗号文から逆算することで
3ラウンド目の出力が手に入る
今度は3ラウンド目の入力差分と
出力差分よりK2の鍵解読を実施
FEALの次のラウンド鍵解読51
http://www.theamazingking.com
K3を解読したので
暗号文から逆算することで
3ラウンド目の出力が手に入る
今度は3ラウンド目の入力差分と
出力差分よりK2の鍵解読を実施
これを繰り返すことでK1~K3を
解読可能!
FEALの次のラウンド鍵解読52
http://www.theamazingking.com
K3を解読したので
暗号文から逆算することで
3ラウンド目の出力が手に入る
今度は3ラウンド目の入力差分と
出力差分よりK2の鍵解読を実施
これを繰り返すことでK1~K3を
解読可能!
FEALの開始ラウンドの解析53
P1
key4
f
出力(C1)
P2
入力平文 入力平文
出力(C2)
key5
key0
FEALの開始ラウンドの解析54
P1
key4
f
出力(C1)
P2
入力平文 入力平文
出力(C2)
key5
key0
K4 = C1 + f(C2+K0) + P1
K5 = C2 + K4 + P1 + P2 = C1 + C2 + P2 + f(C2 + K0)
この式を満たすK0を
探索することで、K4, K5の値を特定可能!!!
実習
 とりあえずやってみましょう
 先にwriteupを紹介します
 katagaitai版
 http://pastebin.com/eZaHEEQx
 http://pastebin.com/UweM5NsT
 他にも転がってる。Google先生は神。
 解説はFEAL4でしたが問題はFEAL4.3です。
 ちょっとだけある箇所が違います。
 解けた人は上級編の問題をやってください
 スライドはこちら
http://www.slideshare.net/trmr105/katagaitai-ctf-3-crypto
 残り15分になったらwriteupのコード解説しようと思ってます
 音楽にリクエストがあれば@trmr105または#katagaitaiCTFで
ツイートしてください
 東京ではともりなおにジャックされた
90分55
trmr版FEALの解き方
 差分を使った解き方はいろいろある、と思う。
 あくまで一例。
 今回のwriteupの成り立ち
 trmrがpythonで書く
 速度が出ない
 bata氏がCで書き直す
 100倍高速化!!
 Cは神
 writeupの動かし方
 1)writeup_feal.cをtest.cにリネーム
 2)writeup_feal.pyを実行
 ※接続先のホスト名はPython実行前に確認&修正してください
 ※まずはローカルで試すのをおすすめ
56
解答
 writeupを動かすと
57
HackerLikesHakka
本番でのとき方
 1. ぐぐる
 2. 暗号を特定する
 3. 攻撃方針を決定する
 4. 公開されている暗号との違いを特定
 5. 攻撃する
 6. フラグゲット!
 今回のように考えて解く場合CSAW300点問題では無いは
ず
 400~500点くらい?そもそもCSAWで出るのか説
58
参考文献
 参考文献
 The Amazing King
 http://www.theamazingking.com
 Wikipedia[英語版]
 https://en.wikipedia.org/wiki/FEAL
 暗号技術大全 (アップデート希望)
 その他論文
59

Contenu connexe

Tendances

ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
MITSUNARI Shigeo
 
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと
MITSUNARI Shigeo
 

Tendances (20)

AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
 
Rolling Hashを殺す話
Rolling Hashを殺す話Rolling Hashを殺す話
Rolling Hashを殺す話
 
秘密分散法の数理
秘密分散法の数理秘密分散法の数理
秘密分散法の数理
 
暗認本読書会11
暗認本読書会11暗認本読書会11
暗認本読書会11
 
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
 
ブロックチェーン系プロジェクトで着目される暗号技術
ブロックチェーン系プロジェクトで着目される暗号技術ブロックチェーン系プロジェクトで着目される暗号技術
ブロックチェーン系プロジェクトで着目される暗号技術
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
 
楕円曲線と暗号
楕円曲線と暗号楕円曲線と暗号
楕円曲線と暗号
 
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
 
新しい暗号技術
新しい暗号技術新しい暗号技術
新しい暗号技術
 
Rolling hash
Rolling hashRolling hash
Rolling hash
 
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
 
暗認本読書会4
暗認本読書会4暗認本読書会4
暗認本読書会4
 
集約署名
集約署名集約署名
集約署名
 
暗認本読書会12
暗認本読書会12暗認本読書会12
暗認本読書会12
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
暗認本読書会5
暗認本読書会5暗認本読書会5
暗認本読書会5
 

Similaire à Katagaitai CTF勉強会 #4 Crypto

Nseg2 自宅サーバ運用について
Nseg2 自宅サーバ運用についてNseg2 自宅サーバ運用について
Nseg2 自宅サーバ運用について
hATrayflood
 

Similaire à Katagaitai CTF勉強会 #4 Crypto (11)

Magic Ring Buffer
Magic Ring BufferMagic Ring Buffer
Magic Ring Buffer
 
Tensor flow勉強会3
Tensor flow勉強会3Tensor flow勉強会3
Tensor flow勉強会3
 
「TDDはじめて物語」 #tddbc
「TDDはじめて物語」 #tddbc「TDDはじめて物語」 #tddbc
「TDDはじめて物語」 #tddbc
 
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
 
競プロでGo!
競プロでGo!競プロでGo!
競プロでGo!
 
JAWSUG 20210128
JAWSUG 20210128JAWSUG 20210128
JAWSUG 20210128
 
プログラマのための文書推薦入門
プログラマのための文書推薦入門プログラマのための文書推薦入門
プログラマのための文書推薦入門
 
Nseg2 自宅サーバ運用について
Nseg2 自宅サーバ運用についてNseg2 自宅サーバ運用について
Nseg2 自宅サーバ運用について
 
Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010
 
OpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみたOpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみた
 
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackTwitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hack
 

Katagaitai CTF勉強会 #4 Crypto