プライバシー・セキュリティ対策は企業の社会的責任になっていますが、セキュリティ対策の対象であるデータを加工する「ハッシュ化」は、暗号化と混同されやすく利用されている仕組みもあまり認識されていない技術です。この記事ではハッシュ化の仕組みや活用シーン、よく混同される暗号化との違いについても紹介します。
暗号化とハッシュ化の違いとは

暗号化もハッシュ化も、元のデータを変換する手法ですが、このセクションでは、それらの違いについて仕組みをもとに解説します。
違いは「不可逆性」
暗号化もハッシュ化も、元のデータをそのままでは読めない形に変換する技術です。暗号化は「復号」と呼ばれる処理と対になっており、暗号化されたデータは、復号することで元のデータに戻せます。また、暗号化には暗号化鍵、復号には復号鍵と呼ばれる「鍵」を用います。一方、ハッシュ化には復号という処理がなく、ハッシュ値から元のデータに戻すことはできません。この可逆性の違いによって、両者が活用される場面は異なります。
暗号化の仕組み
暗号化とは、暗号アルゴリズムによって元のデータを変換する手法です。暗号化には一定の規則(変換ルール=暗号アルゴリズム)が使われ、この変換に用いる情報のことを「暗号鍵」といいます。暗号化されたデータは、対応する復号鍵によって復号されない限り中身を見ることができないため、高いセキュリティを維持する方法として使用されています。
暗号化には、暗号鍵と復号鍵の使い方によって「共通鍵暗号方式」と「公開鍵暗号方式」と呼ばれる2種類の方式があります。暗号化では、いずれか一方の方式を使う場合や、両者を組み合わせたハイブリッド方式を使う場合もあります。
では、両者の違いについてそれぞれ解説します。
-
共通鍵暗号方式
共通鍵暗号方式とは、暗号化鍵と復号鍵が同一の暗号方式のことです。暗号化と復号に必要な計算量が少なく、暗号化アルゴリズムが比較的シンプルな設計となります。その分、処理速度が速くなりますが、一方で復号する相手とは同じ鍵を共有するため、共有相手が増えるほど鍵の管理が煩雑になり、鍵の漏えいによるデータ漏えいのリスクが高まります。共通鍵暗号に使われる暗号アルゴリズムには種類があります。それぞれの特徴を表にまとめています。
|
暗号アルゴリズム |
特徴 |
|
DES(Data Encryption Standard) |
56bitの鍵を使うため、鍵長*が安全性を十分保てないとされ、AESの利用が推奨されている。 |
|
RC4(Rivest Cipher 4) |
40~2048bitの鍵を使う。SSL/TLSなどのインターネット通信の暗号化に使われていたが、特定の条件下では内容の解読につながる攻撃手法が知られており、現在はTLSでの利用が禁止されている。 |
|
AES(Advanced Encryption Standard) |
128・192・256ビットの鍵を使い、適切な利用下で十分な安全性を保つことができるとされ、DESに代わる標準的な暗号化アルゴリズムとして現在世界的に利用されている。 |
*鍵長:暗号鍵を構成するビット数で、ビット数が大きいほど暗号強度は増す
-
公開鍵暗号方式
公開鍵暗号方式とは、暗号化鍵と復号鍵が異なる暗号方式のことです。公開鍵暗号方式は、共通鍵暗号方式における鍵共有の課題を解決するために考案された方式です。暗号化するときの鍵を「公開鍵」として公開し、復号に使う鍵を「秘密鍵」として復号する側で管理します。復号する際、データ受信者は公開鍵で暗号化されたデータを受け取り、秘密鍵で復号します。共通鍵暗号方式とは異なり、公開鍵は公開でき、機密情報として管理する鍵は秘密鍵だけになります。鍵を相手と安全に共有する必要がなく、鍵管理の煩雑さや鍵の共有時における漏えいのリスクを抑えられます。
一方で、暗号化や復号に必要な計算量が多く、処理速度が遅くなるため、共通鍵暗号方式と組み合わせて使うハイブリッド方式を採用する暗号化ソリューションも多くあります。
共通鍵暗号と同じように公開鍵暗号に使われる暗号アルゴリズムにも種類があります。それぞれの特徴を表にまとめています。
|
暗号アルゴリズム |
特徴 |
| RSA |
一般に2048ビット以上の鍵を使う。 |
| 楕円曲線暗号 |
楕円曲線と呼ばれる数学的対象を用いた公開鍵暗号方式の総称。RSAと同程度の安全性をより短い鍵長で実現でき、処理を効率化しやすい。 |
公開鍵暗号方式の利用例としては、電子署名に用いられるデジタル署名が有名です。署名を行う側が秘密鍵を持つことで、署名を受け取った側が公開鍵によって署名を正しく検証し、データが改ざんされていないことや、対応する秘密鍵を持つ者が署名したことを確認できれば、信頼性の高いデータとして認識される仕組みです。
- 送信者は、データに対して秘密鍵を使ってデジタル署名を作成し、データとともに受信者へ送付する
- 受信者は、送信者の公開鍵を使って、受け取ったデータとデジタル署名を検証する
- 検証に成功すれば、データが署名後に改ざんされていないことと、対応する秘密鍵を持つ者による署名であることを確認できる
これらの暗号化方式が暗号化する対象は、データに限りません。ネットワークの通信やメール等、外部から秘匿したい情報という意味で多岐にわたります。暗号化する対象によって変わる暗号化の仕組みについて、以下の記事にて説明していますので、参考までにご覧ください。
「メール暗号化はなぜ必要?その理由と注意点について解説」https://www.eaglys.co.jp/news/column/secure-computing/encryptmail
ハッシュ化の仕組み
ハッシュ化とは、データを一定の長さの文字列に変換する手法のことです。変換によって得られた値はハッシュ値と呼ばれ、データの変換にはハッシュ関数と呼ばれるアルゴリズムが使われています。ハッシュ値から元のデータを直接復元できない性質(不可逆性)があることが特徴です。ハッシュ化は、変換後に元へ戻せないほうが都合のよいもの、例えばパスワードの照合など、ハッシュ化された結果を比べる際や、データ・ファイルが変更されていないかチェックする際(整合性の確認)に使われます。
ハッシュ化に使われるハッシュ関数にも種類があります。それぞれの特徴を表にまとめています。
|
ハッシュ関数 |
特徴 |
|
MD5 |
128ビットのハッシュ値*を高速に生成する。異なるデータから同じハッシュ値を作り出す攻撃が実用化されているため、現在はセキュリティ用途での利用は推奨されていない。 |
|
SHA-1 |
160ビットのハッシュ値を生成する。SHA-1にもMD5と同様の攻撃に対する脆弱性が指摘され、現在はセキュリティ用途での利用は推奨されていない。 |
|
SHA-256、SHA-512 |
いずれもSHA-1の改良版。ほかにSHA-224、SHA-384等が定義されている。現在はSHA-256が使われることが多い。 |
*ハッシュ値が長ければ長いほど、安全性が高い
ハッシュ化の活用例

