SlideShare a Scribd company logo
1 of 149
Download to read offline
CTF勉強会 #5
Crypto
2016.07.16 TOKYO / 2016.08.28 OSAKA
trmr (@trmr105)
katagaitai
注意事項
 本スライドは勉強会で利用したものを元に作成しています
 勉強会では問題サーバを利用しましたがすでに停止していま
す
 問題サーバのIPやホスト名が出てくる箇所は、随時読み替えを
お願いします
 リンク切れ等ご容赦ください
 最後のページに勉強会参加者のwriteupを載せています
 ぜひそちらも参照してください
2
#5 はじまるよー!
 katagaitai CTF勉強会の歴史
 2012年~2014年:某所での下積み時代
 2014年冬:CTF勉強会 #1 (関東|関西)
 2015年夏:CTF勉強会 #2 (関東)
 2015年冬:CTF勉強会 #3 Hard (関東)
 2015年冬:CTF勉強会 #4 Medium (関東|関西)
 2016年夏:CTF勉強会 #5 Medium(関東|関西)
 2016年夏:CTF勉強会 #6 Easy
 下記URLで過去の勉強会資料を公開中
 http://www.slideshare.net/bata_24
 http://www.slideshare.net/trmr105
イマココ!
3
同時期2本
つらかった…。
katagaitai勉強会とは
好きなことを分かり合える人を増やしたい!
4
katagaitaiと愉快な仲間たち
 #5を担当する人
 bata(@bata_24)
 trmr(@trmr105)
 #6を担当する人
 yagihash(@yagihashoo)
 shironoo(@shironoo)
 Special Thanks!
 askn(@asai_ken)
 ysk(@y_sk256)
5
We are katagaitai!
and so on..
今日の問題
 [hack you 2014] Crypto200 – hashme
 [Plaid CTF 2014] Crypto250 - Parlor
 [ebCTF 2013] bin400 – MD5 COLLIDING
6
今日の問題を選んだ理由
 ハッシュ関数をやりたかった!
 #3 #4でブロック暗号をやった!
 公開鍵暗号はどうしよう…。
 「簡単」「意味不明」に二極化しそう
 CTFの暗号問題として易しめ
 その分午後が難しいのでOK
7
熟考したうえでの
出題!
CTFとハッシュ関数8
CTFにおけるハッシュ問題の分類
 大きく以下のように分類
9
利用ハッシュ関数
公知のハッシュ
独自ハッシュ
利用脆弱性
アルゴリズム
プロトコル
原像
衝突
レングスエクス
テンション
分類
その他
(主にPPC)
CTFにおけるハッシュ問題の分類
 大きく以下のように分類
10
利用ハッシュ関数
公知のハッシュ
独自ハッシュ
利用脆弱性
アルゴリズム
プロトコル
原像
衝突
レングスエクス
テンション
分類
その他
(主にPPC)
注目!
原像攻撃
 ハッシュ値から元のメッセージを復元する攻撃
 CTFでの傾向
 出題頻度は低い
 原像攻撃が可能なハッシュ関数が少ない
 参考問題
 hack you too - Everybody lies
11
ハッシュ
関数
𝑀
ℎ(𝑀)
ハッシュ値から
元のメッセージを
復元!!
[参考]第二原像攻撃
 特定のメッセージと同じハッシュ値を生成する別のメッ
セージを復元する攻撃
12
ハッシュ
関数
𝑀
ℎ(𝑀)
ハッシュ
関数
𝑀′
同じハッシュ値を
出力する
メッセージを復元!
衝突攻撃
 任意のメッセージと同じハッシュ値を生成する別のメッセージを特定する攻
撃
 CTFでの傾向
 出題頻度:高
 参考問題
 ebCTF 2013 - bin400
 Hack.lu 2013 - Geier's Lambda
 BkP 2014 - Xorxes the Hash
 HITCON CTF 2014 – wtf6
 Olympic CTF 2014 - LHC
 SECCON 2015 - Please give me MD5
13
ハッシュ
関数
𝑀
ℎ(𝑀)
ハッシュ
関数
𝑀′ 同じハッシュ値を出力するペアを発見!
※Mはどんな値でも可
ハッシュレングスエクステンション
 説明は後述
 CTFでの傾向
 出題頻度:高
 レングスエクステンション自体が問題ではなく、レングスエクステンションで解け
ると思いつかせることに焦点を当てた問題が増えてる
 参考問題
 hack you 2012 - hashme
 Plaid 2014 – Parlor
 Olympic CTF 2014 – Emdee
 Gits 2015 – Knockers
14
その他(主にPPC)
 ハッシュ関数を利用したプロトコルの脆弱性を探す問題
 例題
 与えられたハッシュに対して下記条件を満たす入力を探索
 いかに高速に入力値を探索するかが重要
 ハッシュでなくても問題は成立するためハッシュ問題とするかは?
 参考問題
 SECUINSIDE CTF 2014 Final - HashGame
 HITCON 2014 – ginger
 Hack.lu 2015 – Checkcheckcheck
 BkP 2016 – ltseorg
15
入力1のハッシュ
入力2のハッシュ
入力3のハッシュ
+
+
与えられたハッシュ=
今日やるのはこれ
 大きく以下のように分類
16
利用ハッシュ関数
公知のハッシュ
独自ハッシュ
利用脆弱性
アルゴリズム
プロトコル
原像
衝突
レングスエクス
テンション
分類
その他
(主にPPC)
Hash Length Extension
Collision
[hack you 2014]
Crypto200 - hashme17
朝の待ち時間の有効活用
① サーバにつなげてみよう
$ nc katagaitai.orz.hm 7777 (17777 or 27777 or 37777)
② ローカルで待ち受けてみよう
# socat tcp-listen:7777,fork,reuseaddr exec:"stdbuf -i0 -o0 python
crypto200.py“
③ 問題を眺めてみよう
18 10分
hashmeを見てみよう
 0を入力した場合
19
名前入力を要求
証明書を発行
hashmeを見てみよう
 1を入力した場合
20
① 証明書を要求
② 証明書を入力
③ Welcome!
で、何すればいいの?
hashmeを見てみよう21
 crypto200.py
hashmeを見てみよう
 0を入力するとgen_cert関数に遷移
22
hashmeを見てみよう
 0を入力するとgen_cert関数に遷移
23
① ユーザの入力値に
role=”anonymous”を付与
hashmeを見てみよう
 0を入力するとgen_cert関数に遷移
24
② “SALT+①の値”のハッシュ値を
生成
① ユーザの入力値に
role=”anonymous”を付与
hashmeを見てみよう
 0を入力するとgen_cert関数に遷移
25
③ 鍵と②の値をXoRし
「証明書」を生成
② “SALT+①の値”のハッシュ値を
生成
① ユーザの入力値に
role=”anonymous”を付与
hashmeを見てみよう
 0を入力するとgen_cert関数に遷移
