SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
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.com/
2
導入
3
COMPUTER SECURITY AND
CRYPTOGRAPHY
• 暗号大事
• 理論いろいろ
• 共通鍵暗号、公開鍵暗号、暗号学的ハッシュ関数、メッセージ認証コード
• 応用いろいろ
• 通信の暗号化、通信相手の認証、改ざん検知、鍵共有
4
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
IS IT REALLY DIFFICULT?
• 暗号という概念に限っていえば、それほど難しくない
• 全部忘れよう
• 数学的厳密性
• X.509とか802.11Xとか
• OpenSSL
• 暗号にまつわる雑多な話をします
6
本題
7
換字式暗号
• 古典暗号と呼ばれるもののひとつ
• 文字単位、あるいはブロック単位で置き換える
• 2014/05/05: NSA採用担当 (@NSACareers) さんが何か言った
• https://twitter.com/NSACareers/statuses/463321993878994945
8
(ほぼ)全自動解読機あります
• 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、128 bitsであることが多い
• 暗号化: 1バイトずつXORする
• 復号: 1バイトずつXORする
• 高速で計算が楽。パディング詰めて長さを調節する必要もない
14
RC4のバイアス問題
• 出てくる疑似乱数列があまりよろしくない
• 2バイト目が0になる確率は他の値の2倍 [Mantin and Shamir 2001]
• 100回同じ平文を暗号化して、2バイト目について出現頻度が最も高い文
字を選ぶとそれが当たりだったりする
• 2バイト目以降にも偏りがある、ただし後ろにいけばいくほど減る
• 2013年に研究者が危険性を指摘する発表を行ったり、Microsoftが
使うなって言ったり、CRYPTRECが128-bit RC4を推奨暗号リストか
ら外したりしている
15
AES (ADVANCED ENCRYPTION STANDARD)
• 共通鍵暗号方式のうち、ブロック暗号と呼ばれるもののひとつ
• 入力は 128 bit 固定
• 鍵の長さは128, 192, 256 bitのうちどれか
• ざっくり言うと(鍵長が128 bitの場合)
• 鍵から乱数ブロックを10個作る
• 平文を乱数ブロックも使いつつ10回かきまぜる
• いい感じにぐちゃぐちゃになる
16
暗号利用モード
• 128 bitsじゃない平文のときはどうするか?
• 128 bitsのブロックをたくさん作る。足りない部分はパディングで埋める
• これらのブロックをどうするかの方法を暗号利用モードという
• ECB mode (Electronic Codebook)
• 各ブロック個別にAESをかける
• 同じ内容のブロックが同じ暗号文に変換されてしまうため、使うべきでは
ない
17
• 2013/10/03: Adobeが不正アクセスにより290万人分の顧客情報が
流出したことを公表
• パスワードは暗号化して保存されていたが、ECB mode だった
• パスワードヒントを集めることで、平文が推測できてしまった
ADOBE PASSWORD BREACH
18
• 2013/10/03、Adobeが不正アクセスにより290万人分の顧客情報が
流出したことを公表
• パスワードは暗号化して保存されていたが、ECB mode だった
• パスワードヒントを集めることで、平文が推測できてしまった
ADOBE PASSWORD BREACH
19
CBC MODE (CIPHER-BLOCK CHAINING)
• 一つ前の暗号文を事前にXORで混ぜる
• 最初のブロックについてはランダムな初期化ベクトル (IV) を混ぜる
20
http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation
RSA (RIVEST, SHAMIR, ADLEMAN)
• 公開鍵暗号方式のひとつ
• 知られてもよい鍵(公開鍵)とダメな鍵(秘密鍵)のペアを使う
• ざっくり言うと
• 公開鍵と秘密鍵のペアを作る、鍵は実際にはただの大きな整数
• 暗号化: 公開鍵で平文を累乗する
• 復号: 秘密鍵で暗号文を累乗する
• 暗号化は誰でもできるが、復号できるのは秘密鍵を持つ人だけ
21
もう少し詳しく
• 素数 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
素因数分解
• 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
• 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
• 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年)
RSAの使われ方
• データそのものの暗号化にはほとんど用いられない
• 累乗処理は重い。何度も繰り返し行うのには適さない
• 鍵共有
• AESなどで使う共通鍵を送るために使う
• データそのものの暗号化はAESなどで行う(ハイブリッド暗号方式)
• デジタル署名
• データのハッシュ値を秘密鍵で暗号化し、これを「署名」としてくっつける
• 公開鍵を使い、署名が本人によるものか検証する
26
BIG BROTHER MIGHT BE
WATCHING YOU?
• RSAで鍵共有を行い、AESでデータを暗号化して送っていたとする
• もし誰かが過去の通信データを全部保存していたら?
• そのままでは暗号化されているので、当然読めない
• もしその誰かにRSA秘密鍵を盗まれたら?
• 鍵共有で交換していた共通鍵が全部ばれる
• 過去の通信データが全部復号される
27
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
PERFECT FORWARD SECRECY
• A = g^a mod p から a を逆算することは、離散対数問題と呼ばれる
• 多項式時間で解けるアルゴリズムが見つかっていない
• 通信のセッションごとに違う共通鍵を作って暗号化
• ある時点での a が盗まれたとしても過去の共通鍵はわからない
• 誰かが過去の通信を全部保存してても安心
• セッションごとに鍵を変える場合をとくに DHE (Ephemeral) と呼ぶ
29
SSL/TLS’S CIPHERSUITE
• SSL/TLSにて、使用する暗号の組み合わせを表したもの
• TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
• 鍵共有にはECDHE(DHの楕円曲線版で鍵をセッションごとに変える)
• 通信相手の認証にはRSA
• データそのものの暗号化にはAES 128bitをCBC modeで使う
• メッセージの改ざん検知にはSHA-1
30
RECAP
• いろいろ紹介しました
• 換字式暗号、XOR cipher
• RC4
• AES、暗号利用モード
• RSA
• DH
• 基礎は大事
31
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
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
THANK YOU!
@inaz2
34

