新しい記事 ≪≪≪≪≪ トップページ ≫≫≫≫≫ 古い記事

ついに来ちゃいましたかぁ! (MD5の欠陥発覚)

Tweet
久しぶりにばぐさん所のブログを覗きに行って発見!
ハッシュ関数 MD5, SHA-0 に欠陥があるかも知れないという事だ。こりゃぁ、えらいこっちゃ!


いつかはこんな日が来るんじゃないかと思っていたのだけれど、来ちゃいましたかぁ。

ハッシュ関数ってのは平たく言うと、いろんなデジタルデータに対して1種類のデータに対しては毎回同じ番号(=ハッシュ値)を計算してくれる便利な関数。現在一般的に広く使われているのが「MD5」というのと「SHA-1」の2種類。この番号ことハッシュ値の長さは、MD5で128ビット、SHA-1で160ビット。どんなに長いデータを入れようが短いデータを入れようが、この一定の長さのハッシュ値を生成してくれる。MD5の方は RFC1321 として広く知られているだけにフリーソフトから SSL などの堅めの基盤ソフトまで非常に広範に使われている。

どういう使い方をするかと言えば、あるデジタルデータ(プログラムでも、銀行口座の金額データでも、音楽でもビデオでも何でもデジタル化されていればOK)に対して、固有の番号が計算できる訳なので、そのデータが同一のものか否かをデータ全体を比較しなくても、短いハッシュ値だけを比較すれば良いという点を利用する。
例えば、でかい映像データを扱うのにそれらを管理するための標識として使う。長さが短くて一定なので管理にはもってこいなのだ。
セキュリティ上重要な使い方としては、デジタルデータ本体にそこから計算されたハッシュ値を添付するという使い方だ。この状態でデータを送った場合、送った先で再びハッシュ値を計算して送られてきたデータが本物かどうかって事を判定するという使い方だ。暗号の世界ではこれを「メッセージ認証」と呼び、データ本体が改ざんされていないかどうかを検出するのに使っている。
ハッシュ値は長さが短いので、一般にデータ本体よりも非常に厳重に梱包(=暗号化)する事が出来る。だから、厳重に梱包された方のハッシュ値を信頼して、同一のハッシュ値を生成するデータも信頼するという使い方をする。

そういう使い方をされるので、ハッシュ関数で何が一番大事かと言えば、あるハッシュ値から元になったデジタルデータを計算できない事だ。
良いハッシュ関数とは、同一のハッシュ値を持つ別の元データを作るのに、天文学的な量である全部の組み合わせ(MD5なら2の128乗、SHA-1なら2の160乗)を試さなければならないので、有限時間内ではそれは不可能というものだ。

で、ここでやっと本題に入ります!
今回指摘された問題点はと言えば、あるハッシュ値から同一のハッシュ値を持つ別の値を、現実的な時間内に計算可能な方法があるかも知れないという事。
という事は、ハッシュ値が一致するので本物だと思っていたデジタルデータが実は偽物でした!という事が可能になってしまうかも知れないのだ。本当にそうなら、デジタルの世界の真贋鑑定の土台の1つか2つが一部崩れてしまう事になり、メジャーな土台が3種類ぐらいしか無い現実の前では実に由々しき問題だ。
これが悪用されると例えば、安全だ!としてマイクロソフトがデジタル署名してウィンドウズが安心して内部に取り込んで動かすような、ウィンドウズのモジュールが、いつの間にかウィルス付きのものに差し替えられていたのだけれど、本物だと認識してしまい被害を受けるという事が起きてしまう。

まぁ、敢えて無理に人間の体に例えるなら、免疫系がおかしくなったようなモノだから、免疫系が破壊されるエイズウィルスのような物の出現可能性が予測された!という事に匹敵する。もしも実際出てきて、封じ込めに失敗したら大変な事になっちゃうのだ。

そんな中で感心しちゃうのは、今日の事態の可能性を黙々と予測し、SSL や TLS とぃう暗号通信プロトコルの中のハッシュ関数に MD5 単体でも SHA-1 単体でも無く両者を組み合わせたハッシュを使うように設計した、ネットスケープ社の技術者の先見性だ。プロトコル仕様にそう書いてあった時は、そんな事態も起こりえるのかなぁ…ぐらいにしか思ってなかったけれど…。

冒頭に「その日が来たか」と書いたのはそんな事を思い出したからに他ならない。

それにしても、お手軽さから MD5 だけに頼っているシステムの(自分が作ったものも含め)何と多い事か!さーて、これからが大変だ。みんなで、SHA-1 に避難するのかな?

P.S. しかし、この手のニュースを偶然に知るようになっちまったとは、自分もずいぶんと焼きが回ったものだ…。まぁ、18日発表のニュース記事で今が22日未明だから未だ救いようはあるけど、ちょっと情けない。トホホ。

---
参考URL:
http://bugbug.cocolog-nifty.com/blog/2004/08/post.html ばぐろぐ:ハッシュ関数に欠陥?
http://japan.cnet.com/news/sec/story/0,2000050480,20070525,00.htm CNET Japan:暗号アルゴリズムに重大な欠陥発見の報告相次ぐ
http://www.ietf.org/rfc/rfc1321.txt IETF: RFC1321 - The MD5 Message-Digest Algorithm
http://www.ipa.go.jp/security/rfc/RFC3174JA.html US Secure Hash Algorithm 1 (SHA1)
ねこだま内: SSL関連情報
2004年08月22日 02時32分06秒 by miraclecat - カテゴリ:暗号・セキュリティ