26
③ 鍵と②の値をXoRし
「証明書」を生成
② “SALT+①の値”のハッシュ値を
生成
① ユーザの入力値に
role=”anonymous”を付与
サーバしか知らない鍵とSALTの値で
role=‘anonymous’の「証明書」を生成
hashmeを見てみよう
 1を入力するとauth関数に遷移
27
① 鍵と入力された「証明書」を
XoR
hashmeを見てみよう
 1を入力するとauth関数に遷移
28
① 鍵と入力された「証明書」を
XoR
② “SALT+①の値”のハッシュ値を
生成
hashmeを見てみよう
 1を入力するとauth関数に遷移
29
① 鍵と入力された「証明書」を
XoR
② “SALT+①の値”のハッシュ値を
生成
③ role=”administrator”
が付与されていればflag
hashmeを見てみよう
 1を入力するとauth関数に遷移
30
サーバの鍵とSALTの値で生成された
role=‘administrator’の「証明書」が必要
① 鍵と入力された「証明書」を
XoR
② “SALT+①の値”のハッシュ値を
生成
③ role=”administrator”
が付与されていればflag
問題の要点
 1.証明書の権限
 自分で作成できる証明書はrole=anonymous
 flag獲得に必要な証明書はrole=administrator
 2.ローカルで証明書を偽造する
 鍵とSALTを手に入れる必要あり
 3.サーバに証明書を偽造させる
 role=administratorを付与できない
31
入力にuser&role=administrator
を付与してもはじかれる
「文字,数字,_」のみ入力可能…
今回のハッシュ関数(hashme)32
あやしい固定値
暗号問題はぐぐる33
hashmeはMD5やSHA-1などをベースにしたハッシュ関数
暗号問題はぐぐる34
hashmeはMD5やSHA-1などをベースにしたハッシュ関数
Merkle-Damgård構造
Merkle-Damgård構造35
Hello, World
m1 m2 m3
① メッセージを分割
pad
② パディング付与
Merkle-Damgård構造36
内部
状態𝐼𝑉 …
Hello, World
m1 m2 m3
① メッセージを分割
pad
② パディング付与
関
数
R
関
数
R
関
数
R
関
数
R
③ 分割したメッセージごとに処理
を繰り返して内部状態を生成
Merkle-Damgård構造37
内部
状態𝐼𝑉 …
Hello, World
m1 m2 m3
① メッセージを分割
pad
② パディング付与
関
数
R
関
数
R
関
数
R
関
数
R
③ 分割したメッセージごとに処理
を繰り返して内部状態を生成
e4d7f1b4ed2e42d15898f4b27b019da4
出力
関数
④ 内部状態からハッシュ値を出力
Merkle-Damgård構造
 Merkle-Damgård構造を利用したハッシュ関数
 MD4
 MD5
 SHA-1
 SHA-2 family
 それらをベースにした独自ハッシュ
 CTF目線のMerkle-Damgård構造
 レングスエクステンション攻撃が可能
38
ハッシュレングス
エクステンション39
例)MD5の場合40
内部
状態𝐼𝑉 …
Hello, World
m1 m2 m3 pad
関
数
R
関
数
R
関
数
R
関
数
R
出力
関数
e4d7f1b4ed2e42d15898f4b27b019da4
注目!
 MD5もMerkle-Damgård構造で構成
MD5の出力関数41
内部
状態𝐼𝑉 …
関
数
R
関
数
R
関
数
R
関
数
R
出力
関数
 MD5もMerkle-Damgård構造で構成
内部状態
A:32bit
B:32bit
C:32bit
D:32bit
内部状態は128bit
MD5の出力関数
 Finalize処理
42
内部状態
A:32bit
B:32bit
C:32bit
D:32bit
A:32bit B:32bit C:32bit D:32bit
内部状態をそのまま出力
出力
関数
ハッシュ値
MD5の内部状態復元
 ハッシュ値があれば
43
e4d7f1b4ed2e42d15898f4b27b019da4
MD5の内部状態復元
 ハッシュ値があれば
44
A:32bit B:32bit C:32bit D:32bit
e4d7f1b4ed2e42d15898f4b27b019da4
32bitごとに分割
MD5の内部状態復元
 ハッシュ値があれば
45
内部状態
A:32bit
B:32bit
C:32bit
D:32bit
A:32bit B:32bit C:32bit D:32bit
内部状態を復元可能
e4d7f1b4ed2e42d15898f4b27b019da4
32bitごとに分割
レングスエクステンション46
内部
状態𝐼𝑉
???????????
m1 pad
関
数
F
関
数
F
e4d7f1b4ed2e42d15898f4b27b019da4
ハッシュ値から内部状態を復元
…
手に入る!
分からない…
レングスエクステンション47
内部
状態𝐼𝑉
???????????
m1 pad
関
数
F
関
数
F
e4d7f1b4ed2e42d15898f4b27b019da4
ハッシュ値から内部状態を復元
…
分からない…
関
数
R
m’1
関
数
R
m’2
メッセージを付加することが可能
NEW
内部
状態
893e3aa5b11ca4a0722deeacf66901bb
レングスエクステンション48
内部
状態𝐼𝑉
???????????
m1 pad
関
数
F
関
数
F
e4d7f1b4ed2e42d15898f4b27b019da4
ハッシュ値から内部状態を復元
…
分からない…
関
数
R
m’1
関
数
R
m’2
メッセージを付加することが可能
NEW
内部
状態
893e3aa5b11ca4a0722deeacf66901bb
元の文字列(不明)に
m’1, m’2を付与したハッシュ値
 元のメッセージ(+padding)値に、任意のメッセージを付与し
たハッシュ値を導出可能
49
𝑚𝑑5𝑠𝑢𝑚(hello) = e4d7f1b4ed2e42d15898f4b27b019da4
たとえXが分からなくても
X
レングスエクステンション
 元のメッセージ(+padding)値に、任意のメッセージを付与し
たハッシュ値を導出可能
50
𝑚𝑑5𝑠𝑢𝑚(hello) = e4d7f1b4ed2e42d15898f4b27b019da4
𝑚𝑑5𝑠𝑢𝑚( + + )=893e3aa5b11ca4a0722deeacf66901bb
たとえXが分からなくても
X+pad+任意のメッセージのハッシュ値は導出できる
X
X
レングスエクステンション
pad 任意のM
今回のハッシュ関数(hashme)51
今回のハッシュ関数(hashme)52
Merkle-Damgårdっぽい
出力部分は?
hashmeの出力関数
 Finalize処理
53
内部状態
A:32bit
B:32bit
C:32bit
D:32bit
A:32bitB:32bit C:32bitD:32bit
MD5と違って、
内部状態を順番変えて出力してる!!
e4d7f1b4ed2e42d15898f4b27b019da4
hashmeの出力関数
 Finalize処理
54
内部状態
A:32bit
B:32bit
C:32bit
D:32bit
A:32bitB:32bit C:32bitD:32bit
MD5と違って、
内部状態を順番変えて出力してる!!
e4d7f1b4ed2e42d15898f4b27b019da4
問題なくハッシュ値から
内部状態を復元可能
レングスエクステンションが可能
hashmeの認証関数
 parse_qs
 ユーザの入力を辞書に変換する関数
 parse_qsで作成した辞書のキー’role’の要素が’administrator’なら
