68
3DESの件 ~俺、112bit になります。~ 2014/11 ssmjp(ささみの会)

3DESの件 〜俺、112bitになります〜

Embed Size (px)

DESCRIPTION

2014/11 ssmjpにて発表

Citation preview

Page 1: 3DESの件 〜俺、112bitになります〜

3DESの件~俺、112bit になります。~

2014/11 ssmjp(ささみの会)

Page 2: 3DESの件 〜俺、112bitになります〜

3DESの呼び方:

   ◎ トリプルデス    

   ☓ スリーディーイーエス

   ☓ スリーディーエス

   ☓ サンデス

その前に陳謝• ssmjpでは3DESを「スリーディーイーエス」と うっかり連呼してしまいましたが、正しい呼び方は「トリプルデス」です。すみませんでした。

Page 3: 3DESの件 〜俺、112bitになります〜

自己紹介• 名 前:えにぐま @enigma63 • 生 態:天然ドジ、甘党 • お仕事:脆弱性診断 • 主にサーバに対する診断をしてます。

(ポートスキャンやミドルウェア・SSLの設定確認etc) • Webアプリケーション診断、始めました。               

Page 4: 3DESの件 〜俺、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

Page 5: 3DESの件 〜俺、112bitになります〜

おわり

     *      *   *     +  うそです

     n ∧_∧ n  + (ヨ(* ́∀`)E)

      Y     Y    *

Page 6: 3DESの件 〜俺、112bitになります〜

はじまり

     *      *   *     +  本当です

     n ∧_∧ n  + (ヨ(* ́∀`)E)

      Y     Y    *

Page 7: 3DESの件 〜俺、112bitになります〜

3DESという暗号アルゴリズムがあります

Page 8: 3DESの件 〜俺、112bitになります〜

SSL通信の共通鍵暗号で

使用されているアルゴリズムの1つです

Page 9: 3DESの件 〜俺、112bitになります〜

3DESは最大168bitの鍵長で 暗号化できます

Page 10: 3DESの件 〜俺、112bitになります〜

168bitの鍵長の暗号強度(解かれにくさ)は168bitとされています

168bit 168bit=

Page 11: 3DESの件 〜俺、112bitになります〜

でも、3DESの場合は

168bitの鍵を使っているのに

実際は112bitの強度しか無いと言われてます

168bit 112bit≠

Page 12: 3DESの件 〜俺、112bitになります〜

どうしてこうなった  どうしてこうなった