ハッシュ化は、その不可逆性によって生成されたハッシュ値から元データを割り出すことは技術的に困難であるといわれています。このセクションでは、そのようなハッシュ化の特徴を生かした活用例を紹介します。
チェックサム機能
チェックサム機能は、2つのデータやファイルの「同一性」を確かめる機能です。例えば、データやファイルをダウンロードしたときに、その内容が通信途中で破損・改ざんされていないかを確かめるために使われます。
具体的には、手元のファイルをハッシュ化してハッシュ値を算出します。そして、ダウンロードサイト上で公開されているハッシュ値と、手元のファイルのハッシュ値を比較します。同一のデータを同じハッシュ関数で変換した場合、生成されるハッシュ値は常に同一であるため、同じハッシュ値であれば、ファイルの内容が公開時から変わっていないと判断できます。
上記の方法以外にも、チェックサム機能を備えたアプリケーションをパソコンにダウンロードすることで、データの送受信時に使うこともできます。
送信元認証
送信元認証は、メールマガジンなどの送信元として使われているドメインを確かめる機能です。メールを送信するドメインを認証する技術は複数ありますが、そのうちの「DKIM」では、公開鍵暗号とハッシュ化を用いた電子署名(デジタル署名)をメールに付与することで、署名元のドメインを認証しています。
具体的には、メール送信者(送信サーバー側の企業)は、メールの本文をハッシュ化し、そのハッシュ値と指定されたヘッダーを基に、手元の秘密鍵を使って署名を生成します。これが電子署名となります。そして、電子署名をメールのヘッダーに付与して送信します。メールの受信側は、受け取ったメールの本文をハッシュ化し、あらかじめDKIMレコードに登録されている公開鍵を用いて、そのハッシュ値と指定されたヘッダーを基に電子署名を検証します。その後、メール受信者は検証結果を確かめ、メールの内容が署名後に改ざんされていないかを確認します。
このように、ハッシュ化と公開鍵暗号を組み合わせることで、署名元のドメインの認証や、署名対象となったメールの内容が改ざんされていないことを確認できるようになります。
パスワードの安全性向上
パスワードは個人の責任で管理するのが当然ですが、一般的なパスワード認証では、ログイン時に入力したパスワードを照合するための情報が、サイト側のデータベースにも保存されています。万が一、このID・パスワードが流出した場合は、サービスへの不正ログインや不正利用が発生し、最悪の場合は犯罪被害に巻き込まれる可能性も考えられます。
そうしたセキュリティリスクをあらかじめ想定し、入力されたパスワードをシステムなどで保存する際に、パスワードそのものではなく、パスワード保存用の方式でハッシュ値を保存するといった対策が実施されています。
これによって、次回ログイン時に入力されたパスワードを同じ方法でハッシュ化し、保存されているハッシュ値と一致すれば、正しいパスワードが入力されたことを確認できます。
しかし、パスワードを単純にハッシュ化するだけでは弱点があります。パスワードの候補から生成されるハッシュ値を事前に大量に計算して表(テーブル)にしておき、流出したハッシュ値と照合する「レインボーテーブル」という方法では、本来のパスワードを推測されてしまう可能性があります。同一のデータを同じハッシュ関数で変換すると、ハッシュ値は常に同一になるという特徴を突いた手法です。
このような手法に対応するには、どのような方法があるのでしょうか。
-
ソルト
レインボーテーブルに対抗する措置として有名な手法に「ソルト」があります。
ソルトとは、ハッシュ化前のデータに、無作為に生成した値を付け加えてからハッシュ化する方法のことです。この手法であれば、同じパスワードでも、ソルトが異なれば別のハッシュ値になります。そのため、既存のレインボーテーブルをそのまま使うことはできず、ソルトごとにパスワード候補のハッシュ値を計算し直す必要があるため、レインボーテーブル攻撃に対抗する方法として有効と考えられています。ただし、ソルトは通常、ハッシュ値とともに保存されるため、両方が流出した場合には、個々のパスワード候補を試す攻撃まで防ぐことはできず、万能な対策とはいえません。
-
ストレッチング
そのほか、ストレッチングという、ハッシュ関数によるハッシュ化を複数回繰り返す手法もあります。
ハッシュ化を複数回繰り返すことで、パスワード候補を一つ試すために必要な計算量が増えるため、効果的と考えられますが、ソルトとは役割が異なるため、両者を組み合わせる方法が有効です。
まとめ
ハッシュ化と暗号化の違いや特徴、使われるケースについてご紹介しました。ハッシュ化は不可逆のデータ変換処理であり、復号が必要ない情報に対して使われ、使い方によってはデータやファイルの安全性を保てますが、上述のようにハッシュ化も万能とは言い切れません。
企業が取り組むべきデータセキュリティ対策の一環としては、ハッシュ化も有効な手法です。しかし、セキュリティ対策において、ハッシュ化で対応できるものばかりとは言えません。むしろハッシュ化にこだわることでかえって手間がかかる場合もあります。そのため、暗号化を組み合わせたりツールの入れ替えを検討したりする際は、目的に応じた対策をおこなう等、全社的な取り組みが求められています。
今後の、目的に沿ったセキュリティ対策の手法を選択する際の一助になれば幸いです。
※本記事に記載されている会社名・製品名・サービス名は、 各社の商標または登録商標です。