Upload
enigma63
View
2.099
Download
1
Embed Size (px)
DESCRIPTION
2014/11 ssmjpにて発表
Citation preview
3DESの件~俺、112bit になります。~
2014/11 ssmjp(ささみの会)
3DESの呼び方:
◎ トリプルデス
☓ スリーディーイーエス
☓ スリーディーエス
☓ サンデス
その前に陳謝• ssmjpでは3DESを「スリーディーイーエス」と うっかり連呼してしまいましたが、正しい呼び方は「トリプルデス」です。すみませんでした。
自己紹介• 名 前:えにぐま @enigma63 • 生 態:天然ドジ、甘党 • お仕事:脆弱性診断 • 主にサーバに対する診断をしてます。
(ポートスキャンやミドルウェア・SSLの設定確認etc) • Webアプリケーション診断、始めました。
今日言いたいこと3DES=168bit → 112bit ???
3DES=168bitC=Ek3(Dk2(Ek1(P)))
Dk3C=Dk3(Ek3(Dk2(Ek1(P))))Dk3C=Dk2(Ek1(P))
3DES=112bit m9(^Д^)プギャー
引用:http://stephanemoore.com/pdf/meetinthemiddle.pdf
おわり
* * * + うそです
n ∧_∧ n + (ヨ(* ́∀`)E)
Y Y *
はじまり
* * * + 本当です
n ∧_∧ n + (ヨ(* ́∀`)E)
Y Y *
3DESという暗号アルゴリズムがあります
SSL通信の共通鍵暗号で
使用されているアルゴリズムの1つです
3DESは最大168bitの鍵長で 暗号化できます
168bitの鍵長の暗号強度(解かれにくさ)は168bitとされています
168bit 168bit=
でも、3DESの場合は
168bitの鍵を使っているのに
実際は112bitの強度しか無いと言われてます
168bit 112bit≠
どうしてこうなった どうしてこうなった
`___ ♪ ∧∧ /∥‾∥ r(^ω^)ノ
L∥_∥ └┐ レ―、 |‾\三/‾/ _ノ⌒ | |/ /(_( ♪
最近のSSLスキャンツール(SSL Labs)で
サーバで有効になっているSSLの暗号化方式を調査すると、
3DES系の暗号化方式が112bitと表示されるようになりました
しかも・・・?
個人的に愛用しているSSLスキャンツール(sslscan)でも
最新のopensslリポジトリを使用した場合3DESが112bitと表示されます※赤線の暗号化方式(ECDHE-RSA-DES-CBC3-SHAなど)はOpenSSL名であり、規定名に直すとTLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHAと3DESが使われていることがわかります。
Tell me why ?
そもそも3DESって何だろう?• トリプルデス
(Triple Data Encryption Algorithm)
• DESから派生した暗号アルゴリズム
• DES(56bit)を3回かけることで168bitの強度を実現する
参考:
http://ja.wikipedia.org/wiki/%E3%83%88%E3%83%AA%E3%83%97%E3%83%ABDES http://www.weblio.jp/content/3DES
規定名 OpenSSL名SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA DH-DSS-DES-CBC3-SHASSL_DH_RSA_WITH_3DES_EDE_CBC_SHA DH-RSA-DES-CBC3-SHATLS_RSA_WITH_3DES_EDE_CBC_SHA DES-CBC3-SHATLS_DH_anon_WITH_3DES_EDE_CBC_SHA ADH-DES-CBC3-SHATLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA ECDH-RSA-DES-CBC3-SHATLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA ECDHE-RSA-DES-CBC3-SHA
※暗号化方式がOpenSSL名の場合は、以下のOpenSSLのページで規定名を確認できます https://www.openssl.org/docs/apps/ciphers.html
SSL通信における3DESの暗号化方式以下は3DESのアルゴリズムを使った暗号化方式の一部になります
規定名のWITHの後に「3DES」がついてるやつです。TLS1.0~1.2にもいます
3DESの暗号化方法1. 平文(Plain)を①赤鍵で暗号化します 2. ①で暗号化した文を②黄鍵で復号します 3. ②で復号した文を③青鍵で暗号化します 4. 最終的な暗号文(Cipher text)が上手にできましたー♪ このように3回DESを施すため、鍵長は168bitになります
DESDESDES=56bit 56bit 56bit
PlainCiphertext
168bit168bit
3DESの復号方法
DESDESDES=56bit 56bit 56bit
Plain Ciphertext
168bit
共通鍵暗号なので暗号化の際に使用した鍵で復号できます
168bit
じゃあなんでこうなる?↓
168bitの鍵で暗号化したのに
実際は112bitの強度・・・?
168bit 112bit≠
原因はとある攻撃でした
Meet in the Middle Attack
Man in the Middle AttackNot!
中間一致攻撃(Meet in the Middle Attack)
• 攻撃者が平文と暗号文を持っている場合、
• 任意の暗号鍵×平文の暗号化結果(中間値)と
• 任意の暗号鍵×暗号文の復号結果(中間値)を突き合わせることで使用している鍵を特定する
• という考え方だと思ってください。参考:
http://ja.wikipedia.org/wiki/%E4%B8%AD%E9%96%93%E4%B8%80%E8%87%B4%E6%94%BB%E6%92%83
2DESの場合:
= PlainCiphertext DESDES 暗号文1
ダブルデス
2DESを用いて中間一致攻撃を説明します まず、2DESの暗号化処理は以下のようになります
1. 平文(Plain)を①赤鍵で暗号化します 2. ①で暗号化した「暗号文1」を②青鍵で暗号化します 3. 最終的な暗号文(Cipher text)ができます
これから中間一致攻撃を行います。
1.平文(Plain)×全ての鍵から生成される
全パターンの暗号文1をメモリに保存
暗号文1
=暗号文1a
暗号文1b
暗号文1c
× Plain
2.暗号文(Cipher text)×全ての鍵から
全パターンの復号文(暗号文1)を生成
暗号文1
=暗号文1a
暗号文1b
暗号文1c
× PlainCiphertext
暗号文1
暗号文1x
暗号文1y
暗号文1z
3.1と2の結果の中間値(暗号文1)を突き合わせて比較する
=暗号文1
暗号文1a
暗号文1b
暗号文1c
× Plain暗号文1
暗号文1x
暗号文1y
暗号文1z
Ciphertext =×
4.暗号化1の結果が一致した場合、使用された鍵が分かる
=暗号文1
暗号文1a
暗号文1b
暗号文1c
× Plain暗号文1
暗号文1x
暗号文1y
暗号文1z
Ciphertext =×
=
3DESの場合:トリプルデス
3DESの場合はどうなるか? まず、3DESの暗号化処理を以下のように表します。
1. 平文「P」を鍵1で暗号化します 2. 鍵1で暗号化した「暗号文1」を鍵2で復号します 3. 鍵2で復号した「暗号文2」を鍵3で暗号化します 4. 最終的な暗号文「C」ができます
鍵1=
168bit
鍵2暗号文2 鍵3 PC 暗号文1
1.最終的な暗号文「C」×鍵3で 復号文(暗号文2)を生成
= ×暗号文2 鍵3 C
2.平文×鍵1・2で暗号文2を生成
= 鍵1暗号文1 鍵2暗号文2 P
C
3.1と2の結果の中間値(暗号文2)を突き合わせ比較する
暗号文2 暗号文2 = 暗号文1 鍵2 P= 鍵1鍵3
で、一致していた場合
= 暗号文1 鍵2 P鍵1
C 暗号文2 暗号文2 = 暗号文1 鍵2 P= 鍵1鍵3
鍵3×暗号文=鍵2×鍵1×平文と考えられる
C鍵3
で、この赤線の強度はどうなるか?
= 暗号文1 鍵2 P鍵1C鍵3
DES(56bit)を2回かけるのでこうなる
= 暗号文1 鍵2 P鍵1C鍵3
112bit
= 暗号文1 鍵2 P鍵1
112bit
C鍵3
鍵1=
168bit
鍵2暗号文2 鍵3 PC 暗号文1
168bit → 112bit
今日言いたいことに戻ります3DES=168bit → 112bit ???
3DES=168bitC=Ek3(Dk2(Ek1(P)))
Dk3C=Dk3(Ek3(Dk2(Ek1(P))))Dk3C=Dk2(Ek1(P))
3DES=112bit m9(^Д^)プギャー
引用:http://stephanemoore.com/pdf/meetinthemiddle.pdf
詳しくはwikiで!検索検索っ!
→トリプルDES
→中間一致攻撃
(それを受けたのか?) OpenSSLが最近仕様変更をしたようです2014年6月のコミットで 168bit→112bitに置き換えられてる↓
引用:http://git.openssl.org/gitweb/?p=openssl.git;a=commitdiff;h=1bea384fd542977ae945a5dbeac55b0389d9432b
大元のOpenSSLが変わったせいで OpenSSLのライブラリを使用する SSLスキャンツールの表示も変わったようです
112bitじゃダメなんですか?
• 強度的にはそうでもない。
• 128bit並に強い。
• 一応3DES自体も電子政府推奨暗号のリストにも載ってる。
112bitの解読時間を計算してみた• 1秒間に1T(10^12)鍵のチェックをできるマシンの場合
鍵長 式 解読時間
56bit (2^55=10^17) × 10^-12 =10^5/3600秒(1時間) 22時間
112bit (2^111=10^33) ×10^-12 =10^21/31556926秒(1年) 31兆年
128bit (2^127=10^38) × 10^-12 =10^26/31556926秒(1年) 300京年
※計算方法参考 http://www.ntt.co.jp/journal/0512/files/jn200512008.pdf
電子政府推奨暗号リストにある3DES (総務省・経済産業省)
でも、注意• 当面の利用を認められているが、可能であれば128bitの暗号が望ましい。
※引用: http://www.cryptrec.go.jp/images/cryptrec_ciphers_list_2013.pdf
まぁ別にいいじゃん? 影響ないじゃん?
細かいところでは そうでもなかったり?
例えばTLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHAが
有効なサーバのサイトで・・・
当サイトは 128bit以上のみの暗号化方式を使用しています
当サイトは 128bit以上の暗号化方式を採用しています
×◎
m9(^Д^)プギャー
日本語って大事ですね (´・ω・`)
おまけ1
ささみでは 「112bit やめたほうがいいじゃん?」
っという声が多かったので
オワスプデイで 某先生に聞いてみた
先生! 3DESはやめたほうがいいですか?
• 3DESはFIPSでも外されたので使わない方がいい
• できるなら対策した方がいい
FIPSって何だ?
FIPS米国国立標準技術研究所(NIST)の情報セキュリティ関連の文書(FIPS)。3DES(3TDEA)は2030年まで
http://csrc.nist.gov/publications/nistpubs/800-57/sp800-57-Part1-revised2_Mar08-2007.pdf
対策について現状では3DESを対策できる製品と対策できない製品がある
◎対策できる製品例 Apache HTTP Server
☓ 対策できない製品例 Juniper Networks
SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!eNULL:!aNULL:!ADH:!3DES ↑3DESを無効にする設定を追加
意訳「3DESの攻撃の成功には膨大な時間とコストかかるよ! 将来的にカスタマイズできるようにする予定だからカミングスーン☆」 http://kb.juniper.net/InfoCenter/index?page=content&id=KB29623
対策が可能であれば 対策しよう
おまけ2
ブラウザで利用可能なSSL暗号化方式を スキャンしてみようhttps://www.ssllabs.com/ssltest/viewMyClient.htmlSSL LABS
サーバで有効なSSL暗号化方式をスキャ…(※注意:自分が管理している サーバに対してのみお願いします)
https://www.ssllabs.com/ssltest/index.html
こんな風に有効な暗号化方式を確認できます
rbsec-sslscan https://github.com/rbsec/sslscan
• CUIで使えるSSLスキャンツール
• 大元のsslscanからフォークしたプロジェクト。sslscanプロジェクトの中では更新が頻繁なためオススメ
• make staticでインストールするとopensslの最新リポジトリのライブラリを利用してスキャンできる。
以上