FLAGゲット
→ どのようにユーザの入力を辞書に変換している?
55
parse_qs56
/usr/lib/python2.7/urlparse.py
キーが重複している場合、
両方の要素が辞書に登録
flagの取り方を考える
 通常サーバは次のハッシュ値を生成
 hashme(SALT+user=‘’&role=anonymous)
57
{role:anonymous}のみ登録
flagの取り方を考える
 通常サーバは次のハッシュ値を生成
 hashme(SALT+user=‘’&role=anonymous)
 上記ハッシュ値を元にレングスエクステンションを実施し
て、&role=administratorを付与すると、次のハッシュ値が手
に入るはず
 hashme(SALT+user=‘’&role=anonymous+pad+&role=administrator)
58
{role:anonymous+pad}と
{role:administrator}が共に登録
{role:anonymous}のみ登録
hashmeの認証関数
 parse_qs
 ユーザの入力を辞書に変換する関数
 parse_qsで作成した辞書のキー’role’の要素が’administrator’なら
FLAGゲット
→ どのようにユーザの入力を辞書に変換している?
59
If ‘administrator’ in data[‘role’]
→ FLAG獲得!
方針
 レングスエクステンションでrole=‘administrator’を付与して
やればよい
 しかしこの問題はあと2つハードルがある
 直接ハッシュ値が手に入らない
 サーバだけが知ってる鍵でXoR
 若干MD5と異なるハッシュ関数が採用
 既存のツールがそのまま使えない
 方針
 1. サーバにて鍵でXoRしたハッシュ値を発行
 2. 鍵を導出し、ハッシュ値を手に入れる
 3. レングスエクステンションで権限付与
 4. 2で導出した鍵で権限を付与したハッシュ値をXoR
60
どうやって
鍵を導出する?
少しMD5と仕様
が違う?
実習
 とりあえずやってみましょう
 Writeupを同梱しているので分からない人は参考に
 解けた人は本資料の最後のおまけをやってみてください
 Plaid CTF 2014 – Parlor
 nc katagaitai.orz.hm 4321 (or 14321, 24321, 34321)
 質問、要望、音楽のリクエストなど→ #katagaitaiCTF
40分61
解答
 方針
 1. サーバにて鍵でXoRしたハッシュ値を発行
 2. 鍵を導出し、ハッシュ値を手に入れる
 3. ハッシュレングスエクステンションで権限付与
 4. 2で導出した鍵で権限を付与したハッシュ値をXoR
62
鍵の導出パート
ハッシュレングス
エクステンション
パート
解答(鍵の導出)
 方針
 1. サーバにて鍵でXoRしたハッシュ値を発行
 2. 鍵を導出し、ハッシュ値を手に入れる
63
ハッシュ値の形式は?
KEY KEY KEY KEY KEY
auth_str hashme(SALT+auth_str)
auth_strは自分で
入力した値
鍵は繰り返し利用
解答(鍵の導出)
 方針
 1. サーバにて鍵でXoRしたハッシュ値を発行
 2. 鍵を導出し、ハッシュ値を手に入れる
64
ハッシュ値の形式は?
KEY KEY KEY KEY KEY
auth_str hashme(SALT+auth_str)
auth_strは自分で
入力した値
auth_str
鍵は繰り返し利用
KEY KEY
Auth_strをXoRすれば鍵が手に入る
解答(鍵の導出)
 方針
 1. サーバにて鍵でXoRしたハッシュ値を発行
 2. 鍵を導出し、ハッシュ値を手に入れる
65
ハッシュ値の形式は?
KEY KEY KEY KEY KEY
auth_str hashme(SALT+auth_str)
auth_strは自分で
入力した値
auth_str
鍵は繰り返し利用
KEY KEY
Auth_strをXoRすれば鍵が手に入る
鍵をXoRすれば
hashme(auth_str)
が手に入る
解答(鍵の導出)66
solve_key.py
Auth_strをXoRして鍵を導出
実行結果
解答(ハッシュレングスエクステンション)
 hashme関数
67
解答(ハッシュレングスエクステンション)
 hashme関数
68
hashmeの処理に使われるiの値がSALTに依存
→ SALTは手に入れることができない
→ hashmeの処理を実行できない
→ レングスエクステンションできない
→ 詰んだ
解答(ハッシュレングスエクステンション)
 hashme関数
69
hashmeの処理に使われるiの値がSALTに依存
→ SALTは手に入れることができない
→ hashmeの処理を実行できない
→ レングスエクステンションできない
→ 詰んだ
i & 0x1f
→ 32通りしかない
→ 全部試せばいい
解答(ハッシュレングスエクステンション)70
ログインしたい
ユーザを作成
証明書、鍵を入力
solver_hashme.py
71 解答(ハッシュレングスエクステンション)
solver_hashme.py
72 解答(ハッシュレングスエクステンション)
証明書からハッシュ値
を取り出し
solver_hashme.py
73 解答(ハッシュレングスエクステンション)
証明書からハッシュ値
を取り出し
solver_hashme.py
内部状態を再構成
74 解答(ハッシュレングスエクステンション)
証明書からハッシュ値
を取り出し
solver_hashme.py
内部状態を再構成
レングスエクステンションを実施して
ログイン施行を32回実施
75 解答(ハッシュレングスエクステンション)
実行結果
Flagゲット!
解答
 FLAG{2016_is_5th_aniversary_of_katagaitai}
 katagaitaiは今年で結成5周年を迎えました
 前身の活動を入れればもうちょい長い?
 これもひとえにみなさまのおかげ
 残念ながらメンバーの平均年齢もほぼ+5歳…
 yagihash, shironooの加入で若返れるか?
 [参考]Flickr’s API Attack
 http://netifera.com/research/flickr_api_signature_forgery.pdf
 [参考] hash extender
 https://github.com/iagox86/hash_extender
76
おまけ(宿題)77
[Plaid CTF 2014]
Crypto250 Parlor78
アクセスしてみる
① サーバにつなげてみよう
$ nc katagaitai.orz.hm 4321 (14321 or 24321 or 34321)
79
ゲームの仕組
 1) set your odds : oddsを指定
 odds = 2^入力値 がmoduloとして扱われる
 2) set your bet : betするmoneyを指定
 3) play a round : 下記のゲームを開始
80
md5(secret + ) % odds
秘密の値(our number) 1で指定した値
ゲームの仕組
 1) set your odds : oddsを指定
 odds = 2^入力値 がmoduloとして扱われる
 2) set your bet : betするmoneyを指定
 3) play a round : 下記のゲームを開始
81
md5(secret + ) % odds
秘密の値(our number) 1で指定した値
your
number
値を指定
ゲームの仕組
 1) set your odds : oddsを指定
 odds = 2^入力値 がmoduloとして扱われる
 2) set your bet : betするmoneyを指定
 3) play a round : 下記のゲームを開始
 4) 総金額が1,000,000,000を超えるとFLAGゲット!