Contenu connexe

Similaire à CRYPT+YOU, UNDERSTAND TODAY!

#mailerstudy 02 暗号入門 (2012-02-22更新)
#mailerstudy 02 暗号入門 (2012-02-22更新)#mailerstudy 02 暗号入門 (2012-02-22更新)
#mailerstudy 02 暗号入門 (2012-02-22更新)Takashi Takizawa
 
Javascript で暗号化
Javascript で暗号化Javascript で暗号化
Javascript で暗号化suno88
 
第4回web技術勉強会 暗号技術編その2
第4回web技術勉強会 暗号技術編その2第4回web技術勉強会 暗号技術編その2
第4回web技術勉強会 暗号技術編その2tzm_freedom
 
公開鍵、秘密鍵ってなに?
公開鍵、秘密鍵ってなに?公開鍵、秘密鍵ってなに?
公開鍵、秘密鍵ってなに?kenji4569
 
第3回web技術勉強会 暗号技術編その1
第3回web技術勉強会 暗号技術編その1第3回web技術勉強会 暗号技術編その1
第3回web技術勉強会 暗号技術編その1tzm_freedom
 
CoinOtaku授業用スライド(ビットコインの仕組み)
CoinOtaku授業用スライド(ビットコインの仕組み)CoinOtaku授業用スライド(ビットコインの仕組み)
CoinOtaku授業用スライド(ビットコインの仕組み)航貴 齋藤
 
how to decrypt SSL/TLS without PrivateKey of servers
how to decrypt SSL/TLS without PrivateKey of servershow to decrypt SSL/TLS without PrivateKey of servers
how to decrypt SSL/TLS without PrivateKey of servers@ otsuka752
 
バックドア耐性のあるパスワード暗号化の提案
バックドア耐性のあるパスワード暗号化の提案バックドア耐性のあるパスワード暗号化の提案
バックドア耐性のあるパスワード暗号化の提案MITSUNARI Shigeo
 