コメント

ばぐさんのコメント:

そう言えば、HTTPのダイジェスト認証にもMD5が使われていましたね。この場合はパスワードが盗聴可能ということになってしまうのでしょうか……
2004年08月22日 11時19分08秒

miraclecatさんのコメント:

チャレンジ−レスポンスによる認証の場合、1つのやり取りだけだとパスワードの完全復元は困難だけれど、複数回のチャレンジとレスポンスを入手して分析すれば、どんどん正しいパスワードが割れる確率が高くなって来ますから、危険ですね。
HTTP だけじゃなく、PPP、SIP も MD5 ベースのチャレンジ−レスポンスなので同様にヤバイですね。あー、やばいやばい。
2004年08月22日 14時07分52秒

miraclecatさんのコメント:

って事は、当面の対策として HTTP も SIP も SSL や TLS で暗号化してチャレンジ−レスポンスが盗聴されないようにしなくちゃ。
2004年08月22日 14時09分36秒

ばぐさんのコメント:

かなり専門的な内容の発表(当たり前か)で報道各社も解り易くつたえることに苦慮しているのか続報が出てきそうにないです。
そこでSlashdot.comのコメント欄を見ると、次のような書き込みがありました。
http://slashdot.jp/article....
「現在暗号システムに使われて主流となっているSHA-1はまだ安全です。(中略)ただしMD5はもうダメです。その点はあきらめてください。」
SHA-1はまだ安全ですか。それは良いのですが、MD5もかなり主流に近いのでは?容易ならぬ自体のような気がします。
2004年08月23日 17時45分34秒

miraclecatさんのコメント:

「MD5はもうダメです」ってのはストレートな言い方でいいですね。はは。そうですか、ダメですかぁ。

って、MD5 だけ単独で使ってるシステムって結構多いんですけどねぇ…。というか、逆に SHA-1 を使っている方が少ないというか、殆ど見かけない。これでいいのか?
てか、やっぱ相当ヤバイですよね。

でも、実際のところどの程度「破りやすいとわかったのか」がわからないので、結局どの程度やばいのかも定量的にわかっていない。こういう「だめだ!」報道で、情報が無くてただ騒いでいるのが一番危険かも知れないんですけどね。(でも、エーゴおの論文なんて読むの疲れるんだけどなぁ)
やっぱ、ちゃんと件の論文読まなくちゃいけないのカモ。
2004年08月23日 23時59分25秒

miraclecatさんのコメント:

と思ったら、CNET Japanの記事が更新されたのか、先日読んだものより詳しくなってる。てか、SHA-1 もいずれは危ないカモって内容になってる。なにー!じゃ、その日が来たら今度こそ全滅?

ま、それは置いといて、定量的脆弱性として「今回見つかったMD5の欠陥を攻撃者が悪用すれば、普通のPCでも数時間でハッシュ衝突を引き起こせてしまう。」とある。何と!パソコンで数時間で割れちゃうんだ。めっちゃヤバイやん!ありゃりゃりゃりゃ。

どーすんねん>世界!
ってぐらい、ヤバイぞ。こりゃ。もう、しーらないっと。この分野のプロじゃなくて良かった。きっと夜も眠れない状態になっちゃうに違いない。

でも、ホントどうするんだろうね。オリンピックどころじゃないよ。
2004年08月24日 00時10分19秒

miraclecat@会社さんのコメント:

会社からですが、今担当しているシステムにもMD5な部分がありました。今後変えていく必要がありそうです。

あと、X.509系のいわゆるデジタル証明書の多くは md5RSA で署名されているためヤバイと思っていたのですが、VeriSign などは実は6月以降発行のものは全て sha1RSA のタイプに切り替えたようです。実は、業界ではかなり前から騒がれて対策が進んでいたのカモ。ちょっと遅れを取ってしまいました。
2004年08月25日 19時29分36秒

ばぐさんのコメント:

確かに最近の証明書はSHA-1で署名されているようですね。

でも、肝心のルートCAの証明書はいまだに次のようなもので署名された古いものが使われています。
PKCS #1 MD2 With RSA Encryption
ルートCAの証明書は公開鍵が大事なのであって、署名は(どうせ自己署名だから)重要ではないのかもしれませんが、それにしても大丈夫なのでしょうか……
2004年08月25日 23時58分15秒

miraclecatさんのコメント:

一部は md2RSA とかあるみたいですが、新しいのは sha1RSA になったりしてるみたいですよ。自分のブラウザに入ってた VeriSign のは sha1RSA になってました。

うーん、ねこだまCA も sha1RSA 版に更改しなくちゃ…。OpenSSL の CA はちゃんと sha1RSA が使えるようですね。デフォルトが md5RSA なのはご愛嬌ですが。
2004年08月26日 01時46分54秒

ほげさんのコメント:

ハッシュが偽造されるだけで、署名は偽造されませんよね?
2005年03月31日 12時34分21秒

miraclecatさんのコメント:

はい、署名はRSA等の公開鍵暗号なので署名自体の偽造は別問題です。

が、デジタル署名は元の情報のハッシュ値に対して署名を行う事で元の情報に対する署名としているので、「同じハッシュ値を生成する別の情報」が作成できてしまうと、実効上偽造されたのと同等の影響があります。ヤバイです。
2005年04月04日 00時49分12秒

コメントの追加

:

:
: