2007/10/23

[技術系]   いや、復号はできないでしょう

at 14:28JST
 
たぶんわかって書いてるんだと思うけど、自分のために思考整理。

ブログが続かないわけ | MD5は復号できる!?
http://en.yummy.stripper.jp/?eid=719489

Digest::MD5::Reverseは、あくまで
「おなじハッシュ値をもつデータを引っ張ってくる」
だけで別に復号できるわけじゃないよね。

  元データ:a
に対して、
  aのハッシュ値:f(a)
だとすると、
  f(a) = f(b)
となる
  別のデータ:b
を出してくると(※もちろんa=bの可能性もある)。

ただし、ハッシュ関数の特性として実用的な時間内にbを算出するのは難しいので、一種のブルートフォースを行えるようあらかじめデータベースに
  ハッシュ値:データ
の表を蓄積している、と。やり方としてはMD5以前にDESでパスワード保存していたころのcrackとあんまかわらない。

「こういうものがあると
 ハッシュ値を使ったパスワード検証の土台が揺らぐ」
かというと、そんなこともないよね。

パスワードaに対して単純にハッシュ値f(a)を保管していてこの値が漏洩した場合は、f(a)=f(b) となる偽パスワードbを提示されるだけで突破されてしまうが、秘密の文字列s(漏れないことが前提)を用意して
  f(a+s)
を保存しておくようにすれば、仮にf(a+s)が通信経路などからバレ、汎用のデータベースからf(a+s)=f(b)となるbを抽出して認証に使われたとしても、
・f(b+s)を算出
・f(a+s)≠f(b+s)なので認証失敗
ということになる。sじゃなくてf()を単純なMD5でない(MD5以上に信頼できる)関数f'()にしても可。ハッシュの表が用意されていなければいい。イタチごっこ的な部分もあるけど。

というかWebアプリケーションの認証って、ふつーこうやってるんだとばっかり思ってた。だからMD5の逆引き自体は驚くことでもなんでもなくて、前提にしてシステムの設計をしなきゃいけないもんだと。

というような感じだと思うけど…ぶんけいなのでぼくよくわかりません。うのみにするとしぬことがあります。しかしプロバイダに就職する人はたいへんだよね…むかしの同期が某ネットでメールを大量に消したことを思い出す…。

#なんでウチのAdSenseは「フェミニーナ軟膏」とかが表示されるんだ?

※追記
まともに突っ込んでくれてる方がいらした↓参考になる

パスワードの保存に SMD5 (Salted MD5) や SSHA1を使う (MD5 への辞書攻撃とか) - まちゅダイアリー (2007-10-23)
http://www.machu.jp/diary/20071023.html#p01

あー…ちゃんとしたやり方ならsalt(sはstringじゃなくてsaltのsのつもりだった)は漏れても大したインパクトないのかー。まあ、/etc/passwdもそうだったもんね…。

たぶん、sはソースコードにハードコーディングして、f(a+s)がSQLインジェクションで漏洩した場合のこと?

「ハードコーディングすりゃ漏れないだろ」という安易な発想で書いていたのはそのとおり^^; f(a+s)はインジェクションに限らず通信経路で丸見えだろう、という感じ…これはぼくが元エントリの「ローカルにパスワードを保存する形式についての話」と、Web API系認証サービスの話をごっちゃにして書いてるからです(いばるな)。

辞書攻撃の場合、基本的にはa=bのはず。パスワードに使うような文字列でa!=bってのはない気がする。

そんな気もするけど、どっちかというとa!=bであってほしい気もする^^;
関連しそうな過去記事:
さらに過去の記事
2009/04 (1)   2008/12 (3)   2008/11 (9)   2008/10 (10)   2008/09 (20)   2008/08 (2)   2008/07 (23)   2008/06 (16)   2008/05 (22)   2008/04 (11)   2008/03 (21)   2008/02 (20)   2008/01 (21)   2007/12 (32)   2007/11 (37)   2007/10 (46)   2007/09 (63)   2007/08 (33)   2007/07 (41)   2007/06 (81)   2007/05 (173)   2007/04 (168)   2007/03 (113)   2007/02 (123)   2007/01 (92)   2006/12 (111)   2006/11 (185)   2006/10 (20)  
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。