第5回web技術勉強会 暗号技術編その3
第5回web技術勉強会 暗号技術編その3第5回web技術勉強会 暗号技術編その3
第5回web技術勉強会 暗号技術編その3tzm_freedom
 
セキュリティの基本の基本の基本
セキュリティの基本の基本の基本セキュリティの基本の基本の基本
セキュリティの基本の基本の基本toku toku
 
ブラウザで動く準同型暗号
ブラウザで動く準同型暗号ブラウザで動く準同型暗号
ブラウザで動く準同型暗号MITSUNARI Shigeo
 
Sagittariusの紹介
Sagittariusの紹介Sagittariusの紹介
Sagittariusの紹介Kato Takashi
 
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたことMITSUNARI Shigeo
 
AWSだけで出来る(たぶん)一番早く構築するセキュアな環境
AWSだけで出来る(たぶん)一番早く構築するセキュアな環境AWSだけで出来る(たぶん)一番早く構築するセキュアな環境
AWSだけで出来る(たぶん)一番早く構築するセキュアな環境Jun Okumura
 

Similaire à CRYPT+YOU, UNDERSTAND TODAY! (20)

#mailerstudy 02 暗号入門 (2012-02-22更新)
#mailerstudy 02 暗号入門 (2012-02-22更新)#mailerstudy 02 暗号入門 (2012-02-22更新)
#mailerstudy 02 暗号入門 (2012-02-22更新)
 
Javascript で暗号化
Javascript で暗号化Javascript で暗号化
Javascript で暗号化
 
第4回web技術勉強会 暗号技術編その2
第4回web技術勉強会 暗号技術編その2第4回web技術勉強会 暗号技術編その2
第4回web技術勉強会 暗号技術編その2
 
公開鍵、秘密鍵ってなに?
公開鍵、秘密鍵ってなに?公開鍵、秘密鍵ってなに?
公開鍵、秘密鍵ってなに?
 
第3回web技術勉強会 暗号技術編その1
第3回web技術勉強会 暗号技術編その1第3回web技術勉強会 暗号技術編その1
第3回web技術勉強会 暗号技術編その1
 
Cryptography
CryptographyCryptography
Cryptography
 
CoinOtaku授業用スライド(ビットコインの仕組み)
CoinOtaku授業用スライド(ビットコインの仕組み)CoinOtaku授業用スライド(ビットコインの仕組み)
CoinOtaku授業用スライド(ビットコインの仕組み)
 
how to decrypt SSL/TLS without PrivateKey of servers
how to decrypt SSL/TLS without PrivateKey of servershow to decrypt SSL/TLS without PrivateKey of servers
how to decrypt SSL/TLS without PrivateKey of servers
 
バックドア耐性のあるパスワード暗号化の提案
バックドア耐性のあるパスワード暗号化の提案バックドア耐性のあるパスワード暗号化の提案
バックドア耐性のあるパスワード暗号化の提案
 
第5回web技術勉強会 暗号技術編その3
第5回web技術勉強会 暗号技術編その3第5回web技術勉強会 暗号技術編その3
第5回web技術勉強会 暗号技術編その3
 
Cryptocurrency1
Cryptocurrency1Cryptocurrency1
Cryptocurrency1
 
セキュリティの基本の基本の基本
セキュリティの基本の基本の基本セキュリティの基本の基本の基本
セキュリティの基本の基本の基本
 
AWS KMSと鍵の話
AWS KMSと鍵の話AWS KMSと鍵の話
AWS KMSと鍵の話
 
ブラウザで動く準同型暗号
ブラウザで動く準同型暗号ブラウザで動く準同型暗号
ブラウザで動く準同型暗号
 
Sagittariusの紹介
Sagittariusの紹介Sagittariusの紹介
Sagittariusの紹介
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
暗号
暗号暗号
暗号
 
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと
 
AWSだけで出来る(たぶん)一番早く構築するセキュアな環境
AWSだけで出来る(たぶん)一番早く構築するセキュアな環境AWSだけで出来る(たぶん)一番早く構築するセキュアな環境
AWSだけで出来る(たぶん)一番早く構築するセキュアな環境
 