82
md5(secret + ) % odds
秘密の値(our number) 1で指定した値
your
number
値を指定
≡ 0
≡0
bet * oddsの
金額をゲット
betした金額を
失う…
ゲームの還元率
 勝つ確率は2^(-odds)、倍率は2^(odds)。
 還元率は100%
 ギャンブルとしては割がいい
 が、$1000→$1,000,000,000まで増やすのはかなりの強運が必要
 100万回程度アクセスすれば可能かも?
 1アクセス1秒としても278時間程度必要
83
Hint 1 : 問題の整理
 なぜこの問題が難しいのか
 リモートサーバに対する100万回アクセスが困難
→ ローカルで実施する場合100万回計算は短時間で可能
 なぜローカルで実施できないのか
 md5の入力値のprefixが手に入らないためハッシュ値が計算できない
→ 入力値のprefixが手に入らなくてもハッシュ値が計算できれば?
84
入力値がなくともハッシュ値を計算できる手法を利用
Hint 2 : ハッシュ値の出力
 レングスエクステンション
 レングスエクステンションには元のハッシュ値が必要
 今回の問題ではハッシュ値は直接出力されない
 ハッシュ値の特定
 どうやればできるだけハッシュ値を出力できるか
85
md5(input)
md5(input) % 2^oddsのみ出力
Hint 3 : ハッシュ値の特定
 ハッシュ値の特定
 残りの不明箇所を推測
 推測した値が正しいか答え合わせする必要
 サーバのハッシュ値との比較
 正しい答えを知っているオラクルはサーバしかない
 どうすれば、サーバと推測した値の答え合わせができる?
86
ハッシュ値の大部分を特定!不明な箇所を推測
Hint 3 : ハッシュ値の特定
 ハッシュ値の特定
 残りの不明箇所を推測
 推測した値が正しいか答え合わせする必要
 サーバのハッシュ値との比較
 正しい答えを知っているオラクルはサーバしかない
 どうすれば、サーバと推測した値の答え合わせができる?
87
ハッシュ値の大部分を特定!不明な箇所を推測
Let’s Try!
[ebCTF 2013]
bin400 – md5colliding88
md5collidingを見てみよう89
md5collidingを見てみよう90
 下記条件を満たすPE32形式のファイルを5つ作成
 ① 5つのファイルはそれぞれ実行結果が異なること
 C:¥>1.exe
 All Eindbazen are wearing wooden
………………
 C:¥>5.exe
 All Eindbazen are cheap bastards
 ② 5つのファイルはすべて同じMD5ハッシュとなること
 $ md5sum 1.exe
 656ed3d6b9b227856f7621666ce73081 1.exe
 ………………
 $ md5sum 5.exe
 656ed3d6b9b227856f7621666ce73081 5.exe
 ③ 5つのファイルはすべて異なるSHA1ハッシュとなること
 $ sha1sum 1.exe
 d36e8ae2ad1bc32d451e04d5ee28624017130336 1.exe
 ………………
 $ sha1sum 5.exe
 b8a596e0ecbfdf7d266697c0274b34075b2147e3 5.exe
md5collidingを見てみよう91
 下記条件を満たすPE32形式のファイルを5つ作成
 ① 5つのファイルはそれぞれ実行結果が異なること
 C:¥>1.exe
 All Eindbazen are wearing wooden
………………
 C:¥>5.exe
 All Eindbazen are cheap bastards
 ② 5つのファイルはすべて同じMD5ハッシュとなること
 $ md5sum 1.exe
 656ed3d6b9b227856f7621666ce73081 1.exe
 ………………
 $ md5sum 5.exe
 656ed3d6b9b227856f7621666ce73081 5.exe
 ③ 5つのファイルはすべて異なるSHA1ハッシュとなること
 $ sha1sum 1.exe
 d36e8ae2ad1bc32d451e04d5ee28624017130336 1.exe
 ………………
 $ sha1sum 5.exe
 b8a596e0ecbfdf7d266697c0274b34075b2147e3 5.exe
ハッシュ値が衝突するMD5ファイルを5つ作成してください
注意点
 bin400用のサーバは用意してません
 プロのexeこわい
 作成したファイルは以下を確認してください
 ① 実行結果
 指定の出力となっていること
 ② md5結果
 同じmd5ハッシュ値を出力すること
 ③ sha1結果
 異なるsha1ハッシュ値を出力すること
92
今回の勉強会ではサーバを用意していないため、
作成した5つのファイルの確認を上記手順で行ってください
MD593
MD5の構造94
 Merkle-Damgård構造
 SHA-1, SHA-2も同様の構造
内部
状態𝐼𝑉 …
Hello, World
m1 m2 m3 pad
処
理
R
処
理
R
処
理
R
処
理
R
出力
関数
e4d7f1b4ed2e42d15898f4b27b019da4
MD5の構造95
 Merkle-Damgård構造
 SHA-1, SHA-2も同様の構造
内部
状態𝐼𝑉 …
Hello, World
m1 m2 m3 pad
処
理
R
処
理
R
処
理
R
処
理
R
出力
関数
e4d7f1b4ed2e42d15898f4b27b019da4
注目!
MD5のラウンド処理96
 メッセージを512bit(32bit*16)ごとに切り分け
 512bitのブロックに対して64回処理を実施する
関数Fの処理は変化しますが、
複雑になるため省略します
MD5のラウンド処理97
𝐼𝑉 128bit(固定値)
A B C D
32bit*4に分割
代入
m1
MD5のラウンド処理98
𝐼𝑉
A B C D
m1[0]
512bitメッセージをさらに16個に分割
m1[15]m1[1] …
① F関数を通す
② 分割メッセージを足す
③ 固定値Kを足す
④ ローテーションシフト
MD5のラウンド処理99
𝐼𝑉
A B C D
m1[15]m1[1] …
m1[0]の出力を入力とし、
m1[1]を用いて同様の処理を
実施
MD5のラウンド処理100
…
2巡目に突入!
m1[0] m1[15]m1[1] …
入力メッセージは1巡目と同じ
2巡目はF関数の処理が変更!
101
…
…
…
…
102
…
…
…
…
512bitのメッセージブロックに対し
16回の処理を4巡実施
最後の出力をIHVと呼ぶ
MD5の構造103
 Merkle-Damgård構造
 SHA-1, SHA-2も同様の構造
𝐼𝑉 …
Hello, World
m1 m2 pad
処
理
R
処
理
R
処
理
R
出力
関数
e4d7f1b4ed2e42d15898f4b27b019da4
1回の処理Rの説明
𝐼𝐻𝑉
注目!
MD5のラウンド処理104
𝐼𝐻𝑉
A B C D
m2[15]m2[1]
…
…
2回目のラウンド処理からは
IVではなくIHVが入力
105
…
…
…
…
同様に16回の処理を4巡実施
MD5の構造106
 Merkle-Damgård構造
 SHA-1, SHA-2も同様の構造
