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.
CRYPT+YOU,
UNDERSTAND
TODAY!
@inaz2
Security Casual Talks 2014#2
2014/06/07
ABOUT ME
• @inaz2
• Security Engineer & Python Programmer
• Girls Idol Freak
• ブログ「ももいろテクノロジー」
• http://inaz2.hatenablog.c...
導入
3
COMPUTER SECURITY AND
CRYPTOGRAPHY
• 暗号大事
• 理論いろいろ
• 共通鍵暗号、公開鍵暗号、暗号学的ハッシュ関数、メッセージ認証コード
• 応用いろいろ
• 通信の暗号化、通信相手の認証、改ざん検知、鍵共有...
SOMETIMES CRYPT LOOKS LIKE
A BLACKBOX
• 数学むずかしい
• ガロア体、オイラーのφ関数、中国の剰余定理、楕円曲線
• 略語が多すぎてどれが何だかわからない
• TLS_ECDHE_RSA_WITH_AES...
IS IT REALLY DIFFICULT?
• 暗号という概念に限っていえば、それほど難しくない
• 全部忘れよう
• 数学的厳密性
• X.509とか802.11Xとか
• OpenSSL
• 暗号にまつわる雑多な話をします
6
本題
7
換字式暗号
• 古典暗号と呼ばれるもののひとつ
• 文字単位、あるいはブロック単位で置き換える
• 2014/05/05: NSA採用担当 (@NSACareers) さんが何か言った
• https://twitter.com/NSACare...
(ほぼ)全自動解読機あります
• http://quipqiup.com/
• 英単語辞書を使って最も英語っぽくなるように置換する
9
XORスクランブルの復元
• 某PCゲームのスクリプトデータと思われるファイル
• f2 f5 がやたらと多い、しかもちょうどいい間隔で出てくる
10
XORスクランブルの復元
• 某PCゲームのスクリプトデータと思われるファイル
• f2 f5 がやたらと多い、しかもちょうどいい間隔で出てくる
11
0d 0a (CR LF) で当たりをつけてみると、
0xff でXORされているような気が...
XORスクランブルの復元
• 某PCゲームのスクリプトデータと思われるファイル
• f2 f5 がやたらと多い、しかもちょうどいい間隔で出てくる
12
0d 0a (CR LF) で当たりをつけてみると、
0xff でXORされているような気が...
XORスクランブルの復元
• 某PCゲームのスクリプトデータと思われるファイル
• f2 f5 がやたらと多い、しかもちょうどいい間隔で出てくる
13
0d 0a (CR LF) で当たりをつけてみると、
0xff でXORされているような気が...
RC4 (RIVEST CIPHER 4)
• 共通鍵暗号方式のうち、ストリーム暗号と呼ばれるもののひとつ
• ざっくり言うと
• 鍵から特定のアルゴリズムに従って疑似乱数列(キーストリーム)を作る
• 鍵の長さは40~2048 bits、12...
RC4のバイアス問題
• 出てくる疑似乱数列があまりよろしくない
• 2バイト目が0になる確率は他の値の2倍 [Mantin and Shamir 2001]
• 100回同じ平文を暗号化して、2バイト目について出現頻度が最も高い文
字を選ぶと...
AES (ADVANCED ENCRYPTION STANDARD)
• 共通鍵暗号方式のうち、ブロック暗号と呼ばれるもののひとつ
• 入力は 128 bit 固定
• 鍵の長さは128, 192, 256 bitのうちどれか
• ざっくり言う...
暗号利用モード
• 128 bitsじゃない平文のときはどうするか?
• 128 bitsのブロックをたくさん作る。足りない部分はパディングで埋める
• これらのブロックをどうするかの方法を暗号利用モードという
• ECB mode (Elec...
• 2013/10/03: Adobeが不正アクセスにより290万人分の顧客情報が
流出したことを公表
• パスワードは暗号化して保存されていたが、ECB mode だった
• パスワードヒントを集めることで、平文が推測できてしまった
ADOB...
• 2013/10/03、Adobeが不正アクセスにより290万人分の顧客情報が
流出したことを公表
• パスワードは暗号化して保存されていたが、ECB mode だった
• パスワードヒントを集めることで、平文が推測できてしまった
ADOBE...
CBC MODE (CIPHER-BLOCK CHAINING)
• 一つ前の暗号文を事前にXORで混ぜる
• 最初のブロックについてはランダムな初期化ベクトル (IV) を混ぜる
20
http://en.wikipedia.org/wiki...
RSA (RIVEST, SHAMIR, ADLEMAN)
• 公開鍵暗号方式のひとつ
• 知られてもよい鍵(公開鍵)とダメな鍵(秘密鍵)のペアを使う
• ざっくり言うと
• 公開鍵と秘密鍵のペアを作る、鍵は実際にはただの大きな整数
• 暗号化...
もう少し詳しく
• 素数 p, q を作る
• n = p*q, e = 0x10001 として、p, q, e から d を計算する
• nのbit数がRSAの鍵長として扱われる
• 公開鍵 = (n, e)、秘密鍵 = d
• 暗号化: c...
素因数分解
• n を p, q に素因数分解できれば、秘密鍵 d が作れる
• しかし素因数分解を多項式時間で行うアルゴリズムは知られていない
• 高速素因数分解プログラム Msieve で実際にやってみる
• 256 bits なら 198...
• n を p, q に素因数分解できれば、秘密鍵 d が作れる
• しかし素因数分解を多項式時間で行うアルゴリズムは知られていない
• 高速素因数分解プログラム Msieve で実際にやってみる
• 256 bits なら 198 sec だ...
• n を p, q に素因数分解できれば、秘密鍵 d が作れる
• しかし素因数分解を多項式時間で行うアルゴリズムは知られていない
• 高速素因数分解プログラム Msieve で実際にやってみる
• 256 bits なら 198 sec だ...
RSAの使われ方
• データそのものの暗号化にはほとんど用いられない
• 累乗処理は重い。何度も繰り返し行うのには適さない
• 鍵共有
• AESなどで使う共通鍵を送るために使う
• データそのものの暗号化はAESなどで行う(ハイブリッド暗号方...
BIG BROTHER MIGHT BE
WATCHING YOU?
• RSAで鍵共有を行い、AESでデータを暗号化して送っていたとする
• もし誰かが過去の通信データを全部保存していたら?
• そのままでは暗号化されているので、当然読めない...
DH (DIFFEE-HELLMAN KEY EXCHANGE)
• 正確には暗号ではなく、鍵共有プロトコルと呼ばれるもののひとつ
• ざっくりいうと
• 素数 p とちょうどいい整数 g を互いに交換する
• 適当な数 a を作って、A = ...
PERFECT FORWARD SECRECY
• A = g^a mod p から a を逆算することは、離散対数問題と呼ばれる
• 多項式時間で解けるアルゴリズムが見つかっていない
• 通信のセッションごとに違う共通鍵を作って暗号化
• あ...
SSL/TLS’S CIPHERSUITE
• SSL/TLSにて、使用する暗号の組み合わせを表したもの
• TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
• 鍵共有にはECDHE(DHの楕円曲線版で鍵をセッションごとに...
RECAP
• いろいろ紹介しました
• 換字式暗号、XOR cipher
• RC4
• AES、暗号利用モード
• RSA
• DH
• 基礎は大事
31
REFERENCES (1/2)
• 本の虫: GNU/Linuxでお手軽に使えるCLIのファイル暗号化ツール
• http://cpplover.blogspot.jp/2013/07/gnulinuxcli.html
• On the Se...
REFERENCES (2/2)
• 自堕落な技術者の日記 : TwitterのPerfect Forward Secrecy(PFS)対応
• http://blog.livedoor.jp/k_urushima/archives/17283...
THANK YOU!
@inaz2
34
Upcoming SlideShare
Loading in …5
×

CRYPT+YOU, UNDERSTAND TODAY!

2,981 views

Published on

2014/06/07 Security Casual Talks 2014#2

Published in: Technology

CRYPT+YOU, UNDERSTAND TODAY!

  1. 1. CRYPT+YOU, UNDERSTAND TODAY! @inaz2 Security Casual Talks 2014#2 2014/06/07
  2. 2. ABOUT ME • @inaz2 • Security Engineer & Python Programmer • Girls Idol Freak • ブログ「ももいろテクノロジー」 • http://inaz2.hatenablog.com/ 2
  3. 3. 導入 3
  4. 4. COMPUTER SECURITY AND CRYPTOGRAPHY • 暗号大事 • 理論いろいろ • 共通鍵暗号、公開鍵暗号、暗号学的ハッシュ関数、メッセージ認証コード • 応用いろいろ • 通信の暗号化、通信相手の認証、改ざん検知、鍵共有 4
  5. 5. SOMETIMES CRYPT LOOKS LIKE A BLACKBOX • 数学むずかしい • ガロア体、オイラーのφ関数、中国の剰余定理、楕円曲線 • 略語が多すぎてどれが何だかわからない • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA??? • なんか危ないらしい • BEAST、CRIME/BLEACH、WEP crack、MS-CHAPv2 crack • 使いにくいコマンド • gpg -c --cipher-algo AES256 -o output input • openssl aes-256-cbc -e -salt -in input -out output • X.509とか802.11Xとかのキーワードが混ざる • ASN.1、PEM、DER、CSR、CRL、PEAP、EAP-TLS、RADIUS 5
  6. 6. IS IT REALLY DIFFICULT? • 暗号という概念に限っていえば、それほど難しくない • 全部忘れよう • 数学的厳密性 • X.509とか802.11Xとか • OpenSSL • 暗号にまつわる雑多な話をします 6
  7. 7. 本題 7
  8. 8. 換字式暗号 • 古典暗号と呼ばれるもののひとつ • 文字単位、あるいはブロック単位で置き換える • 2014/05/05: NSA採用担当 (@NSACareers) さんが何か言った • https://twitter.com/NSACareers/statuses/463321993878994945 8
  9. 9. (ほぼ)全自動解読機あります • http://quipqiup.com/ • 英単語辞書を使って最も英語っぽくなるように置換する 9
  10. 10. XORスクランブルの復元 • 某PCゲームのスクリプトデータと思われるファイル • f2 f5 がやたらと多い、しかもちょうどいい間隔で出てくる 10
  11. 11. XORスクランブルの復元 • 某PCゲームのスクリプトデータと思われるファイル • f2 f5 がやたらと多い、しかもちょうどいい間隔で出てくる 11 0d 0a (CR LF) で当たりをつけてみると、 0xff でXORされているような気がする
  12. 12. XORスクランブルの復元 • 某PCゲームのスクリプトデータと思われるファイル • f2 f5 がやたらと多い、しかもちょうどいい間隔で出てくる 12 0d 0a (CR LF) で当たりをつけてみると、 0xff でXORされているような気がする
  13. 13. XORスクランブルの復元 • 某PCゲームのスクリプトデータと思われるファイル • f2 f5 がやたらと多い、しかもちょうどいい間隔で出てくる 13 0d 0a (CR LF) で当たりをつけてみると、 0xff でXORされているような気がする
  14. 14. RC4 (RIVEST CIPHER 4) • 共通鍵暗号方式のうち、ストリーム暗号と呼ばれるもののひとつ • ざっくり言うと • 鍵から特定のアルゴリズムに従って疑似乱数列(キーストリーム)を作る • 鍵の長さは40~2048 bits、128 bitsであることが多い • 暗号化: 1バイトずつXORする • 復号: 1バイトずつXORする • 高速で計算が楽。パディング詰めて長さを調節する必要もない 14
  15. 15. RC4のバイアス問題 • 出てくる疑似乱数列があまりよろしくない • 2バイト目が0になる確率は他の値の2倍 [Mantin and Shamir 2001] • 100回同じ平文を暗号化して、2バイト目について出現頻度が最も高い文 字を選ぶとそれが当たりだったりする • 2バイト目以降にも偏りがある、ただし後ろにいけばいくほど減る • 2013年に研究者が危険性を指摘する発表を行ったり、Microsoftが 使うなって言ったり、CRYPTRECが128-bit RC4を推奨暗号リストか ら外したりしている 15
  16. 16. AES (ADVANCED ENCRYPTION STANDARD) • 共通鍵暗号方式のうち、ブロック暗号と呼ばれるもののひとつ • 入力は 128 bit 固定 • 鍵の長さは128, 192, 256 bitのうちどれか • ざっくり言うと(鍵長が128 bitの場合) • 鍵から乱数ブロックを10個作る • 平文を乱数ブロックも使いつつ10回かきまぜる • いい感じにぐちゃぐちゃになる 16
  17. 17. 暗号利用モード • 128 bitsじゃない平文のときはどうするか? • 128 bitsのブロックをたくさん作る。足りない部分はパディングで埋める • これらのブロックをどうするかの方法を暗号利用モードという • ECB mode (Electronic Codebook) • 各ブロック個別にAESをかける • 同じ内容のブロックが同じ暗号文に変換されてしまうため、使うべきでは ない 17
  18. 18. • 2013/10/03: Adobeが不正アクセスにより290万人分の顧客情報が 流出したことを公表 • パスワードは暗号化して保存されていたが、ECB mode だった • パスワードヒントを集めることで、平文が推測できてしまった ADOBE PASSWORD BREACH 18
  19. 19. • 2013/10/03、Adobeが不正アクセスにより290万人分の顧客情報が 流出したことを公表 • パスワードは暗号化して保存されていたが、ECB mode だった • パスワードヒントを集めることで、平文が推測できてしまった ADOBE PASSWORD BREACH 19
  20. 20. CBC MODE (CIPHER-BLOCK CHAINING) • 一つ前の暗号文を事前にXORで混ぜる • 最初のブロックについてはランダムな初期化ベクトル (IV) を混ぜる 20 http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation
  21. 21. RSA (RIVEST, SHAMIR, ADLEMAN) • 公開鍵暗号方式のひとつ • 知られてもよい鍵(公開鍵)とダメな鍵(秘密鍵)のペアを使う • ざっくり言うと • 公開鍵と秘密鍵のペアを作る、鍵は実際にはただの大きな整数 • 暗号化: 公開鍵で平文を累乗する • 復号: 秘密鍵で暗号文を累乗する • 暗号化は誰でもできるが、復号できるのは秘密鍵を持つ人だけ 21
  22. 22. もう少し詳しく • 素数 p, q を作る • n = p*q, e = 0x10001 として、p, q, e から d を計算する • nのbit数がRSAの鍵長として扱われる • 公開鍵 = (n, e)、秘密鍵 = d • 暗号化: ciphertext = message ^ e (mod n) • 復号: message = ciphertext ^ d (mod n) 22
  23. 23. 素因数分解 • n を p, q に素因数分解できれば、秘密鍵 d が作れる • しかし素因数分解を多項式時間で行うアルゴリズムは知られていない • 高速素因数分解プログラム Msieve で実際にやってみる • 256 bits なら 198 sec だった • 1 bit 増えるごとに2倍かかると仮定したとき、768 bits では… 23 $ openssl genrsa 256 | openssl rsa -modulus Modulus=B199E7214196FDD9104B35361221402F8B53EEB53D0846C3B9839B0180DAC90D $ ./msieve -e -v 0xB199E7214196FDD9104B35361221402F8B53EEB53D0846C3B9839B0180DAC90D factoring 80331297000141005477922190329275678672338023057316268735808908674607892580621 (77 digits) prp39 factor: 258928947932279960107043988464217168239 prp39 factor: 310244557982565855560785171400435068739 elapsed time 00:03:18
  24. 24. • n を p, q に素因数分解できれば、秘密鍵 d が作れる • しかし素因数分解を多項式時間で行うアルゴリズムは知られていない • 高速素因数分解プログラム Msieve で実際にやってみる • 256 bits なら 198 sec だった • 1 bit 増えるごとに2倍かかると仮定したとき、768 bits では… 素因数分解 24 $ openssl genrsa 256 | openssl rsa -modulus Modulus=B199E7214196FDD9104B35361221402F8B53EEB53D0846C3B9839B0180DAC90D $ ./msieve -e -v 0xB199E7214196FDD9104B35361221402F8B53EEB53D0846C3B9839B0180DAC90D factoring 80331297000141005477922190329275678672338023057316268735808908674607892580621 (77 digits) prp39 factor: 258928947932279960107043988464217168239 prp39 factor: 310244557982565855560785171400435068739 elapsed time 00:03:18
  25. 25. • n を p, q に素因数分解できれば、秘密鍵 d が作れる • しかし素因数分解を多項式時間で行うアルゴリズムは知られていない • 高速素因数分解プログラム Msieve で実際にやってみる • 256 bits なら 198 sec だった • 1 bit 増えるごとに2倍かかると仮定したとき、768 bits では… 素因数分解 25 $ openssl genrsa 256 | openssl rsa -modulus Modulus=B199E7214196FDD9104B35361221402F8B53EEB53D0846C3B9839B0180DAC90D $ ./msieve -e -v 0xB199E7214196FDD9104B35361221402F8B53EEB53D0846C3B9839B0180DAC90D factoring 80331297000141005477922190329275678672338023057316268735808908674607892580621 (77 digits) prp39 factor: 258928947932279960107043988464217168239 prp39 factor: 310244557982565855560785171400435068739 elapsed time 00:03:18 スパコンを使って本気を出した結果、 半年で解けたと発表(2010年)
  26. 26. RSAの使われ方 • データそのものの暗号化にはほとんど用いられない • 累乗処理は重い。何度も繰り返し行うのには適さない • 鍵共有 • AESなどで使う共通鍵を送るために使う • データそのものの暗号化はAESなどで行う(ハイブリッド暗号方式) • デジタル署名 • データのハッシュ値を秘密鍵で暗号化し、これを「署名」としてくっつける • 公開鍵を使い、署名が本人によるものか検証する 26
  27. 27. BIG BROTHER MIGHT BE WATCHING YOU? • RSAで鍵共有を行い、AESでデータを暗号化して送っていたとする • もし誰かが過去の通信データを全部保存していたら? • そのままでは暗号化されているので、当然読めない • もしその誰かにRSA秘密鍵を盗まれたら? • 鍵共有で交換していた共通鍵が全部ばれる • 過去の通信データが全部復号される 27
  28. 28. DH (DIFFEE-HELLMAN KEY EXCHANGE) • 正確には暗号ではなく、鍵共有プロトコルと呼ばれるもののひとつ • ざっくりいうと • 素数 p とちょうどいい整数 g を互いに交換する • 適当な数 a を作って、A = g^a mod p を相手に送る • 同様に、B = g^b mod p を相手からもらう(b 自体はもらわない) • B^a mod p = g^(a*b) mod p を計算する • 相手が計算した A^b mod p も同じ値になる ⇒ 共通鍵として使える • p, g, A, B しか第三者からは見えない • A = g^a mod p から a が逆算されない限り、共通鍵 B^a mod p はわからない 28
  29. 29. PERFECT FORWARD SECRECY • A = g^a mod p から a を逆算することは、離散対数問題と呼ばれる • 多項式時間で解けるアルゴリズムが見つかっていない • 通信のセッションごとに違う共通鍵を作って暗号化 • ある時点での a が盗まれたとしても過去の共通鍵はわからない • 誰かが過去の通信を全部保存してても安心 • セッションごとに鍵を変える場合をとくに DHE (Ephemeral) と呼ぶ 29
  30. 30. SSL/TLS’S CIPHERSUITE • SSL/TLSにて、使用する暗号の組み合わせを表したもの • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA • 鍵共有にはECDHE(DHの楕円曲線版で鍵をセッションごとに変える) • 通信相手の認証にはRSA • データそのものの暗号化にはAES 128bitをCBC modeで使う • メッセージの改ざん検知にはSHA-1 30
  31. 31. RECAP • いろいろ紹介しました • 換字式暗号、XOR cipher • RC4 • AES、暗号利用モード • RSA • DH • 基礎は大事 31
  32. 32. REFERENCES (1/2) • 本の虫: GNU/Linuxでお手軽に使えるCLIのファイル暗号化ツール • http://cpplover.blogspot.jp/2013/07/gnulinuxcli.html • On the Security of RC4 in TLS • http://www.isg.rhul.ac.uk/tls/ • Anatomy of a password disaster – Adobe’s giant-sized cryptographic blunder • http://nakedsecurity.sophos.com/2013/11/04/anatomy-of-a-password-disaster-adobes- giant-sized-cryptographic-blunder/ • Msieve • http://www.boo.net/~jasonp/qs.html • Factorization of a 768-bit RSA modulus [Kleinjung et. al., 2010] • http://eprint.iacr.org/2010/006 32
  33. 33. REFERENCES (2/2) • 自堕落な技術者の日記 : TwitterのPerfect Forward Secrecy(PFS)対応 • http://blog.livedoor.jp/k_urushima/archives/1728348.html • OpenSSLとPythonでRSA暗号の原理を知る - ももいろテクノロジー • http://inaz2.hatenablog.com/entry/2013/11/27/225953 • Pythonでストリーム暗号RC4を実装し、脆弱性の一端を垣間見る - ももいろテクノロ ジー • http://inaz2.hatenablog.com/entry/2013/11/30/233649 33
  34. 34. THANK YOU! @inaz2 34

×