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
Crypto講義資料
Search
palloc
March 27, 2016
Technology
2
14k
Crypto講義資料
CpawCTF勉強会のCrypto講義資料です。
palloc
March 27, 2016
Tweet
Share
More Decks by palloc
See All by palloc
スタートアップでAIを使うときの壁
palloc
0
1.5k
異常検知の最新事情と給与の話
palloc
4
4.5k
Other Decks in Technology
See All in Technology
生成AIが変えるデータ分析の全体像
ishikawa_satoru
0
150
AWS Lambdaと歩んだ“サーバーレス”と今後 #lambda_10years
yoshidashingo
1
170
Amplify Gen2 Deep Dive / バックエンドの型をいかにしてフロントエンドへ伝えるか #TSKaigi #TSKaigiKansai #AWSAmplifyJP
tacck
PRO
0
380
いざ、BSC討伐の旅
nikinusu
2
780
【若手エンジニア応援LT会】ソフトウェアを学んできた私がインフラエンジニアを目指した理由
kazushi_ohata
0
150
New Relicを活用したSREの最初のステップ / NRUG OKINAWA VOL.3
isaoshimizu
2
610
BLADE: An Attempt to Automate Penetration Testing Using Autonomous AI Agents
bbrbbq
0
310
なぜ今 AI Agent なのか _近藤憲児
kenjikondobai
4
1.4k
iOS/Androidで同じUI体験をネ イティブで作成する際に気をつ けたい落とし穴
fumiyasac0921
1
110
OCI Security サービス 概要
oracle4engineer
PRO
0
6.5k
ドメインの本質を掴む / Get the essence of the domain
sinsoku
2
150
【Pycon mini 東海 2024】Google Colaboratoryで試すVLM
kazuhitotakahashi
2
520
Featured
See All Featured
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
The Pragmatic Product Professional
lauravandoore
31
6.3k
Building an army of robots
kneath
302
43k
Documentation Writing (for coders)
carmenintech
65
4.4k
Music & Morning Musume
bryan
46
6.2k
Practical Orchestrator
shlominoach
186
10k
Art, The Web, and Tiny UX
lynnandtonic
297
20k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
506
140k
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
Transcript
$SZQUPߨٛ ぱろっく 1
ここまで本当にお疲れさまです! 2
Reversingでかなり疲れてると思いま す、難しいですよね。 3
これで最後なので 頑張っていきましょう! 4
講義概要 暗号とは[p5-] 換字式暗号(シーザー暗号)[p23-] 換字式暗号(ヴィジュネル暗号)[p29-] 公開鍵暗号(RSA暗号)[p52-]
参考資料[p73-] 5
暗号とは 通信相手以外の第3者に通信の内容を読まれないように する技術。 6
A君 Bさん 好きです! 付き合ってくださ い! 手 紙 Bさん の下駄 箱
C君 7
A君 Bさん 好きです! 付き合ってくださ い! 手 紙 Bさん の下駄 箱
C君 A君はBさんの ことが好き だったのか! 8
暗号化すると? 9
A君 Bさん 魚けぼすまげあ! ばばぐとろぢざぴむ ん! 手 紙 Bさん の下駄 箱
C君 何言ってんだ こいつ 10
暗号とは 通信相手以外の第3者に通信の内容を読まれないように する技術。 英語では「Cryptograph」「Cipher」。 CTFではよくcrypto(クリプト)と呼ばれています。 11
暗号に似ている技術も紹介 12
ハッシュ関数 入力したデータを表す数値(ハッシュ値)を返す関数。 データ検索の高速化やデータ改ざんの検知に用いられる。 13
暗号学的ハッシュ関数 情報セキュリティで用いるのに適しているハッシュ関数。 同じハッシュ値が事実上生まれない必要がある。 ハッシュ値から元のデータを求められない必要がある。 14
暗号学的ハッシュ関数の例 MD5…128bitのハッシュ値を作る。 「aaa」 47bce5c74f589f4867dbd57e9ca9f808 SHA-1…160bitのハッシュ値をつくる。 「aaa」
7e240de74fb1ed08fa08d38063f6a6a91462a815 15
暗号とハッシュ関数 文章を読めなくするという行為自体は同じ。 暗号は、復号して元のデータをよむのが目的だが、ハッ シュ値は、元のデータに戻せない。 16
では、どんな暗号があるか 見ていきましょう。 17
暗号の種類 古典暗号 換字式暗号 : 別の文字を割り当てる暗号 転置式暗号 :
文字を並び替える暗号 現代暗号 共通鍵暗号 : 一つの鍵で暗号化&復号する暗号 公開鍵暗号 : 暗号化と復号でそれぞれ別の鍵を 使う暗号 18 ※大雑把に分類しています。
暗号の種類 古典暗号 換字式暗号 : 別の文字を割り当てる暗号 転置式暗号 :
文字を並び替える暗号 現代暗号 共通鍵暗号 : 一つの鍵で暗号化&復号する暗号 公開鍵暗号 : 暗号化と復号でそれぞれ別の鍵を 使う暗号 19 ※大雑把に分類しています。
まずは、換字式暗号 20
換字式暗号の種類 単一式換字 シーザー暗号 多表式換字 ヴィジュネル暗号 21
換字式暗号の種類 単一式換字 シーザー暗号 多表式換字 ヴィジュネル暗号 22
シーザー暗号 古代ローマの指導者カエサルが使い始めた。 シンプルなため、軍事目的では使わず、私的な通信で用い られていた。 23
シーザー暗号 それぞれの文字をアルファベット順に従って鍵の数だけず らす暗号。 24 画像引用元:wikipedia 鍵=3
シーザー暗号 flag is simple_crypto synt vf fvzcyr_pelcgb 25 暗号化(鍵=13)
シーザー暗号 アルファベット以外は無視することが多い。 鍵が26通りしかないためブルートフォース(総当り攻撃)が 容易。 26
シーザー暗号 CTFでは、頻度分析ができないくらい短い文字列を見かけ たらシーザー暗号を疑ってみるべき。 ※頻度分析…文章に出てくるアルファベットの出現頻度を調べること。英 語の文章では、出現頻度の高いアルファベットがある程度決まっているの で、頻度分析から暗号を解読する手法がある。 27
換字式暗号 単一式換字 シーザー暗号 多表式換字 ヴィジュネル暗号 28
ヴィジュネル暗号 ヴィジュネルさんが作った暗号。 単一換字式暗号が安全じゃないよって言われ始めたため 開発された。 変換表と鍵を元に、平文を暗号化する。 29
ヴィジュネル暗号 暗号化:ヴィジュネル方陣に鍵と平文を一文字ずつ当ては め、対応する文字を並べたものを暗号文とする。 復号:暗号化の手順を暗号文と鍵を元にたどる。 30
ࢀߟ ϰΟδϡωϧํਞ 31 引用元: wikipedi a
各 行 ー ー 暗 号 ࢀߟ ϰΟδϡωϧํਞ 32
文で説明しても分かりづらいので、具 体例を見ていきましょう。 33
ヴィジュネル暗号 平文 : FLAG 鍵 : TEA とする。 ヴィジュネル方陣を使い暗号化する。 34
1文字目 : 平文 FLAG 鍵 TEA 35
1文字目 平文=「F」 鍵=「T」 36
2文字目 : 平文 FLAG 鍵 TEA 37
2文字目 平文=「L」 鍵=「E」 38
3文字目 : 平文 FLAG 鍵 TEA 39
3文字目 平文=「A」 鍵=「A」 40
4文字目 : 平文 FLAG 鍵 TEA 41
4文字目 平文=「G」 鍵=「T」 42
暗号文:「YPAZ」 43
ヴィジュネル暗号 暗号文と鍵を一文字ずつヴィジュネル方陣に当てはめると、 FLAGという文字列になる。 鍵長を変えれば無限に鍵が存在することになり、解読は難 しいとされていた。 44
暗号の種類 古典暗号 換字式暗号 : 別の文字を割り当てる暗号 転置式暗号 :
文字を並び替える暗号 現代暗号 共通鍵暗号 : 一つの鍵で暗号化&復号する暗号 公開鍵暗号 : 暗号化と復号でそれぞれ別の鍵を 使う暗号 45 ※大雑把に分類しています。
公開鍵暗号 公開鍵、秘密鍵という2種類の鍵を用意する。 暗号化する際は公開鍵、復号する際は秘密鍵で行う。 46
①公開鍵を渡す(他人に見られても問題無い) ②公開鍵で暗号化する ③暗号文を送る(傍受されても読めない) ④秘密鍵で復号する ެ։⓻҉߸ํࣜͷྲྀΕ 47
公開鍵暗号の種類 ElGamal(エルガマル)暗号 RSA暗号 楕円曲線暗号 48
CTFによく出る公開鍵暗号は? 49
公開鍵暗号の種類 ElGamal(エルガマル)暗号 RSA暗号 楕円曲線暗号 50
RSA暗号 公開鍵暗号。 現在バリバリ現役で活躍している暗号。 CTFでよく出題される暗号の一つ。(攻撃手法が沢山ある) 51
ここから数学のお話を少しだけ。 数学が苦手な方もいると思いま すが、頑張って下さい! 52
RSA暗号の仕組み 53
RSA暗号(鍵生成編) ① 素数を2つ用意する。(p,qとする) ② とする。 ③ と互いに素な数(最大公約数が1となる 数)eを決める。 ④ 公開鍵完成。( n
と e の2つ) 54 n = p×q φ(n) = (p−1)(q −1) (p−1)×(q −1) ※よく、いろいろなサイトで と表現 します。これは、オイラーの関数と呼ばれるものです。
RSA暗号(鍵生成編) ⑤ 秘密鍵をdとする。 ⑥ dを以下のように設定する。 ⑦ ↑を式変形して、↓の式を作る。 ⑧ 拡張ユークリッド互除法によりdを求める。 ⑨
秘密鍵完成。 55 ed ≡1(mod(p−1)(q −1)) ed +φ(n)(−x) =1 ※詳細は参考1[p74] ※詳細は参考2,3[p75,76]
RSA暗号(暗号化編) ① 平文をxとし、暗号文をcとする。 ② となる。 ③ おわり。 56 c =
xe modn
RSA暗号(復号編) ① となる。 ②おわり。 57 x = cd modn
RSA暗号 仕組みは以上です。 式だけでは理解しづらいので、具体的な例を見ていきましょ う。 58
RSA暗号 平文c=26とする。 各パラメータを、以下のようにする。 59 p = 5,q =11,e =
3 n = p×q n = 55
RSA暗号 秘密鍵dを求める。 60 ed ≡1(mod(p−1)(q −1)) 3d ≡1(mod40) d =
27
RSA暗号 公開鍵e,nを使い暗号文cを作る。 暗号化完了! 61 c = 263 mod55 c =
31
RSA暗号 次はこれを復号していきます。 といっても、秘密鍵dの数だけ累乗するだけ。 無事復号完了! 62 x = 3127 mod55 x
= 26
なぜRSA暗号は安全なのか 復号するには秘密鍵dが必要。 dを求める式は、 eは公開鍵なので、pとqが必要。 63 ed ≡1(mod(p−1)(q
−1))
なぜRSA暗号は安全なのか p,qはどこで使われているのか→公開鍵n 攻撃者はnを素因数分解できれば解読できる。 64 n = p×q
なぜRSA暗号は安全なのか p,qはどこで使われているのか→公開鍵n 攻撃者はnを素因数分解できれば解読できる。 65 巨大な数の素因数分解は困難! n =
p×q
RSA暗号への攻撃手法 現在512bit程度までなら素因数分解が現実的な時間で可 能。 CTFで512bit以下の公開鍵nがあれば素因数分解がほぼ できる。 66
RSA暗号への攻撃手法 平文xが短く、 のとき、暗号文 のe乗根を求めて あげれば元に戻る。 eが3などの小さい数の時は、試してみるとよい。 67 xe
< n xe
RSA暗号への攻撃手法 攻撃手法は本当に沢山あります。 CTFでよく出題されるので、暗号やりたいなという方は調べ てみてください。 数学の知識が必要となる場合が多いので、先に数学を学 ぶことをお勧めします。 68
おすすめの参考書 情報数学の基礎 サイエンス社 暗号技術入門 SBCreative 暗号理論と楕円曲線 森北出版株式会社 69
以上です。お疲れさまでした! 70
参考資料 71
(参考1)式変形の詳細 (e× d) /φ(n) = x…1 ed ≡1(mod(p−1)(q −1)) e×
d = φ(n)× x +1 これは、eとdを掛け合わせたものをΦ(n)で割った 余りが1という意味なので、以下のようにかける。 φ(n) = (p−1)(q −1) と書くことができる。これを、式変形すると、 ed +φ(n)(−x) =1 72
ed +φ(n)(−x) =1 (参考2)拡張ユークリッド互除法できる? edとΦ(n)はそれぞれ定数なので、例えば以下のよ うな式と同じ形である。 5x + 21y =1
なので、拡張ユークリッド互除法によって、dとxが整 数となる組み合わせを探せばよい。 拡張ユークリッド互除法のやり方については、次頁 を参照。 73
23x + 7y =1 (参考3)拡張ユークリッド互除法の例 上の式を満たす整数の組み合わせ(x,y)を求める。 式の意味などは省略する。 23/ 7 =
3...2 7 / 2 = 3...1 2 /1= 2...0 74 2 = 23− 7×3 1= 7− 2×3 1= 7−(23− 7×3)×3 1= 23×(−3)+ 7×10 23×(−3)+ 7×10 =1 x = −3, y =10 代入
付録 75
擬似乱数のお話 76
擬似乱数 プログラムによる計算などによって求めている擬似乱数列 による乱数。 擬似乱数を作るアルゴリズムを擬似乱数生成法、擬似乱 数を作る機械やプログラムを擬似乱数生成器と呼ぶ。 77
暗号論的擬似乱数 過去の乱数から、次の乱数を予測できないような擬似乱数 列のこと。 暗号で用いる鍵を作成するときは、暗号論的擬似乱数でな くてはならない。 CTFではわざと暗号論的擬似乱数を用いないで、鍵を推測 させる問題が出ることがある。
78
主な古典的擬似乱数生成法 平方採中法(2乗中抜き法) 線形合同法 79
主な古典的擬似乱数生成法 平方採中法(2乗中抜き法) 線形合同法 80
平方採中法 最初の数値を適当に定める。 その値を2乗し、間にある必要な桁数を次の乱数とする。 桁数が足りない時は最上位に0をつける。 81
平方採中法 3桁の乱数を4つ作ってみる。 46212 = 21353641 35362 =
12503296 50322 = 25321024 32102 = 10304100 乱数列[3536, 5032, 3210, 3041] 82
主な古典的擬似乱数生成法 平方採中法(2乗中抜き法) 線形合同法 83
線形合同法 以下の漸化式で与えられる乱数列。 A>0, B≧0, M>A, M>B 84 (A×
X n + B)modM = X n+1
線形合同法 A=13,B=57,M=89とする。 シードX 0 を12とすると、X 1 は、
このようにして、乱数を求めていく。 85 (13×12 + 57)mod89 = X 1 X 1 = 35
近年の擬似乱数 線形合同法などは、周期が短いなどの欠点がある。 そのため、メルセンヌ・ツイスタなど新しい擬似乱数が開発 されている。 86
メルセンヌ・ツイスタ http://www.math.sci.hiroshima-u.ac.jp/~m-mat/ MT/MT2002/CODES/mt19937ar.c メルセンヌ・ツイスタは2種類あって、主に使われているの はmt19937というアルゴリズム。 周期が219937-1ととても長い。
623個の今までに出現した数値があれば予測可能なため、 暗号論的ではない。 開発者のソースコード↑。 興味のある方は読んでみてください。 87