𝐼𝑉 …
Hello, World
m1 m2 pad
処
理
R
処
理
R
処
理
R
出力
関数
e4d7f1b4ed2e42d15898f4b27b019da4
𝐼𝐻𝑉 𝐼𝐻𝑉
padまで繰り返した
IHVを出力
伝えたかったこと
 複雑な処理を暗記してほしいわけではなく
 伝えたかったこと1
 これ正攻法で解析は無理だな、という感覚
107
伝えたかったこと
 複雑な処理を暗記してほしいわけではなく
 伝えたかったこと1
 これ正攻法で解析は無理だな、という感覚
 伝えたかった事2
 #3#4の参加者の人たちはこう思うはず。
 あれ?ハッシュ関数ってブロック暗号に似てない?
108
FEAL-4
MD5の衝突109
Wangの衝突攻撃110
 2004年 WangらによりMD5の衝突攻撃が報告
 Crypto2004(暗号のトップカンファレンス)
 正式な発表でなくランプセッションで発表
 事前のePrintでみんな興味深々
 一気に世界的なニュースに
無名の女性研究者が
一晩で世界を変えた!
色んな裏話もあるらしい
Slashdot.も白熱 Schneier神も白熱
MD5の衝突とは111
𝐼𝑉
m0
ℎ(𝑚)
ℎ(𝑚′)
処
理
R
𝐼𝐻𝑉
処
理
R
𝐼𝐻𝑉
処
理
R
𝐼𝑉
m’0 m’1 m’2
処
理
R
𝐼𝐻𝑉
処
理
R
𝐼𝐻𝑉
処
理
R
m1 m2
mとm’という2つの
異なるメッセージを入力
h(m)とh(m’)が
同じ値を出力
MD5の衝突とは112
𝐼𝑉
m0
ℎ(𝑚)
ℎ(𝑚′)
処
理
R
𝐼𝐻𝑉
処
理
R
𝐼𝐻𝑉
処
理
R
𝐼𝑉
m’0 m’1 m’2
処
理
R
𝐼𝐻𝑉
処
理
R
𝐼𝐻𝑉
処
理
R
m1 m2
mとm’という2つの
異なるメッセージを入力
h(m)とh(m’)が
同じ値を出力
出力の「差分」
ΔH=h(m)-h(m’)=0
と場合、衝突
差分解析(#3#4でやったやつ)
 入力情報ペアに差分を与えて、
出力ペアの差分を観測
 [参考]FEALの差分解析
 1.ラウンドごとの入出力差分解析
 2.1を元に全体の入出力差分解析
 この考え方をMD5に適用!
 MD5の差分パスを見つけるなんてCTFでは出ない
 研究レベルの難問
 衝突探索の考え方だけ説明
113
MD5の差分解析114
𝐼𝑉
m0 m1 m2
ℎ(𝑚)
ℎ(𝑚′)
処
理
R
𝐼𝐻𝑉
処
理
R
𝐼𝐻𝑉
処
理
R
𝐼𝑉
m’0 m’1 m’2
処
理
R
𝐼𝐻𝑉′
処
理
R
𝐼𝐻𝑉′
処
理
R
ΔH = h(m)-h(m’)ΔH0=IHV0-IHV0’ ΔH1=IHV1-IHV1’
MD5の差分解析115
𝐼𝑉
m0 m1 m2
ℎ(𝑚)
ℎ(𝑚′)
処
理
R
𝐼𝐻𝑉
処
理
R
𝐼𝐻𝑉
処
理
R
𝐼𝑉
m’0 m’1 m’2
処
理
R
𝐼𝐻𝑉′
処
理
R
𝐼𝐻𝑉′
処
理
R
ΔH = h(m)-h(m’)ΔH0=IHV0-IHV0’ ΔH1=IHV1-IHV1’
ΔH0を打ち消すような
ΔH1を発生させる
MD5の差分解析116
𝐼𝑉
m0 m1 m2
ℎ(𝑚)
ℎ(𝑚′)
処
理
R
𝐼𝐻𝑉
処
理
R
𝐼𝐻𝑉
処
理
R
𝐼𝑉
m’0 m’1 m’2
処
理
R
𝐼𝐻𝑉′
処
理
R
𝐼𝐻𝑉′
処
理
R
ΔH = h(m)-h(m’)ΔH0=IHV0-IHV0’ ΔH1=IHV1-IHV1’
ΔH0を打ち消すような
ΔH1を発生させる
IHVとIHV’が
同じ値となる
MD5の差分解析117
𝐼𝑉
m0 m1 m2
ℎ(𝑚)
ℎ(𝑚′)
処
理
R
𝐼𝐻𝑉
処
理
R
𝐼𝐻𝑉
処
理
R
𝐼𝑉
m’0 m’1 m’2
処
理
R
𝐼𝐻𝑉′
処
理
R
𝐼𝐻𝑉′
処
理
R
ΔH = h(m)-h(m’)ΔH0=IHV0-IHV0’ ΔH1=IHV1-IHV1’
ΔH0を打ち消すような
ΔH1を発生させる
IHVとIHV’が
同じ値となる
以降のmとm’が
同じであれば
h(m)とh(m’)は
衝突
Wangの攻撃
 ΔH0を打ち消すΔH1を出力する入力ペアを効率よく探索する
手法を提案
 Wangの発表のあとMD5に対する攻撃が活発化
 Klimaや佐々木らによりさらに高速化
 数秒で衝突探索できるまでに発展
118
[1] How to break MD5 and other hash functions, Xiaoyun Wang et al.,
http://merlot.usc.edu/csac-f06/papers/Wang05a.pdf
[3] On collisions for MD5, M. Stevens,
http://www.win.tue.nl/hashclash/On%20Collisions%20for%20MD5%2
0-%20M.M.J.%20Stevens.pdf
[2] Finding MD5 Collisions on a Notebook PC Using Multi-message
Modifications, V. Klima, http://eprint.iacr.org/2005/102.pdf
Wangの攻撃
 ΔH0を打ち消すΔH1を出力する入力ペアを効率よく探索する
手法を提案
 Wangの発表のあとMD5に対する攻撃が活発化
 Klimaや佐々木らによりさらに高速化
 数秒で衝突探索できるまでに発展
119
[1] How to break MD5 and other hash functions, Xiaoyun Wang et al.,
http://merlot.usc.edu/csac-f06/papers/Wang05a.pdf
[3] On collisions for MD5, M. Stevens,
http://www.win.tue.nl/hashclash/On%20Collisions%20for%20MD5%2
0-%20M.M.J.%20Stevens.pdf
[2] Finding MD5 Collisions on a Notebook PC Using Multi-message
Modifications, V. Klima, http://eprint.iacr.org/2005/102.pdf
自分で「差分パス」を発見するのは難しい
→ 先人の知恵に頼る
FastColl
 あるメッセージから同じハッシュ値を出力する2つのメッセー
ジを出力するツール
 Wangの攻撃を改良したFast Collision Attackを実装
 下記URLからダウンロード可能
 https://marc-stevens.nl/research/software/download.php?fastcoll_v1.0.
0.5-1_source.zip
 ビルド手順
 # apt-get install libboost-all-dev
 # apt-get install lib32z1-dev
 # apt-get install libbz2-dev
 # g++ *.cpp *.hpp -lboost_program_options -lboost_filesystem -
lboost_system
120
FastCollをやってみた121
2つのバイナリを
出力
同一のMD5出力
異なるSHA1出力
超簡単にMD5の衝突メッセージをGET
FastCollをやってみた122
1024bit(512bit*2)
を末尾に付加して、MD5の
値を衝突させている
元ファイル
FastColl
Chosen Prefix Collision
 MD5の衝突攻撃:あるメッセージと衝突するメッセージを
探索
 Chosen Prefix Collison:任意の2つのメッセージを衝突させら
れる接尾メッセージを探索
 異なる12個の任意のPDFのハッシュ値を衝突
 PS3を用いて2日間で実施
123
Hello, World!
Goodbye, World!
a3hae,3x
esd7dh0s+
+
ekah397hal..
suffixを探索!
Hash Crash
 Chosen Prefix Collision 用のツール
 CUDA環境が必要
 下記URLで公開
 https://marc-stevens.nl/p/hashclash/
124
[再掲]md5colliding125
 下記条件を満たすPE32形式のファイルを5つ作成
 ① 5つのファイルはそれぞれ実行結果が異なること
 C:¥>1.exe
 All Eindbazen are wearing wooden
………………
 C:¥>5.exe
 All Eindbazen are cheap bastards
 ② 5つのファイルはすべて同じMD5ハッシュとなること
 $ md5sum 1.exe
 656ed3d6b9b227856f7621666ce73081 1.exe
 ………………
 $ md5sum 5.exe
 656ed3d6b9b227856f7621666ce73081 5.exe
 ③ 5つのファイルはすべて異なるSHA1ハッシュとなること
 $ sha1sum 1.exe
 d36e8ae2ad1bc32d451e04d5ee28624017130336 1.exe
 ………………
 $ sha1sum 5.exe
 b8a596e0ecbfdf7d266697c0274b34075b2147e3 5.exe
方針126
 方針1:Chosen Prefix Attackを利用
 ① 5つのPE32バイナリを作成
 ② それぞれにChosen Prefix Attackを利用しハッシュ値をそろえる
 時間がかかる。CTF期間中にできる?
 方針2:FastCollを利用
 ① 5つの出力をする1つのバイナリを作成
 ② FastCollを利用し衝突するメッセージを導出
 ③ 衝突メッセージを5つに増やす
5つの出力?
衝突メッセージ
を増やす?
実習
 とりあえずやってみましょう
 (さっきと同じ)解けた人はおまけをやってみてください
 Plaid CTF 2014 – Parlor
 nc katagaitai.orz.hm 4321 (or 14321, 24321, 34321)
 もっと難しい衝突問題がやりたい人
 HITCON CTF 2014 – wtf6
 サーバ準備してないけど問題は下記からDL可能
 https://github.com/ctfs/write-ups-2014/tree/master/hitcon-ctf-
2014/wtf6
 質問、要望、音楽のリクエストなど→ #katagaitaiCTF
40分127
FAQ
 Q1. PE32バイナリの入手方法は?
 A1.1. Visual Studioでexeファイルを作るとか
 A1.2 mingw32で頑張る
 インストール&使い方(Ubuntu 14.04 LTS)
 # sudo apt-get install mingw32
 # i586-mingw32msvc-gcc test.c
 Q2. FastCollがビルドできない
 A2. boostが必要。数ページ前を参考に。
128
解答(FastColl)129
 ① 5つの出力をする1つのバイナリを作成
 ② FastCollを利用し衝突するメッセージを導出
 ③ 衝突メッセージを5つに増やす
解答(5つの出力)130
解答(5つの出力)
 ハッシュに関係ないパラメータ(ファイル名など)で出力
を変更するコードを生成
 例)自身のファイル名で出力を変更
 同じバイナリでもファイル名が変わると出力が変わる