暗号技術入門
暗号技術入門暗号技術入門
暗号技術入門
 

Plus de inaz2

Can We Prevent Use-after-free Attacks?
Can We Prevent Use-after-free Attacks?Can We Prevent Use-after-free Attacks?
Can We Prevent Use-after-free Attacks?inaz2
 
Why is Security Management So Hard?
Why is Security Management So Hard?Why is Security Management So Hard?
Why is Security Management So Hard?inaz2
 
HTTPプロクシライブラリproxy2の設計と実装
HTTPプロクシライブラリproxy2の設計と実装HTTPプロクシライブラリproxy2の設計と実装
HTTPプロクシライブラリproxy2の設計と実装inaz2
 
Protecting Passwords
Protecting PasswordsProtecting Passwords
Protecting Passwordsinaz2
 
Self Introduction & The Story that I Tried to Make Sayonara ROP Chain in Linux
Self Introduction & The Story that I Tried to Make Sayonara ROP Chain in LinuxSelf Introduction & The Story that I Tried to Make Sayonara ROP Chain in Linux
Self Introduction & The Story that I Tried to Make Sayonara ROP Chain in Linuxinaz2
 
Abusing Interrupts for Reliable Windows Kernel Exploitation (en)
Abusing Interrupts for Reliable Windows Kernel Exploitation (en)Abusing Interrupts for Reliable Windows Kernel Exploitation (en)
Abusing Interrupts for Reliable Windows Kernel Exploitation (en)inaz2
 
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)inaz2
 
WinDbg Primer
WinDbg PrimerWinDbg Primer
WinDbg Primerinaz2
 
proxy2: HTTPS pins and needles
proxy2: HTTPS pins and needlesproxy2: HTTPS pins and needles
proxy2: HTTPS pins and needlesinaz2
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)inaz2
 
How to apt-get from the internal network: remote sshd with kneesocks
How to apt-get from the internal network: remote sshd with kneesocksHow to apt-get from the internal network: remote sshd with kneesocks
How to apt-get from the internal network: remote sshd with kneesocksinaz2
 
Making a Proxy for Fun and Profit
Making a Proxy for Fun and ProfitMaking a Proxy for Fun and Profit
Making a Proxy for Fun and Profitinaz2
 
Sniffing BitTorrent DHT ~人はBTで何を落とすのか~
Sniffing BitTorrent DHT ~人はBTで何を落とすのか~Sniffing BitTorrent DHT ~人はBTで何を落とすのか~
Sniffing BitTorrent DHT ~人はBTで何を落とすのか~inaz2
 

Plus de inaz2 (13)

Can We Prevent Use-after-free Attacks?
Can We Prevent Use-after-free Attacks?Can We Prevent Use-after-free Attacks?
Can We Prevent Use-after-free Attacks?
 
Why is Security Management So Hard?
Why is Security Management So Hard?Why is Security Management So Hard?
Why is Security Management So Hard?
 
HTTPプロクシライブラリproxy2の設計と実装
HTTPプロクシライブラリproxy2の設計と実装HTTPプロクシライブラリproxy2の設計と実装
HTTPプロクシライブラリproxy2の設計と実装
 
Protecting Passwords
Protecting PasswordsProtecting Passwords
Protecting Passwords
 
Self Introduction & The Story that I Tried to Make Sayonara ROP Chain in Linux
Self Introduction & The Story that I Tried to Make Sayonara ROP Chain in LinuxSelf Introduction & The Story that I Tried to Make Sayonara ROP Chain in Linux
Self Introduction & The Story that I Tried to Make Sayonara ROP Chain in Linux
 
Abusing Interrupts for Reliable Windows Kernel Exploitation (en)
Abusing Interrupts for Reliable Windows Kernel Exploitation (en)Abusing Interrupts for Reliable Windows Kernel Exploitation (en)
Abusing Interrupts for Reliable Windows Kernel Exploitation (en)
 
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)
 
WinDbg Primer
WinDbg PrimerWinDbg Primer
WinDbg Primer
 
