ハッシュ値とは、ハッシュ関数というプロセスを通して算出されるもので、文字列の桁数を一定の桁数にそろえたものを指します。ハッシュ値に変換する対象は、電子文書のファイルやEメール、メッセージやパスワードなど多岐に渡ります。
このハッシュ値の活用により、さまざまなメリットが期待できます。 ぜひハッシュ値への理解を深めていきましょう。
目次
ハッシュ値の特徴
ハッシュ値には、たくさんの特徴があります。
文字列の桁数やデータの大きさに影響されない
ハッシュ値の文字列の桁数は短くても長くても問題ありません。数値化できるデータならどのような情報でも、ハッシュ関数を通してハッシュ値に変換できます。
データの量が多くても、問題なくハッシュ値を作ることができます。たとえば本1冊分ぐらいの大量のデータでも、ハッシュ関数を通せばハッシュ値で表示できます。
文字や数字だけでなく映像や音楽も変換が可能
ハッシュ値で表されるのは文字や数字だけではなく、音楽データや画像データ、また映像のデータなども、ハッシュ値に変換できます。
ハッシュ値の桁数
ハッシュ値はダイジェスト値とも呼ばれ、桁数は12桁や16桁をはじめとしていくつかの種類があります。
一つ一つのハッシュ値がユニークなデータ
ハッシュ値は一つ一つがユニークなものであるため、元のデータが少しでも変わると変換される最終的なハッシュ値も全く変わります。この点が、ハッシュ値の特徴といえます。
ハッシュ値同士に関連性はありません。そのため、ハッシュ値を見て元のデータを予測することは難しいですし、ハッシュ値からデータを分析しカテゴリー分類することも不可能です。
復元は不可能
ハッシュ値は、ハッシュ関数を通して生成される複数桁の数値です。算出したハッシュ値から元のデータを復元することは不可能で、この点でハッシュ値は暗号化と大きな違いがあります。
知っておきたいハッシュ関数の性質
ハッシュ関数には、いくつかの性質が備わっていることが求められます。
衝突発見困難性
衝突発見困難性とは、同じハッシュ値になる元データを求めようとしても、計算量が大きいために困難であることをいいます。セキュリティの点から、ハッシュ値が同じになるような元データを求めることが物理的に困難であることが性質として求められます。
原像計算困難性
原像計算困難性とは、あるハッシュ値について、その元データを求めようとしても、計算量が大きいために困難であることをいいます。ハッシュ値から元データの予測や分析、復元ができないことがハッシュ関数に求められます。
第2原像計算困難性
第2原像計算困難性とは、ある元データとそれに対するハッシュ値が与えられたときに、そのハッシュ値と一致するような別のデータを求めることが困難であることをいいます。一つ一つのハッシュ値がユニークなものである以上、同一のハッシュ値になるような元データを求められるようなことがあってはいけないためです。
ハッシュ値が必要な理由はセキュリティ性の高さ
ハッシュ値には、一度ハッシュ値に変換されると、逆算もできず元データの復元もできないという特徴があります。これは、万が一第三者に大切な情報が漏洩してしまっても、高い確率で元データを守れるというセキュリティ性の高さにつながります。
元データ改ざんの有無をチェック
ハッシュ関数では、元データが少しでも違うと、算出されるハッシュ値は全く異なるものとなります。そのため、元データで作ったハッシュ値と、通信相手が受信したデータによって作り出したハッシュ値を比較することによって、そのデータが改ざんされたかどうかという確認作業ができます。
完全に同一のデータからハッシュ値を算出していれば、ハッシュ値は同じものとなります。この点において、高いセキュリティ性が求められるデータの送付や保管でハッシュ値が使われることが少なくありません。
パスワードや機密文書の保管で安全性を担保
ハッシュ値は、パスワードや機密文書など、第三者に知られると困るようなデータの更新や保管の際に多く使われます。特にメールの改ざんの有無を調べる際には、ハッシュ値を使った電子署名技術が使われることがあります。
ハッシュ値を算出するハッシュ関数
ハッシュ値は、元データをハッシュ関数に通すことによって算出されます。元データが似ていればハッシュ値も似ているというパターンは一切なく、元データが違えばハッシュ関数を通すことでハッシュ値は全く異なる数値となります。
このハッシュ関数には、いくつかの種類があります。
最初のハッシュ関数はMD5
まず、MD5(Message Digest5)は、1991年に考案されました。当時はセキュリティ性が高い画期的な関数だと高評価を得ていましたが、その後に新たなハッシュ関数が考案されており、現在ではあまり使用されていません。ほかのハッシュ関数と比べると、脆弱性が指摘されているからです。
2005年ごろまではトレンドだったSHA-1
1995年から普及しはじめたSHA-1(Secure Hash Algorithm1)は、2005年ごろまでは広く使われていましたが、攻撃の手法が発見されたことにより、現在では安全性に不安が残るという理由でほとんど使われていません。電子証明を受け付けているグーグルにおいても、SHA-1によって生成されたハッシュ値は安全性に不安が残るという理由で受け入れを停止しています。
現在ではSHA-2が主流
SHA-1のアップグレード版として誕生したSHA-2は、2001年から広く使われるようになったハッシュ関数です。SHA-2には複数の種類があり、現在一般的に使われているSHA-256をはじめ、SHA-224やSHA-384などがあります。
SHA-2の特徴は、ハッシュ値の桁数は224ビット、256ビット、384ビット、512ビットのいずれかに設定されているという点です。
最新のハッシュ関数はSHA-3
2015年に開発されたSHA-3は、現在公表されているハッシュ関数の中では最新のもので、高いセキュリティ性や安全性が期待できます。今後、より高い安全性を求めてハッシュ関数を利用するなら、SHA-3を選ぶと良いでしょう。
ハッシュ形式を識別することは可能
ハッシュ関数にはいくつかの種類がありますが、それぞれどのようなハッシュ値を作り出すかという特徴や桁数は異なっています。そのため、生成されたハッシュ値から元データを復元することは無理でも、どのハッシュ関数を使ってハッシュ値を生成したかを識別することはできます。
ハッシュ値の使い方
ハッシュ関数を使って算出するハッシュ値は、一度作ると元データを復元することもできませんし、分析もできません。あくまでもハッシュ値はハッシュ値として使わなければいけません。
データ改ざんの有無をチェック
ハッシュ値の代表的な使い方には、送信したデータと受信したデータが同一のものかどうかをチェックするというものがあります。サイバー空間においては、どこかでデータの入れ替えや改ざんが行われるリスクが常につきまとうものです。文字が1つでも異なればハッシュ値が大きく変わるため、送信した側と受信した側がハッシュ値を比較すれば、そのデータが同一のものかどうかが分かります。
本人証明にも使われている
ハッシュ値は、電子データを送受信する際の本人証明のためにも使用されています。また、ハッシュ関数を使って文字列をハッシュ値へ変換するだけでなく、変換したハッシュ値をさらに暗号化し、データを送信した側と受信した側とで比較するといったさらに高いセキュリティ性を持たせることも可能です。
ハッシュ値と暗号鍵にはそれぞれ、高いセキュリティ性があります。これらを併用することによってセキュリティ性がアップするという点は、大きなメリットです。しかし暗号鍵と併用しても元データへの復元が復元不可という特徴は変わりません。そのため、ハッシュ値を使った暗号化でも、暗号化されているハッシュ値を復元してハッシュ値に戻したうえで比較する、といった確認方法は変わりません。
ハッシュ関数の実用例
ハッシュ関数は、自身がハッシュ関数を使用していると意識していない場所でも利用している可能性は十分にあります。その理由は、Webサイトなどを運営する側が、ハッシュ関数の機能をサイトのセキュリティ性に組み込んでいるからです。
会員制サイトで使われているケースは多い
Webサイトの中には、ユーザー登録を事前に行った上で、ユーザーIDとパスワードを使ってログインするタイプのサイトが数多くあります。こうした会員制のWebサイトでは、セキュリティ面でハッシュ関数が使われているケースは多いです。
ユーザーIDとパスワードについては、入力した情報と登録されている情報とを照会・比較し、一致していればログインできる仕組みになっています。ユーザー側が入力した情報をハッシュ値に変換し、それをWebサイト側のデータベースで保管されているハッシュ値と比較すれば、ログインIDとパスワードが一致するかどうかが分かります。
ハッシュ値は解析することができるのか
基本的にハッシュ関数を通して生成されたハッシュ値は、それを分析しても元データを復元することはできません。ハッシュ値にはパターンがないため、ハッシュ値を分析しても元データに関するヒントを得ることは不可能です。
クラックされる可能性はアリ
ハッシュ関数の中でも最新スペックのSHA-3は、現在ではまだクラックされる可能性は低いと考えられています。しかし過去に考案されたMD5やSHA-1などは、ブルートフォース攻撃によってクラックされたことがあり、脆弱性や安全性が懸念されています。
このブルートフォース攻撃とは、生成したハッシュ値と、データベース化したワードリストをそれぞれハッシュ値に変換したものとを比較することで、パスワードなどのデータを特定するという攻撃方法です。
レインボーテーブルを使ったクラックも可能
ハッシュ関数のクラック方法には、レインボーテーブルを使うものもあります。この攻撃方法に対してはソルトといった対策方法があり、20文字程度の長さを持つパスワードなら対抗することは可能です。
クラックするためのツールもある
安全性とセキュリティ性が高いハッシュ関数ですが、古いタイプのハッシュ関数をクラックする方法はすでに確立されており、そのためのツールなども存在しています。そのため、今後ハッシュ関数を使う際には、できるだけクラックする方法が発見されていない最新のものを使うと同時に、元データはできるだけ長い文字列を使うように心がけ、自身にできる範囲で対策方法をとることが大切です。
あわせて読みたい
電子署名とは?基本的な仕組みとハッシュ値や公開鍵暗号方式、タイムスタンプとの関係をわかりやすく解...
IT技術の発展に伴って、従来の紙を利用した契約書の締結から電子署名を利用した電子上の契約締結(電子契約)に移行する現場が増えてきています。電子署名を活用すると...