131
解答(5つの出力)
 ファイル名を変更して実行すると出力が変わる
 もちろん現状では同じMD5、SHA1を出力する
132
解答(衝突ペアの生成)
 FastCollを利用し衝突ペアを生成
 MD5で衝突を起こし、SHA1ペアは異なるメッセージペア
133
2つのバイナリを
出力
同一のMD5出力
異なるSHA1出力
解答(衝突ペアの生成)
 衝突ペアのファイル名をそれぞれ変更し実行
 元データと同様の出力
 PE32形式は末尾に不要データが付与されても無視
134
条件を満たす2つのメッセージを手に入れた
解答(衝突ペアの増加)
 FASTCOLLによりm2, m’2が付与されたと仮定
 下記メッセージが衝突
 md5[m1 m2]
 md5[m1 m’2]
135
m1
R
m2
R
m’2
R
解答(衝突ペアの増加)
 さらに[m1 m2]にFASTCOLLによりm3, m’3が付与されたと仮定
 下記メッセージが衝突
 md5[m1 m2 m3]
 md5[m1 m’2 m’3]
136
m1
R
m2
R
m’2
R
m3
R
m’3
R
解答(衝突ペアの増加)
 さらに[m1 m2]にFASTCOLLによりm3, m’3が付与されたと仮定
 下記メッセージが衝突
 md5[m1 m2 m3]
 md5[m1 m’2 m’3]
137
m1
R
m2
R
m’2
R
m3
R
m’3
R
[m1 m’2]にm3, m’3を付与
m3
R
m’3
R
解答(衝突ペアの増加)
 さらに[m1 m2]にFASTCOLLによりm3, m’3が付与されたと仮定
 下記メッセージが衝突
 md5[m1 m2 m3]
 md5[m1 m’2 m’3]
138
m1
R
m2
R
m’2
R
m3
R
m’3
R
[m1 m’2]にm3, m’3を付与
m3
R
m’3
R
下記4メッセージが衝突
md5[m1 m2 m3]
md5[m1 m2 m’3]
md5[m1 m’2 m3]
md5[m1 m’2 m’3]
→ 倍々ゲームで衝突
メッセージを増殖可能
解答(衝突ペアの増加)139
 1_msg1.exe = 1.exe+m2
 1_msg2.exe = 1.exe+m’2
1.exe
R
m2
R
m’2
R
解答(衝突ペアの増加)
 1_msg1.exeからさらに衝突ペアを導出
140
解答(衝突ペアの増加)141
 1_msg1_msg1.exe = 1.exe+m2+m3
 1_msg1_msg2.exe = 1.exe+m2+m’3
1.exe
R
m2
R
m’2
R
m3
R
m’3
R
解答(衝突ペアの増加)
 付与されたデータ部分を抽出
 data1 = m3
 data2 = m’3
 それぞれ1_msg2.exeに連結する
