2023年02月06日
ハッシュ技術とは? [セキュリティ研究室]
こんにちは!
ナビゲータのEVEです。
昨日は、Prototype EVEのパスワードのセキュリティについて話しました。
Prototype EVEでは、パスワードはハッシュ化され格納されているので、管理者でもパスワードを見ることができないとか、ハッシュ化されたパスワードを送受信するときは、パスワードへ乱数を付加しハッシュ化して送受信しユーザを特定しているなどの話をしました。
以上から、Prototype EVEを支えるセキュリティ技術として、ハッシュという言葉が重要だと理解いただいたと思います。
本日は、今更ですが、ハッシュ関数とはどんなものなのか、知らない人、または、よく分からない人のために、話をしたいと思います。
[ハッシュ関数とは?]
ハッシュ関数は、よく暗号化するための関数と間違われます。はっきりいいますが、ハッシュ関数は暗号化するための関数ではありません。
もし、暗号するための関数なら、暗号化した文字列は、復号できなければなりません。但し、ハッシュ化した文字列は復号はできません。一度ハッシュ関数を通した文字列、一般にはハッシュ値と言いますが、ハッシュ値は復号し元の文字列にすることができません。
こんな関数を何に利用するの?っという疑問が生じると思います。
そんなハッシュ関数ですが、一般的には、データの完全性を保証するツールとして利用されています。どうしてこんなことができるかというと、ハッシュ関数の、以下の性質を利用して保証しています。
❶原像計算困難性
❷第2原像計算困難性
❸衝突困難性
❶は、ハッシュ関数によりハッシュ化された値から入力値を見つけることは困難であるという特性があります。一方向性、不可逆的関数と呼ばれます。
❷は、ハッシュ関数によりハッシュ化された値と全く同じハッシュ値を見つけることは難しいとされています。この説明だけでは、分かりづらいので、もっと説明すると、ハッシュ関数により、ハッシュ化された値、ハッシュ値は、固定長の長さで出力されます。それは、1バイトでも、1kでも、1Mでも同じ長さで出力されます。そのため、どうしても同じハッシュ値が生まれます。それをシノニムと呼んでいるのですが、そのシノニムの発生する可能性が低く、かつ、そのシノニムを見つけるのが難しいという特性があります。
❸は、ハッシュ間数へ異なる入力データから、同じハッシュ値が計算される(衝突する)可能性が極めて低く、事実上ないとされています。なんとなく、❷と似ていますね?この❸を衝突困難性は、他に、衝突計算困難性、強衝突耐性とかいわれます。
以上のような性質が、データの完全性を保証し、これを、別の言い方をするとデータのフィンガープリント(指紋)といわれています。なぜかというと、ハッシュ関数により得られた当該データのハッシュ値は、当該データを他のデータと識別し、世界で唯一のものと保証してくれるからです。
Prototype EVEでは、予めパスワードのフィンガープリントをとってデータベースに格納することにより、画面から入力されるパスワードのフィンガプリントと比較し、ログインするユーザを特定しているというわけです。本人確認が、フィンガープリントを比較するだけなら、データベースへパスワードを保管する必要はありません。
他の使用方法としては、デジタル署名とか、ソフトウェアの完全性などを保証するときなどに使用されています。
[説明を終えて]
ハッシュ値、ハッシュ関数を理解していただけましたでしょうか?このサイトではたびたび出てくる用語で、IPAの試験でも出題されています。現代のセキュリティを支える非常に重要な技術なので、しっかりと覚えてください。
では、また!
■ハッシュ関数(ウィキペディア(Wikipedia))
https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E9%96%A2%E6%95%B0