ハッシュ化とは、文字やファイルなどのデータを、決められた長さの文字や数字に変えることです。
パスワードの確認や、ファイルの内容が変わっていないかを調べる場面などで使われます。
この記事では、ハッシュ化とは何かを初心者向けに説明します。仕組みや使われる場面、暗号化との違い、元に戻せるのかも見ていきましょう。
関連するIT用語・ビジネス用語をまとめて確認したい方は、IT用語・ビジネス用語一覧もあわせてご覧ください。
ハッシュ化とは?かんたんに言うとデータを別の値に変える仕組み
ハッシュ化とは、文字、画像、動画、ファイルなどの情報を計算し、決められた長さの値に変える仕組みです。
ここでいうデータとは、パソコンやスマートフォンで扱う文字、画像、動画、ファイルなどの情報を指します。
ハッシュ化したあとに作られる文字や数字のまとまりを「ハッシュ値」といいます。
たとえば、「apple」という文字をハッシュ化すると、元の文字とは異なる長い英数字が作られます。
ハッシュ値とは
ハッシュ値とは、ハッシュ化によって作られた文字や数字のまとまりです。
ハッシュ値には、元の文章やファイルの内容が、そのまま書かれているわけではありません。
そのため、ハッシュ値を見ただけで、元の文章や画像の内容を読み取ることはできません。
ハッシュ関数とは
ハッシュ関数とは、元のデータからハッシュ値を作るための計算方法です。
難しい計算の内容を覚える必要はありません。データを入れると、決められた形の値が出てくる仕組みと考えると分かりやすいでしょう。
同じデータからは同じハッシュ値が作られる
同じデータに同じハッシュ関数を使うと、同じハッシュ値が作られます。
反対に、元のデータが少しでも変わると、通常は別のハッシュ値になります。
この特徴を使うと、2つのデータが同じかどうかを比べられます。
ハッシュ化を身近な例で考えてみよう
ハッシュ値はデータの指紋のようなもの
ハッシュ値は、よく「データの指紋」に例えられます。
人の指紋が本人を見分ける手がかりになるように、ハッシュ値はデータを見分ける手がかりになります。
たとえば、同じ名前のファイルが2つあっても、内容が異なればハッシュ値も変わります。
指紋の例と実際のハッシュ化の違い
ただし、ハッシュ値と人の指紋は、まったく同じものではありません。
ハッシュ値は、データを見分ける手がかりになりますが、ハッシュ値から元の内容は分かりません。
ITで使うハッシュ化は、データの内容を短くまとめて読むための仕組みではありません。データが同じか、変わっていないかを確認するために使います。
ハッシュ化の仕組み
ハッシュ化の基本的な流れは、とてもシンプルです。
元のデータをハッシュ関数に入れると、計算によってハッシュ値が作られます。
流れをまとめると、次のようになります。
元のデータ
↓
ハッシュ関数で計算
↓
ハッシュ値が作られる
元のデータをハッシュ関数に入れる
最初に、文字やファイルなどの元データを用意します。
次に、そのデータをハッシュ関数に入れます。ハッシュ関数が決められた方法でデータを計算します。
決められた長さのハッシュ値が作られる
計算が終わると、ハッシュ値が作られます。
ハッシュ値の長さは、使うハッシュ関数によって決まります。
元のデータが短い文章でも、大きなファイルでも、同じ方式ならハッシュ値の長さは基本的に変わりません。
元のデータが少し変わるとハッシュ値も変わる
元のデータで文字を1つ変えただけでも、ハッシュ値は大きく変わります。
たとえば、「パスワード」と「パスワード。」では、最後の句点が違うだけです。しかし、作られるハッシュ値は別のものになります。
この特徴があるため、ファイルの内容が途中で変わっていないかを確認できます。
ハッシュ化が使われる場面
ハッシュ化は、Webサービスやパソコンの中で広く使われています。
代表的な使い道は、パスワードの確認、ファイルの確認、デジタル署名です。
パスワードを保存するとき
Webサービスでは、利用者のパスワードを、そのまま保存しないことが大切です。
そのため、パスワードをハッシュ化し、作られたハッシュ値を保存する方法が使われます。
ログインするときは、入力したパスワードを再びハッシュ化します。
その値と、保存してあるハッシュ値を比べます。同じであれば、正しいパスワードだと判断します。
流れをまとめると、次のようになります。
入力したパスワードをハッシュ化
↓
保存してあるハッシュ値と比べる
↓
同じならログインを許可する
ファイルが変わっていないか確認するとき
ソフトウェアや大きなファイルを配るとき、配る側がハッシュ値を公開することがあります。
ダウンロードしたファイルから作ったハッシュ値と、公開されているハッシュ値を比べます。
同じであれば、ファイルの内容が途中で変わっていない可能性が高いと判断できます。
デジタル署名でデータを確認するとき
デジタル署名とは、電子データの作成者や、内容が変わっていないことを確かめる仕組みです。
紙の書類に書く署名とは方法が異なりますが、本人確認や内容の確認に使われます。
大きなデータをそのまま扱う代わりに、データから作ったハッシュ値を使います。
ハッシュ化と暗号化の違い
ハッシュ化と暗号化の大きな違いは、元のデータに戻すことを前提としているかどうかです。
暗号化したデータは、正しい鍵を使えば元に戻せます。
一方、ハッシュ化したデータは、元に戻して読むためのものではありません。
| 比べる項目 | ハッシュ化 | 暗号化 |
|---|---|---|
| 主な目的 | データが同じか確認する | データの内容を読めない形にする |
| 元に戻せるか | 戻すことを前提としない | 正しい鍵があれば戻せる |
| 作られるもの | ハッシュ値 | 暗号化されたデータ |
| 主な使い道 | パスワードやファイルの確認 | 通信内容や保存データの保護 |
暗号化は元のデータに戻せる
暗号化とは、データをそのままでは読めない形に変えることです。
暗号化したデータを元に戻すことを「復号」といいます。
復号とは、読めない形にしたデータを、正しい鍵を使って元に戻すことです。
ここでいう鍵とは、データを暗号化したり、元に戻したりするために使う情報です。
ハッシュ化は元のデータに戻すことを前提としない
ハッシュ化は、元のデータをあとから読み直すための仕組みではありません。
同じデータから同じハッシュ値が作られる特徴を使い、データが一致するかを確認します。
そのため、パスワードやファイルの確認に向いています。
ハッシュ化と暗号化の使い分け
あとで元の内容を読む必要がある場合は、暗号化を使います。
元の内容を保存せず、同じかどうかだけを確認したい場合は、ハッシュ化を使います。
どちらか一方が常に優れているわけではありません。目的に合わせて使い分けます。
ハッシュ化したデータは元に戻せる?
ハッシュ化したデータは、基本的に元の状態へ戻せません。
ハッシュ値の中に、元の文章やファイルの内容が、そのまま保存されているわけではないためです。
ハッシュ化は基本的に元に戻せない
暗号化には、元に戻すための鍵があります。
一方、一般的なハッシュ化には、元に戻すための鍵はありません。
このように、一度変えると元に戻せない性質を「不可逆」といいます。
不可逆とは、一方向には変えられても、変えた結果から元のデータを簡単には作れないという意味です。
元に戻せなくても予想して調べることはできる
ハッシュ値から元のデータを直接取り出すことはできません。
ただし、元の文字を予想し、一致するか調べることはできます。
たとえば、「123456」などの候補を順番にハッシュ化し、保存されたハッシュ値と同じになるかを調べます。
つまり、元に戻すことはできませんが、元の文字を予想して一致するか確かめることはできます。
「ハッシュ化を戻すツール」の注意点
インターネットには、ハッシュ値から元の文字を調べるツールがあります。
多くのツールは、ハッシュ化を逆向きに計算しているわけではありません。
あらかじめ用意した文字をハッシュ化し、一致するものを探しています。
大切なデータやパスワードのハッシュ値を、信頼できるか分からないサイトへ入力するのは避けましょう。
パスワードを守るソルトとは
ソルトとは、パスワードをハッシュ化する前に加える、利用者ごとに異なる追加データです。
英語の「salt」は塩を意味します。料理に塩を加えるように、元のパスワードへ別の値を加えることから、この名前が使われています。
ソルトはパスワードに加える追加データ
たとえば、2人が同じパスワードを使っていたとします。
単純にハッシュ化すると、2人のハッシュ値も同じになります。
しかし、それぞれに異なるソルトを加えれば、作られるハッシュ値は別になります。
利用者がソルトを考えて入力するわけではありません。システムが自動で作成し、管理します。
ソルトを使う理由
ソルトを使うと、同じパスワードでも異なるハッシュ値を作れます。
そのため、よく使われるパスワードをまとめた表を使って調べにくくなります。
パスワードを守るためには、単純なハッシュ化だけでなく、ソルトなどを組み合わせることが大切です。
ストレッチングとは
ストレッチングとは、ハッシュ化を何度も行い、計算に時間がかかるようにする方法です。
正しいパスワードを1回確認するだけなら、大きな負担にはならないように調整します。
一方で、大量のパスワード候補を順番に試す場合は、より長い時間がかかります。
この仕組みによって、短時間に多くの候補を試しにくくします。
代表的なハッシュ化の種類
ハッシュ化には、いくつかの種類があります。
計算の方法や作られる値の長さ、向いている使い道が異なります。
MD5
MD5は、古くから使われてきたハッシュ化の方式です。
現在は、異なるデータから同じハッシュ値を作られるおそれがあるため、安全性が必要な新しい仕組みには向いていません。
古いファイルの確認などで見かけることはあります。
SHA-1
SHA-1も、以前は広く使われていたハッシュ化の方式です。
現在は弱点が見つかっているため、新しいセキュリティ対策には向いていません。
安全性が必要な場面では、より新しい方式が使われます。
SHA-256
SHA-256は、現在も広く使われているハッシュ化の方式です。
256ビットのハッシュ値を作ります。
ビットとは、コンピューターが情報の大きさを表すときに使う単位です。
SHA-256のハッシュ値は、画面上では0から9とAからFを使った64文字で表されることがよくあります。
ファイルが変わっていないかの確認や、デジタル署名などで使われます。
bcrypt
bcryptは、パスワードの保存を目的として作られた方式です。
「ビークリプト」と読みます。
計算にかかる時間を調整できるため、大量のパスワード候補を短時間で試しにくくできます。
パスワードの保存では、SHA-256を単独で使うよりも、bcryptのような専用の方式が向いています。
SHA-256をパスワード保存に単独で使わない理由
SHA-256は計算が速い方式です。
ファイルの確認では、計算が速いことが便利です。
しかし、パスワードの確認では、計算が速すぎることが弱点になる場合があります。
悪意のある人も、大量のパスワード候補を短時間で試せるためです。
そのため、パスワードの保存には、計算に時間がかかるように作られた専用の方式を使います。
ハッシュ化のメリット
データが変わっていないか確認できる
元のデータが少し変わると、通常はハッシュ値も変わります。
変更前と変更後のハッシュ値を比べれば、データが変わったかを確認できます。
元のデータをそのまま保存せずに済む
パスワードの確認では、元のパスワードをそのまま保存せずに済みます。
入力されたパスワードから作ったハッシュ値と、保存済みのハッシュ値を比べます。
ただし、安全に保存するには、ソルトやパスワード専用の方式を正しく使う必要があります。
大きなデータでも同じ長さの値にできる
ハッシュ関数は、大きなファイルからも決められた長さのハッシュ値を作ります。
そのため、大きなファイル同士をそのまま比べる代わりに、ハッシュ値を使って効率よく確認できます。
ハッシュ化の注意点
ハッシュ化すれば必ず安全になるわけではない
データをハッシュ化しただけで、すべての情報が安全になるわけではありません。
古い方式を使っている場合や、短く単純なパスワードを使っている場合は、元の文字を予想されることがあります。
パスワードの保存では、ソルトや専用の方式を組み合わせることが大切です。
古いハッシュ化の方式は避ける
MD5やSHA-1は、以前は広く使われていました。
現在は弱点が知られているため、安全性が必要な新しい仕組みには向いていません。
ただし、適した方式は使い道によって異なります。ファイルの確認とパスワードの保存では、選ぶ方式も変わります。
異なるデータから同じハッシュ値が作られることがある
異なるデータから、同じハッシュ値が作られることがあります。
これを「ハッシュの衝突」といいます。
ハッシュの衝突とは、別のデータなのに同じハッシュ値が作られることです。
安全性の高いハッシュ関数では、意図的に衝突を起こすことが非常に難しくなるように作られています。
ハッシュ化で初心者が間違えやすい点
ハッシュ化は暗号化ではない
ハッシュ化と暗号化は、どちらもデータを元とは違う形に変えます。
しかし、暗号化は鍵を使って元に戻すことを前提としています。
ハッシュ化は、元に戻さず、同じかどうかを確認する仕組みです。
ハッシュ化とハッシュタグは関係がない
ハッシュタグは、SNSなどで「#」を付けた言葉です。
ハッシュ化は、データからハッシュ値を作るITの処理です。
名前は似ていますが、意味と使い方は異なります。
元に戻せないから絶対に安全とは限らない
ハッシュ化したデータは、基本的に元へ戻せません。
ただし、元の文字を予想し、一致するハッシュ値を探すことはできます。
そのため、パスワードには、長く予想されにくい文字列を使うことが大切です。
ハッシュ値が同じでも元のデータが必ず同じとは限らない
実際の確認では、ハッシュ値が同じなら、元のデータも同じである可能性が高いと判断します。
ただし、異なるデータから同じハッシュ値が作られる可能性もあります。
そのため、安全性が必要な場面では、目的に合ったハッシュ関数を使います。
ハッシュ化についてよくある質問
ハッシュ化とは簡単に言うと何ですか?
ハッシュ化とは、文字やファイルなどのデータを計算し、決められた長さの値に変えることです。
作られた値をハッシュ値といい、パスワードやファイルの確認に使います。
ハッシュ化と暗号化はどちらが安全ですか?
どちらが安全かを単純に比べることはできません。
元のデータへ戻す必要がある場合は暗号化を使います。
元のデータを保存せず、同じかどうかを確認したい場合はハッシュ化を使います。
ハッシュ化したパスワードは元に戻せますか?
ハッシュ化したパスワードを、計算を逆向きにして元へ戻すことは基本的にできません。
ただし、パスワードの候補を順番に試し、一致するハッシュ値を探すことはできます。
そのため、ソルトやパスワード専用の方式を使って保存します。
SHA-256とは何ですか?
SHA-256は、256ビットのハッシュ値を作る方式です。
ファイルの確認やデジタル署名などに使われます。
ただし、パスワードの保存には、SHA-256を単独で使うのではなく、パスワード専用の方式を使います。
ハッシュ値が同じなら元のデータも同じですか?
実際の確認では、ハッシュ値が同じなら、元のデータも同じである可能性が高いと考えます。
ただし、異なるデータから同じハッシュ値が作られることもあります。
これがハッシュの衝突です。
ハッシュ化とエンコードは同じですか?
ハッシュ化とエンコードは異なります。
エンコードとは、データを別の表し方に変えることです。
エンコードしたデータは、決められた方法を使えば元に戻せます。
ハッシュ化は、元のデータに戻すことを前提としていません。
まとめ|ハッシュ化とはデータを決められた長さの値に変える仕組み
ハッシュ化とは、文字やファイルなどのデータを計算し、決められた長さのハッシュ値に変える仕組みです。
同じデータに同じハッシュ関数を使うと、同じハッシュ値が作られます。
元のデータが少し変わると、通常はハッシュ値も変わります。
ハッシュ化は、パスワードの確認、ファイルが変わっていないかの確認、デジタル署名などで使われます。
暗号化は鍵を使って元のデータに戻せますが、ハッシュ化は元に戻すことを前提としていません。
「暗号化は元に戻して読む仕組み」「ハッシュ化は元に戻さず同じか確認する仕組み」と覚えると、違いを理解しやすくなります。