142
解答(衝突ペアの増加)143
 1_msg1_msg1.exe = 1.exe+m2+m3
 1_msg1_msg2.exe = 1.exe+m2+m’3
 1_msg2_msg1.exe = 1.exe+m’2+m3
 1_msg2_msg2.exe = 1.exe+m’2+m’3
m1
R
m2
R
m’2
R
m3
R
m’3
R
m3
R
m’3
R
解答(衝突ペアの増加)
 下記の特性を持つ4つのメッセージを導出
 MD5ハッシュはすべて衝突
 SHA1ハッシュはすべて異なる
144
メッセージを5個まで増やして、
それぞれのファイル名を変更すればOK
参考文献
 [1] How to break MD5 and other hash functions, Xiaoyun Wang et al., http://merlot.usc.edu/csac-
f06/papers/Wang05a.pdf
 [2] Finding MD5 Collisions on a Notebook PC Using Multi-message Modifications, V. Klima,
http://eprint.iacr.org/2005/102.pdf
 [3] On collisions for MD5, M. Stevens, http://www.win.tue.nl/hashclash/On%20Collisions%20for%
20MD5%20-%20M.M.J.%20Stevens.pdf
 [4] Free Start Collision for full SHA-1, M. Stevens et al., https://marc-stevens.nl/research/papers/K
PS_freestart80.pdf
 [5] The Keccak sponge function family, Guido Bertoni et al., http://keccak.noekeon.org/specs_sum
mary.html
 [5] 新版暗号技術入門 秘密の国のアリス, 結城浩
 [6] 暗号技術大全, Bruce Schneier
145
Writeups & Implressions146
147
 katagaitai勉強会#5の開催後に見つけたcryptoのwriteupや感想です。
 漏れがあれば、連絡いただけると嬉しいです。
 Parlor編
 https://gist.github.com/icchyr/e07035fd52289ab491dbd71910af1467
 icchyrさんによるwriteup。C++すげー。
 http://www.slideshare.net/sonickun/katagaitai-ctf-5-med-parlor-plaid-ctf-
2014
 y_hag(Sonickun)さんによるwriteup。丁寧でこの勉強会資料が不要な勢い。
 http://haberd4shery.tumblr.com/post/149744686783/katagaitai-ctf勉強会-感
想など
 haberd4sheryさんによるwriteup。宿題の提出ありがとうございます。
 https://gist.github.com/Charo-IT/7d7281e56dfc66e0c5b0e6643267c9a6
 Charo_ITさんによるwriteup。Cとrubyの組み合わせ一本。
#5 Writeups & Impressions
148
 katagaitai勉強会#5の開催後に見つけたcryptoのwriteupや感想です。
 漏れがあれば、連絡いただけると嬉しいです。
 hashme&MD5colliding編
 https://gist.github.com/inaz2/4128aa4bbda194ea98d3d18ddafa8a39
 inaz2さんによるwriteup。よくブログ見てます。
 https://gist.github.com/elliptic-shiho/242fb0bda5d8cead20a05fe1f36b9868
 elliptic-shihoさんによるwriteup。よくtwitter見てます。
 https://gist.github.com/icchyr/63ead572d4e1ba7e12b493b2f4b3087a
 icchyrさんによるwriteup。main()で処理するところがicchyさんらしさですかね。ごめんなさ
い、適当に言いました。
 https://gist.github.com/Charo-IT/61903c3ad41928a99705bc6b6222796d
 Charo_ITさんによるwriteup。Rubyです。さすが。
 http://ydfj.blogspot.jp/2016/08/katagaitaictf5-med.html?spref=tw
 Theoldmoon0602(ふるつき)さんによるwriteup&感想。Pwntoolすごいですよね。あと解説を
書いてくれるのが助かります。Parlorも頑張ってください。
#5 Writeups & Impressions
149
 katagaitai勉強会#5の開催後に見つけたcryptoのwriteupや感想です。
 漏れがあれば、連絡いただけると嬉しいです。
 hashme&MD5colliding編
 http://fish.minidns.net/news/78
 Kanataさんの感想。暗号の世界は一部の偉人(神)で回っているのです。そして余談ス
ライドは消したので当日の参加者限定です。
 http://hama.hatenadiary.jp/entry/2016/07/21/211211
 hamaさんの感想。院試終わったらParlorをお願いします。
 http://turn-up.hatenablog.com/entry/2016/07/17/225522
 Turn_upさんのwriteup&感想。Koshigaitaすぎですね。
 https://kimiyuki.net/blog/2016/08/28/hack-you-2014-hashme/
 https://kimiyuki.net/blog/2016/08/28/ebctf-2013-md5colliding/
 ki6o4さんによるwriteup。数式で書いてくれてますねー。でもちょっと怪しい?
 http://kotamanegi.hatenablog.com/entry/2016/08/30/235201
 こたまねぎさんによる感想。ぜひParlorも取り組んでみてください。
#5 Writeups & Impressions

More Related Content

What's hot

目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
zk-SNARKsの仕組みについて
zk-SNARKsの仕組みについてzk-SNARKsの仕組みについて
zk-SNARKsの仕組みについてts21
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 
CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料SECCON Beginners
 
SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリーSQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリーke-m kamekoopa
 
RSA鍵生成脆弱性ROCAの紹介
RSA鍵生成脆弱性ROCAの紹介RSA鍵生成脆弱性ROCAの紹介
RSA鍵生成脆弱性ROCAの紹介MITSUNARI Shigeo
 
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかRustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかShunsukeNakamura17
 
僕がつくった 70個のうちの48個のWebサービス達
僕がつくった 70個のうちの48個のWebサービス達僕がつくった 70個のうちの48個のWebサービス達
僕がつくった 70個のうちの48個のWebサービス達Yusuke Wada
 
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編京大 マイコンクラブ
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとはTakuya Akiba
 
とある診断員とSQLインジェクション
とある診断員とSQLインジェクションとある診断員とSQLインジェクション
とある診断員とSQLインジェクションzaki4649
 
Use After Free 脆弱性攻撃を試す
Use After Free 脆弱性攻撃を試すUse After Free 脆弱性攻撃を試す
Use After Free 脆弱性攻撃を試すmonochrojazz
 
ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門Eita Sugimoto
 
えっ今日はハッキングしてもいいのか?(CTF Web入門)
えっ今日はハッキングしてもいいのか?(CTF Web入門)えっ今日はハッキングしてもいいのか?(CTF Web入門)
えっ今日はハッキングしてもいいのか?(CTF Web入門)otya mura
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界Preferred Networks
 

What's hot (20)

目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
zk-SNARKsの仕組みについて
zk-SNARKsの仕組みについてzk-SNARKsの仕組みについて
zk-SNARKsの仕組みについて
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料
 
SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリーSQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリー
 
RSA鍵生成脆弱性ROCAの紹介
RSA鍵生成脆弱性ROCAの紹介RSA鍵生成脆弱性ROCAの紹介
RSA鍵生成脆弱性ROCAの紹介
 
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかRustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったか
 