proxy2: HTTPS pins and needles
proxy2: HTTPS pins and needlesproxy2: HTTPS pins and needles
proxy2: HTTPS pins and needles
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
 
How to apt-get from the internal network: remote sshd with kneesocks
How to apt-get from the internal network: remote sshd with kneesocksHow to apt-get from the internal network: remote sshd with kneesocks
How to apt-get from the internal network: remote sshd with kneesocks
 
Making a Proxy for Fun and Profit
Making a Proxy for Fun and ProfitMaking a Proxy for Fun and Profit
Making a Proxy for Fun and Profit
 
Sniffing BitTorrent DHT ~人はBTで何を落とすのか~
Sniffing BitTorrent DHT ~人はBTで何を落とすのか~Sniffing BitTorrent DHT ~人はBTで何を落とすのか~
Sniffing BitTorrent DHT ~人はBTで何を落とすのか~
 

Dernier

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 

Dernier (9)

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 

CRYPT+YOU, UNDERSTAND TODAY!

  • 2. ABOUT ME • @inaz2 • Security Engineer & Python Programmer • Girls Idol Freak • ブログ「ももいろテクノロジー」 • http://inaz2.hatenablog.com/ 2
  • 4. COMPUTER SECURITY AND CRYPTOGRAPHY • 暗号大事 • 理論いろいろ • 共通鍵暗号、公開鍵暗号、暗号学的ハッシュ関数、メッセージ認証コード • 応用いろいろ • 通信の暗号化、通信相手の認証、改ざん検知、鍵共有 4
  • 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. IS IT REALLY DIFFICULT? • 暗号という概念に限っていえば、それほど難しくない • 全部忘れよう • 数学的厳密性 • X.509とか802.11Xとか • OpenSSL • 暗号にまつわる雑多な話をします 6
  • 8. 換字式暗号 • 古典暗号と呼ばれるもののひとつ • 文字単位、あるいはブロック単位で置き換える • 2014/05/05: NSA採用担当 (@NSACareers) さんが何か言った • https://twitter.com/NSACareers/statuses/463321993878994945 8
  • 10. XORスクランブルの復元 • 某PCゲームのスクリプトデータと思われるファイル • f2 f5 がやたらと多い、しかもちょうどいい間隔で出てくる 10
  • 11. XORスクランブルの復元 • 某PCゲームのスクリプトデータと思われるファイル • f2 f5 がやたらと多い、しかもちょうどいい間隔で出てくる 11 0d 0a (CR LF) で当たりをつけてみると、 0xff でXORされているような気がする
  • 12. XORスクランブルの復元 • 某PCゲームのスクリプトデータと思われるファイル • f2 f5 がやたらと多い、しかもちょうどいい間隔で出てくる 12 0d 0a (CR LF) で当たりをつけてみると、 0xff でXORされているような気がする
  • 13. XORスクランブルの復元 • 某PCゲームのスクリプトデータと思われるファイル • f2 f5 がやたらと多い、しかもちょうどいい間隔で出てくる 13 0d 0a (CR LF) で当たりをつけてみると、 0xff でXORされているような気がする
  • 14. RC4 (RIVEST CIPHER 4) • 共通鍵暗号方式のうち、ストリーム暗号と呼ばれるもののひとつ • ざっくり言うと • 鍵から特定のアルゴリズムに従って疑似乱数列(キーストリーム)を作る • 鍵の長さは40~2048 bits、128 bitsであることが多い • 暗号化: 1バイトずつXORする • 復号: 1バイトずつXORする • 高速で計算が楽。パディング詰めて長さを調節する必要もない 14
  • 15. RC4のバイアス問題 • 出てくる疑似乱数列があまりよろしくない • 2バイト目が0になる確率は他の値の2倍 [Mantin and Shamir 2001] • 100回同じ平文を暗号化して、2バイト目について出現頻度が最も高い文 字を選ぶとそれが当たりだったりする • 2バイト目以降にも偏りがある、ただし後ろにいけばいくほど減る • 2013年に研究者が危険性を指摘する発表を行ったり、Microsoftが 使うなって言ったり、CRYPTRECが128-bit RC4を推奨暗号リストか ら外したりしている 15
  • 16. AES (ADVANCED ENCRYPTION STANDARD) • 共通鍵暗号方式のうち、ブロック暗号と呼ばれるもののひとつ • 入力は 128 bit 固定 • 鍵の長さは128, 192, 256 bitのうちどれか • ざっくり言うと(鍵長が128 bitの場合) • 鍵から乱数ブロックを10個作る • 平文を乱数ブロックも使いつつ10回かきまぜる • いい感じにぐちゃぐちゃになる 16
  • 17. 暗号利用モード • 128 bitsじゃない平文のときはどうするか? • 128 bitsのブロックをたくさん作る。足りない部分はパディングで埋める • これらのブロックをどうするかの方法を暗号利用モードという • ECB mode (Electronic Codebook) • 各ブロック個別にAESをかける • 同じ内容のブロックが同じ暗号文に変換されてしまうため、使うべきでは ない 17
  • 18. • 2013/10/03: Adobeが不正アクセスにより290万人分の顧客情報が 流出したことを公表 • パスワードは暗号化して保存されていたが、ECB mode だった • パスワードヒントを集めることで、平文が推測できてしまった ADOBE PASSWORD BREACH 18
  • 19. • 2013/10/03、Adobeが不正アクセスにより290万人分の顧客情報が 流出したことを公表 • パスワードは暗号化して保存されていたが、ECB mode だった • パスワードヒントを集めることで、平文が推測できてしまった ADOBE PASSWORD BREACH 19
  • 20. CBC MODE (CIPHER-BLOCK CHAINING) • 一つ前の暗号文を事前にXORで混ぜる • 最初のブロックについてはランダムな初期化ベクトル (IV) を混ぜる 20 http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation
  • 21. RSA (RIVEST, SHAMIR, ADLEMAN) • 公開鍵暗号方式のひとつ • 知られてもよい鍵(公開鍵)とダメな鍵(秘密鍵)のペアを使う • ざっくり言うと • 公開鍵と秘密鍵のペアを作る、鍵は実際にはただの大きな整数 • 暗号化: 公開鍵で平文を累乗する • 復号: 秘密鍵で暗号文を累乗する • 暗号化は誰でもできるが、復号できるのは秘密鍵を持つ人だけ 21
  • 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. 素因数分解 • 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. • 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. • 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. RSAの使われ方 • データそのものの暗号化にはほとんど用いられない • 累乗処理は重い。何度も繰り返し行うのには適さない • 鍵共有 • AESなどで使う共通鍵を送るために使う • データそのものの暗号化はAESなどで行う(ハイブリッド暗号方式) • デジタル署名 • データのハッシュ値を秘密鍵で暗号化し、これを「署名」としてくっつける • 公開鍵を使い、署名が本人によるものか検証する 26
  • 27. BIG BROTHER MIGHT BE WATCHING YOU? • RSAで鍵共有を行い、AESでデータを暗号化して送っていたとする • もし誰かが過去の通信データを全部保存していたら? • そのままでは暗号化されているので、当然読めない • もしその誰かにRSA秘密鍵を盗まれたら? • 鍵共有で交換していた共通鍵が全部ばれる • 過去の通信データが全部復号される 27
  • 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. PERFECT FORWARD SECRECY • A = g^a mod p から a を逆算することは、離散対数問題と呼ばれる • 多項式時間で解けるアルゴリズムが見つかっていない • 通信のセッションごとに違う共通鍵を作って暗号化 • ある時点での a が盗まれたとしても過去の共通鍵はわからない • 誰かが過去の通信を全部保存してても安心 • セッションごとに鍵を変える場合をとくに DHE (Ephemeral) と呼ぶ 29
  • 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. RECAP • いろいろ紹介しました • 換字式暗号、XOR cipher • RC4 • AES、暗号利用モード • RSA • DH • 基礎は大事 31
  • 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. 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