インターネット上で安全にデータを保管・通信するために開発された技術の一つとして知られる、ハッシュ化と暗号化。しかし、その違いを正確に理解することに難しさを感じる人も少なくないのではないだろうか。この記事では、ハッシュ化と暗号化の違いを明らかにした上で、その安全性について解説する。
ハッシュ化と暗号化の違いは「不可逆性」
ハッシュ化とは特定の計算手法に基づいて、元のデータを不規則な文字列に置換する処理を指す。代表的な使用方法としては、パスワードをハッシュ化して保存・管理することが挙げられる。第三者が不正にパスワードへアクセスしたとしても、ランダムな文字列に変換されていることで、悪用されるのを防げるためだ。
ハッシュ化を施すアルゴリズムはハッシュ関数と呼ばれ、ハッシュ関数によって生成されるランダムな文字列はハッシュ値と呼ばれる。ハッシュ関数は入力する元データによって異なるハッシュ値を返す。同じ元データからは同じ値が得られる。また、異なる元データからは別のハッシュ値が生成される。
一方で、暗号化もデータが読み取られないようにする技術であるため、ハッシュ化と混同してしまう人も見受けられる。暗号化は可逆的な変換であり、ハッシュ化は不可逆である点が両者の大きな違いとして挙げられる。
すなわち、ハッシュ化は不可逆であるため、生成されたハッシュ値から元データを割り出すのは技術的に非常に困難とされている。パスワードの保存時にハッシュ値が用いられるのは、サーバーなどに保存したパスワードが仮に漏えいした場合でも、第三者に元の値を割り出せなくするためだ。
そのため、復元する必要がないデータに対してハッシュが用いられるケースが多い。一方、復元する必要がある用途では暗号化が利用される。具体的には、送信者の元データを受信者が復号するといった通信の場面では、暗号化の技術を用いることになる。
ハッシュ化の利用例
ハッシュ化が利用されるもう一つのケースとして、データの改ざんを検出する「チェックサム」という手法が挙げられる。ある時点でデータが改ざんされていないかを確認する際に、元のデータと現在のデータそのものを比較するのは非効率である。それぞれのデータを、一定の長さで構成される文字列であるハッシュ値に変換してから比較すれば、効率的にデータの同一性が確認できるのだ。ハッシュ化を用いた改ざんの検出は、以下の用途で用いられている。
1)電子署名
コロナ禍の影響もあり、紙と印鑑のプロセスを廃止して、データに電子署名を施すニーズが高まっている。電子署名では、対象となるデータに署名した段階から、その内容が改ざんされていないことを証明する必要がある。元データのハッシュ値を保存しておけば、改ざんが検知できるため、電子署名としての効力が期待できる。
2)電子メール
電子メールの場合、送信側であらかじめメール本文のハッシュ値を生成し、メールとハッシュ値を別々に送信する。受信側では同じハッシュ関数を使って届いたメールのハッシュ値を照合し、その内容が改ざんされていないかを検証できる。
3)配布するファイル
商用ソフトウェアやオープンソースのアプリケーション、あるいは各種データを公開・配布しているWebサイトは少なくない。それらのファイルやデータが改ざんされていない正規のものであるか、あるいはダウンロードに失敗してファイルが破損していないかを検証するのにハッシュ化は有効だ。
4)ビットコイン、ブロックチェーン
近年、話題になっている暗号資産や、それを支えるブロックチェーン技術にもハッシュ化が利用されている。例えば、ビットコインの取引データを分散型の台帳に記録する際に、ハッシュ値を使った改ざんがされていないかを確認する。中央集権的な監視システムのないビットコインの仕組みを成立させるため、ハッシュ化は重要な役割を果たしている。
ハッシュ化の規格
ハッシュ化に用いられるハッシュ関数について、これまで複数の規格が採用されてきた。規格によって、ハッシュ値から元のデータが再現されないことを保証する安全性や、ハッシュ化の計算速度などの性能面が異なってくる。その用途に応じて、最適な規格が採用される。
1)MD5
広く用いられてきたハッシュ関数で、128ビットの長さのハッシュ値を、高速に出力できるのが特長である。チェックサムによる改ざんの確認に用いられる場面が多い。
2)SHA-1
1995年に発表された規格で、160ビットのハッシュ値を生成する。異なるデータからハッシュ値が同じになることを利用した衝突攻撃のリスクがあるため、現在は利用が推奨されていない。
3)SHA-2
SHA-1を改良し、2001年にNIST(米国標準技術研究所)によって標準化された規格である。ハッシュ値の長さに応じて、SHA-224、SHA-256、SHA-384、SHA-512が定義されている。ハッシュ値が長ければ長いほど安全性が高いとされ、最近はSHA-256やSHA-512が主流となっている。
4)SHA-3
SHA-2よりも安全性を向上させるために、2015年に公開された後継の規格となる。「SHA」との名称を引き継いでいるものの、内部構造などが異なるなど、SHA-2とは別系統として設計されているのが特徴とされる。今後、SHA-3の利用が増えていく可能性が見込まれている。
暗号化通信の仕組み
可逆的なデータの変換が行える暗号化は、盗聴やなりすましを防ぐ技術として、多くの場面で用いられている。具体的には、サーバーとWebブラウザー間の通信、メールの送受信、あるいはVPN(Virtual Private Network)といった用途が代表的だ。
前述のハッシュ化と比較すると、暗号化では復号するための「鍵」の存在が大きく異なる。その鍵の仕組みによって、暗号化方式は以下のように、大きく2つに分けられる。
1)共通鍵暗号方式
暗号化と復号に共通の鍵を用いる方式となる。データを授受する相手にのみ鍵を共有するのが特徴だ。処理速度が速いものの、鍵自体が盗まれてデータが不正に読み取られるリスクがある。
2)公開鍵暗号方式
暗号化は同一の公開鍵を用い、復号には別の秘密鍵を用いる。データの受信者のみが復号できる秘密鍵を持っているため、安全性は比較的高い。
共通鍵、公開鍵、さらにはハッシュ化を組み合わせた例として、SSL通信が挙げられる。まず、共通鍵を通信相手へ安全に渡すため、鍵交換の際には公開鍵暗号方式を使用する。そして、高速に処理ができるよう、実際のデータの暗号化は共通鍵で行う。安全性や計算の性能を踏まえ、それぞれの長所を活用しているのが特徴だ。
SSL通信は以下、4つの手順で確立される。
- クライアントがサーバーに接続を要求。
- サーバーが、公開鍵を含めたサーバー証明書を送信、クライアントがサーバー証明書を検証。
- クライアントが、サーバー証明書に含まれた公開鍵で、共通鍵を暗号化する。その後、サーバーへ送信する。
- サーバーが、秘密鍵を使って、共通鍵を復号する。そして、共通鍵を使ってデータを送受信する。
サーバーとの通信だけではなく、無線LANにおいても暗号化通信が用いられている。デバイスとルーター間での通信を安全に行うための規格として、WEPやWPA2、WPA3などが知られている。
ハッシュ化を施したパスワードの安全性
近年、アカウント情報の漏えいが報じられるケースが増えている。パスワードがそのままデータベースに保存されていた場合、ひとたび情報が漏えいしてしまうと、不正アクセスにつながってしまう。そのような事態を回避するために、パスワードをハッシュ化して安全性を確保する。しかし、ハッシュ化を施しても、完璧な対策にはならない点には注意が必要だ。
例えば、ハッシュ化に推奨されていないアルゴリズムを用いると、ハッシュ値から元のパスワードが割り出されてしまうリスクが高まる。また、先述のとおり、SHA-1の規格に基づいたハッシュ化では、衝突攻撃という手法を用いて、異なる元データから同じハッシュ値が現れてしまう可能性も立証されている。さらに、パスワードとハッシュ値の組み合わせを記録し、効率的にハッシュ値を割り出すレインボーテーブル攻撃と呼ばれる攻撃手法も登場している。
これまで、ハッシュ化は数学的に不可逆だと言われてきたが、計算技術の飛躍的な進化により、その前提が覆りつつある。高い計算能力を持つコンピューターを用いることで、元データの解析にかかる時間が短縮されてきているのだ。さらなる技術進展を考慮すると、既存のアルゴリズムを使ったハッシュ化では安全性に懸念が出てきていると言える。
ただし、設定したパスワードが短い場合、どのハッシュ関数を用いていたとしても、元のパスワードが割り出されてしまうリスクは残る。ブルートフォース攻撃(総当たり攻撃)によって、あらゆるパターンを試していけば、元データを割り出すことは難しくない。
ユーザーとしては、類推されやすいパスワードの利用を避け、十分な長さを持った複雑な文字列を設定する必要がある。単純かつ類推が容易なパスワードでは、どのようなアルゴリズムを用いても解読されてしまうリスクがあると理解するべきだ。また、アカウント保護の観点から、二要素認証(2FA)を用いるなど、複合的な対策を講じるようにしたい。