僕がつくった 70個のうちの48個のWebサービス達
僕がつくった 70個のうちの48個のWebサービス達僕がつくった 70個のうちの48個のWebサービス達
僕がつくった 70個のうちの48個のWebサービス達
 
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
 
とある診断員とSQLインジェクション
とある診断員とSQLインジェクションとある診断員とSQLインジェクション
とある診断員とSQLインジェクション
 
Use After Free 脆弱性攻撃を試す
Use After Free 脆弱性攻撃を試すUse After Free 脆弱性攻撃を試す
Use After Free 脆弱性攻撃を試す
 
ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門
 
えっ今日はハッキングしてもいいのか?(CTF Web入門)
えっ今日はハッキングしてもいいのか?(CTF Web入門)えっ今日はハッキングしてもいいのか?(CTF Web入門)
えっ今日はハッキングしてもいいのか?(CTF Web入門)
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
 

Similar to katagaitai CTF勉強会 #5 Crypto

Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Kei IWASAKI
 
クラウド温泉への誘い 2015-08-01 「第48回データマイニング+WEB@東京」版
クラウド温泉への誘い 2015-08-01 「第48回データマイニング+WEB@東京」版クラウド温泉への誘い 2015-08-01 「第48回データマイニング+WEB@東京」版
クラウド温泉への誘い 2015-08-01 「第48回データマイニング+WEB@東京」版Yoshiyuki Nakamura
 
std::pin の勘所
std::pin の勘所std::pin の勘所
std::pin の勘所Hiroaki Goto
 
クラウドではじめるリアルタイムデータ分析 #seccamp
クラウドではじめるリアルタイムデータ分析 #seccampクラウドではじめるリアルタイムデータ分析 #seccamp
クラウドではじめるリアルタイムデータ分析 #seccampMasahiro NAKAYAMA
 
こんな辛いテストはいやだ
こんな辛いテストはいやだ こんな辛いテストはいやだ
こんな辛いテストはいやだ Takuya Mikami
 
元運用担当者が,現役時代に本当に欲しかったもの. Osc2014 kansai@kyoto terraform introduction
元運用担当者が,現役時代に本当に欲しかったもの. Osc2014 kansai@kyoto terraform introduction元運用担当者が,現役時代に本当に欲しかったもの. Osc2014 kansai@kyoto terraform introduction
元運用担当者が,現役時代に本当に欲しかったもの. Osc2014 kansai@kyoto terraform introductionMasahito Zembutsu
 
かわいくなろうとしたら語彙力が下がった話
かわいくなろうとしたら語彙力が下がった話かわいくなろうとしたら語彙力が下がった話
かわいくなろうとしたら語彙力が下がった話京大 マイコンクラブ
 
.NET micro FrameWork for TOPPERS (.NET基礎)@基礎勉強会
.NET micro  FrameWork for TOPPERS  (.NET基礎)@基礎勉強会.NET micro  FrameWork for TOPPERS  (.NET基礎)@基礎勉強会
.NET micro FrameWork for TOPPERS (.NET基礎)@基礎勉強会Kiyoshi Ogawa
 
2012/06/28 #ssmjp
2012/06/28 #ssmjp2012/06/28 #ssmjp
2012/06/28 #ssmjpth0x0472
 
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコムResemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコムGo Sueyoshi (a.k.a sue445)
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成Akineko Shimizu
 
Secure scheme script suite
Secure scheme script suiteSecure scheme script suite
Secure scheme script suiteTod Morita
 
Secure Scheme Script Suite
Secure Scheme Script SuiteSecure Scheme Script Suite
Secure Scheme Script Suiteshibuya_lisp
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話Masanori Masui
 
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)NTT DATA Technology & Innovation
 

Similar to katagaitai CTF勉強会 #5 Crypto (20)

Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
 
クラウド温泉への誘い 2015-08-01 「第48回データマイニング+WEB@東京」版
クラウド温泉への誘い 2015-08-01 「第48回データマイニング+WEB@東京」版クラウド温泉への誘い 2015-08-01 「第48回データマイニング+WEB@東京」版
クラウド温泉への誘い 2015-08-01 「第48回データマイニング+WEB@東京」版
 
std::pin の勘所
std::pin の勘所std::pin の勘所
std::pin の勘所
 
クラウドではじめるリアルタイムデータ分析 #seccamp
クラウドではじめるリアルタイムデータ分析 #seccampクラウドではじめるリアルタイムデータ分析 #seccamp
クラウドではじめるリアルタイムデータ分析 #seccamp
 
こんな辛いテストはいやだ
こんな辛いテストはいやだ こんな辛いテストはいやだ
こんな辛いテストはいやだ
 
元運用担当者が,現役時代に本当に欲しかったもの. Osc2014 kansai@kyoto terraform introduction
元運用担当者が,現役時代に本当に欲しかったもの. Osc2014 kansai@kyoto terraform introduction元運用担当者が,現役時代に本当に欲しかったもの. Osc2014 kansai@kyoto terraform introduction
元運用担当者が,現役時代に本当に欲しかったもの. Osc2014 kansai@kyoto terraform introduction
 
Xml Security
Xml SecurityXml Security
Xml Security
 
かわいくなろうとしたら語彙力が下がった話
かわいくなろうとしたら語彙力が下がった話かわいくなろうとしたら語彙力が下がった話
かわいくなろうとしたら語彙力が下がった話
 
bicep 0.5 pre
bicep 0.5 prebicep 0.5 pre
bicep 0.5 pre
 
.NET micro FrameWork for TOPPERS (.NET基礎)@基礎勉強会
.NET micro  FrameWork for TOPPERS  (.NET基礎)@基礎勉強会.NET micro  FrameWork for TOPPERS  (.NET基礎)@基礎勉強会
.NET micro FrameWork for TOPPERS (.NET基礎)@基礎勉強会
 
2012/06/28 #ssmjp
2012/06/28 #ssmjp2012/06/28 #ssmjp
2012/06/28 #ssmjp
 
60fpsアクションを実現する秘訣を伝授 解析編
60fpsアクションを実現する秘訣を伝授 解析編60fpsアクションを実現する秘訣を伝授 解析編
60fpsアクションを実現する秘訣を伝授 解析編
 
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコムResemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成
 
Secure scheme script suite
Secure scheme script suiteSecure scheme script suite
Secure scheme script suite
 
Secure Scheme Script Suite
Secure Scheme Script SuiteSecure Scheme Script Suite
Secure Scheme Script Suite
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話
 
SAIS/SIGMOD参加報告 in SAIS/DWS2018報告会@Yahoo! JAPAN
SAIS/SIGMOD参加報告 in SAIS/DWS2018報告会@Yahoo! JAPANSAIS/SIGMOD参加報告 in SAIS/DWS2018報告会@Yahoo! JAPAN
SAIS/SIGMOD参加報告 in SAIS/DWS2018報告会@Yahoo! JAPAN
 
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
 

Recently uploaded

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成Hiroshi Tomioka
 

Recently uploaded (9)

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
 

katagaitai CTF勉強会 #5 Crypto