`___ ♪ ∧∧ /∥‾∥ r(^ω^)ノ

L∥_∥ └┐  レ―、 |‾\三/‾/ _ノ⌒ |  |/ /(_(  ♪

Page 13: 3DESの件 〜俺、112bitになります〜

最近のSSLスキャンツール(SSL Labs)で

サーバで有効になっているSSLの暗号化方式を調査すると、

3DES系の暗号化方式が112bitと表示されるようになりました

しかも・・・?

Page 14: 3DESの件 〜俺、112bitになります〜

個人的に愛用しているSSLスキャンツール(sslscan)でも

最新のopensslリポジトリを使用した場合3DESが112bitと表示されます※赤線の暗号化方式(ECDHE-RSA-DES-CBC3-SHAなど)はOpenSSL名であり、規定名に直すとTLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHAと3DESが使われていることがわかります。

Page 15: 3DESの件 〜俺、112bitになります〜

Tell me why ?

Page 16: 3DESの件 〜俺、112bitになります〜

そもそも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

Page 17: 3DESの件 〜俺、112bitになります〜

規定名 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にもいます

Page 18: 3DESの件 〜俺、112bitになります〜

3DESの暗号化方法1. 平文(Plain)を①赤鍵で暗号化します 2. ①で暗号化した文を②黄鍵で復号します 3. ②で復号した文を③青鍵で暗号化します 4. 最終的な暗号文(Cipher text)が上手にできましたー♪ このように3回DESを施すため、鍵長は168bitになります

DESDESDES=56bit 56bit 56bit

PlainCiphertext

168bit168bit

Page 19: 3DESの件 〜俺、112bitになります〜

3DESの復号方法

DESDESDES=56bit 56bit 56bit

Plain Ciphertext

168bit

共通鍵暗号なので暗号化の際に使用した鍵で復号できます

168bit

Page 20: 3DESの件 〜俺、112bitになります〜

じゃあなんでこうなる?↓

168bitの鍵で暗号化したのに

実際は112bitの強度・・・?

168bit 112bit≠

Page 21: 3DESの件 〜俺、112bitになります〜

原因はとある攻撃でした

Page 22: 3DESの件 〜俺、112bitになります〜

Meet in the Middle Attack

Page 23: 3DESの件 〜俺、112bitになります〜

Man in the Middle AttackNot!

Page 24: 3DESの件 〜俺、112bitになります〜

中間一致攻撃(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

Page 25: 3DESの件 〜俺、112bitになります〜

2DESの場合:

= PlainCiphertext DESDES 暗号文1

ダブルデス

2DESを用いて中間一致攻撃を説明します まず、2DESの暗号化処理は以下のようになります

1. 平文(Plain)を①赤鍵で暗号化します 2. ①で暗号化した「暗号文1」を②青鍵で暗号化します 3. 最終的な暗号文(Cipher text)ができます

これから中間一致攻撃を行います。

Page 26: 3DESの件 〜俺、112bitになります〜

1.平文(Plain)×全ての鍵から生成される

全パターンの暗号文1をメモリに保存

暗号文1

=暗号文1a

暗号文1b

暗号文1c

× Plain

Page 27: 3DESの件 〜俺、112bitになります〜

2.暗号文(Cipher text)×全ての鍵から

全パターンの復号文(暗号文1)を生成

暗号文1

=暗号文1a

暗号文1b

暗号文1c

× PlainCiphertext

暗号文1

暗号文1x

暗号文1y

暗号文1z

Page 28: 3DESの件 〜俺、112bitになります〜

3.1と2の結果の中間値(暗号文1)を突き合わせて比較する

=暗号文1

暗号文1a

暗号文1b

暗号文1c

× Plain暗号文1

暗号文1x

暗号文1y

暗号文1z

Ciphertext =×

Page 29: 3DESの件 〜俺、112bitになります〜

4.暗号化1の結果が一致した場合、使用された鍵が分かる

=暗号文1

暗号文1a

暗号文1b

暗号文1c

× Plain暗号文1

暗号文1x

暗号文1y

暗号文1z

Ciphertext =×

Page 30: 3DESの件 〜俺、112bitになります〜

3DESの場合:トリプルデス

3DESの場合はどうなるか? まず、3DESの暗号化処理を以下のように表します。

1. 平文「P」を鍵1で暗号化します 2. 鍵1で暗号化した「暗号文1」を鍵2で復号します 3. 鍵2で復号した「暗号文2」を鍵3で暗号化します 4. 最終的な暗号文「C」ができます

鍵1=

168bit

鍵2暗号文2 鍵3 PC 暗号文1

Page 31: 3DESの件 〜俺、112bitになります〜

1.最終的な暗号文「C」×鍵3で  復号文(暗号文2)を生成

= ×暗号文2 鍵3 C

Page 32: 3DESの件 〜俺、112bitになります〜

2.平文×鍵1・2で暗号文2を生成

= 鍵1暗号文1 鍵2暗号文2 P

Page 33: 3DESの件 〜俺、112bitになります〜

C

3.1と2の結果の中間値(暗号文2)を突き合わせ比較する

暗号文2 暗号文2 = 暗号文1 鍵2 P= 鍵1鍵3

Page 34: 3DESの件 〜俺、112bitになります〜

で、一致していた場合

Page 35: 3DESの件 〜俺、112bitになります〜

= 暗号文1 鍵2 P鍵1

C 暗号文2 暗号文2 = 暗号文1 鍵2 P= 鍵1鍵3

鍵3×暗号文=鍵2×鍵1×平文と考えられる

C鍵3

Page 36: 3DESの件 〜俺、112bitになります〜

で、この赤線の強度はどうなるか?

= 暗号文1 鍵2 P鍵1C鍵3

Page 37: 3DESの件 〜俺、112bitになります〜

DES(56bit)を2回かけるのでこうなる

= 暗号文1 鍵2 P鍵1C鍵3

112bit

Page 38: 3DESの件 〜俺、112bitになります〜

= 暗号文1 鍵2 P鍵1

112bit

C鍵3

鍵1=

168bit

鍵2暗号文2 鍵3 PC 暗号文1

Page 39: 3DESの件 〜俺、112bitになります〜

168bit → 112bit

Page 40: 3DESの件 〜俺、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

Page 41: 3DESの件 〜俺、112bitになります〜

詳しくはwikiで!検索検索っ!

→トリプルDES

→中間一致攻撃

Page 42: 3DESの件 〜俺、112bitになります〜

(それを受けたのか?) OpenSSLが最近仕様変更をしたようです2014年6月のコミットで 168bit→112bitに置き換えられてる↓

引用:http://git.openssl.org/gitweb/?p=openssl.git;a=commitdiff;h=1bea384fd542977ae945a5dbeac55b0389d9432b

Page 43: 3DESの件 〜俺、112bitになります〜

大元のOpenSSLが変わったせいで OpenSSLのライブラリを使用する SSLスキャンツールの表示も変わったようです

Page 44: 3DESの件 〜俺、112bitになります〜

112bitじゃダメなんですか?

• 強度的にはそうでもない。

• 128bit並に強い。

• 一応3DES自体も電子政府推奨暗号のリストにも載ってる。

Page 45: 3DESの件 〜俺、112bitになります〜

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

Page 46: 3DESの件 〜俺、112bitになります〜

電子政府推奨暗号リストにある3DES (総務省・経済産業省)

Page 47: 3DESの件 〜俺、112bitになります〜

でも、注意• 当面の利用を認められているが、可能であれば128bitの暗号が望ましい。

※引用: http://www.cryptrec.go.jp/images/cryptrec_ciphers_list_2013.pdf

Page 48: 3DESの件 〜俺、112bitになります〜

まぁ別にいいじゃん? 影響ないじゃん?

Page 49: 3DESの件 〜俺、112bitになります〜

細かいところでは そうでもなかったり?

Page 50: 3DESの件 〜俺、112bitになります〜

例えばTLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHAが

有効なサーバのサイトで・・・

当サイトは 128bit以上のみの暗号化方式を使用しています

当サイトは 128bit以上の暗号化方式を採用しています

×◎

Page 51: 3DESの件 〜俺、112bitになります〜

m9(^Д^)プギャー

Page 52: 3DESの件 〜俺、112bitになります〜

日本語って大事ですね (´・ω・`)

