Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Cracking PRNG

  • Loggen Sie sich ein, um Kommentare anzuzeigen.

Cracking PRNG

  1. 1. Cracking PRNG @_193s #Ph_ctf 1
  2. 2. (改めて)自己紹介 • @_193s • #Ph_ctf Organizer • CTF 2
  3. 3. Agenda • 前置き(RNGの話) • LCG • Mersenne Twister • ハンズオン • まとめ 3
  4. 4. 今回の発表でやること • 暗号論的に安全でないPRNGに対して攻撃する • 基本的にはアルゴリズム/実装を理解することが重 要 • いくつかの連続したPRNGの出力から次の出力を 予測する 4
  5. 5. PRNG • pseudorandom number generator - 擬似乱数生成器 • 擬似? • ランダムに見えるが実際は決定的なアルゴリズム • 擬似じゃないRNG? • TRNG (true random number generator) • hardware random number generatorとも • マウスの動き, 大気のノイズやbackground noiseなどを利用 する 5
  6. 6. PRNG • 乱数生成器(RNG)のうち決定的なものを指す • そのままの意味ですね 6
  7. 7. CSPRNG • cryptographically secure pseudo-random number generator • 暗号論的擬似乱数生成器 • PRNGのうち暗号論的に安全なものを指す • Dual_EC_DRBGも 7
  8. 8. LCG 8
  9. 9. LCG - 線形合同法 • 最も基本的な擬似乱数生成アルゴリズム • Linear congruential generator • 古い(?)glibcのsrand/randや
 java.util.Randomなどでも使われている 9
  10. 10. LCG • 
 
 X: 乱数列, m > 0, 0 < a < m, 0 <= c < m,
 X_0: seed
 
 で与えられる • たまに用いられる用語
 m: modulus
 a: multiplier
 c: increment 10
  11. 11. LCG • パラメータ(a, c, m)は一般にpublic • https://en.wikipedia.org/wiki/ Linear_congruential_generator とかに載ってる 11
  12. 12. LCG • パラメータ(a, c, m)は一般にpublic • 1つ乱数が得られればその後/前の乱数列も
 予測できる • !! 12
  13. 13. LFSR - 線形帰還シフトレジスタ • linear feedback shift register • これも有名ですが今回は省略します • 最近のglibcはこっち 13
  14. 14. Mersenne Twister 14
  15. 15. Mersenne Twister • 2^19937 - 1の周期を持つ擬似乱数生成アルゴリズム • Mersenne Twisterには2つのバージョンがあり,
 そのうち最新で広く使われている方がmt19937 • 暗号学的に安全ではないとされている 15
  16. 16. mt19937 • 開発者によるMTの実装 • http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/ MT2002/CODES/mt19937ar.c • https://gist.github.com/193s/ eea5c00dbd1fbb99b1ce • コードを追ってみましょう 16
  17. 17. mt19937 • MTの内部状態? • L53: static unsigned long mt[N];
 /* the array for the state vector */
 
 L54: static int mti=N+1;
 /* mti==N+1 means mt[N] is not initialized */ • L47: #define N 624 • 624個の要素を持つ配列(mt)と整数値(mti) 17
  18. 18. mt19937 - 内部状態の再現 • 少なくとも連続した624個の(mtが返した)乱数値が 必要 • 623+624 = 1247個あれば十分 18
  19. 19. mt19937 19 mti: N 初期化済みのMT 0 1 2 623 genrand Tempering … ?!
  20. 20. Tempering • /* Tempering */
 y ^= (y >> 11);
 y ^= (y << 7) & 0x9d2c5680UL;
 y ^= (y << 15) & 0xefc60000UL;
 y ^= (y >> 18); • これだけ 20
  21. 21. Tempering • Temperingと呼ばれる処理は可逆 • reverse_tempering? • 拾ってきたコードを組み合わせて実装しました • https://gist.github.com/193s/ 52cf7628825b23525233 21
  22. 22. Library? • https://github.com/altf4/untwister • 良さげなツールを見つけた(試してない) • “Bsides LV 2014 - Untwisting The Mersenne Twister: How I killed the PRNG - 05Aug2014”
 https://www.youtube.com/watch?v=f841Y7d3oDo 22
  23. 23. 実践 23
  24. 24. ハンズオン • VolgaCTF Quals CTF 2015: lcg (Crypto 100) • flagは入れ替えてあります • 問題ファイルは http://bit.ly/1NQFQQb 24
  25. 25. ヒント (1/2) • lcgベースのVernam暗号 • lcgのパラメータ(seed, a, c)がkeyになっている • keyはos.urandomから生成しているので予測不能 • X_{n+1} = (a*X + c) mod m 25
  26. 26. ヒント (2/2) • 元の平文はpng • pngのシグネチャから最初の4バイトぐらいは予 測できる • まずlcgのパラメータが求まる? 26
  27. 27. 解けましたか? 27
  28. 28. 解答 • やるだけです 28
  29. 29. 解説 29 • pngの先頭8バイト: [137, 80, 78, 71, 13, 10, 26, 10] • これとflag.enc.binをxorして整数値に変換すると • round: [40464, 44749, 59984, 60098] • 40464*a + c ≡ 44749 (mod 65521) • 44749*a + c ≡ 59984 (mod 65521)
  30. 30. 解説 30 • 40464*a + c ≡ 44749 (mod 65521)
 44749*a + c ≡ 59984 (mod 65521) • 4285*a ≡ 15235 (mod 65521) • a = 15235*modinv(4285, 65521) • c = (44749 - 40464*a) mod 65521
  31. 31. 解説 31 • a = 965365775, c = 50579 • あとはlcgのパラメータが復元できたので復号する だけ • 詳しくはwriteupを読みましょう • https://github.com/smokeleeteveryday/ CTF_WRITEUPS/tree/master/2015/VOLGACTF/ crypto/lcg
  32. 32. まとめ • PRNGの代表的な例として
 lcgとMersenne Twisterを紹介しました • CTFでもたまに役に立つ 32
  33. 33. References • “Cracking Random Number Generators” . https://jazzy.id.au/ 2010/09/20/cracking_random_number_generators_part_1.html • “PRNG vs. CSPRNG” . http://www.karlin.mff.cuni.cz/jarniskola/files/ prednasky/prng_1_linkeova.pdf • “Mersenne Twister Home Page” . http://www.math.sci.hiroshima-u.ac.jp/ ~m-mat/MT/mt.html • “Design and Implementation of a Quantum True Random Number Gene rator” . https://www.defcon.org/images/defcon-17/dc-17-presentations/ defcon-17-sean_boyce-quantum_random.pdf • “Secure Random by Default” . http://www.slideshare.net/dakami/yet- another-dan-kaminsky-talk-black-ops-2014 • “Bsides LV 2014 - Untwisting The Mersenne Twister: How I killed the PRNG - 05Aug2014” . https://www.youtube.com/watch?v=f841Y7d3oDo 33
  34. 34. おしまい 👏 34

×