Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
CTF勉強会 #4
Crypto
2016.01.23 TOKYO / 2016.02.06 OSAKA
trmr (@trmr105)
katagaitai
注意事項
 本スライドは勉強会で利用したものを元に作成しています。
 勉強会では問題サーバを利用しましたが既に停止しています。
 問題サーバのIPやホスト名が出てくる箇所がありますが、随時
読み替えをお願いいたします。
 リンク切れ等ご...
Writeup & Impression3
 katagaitai勉強会#4 開催後、reconで見つけたwriteupや感想です。
 http://syagi.hatenablog.com/entry/2016/01/29/225258
...
Katagaitai勉強会とはなんぞや
好きなことを分かり合える人を増やしたい!
4
楽しみにしていること
Twitterの巡回 Writeup収集
#katagaitaiCTF
5
katagaitaiと愉快な仲間たち
 今回発表する人
 bata(@bata_24) リーダー
 trmr(@trmr105) センセイ
 資料レビュー
 askn(@asai_ken) エース
 運営手伝い
 yagihash...
今日の問題
 [CSAW CTF 2014] Crypto300 - FEAL
CODE
7
今日FEALをやるべき4つの理由
 共通鍵暗号だから
 公開鍵暗号の解き方がパターン化してる問題
 2014年のCTFベスト暗号問題に選ばれていたから
 Golden Flag Awards - http://golden-flags....
とりあえずやってみよう
① 問題につなげてみよう
$ nc katagaitai.orz.hm 8888 (18888 or 28888)
※ホスト名がリアルだけど、気にしない
つながりますか?
つながらない人は手をあげてください
9
とりあえずやってみよう
② ファイルを落としてみよう
以下のパスにサーバで動作しているpythonコードを置いてます
https://goo.gl/9XymPK
10
Pythonコードを見てみよう。11
本番サーバは違う値が
入ってます。
※鍵の生成方法もちょっ
と変えてます。
(固定値にしてます)
最初の問題
 まずはじめに次のSHA1ハッシュを要求される
 SHA1ハッシュの末尾16ビットが”1”
 入力値が与えられた文字列で始まる
 入力長は21バイト
 腕慣らしにやってみましょう。
 終わったら問題を解き始めてください。...
注意事項
 CSAW CTFの問題はFEAL4.3ですが、元となった暗号FEAL
を解説します。
 ほんのちょっとだけ仕様が違います。
 スライド中に出てくる「+」はXoRです
13
暗号問題の解き方
 CTFの暗号問題は二つに分けられる
 「公表されている暗号」か「独自に作った暗号」
 公表されている暗号
 RSA, AESなど
 過去に様々な研究者が解析し脆弱性を報告
 独自に作った暗号
 暗号を独自に作る...
暗号のソースコード15
コードを読んで脆弱性を
見つけるのは難しい
暗号問題の解き方手順16
いかに初動であたりをつけるかが重要
 マルウェアの解析手順 by JPCERTの中の人
 表層解析
 動的解析
 静的解析
 暗号の解析も同じ
 表層解析 → 何の暗号かあたりをつける
 動的解析 → 動...
暗号問題の解き方
 CTFの暗号問題は二つに分けられる
 「公表されている暗号」か「独自に作った暗号」
 公表されている暗号
 RSA, AESなど
 過去に様々な研究者が解析し脆弱性を報告
 独自に作った暗号
 暗号を独自に作る...
ぐぐってみた18
Wikipedia!!
Wikipedia19
Differencial Cryptanalysis!!
さらにぐぐってみた20
攻撃コードがあった!!!!!
解けた!!!!!21
これで勝つる!!!!!
本番ならOKですが
勉強会なので勉強します
共通鍵暗号と公開鍵暗号
 公開鍵暗号 – 暗号化と復号に異なる鍵を利用
 共通鍵暗号 – 共通の鍵を利用して暗号化/復号を実施
22
今日はこれ
共通鍵暗号のカテゴリー
 大体このようなカテゴリわけできる(はず)
 ストリーム暗号
 LFSR型:snow, K-Cipher2 etc.
 状態遷移型:RC4, trivium, chacha-20 etc.
 ブロック暗号
 ...