Page 53: 3DESの件 〜俺、112bitになります〜

おまけ1

Page 54: 3DESの件 〜俺、112bitになります〜

ささみでは 「112bit やめたほうがいいじゃん?」

っという声が多かったので

Page 55: 3DESの件 〜俺、112bitになります〜

オワスプデイで 某先生に聞いてみた

Page 56: 3DESの件 〜俺、112bitになります〜

先生! 3DESはやめたほうがいいですか?

• 3DESはFIPSでも外されたので使わない方がいい

• できるなら対策した方がいい

Page 57: 3DESの件 〜俺、112bitになります〜

FIPSって何だ?

Page 58: 3DESの件 〜俺、112bitになります〜

FIPS米国国立標準技術研究所(NIST)の情報セキュリティ関連の文書(FIPS)。3DES(3TDEA)は2030年まで

http://csrc.nist.gov/publications/nistpubs/800-57/sp800-57-Part1-revised2_Mar08-2007.pdf

Page 59: 3DESの件 〜俺、112bitになります〜

対策について現状では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

Page 60: 3DESの件 〜俺、112bitになります〜

対策が可能であれば 対策しよう

Page 61: 3DESの件 〜俺、112bitになります〜

おまけ2

Page 62: 3DESの件 〜俺、112bitになります〜

ブラウザで利用可能なSSL暗号化方式を スキャンしてみようhttps://www.ssllabs.com/ssltest/viewMyClient.htmlSSL LABS

Page 63: 3DESの件 〜俺、112bitになります〜

サーバで有効なSSL暗号化方式をスキャ…(※注意:自分が管理している      サーバに対してのみお願いします)

https://www.ssllabs.com/ssltest/index.html

Page 64: 3DESの件 〜俺、112bitになります〜

こんな風に有効な暗号化方式を確認できます

Page 65: 3DESの件 〜俺、112bitになります〜

rbsec-sslscan https://github.com/rbsec/sslscan

• CUIで使えるSSLスキャンツール

• 大元のsslscanからフォークしたプロジェクト。sslscanプロジェクトの中では更新が頻繁なためオススメ

• make staticでインストールするとopensslの最新リポジトリのライブラリを利用してスキャンできる。

Page 66: 3DESの件 〜俺、112bitになります〜
Page 67: 3DESの件 〜俺、112bitになります〜

以上

Page 68: 3DESの件 〜俺、112bitになります〜

スライド素材• 今回使用したイカすピクトグラムはこちら

• http://pictogram2.com/