[参考]Feistel構造24
暗号に求められること
Key (K) Key (K)
暗号化 暗号化
 入力情報(鍵・平文)の適切な攪拌
出力の値は全く異なるのが望ましい
25
少しでも入力が違えば
差分解析
Plaintext A Plaintext A + ⊿
Key (K) Key (K)
暗号化 暗号化
diff
入力に差分
 入力情報(鍵・平文)ペアに差分を与える
 出力の差分を見ることで偏りがないか確認
出力差分に相関が出現...
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://w...
FEALのラウンド関数の解析
 次の条件を満たす入力を考える
 X0=X1 and X2=X3
 XoRで打ち消しが発生し、Y1およびY2が固定値に
29
http://www.theamazingking.com
4(1<<2) 16(...
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(...
FEALのラウンド関数の解析
 次のような入力ペアの出力差分を考える
 X = 0x00000000 (X0=0x00, X1=0x00, X2=0x00, X3=0x00)
 X’ = 0x80800000 (X0=0x80, X1=0...
FEALのラウンド関数の解析
 次のような入力ペアを考える
 X = 0x00000000 (X0=0x00, X1=0x00, X2=0x00, X3=0x00)
 X’ = 0x80800000 (X0=0x80, X1=0x80, ...
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 0x80...
FEALの差分解析38
http://www.theamazingking.com
 次の差分を持つ平文ペアを入力する
 0x8080000080800000
 同じ鍵で暗号化されているため鍵の入力差分は0
0x80800000 0x80...
FEALの差分解析39
http://www.theamazingking.com
 次の差分を持つ平文ペアを入力する
 0x8080000080800000
 同じ鍵で暗号化されているため鍵の入力差分は0
0x80800000 0x80...
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’) 暗号...
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) ...
FEALの最終ラウンドの差分解析46
0x02000000
key
f
出力差分(ΔC1)
ΔC1+ΔC2
入力差分(ΔX1) 入力差分(ΔX2)
出力差分(ΔC2)
f(C1+C2+key)+f(C1’+C2’+key)
この値は?
ΔC1 ...
FEALの最終ラウンドの差分解析47
0x02000000
key
f
出力差分(ΔC1)
ΔC1+ΔC2
入力差分(ΔX1) 入力差分(ΔX2)
出力差分(ΔC2)
f(C1+C2+key)+f(C1’+C2’+key)
この値は?
ΔC1 ...
何ができたか?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の鍵解読を実施
これを繰り...
FEALの次のラウンド鍵解読52
http://www.theamazingking.com
K3を解読したので
暗号文から逆算することで
3ラウンド目の出力が手に入る
今度は3ラウンド目の入力差分と
出力差分よりK2の鍵解読を実施
これを繰り...
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 +...
実習
 とりあえずやってみましょう
 先にwriteupを紹介します
 katagaitai版
 http://pastebin.com/eZaHEEQx
 http://pastebin.com/UweM5NsT
 他にも転がって...
trmr版FEALの解き方
 差分を使った解き方はいろいろある、と思う。
 あくまで一例。
 今回のwriteupの成り立ち
 trmrがpythonで書く
 速度が出ない
 bata氏がCで書き直す
 100倍高速化!!
 C...
解答
 writeupを動かすと
57
HackerLikesHakka
本番でのとき方
 1. ぐぐる
 2. 暗号を特定する
 3. 攻撃方針を決定する
 4. 公開されている暗号との違いを特定
 5. 攻撃する
 6. フラグゲット!
 今回のように考えて解く場合CSAW300点問題では無いは
ず...
参考文献
 参考文献
 The Amazing King
 http://www.theamazingking.com
 Wikipedia[英語版]
 https://en.wikipedia.org/wiki/FEAL
 暗号技...
Upcoming SlideShare
Loading in …5
×

Katagaitai CTF勉強会 #4 Crypto

2,811 views

Published on

20160123に秋葉原UDX、20160206に梅田ブリーゼプラザにて実施したkatagaitai勉強会 #4で利用したスライド±αです。

Published in: Technology
  • Be the first to comment

Katagaitai CTF勉強会 #4 Crypto

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

×