プライバシー・セキュリティ対策は企業の社会的責任になっていますが、セキュリティ対策の対象であるデータを加工する「ハッシュ化」は、暗号化と混同されやすく利用されている仕組みもあまり認識されていない技術です。
この記事ではハッシュ化の仕組みや活用シーン、よく混同される暗号化との違いについても紹介します。
暗号化とハッシュ化の違いとは
ハッシュ化は、ハッシュ関数によってデータを不規則な文字列に変換する手法で、
暗号化は、暗号アルゴリズムによって元のデータを変換する手法です。
このセクションでは、暗号化とハッシュ化の違いについて仕組みをもとに解説します。
違いは「不可逆性」
暗号化も、ハッシュ化も一見、データの中身がわからないように処理する技術ですが、暗号化は暗号鍵を用いて元データを復号する一方で、ハッシュ化は元データを復号することはできません。この不可逆性(元に戻せない)によって両者は活用されるシーンが異なります。
暗号化の仕組み
暗号化とは、暗号アルゴリズムによって元のデータを変換する手法です。暗号化には一定の規則(変換ルール=変換アルゴリズム)が使われ、この変換ルールのことを「暗号鍵」といいます。暗号化されたデータは暗号鍵によって復号されない限り中身を見ることはできないため、高いセキュリティを維持する方法として使用されています。
暗号化には、暗号鍵の使い方によって「共通鍵暗号方式」と「公開鍵暗号方式」と呼ばれる2種類の方式があります。そのほか暗号化にはいずれかの方式を使う場合や両者を組み合わせたハイブリッド方式を使う場合もあります。
では、両者の違いについてそれぞれ解説します。
共通鍵暗号方式
共通鍵暗号方式とは、暗号化にも復号化にも同じ鍵を使う暗号化方式のことです。
暗号化する回数が少なくなり、暗号化アルゴリズムがシンプルな設計となります。その分処理速度が早まりますが、一方で復号する可能性のある相手には同じ鍵を共有するため、共有相手が増えるほど鍵の管理が煩雑になりデータ漏えいのリスクが高まります。
共通鍵暗号に使われる暗号アルゴリズムには種類があります。それぞれの特徴を表にまとめています。
暗号アルゴリズム |
特徴 |
DES(Data Encryption Standard) |
56bitの鍵を使うため、鍵長*が安全性を十分保てないとされ、AESの利用が推奨されている。 |
RC4(Rivest Cipher 4) |
40~2048bitの鍵を使う。SSL等のインターネット通信の暗号化に使われていたが、一部の攻撃方法で解読可能とされ、利用を禁止している企業もある。 |
AES(Advanced Encryption Standard) |
128・192・256bitの鍵を使うため、十分安全性を保つことができる鍵長であるとされ、世界標準の暗号化アルゴリズムとしてDESに代わりに利用されている。 |
*鍵長:暗号鍵を構成するビット数で、ビット数が大きいほど暗号強度は増す
公開鍵暗号方式
公開鍵暗号方式とは、暗号化と復号で異なる鍵を使う暗号化方式のことです。
公開鍵暗号方式は共通鍵暗号の鍵管理の課題を解決するために考案された方式で、暗号化する時の鍵を「公開鍵」として公開し、復号に使う鍵を「秘密鍵」として復号する側で管理します。復号する際、データ受信者は公開鍵で暗号化されたデータを受け取り、秘密鍵で復号します。
共通鍵暗号方式とは異なり、管理する鍵の数が秘密鍵だけになるため、煩雑な鍵管理の必要はなく、鍵の漏えいや紛失によるデータ流出のリスクを未然に防ぎます。
一方で、暗号アルゴリズムが強力になることで処理速度が落ちるため、共通鍵暗号方式と組み合わせて使うハイブリッド方式を採用する暗号化ソリューションも増えています。
共通鍵暗号と同じように公開鍵暗号に使われる暗号アルゴリズムにも種類があります。それぞれの特徴を表にまとめています。
暗号アルゴリズム |
特徴 |
RSA |
1024・4096bitの鍵を使う。 桁の大きな数に対して素因数分解することが困難であるという根拠から、安全とされている。フェルマーの小定理に基づいて作られた。デジタル署名に使われる。 |
楕円曲線 |
楕円曲線を用いた暗号化アルゴリズムの総称。公開暗号鍵が多く、処理速度が速い。 |
公開鍵暗号が利用例としては電子署名(デジタル署名)が有名です。
署名を行う側が秘密鍵を持つことで、署名を受け取った側が公開鍵によって暗号化された内容を正しく平文に戻し、本人の署名を確認できれば、信用度の高いデータとして認識される仕組みです。
- 送信者は自分の名前を秘密鍵で暗号化し、受信者へ送付する
- 受信者は公開されている送信者の公開鍵を使って復号化する
- 送信者の名前が表示され、本人のものであると確認ができる
これらの暗号化方式が暗号化する対象は、データに限りません。ネットワークの通信やメール等、外部から秘匿したい情報という意味で多岐にわたります。
暗号化する対象によって変わる暗号化の仕組みについて、以下の記事にて説明していますので、参考までにご覧ください。
「メール暗号化はなぜ必要?その理由と注意点について解説」https://www.eaglys.co.jp/news/column/secure-computing/encryptmail
ハッシュ化の仕組み
ハッシュ化とは、データを不規則な文字列に変換する手法のことです。
変換されたデータはハッシュ値と呼ばれ、データの変換にはハッシュ関数と呼ばれるアルゴリズムが使われています。
同一のデータから変換されるハッシュ値は常に同一の結果となるため、変換後は元に戻せない性質(不可逆性)があることが特徴です。
ハッシュ化は、一度入力すると復号できないほうが都合がいいもの、例えばパスワード一致等、ハッシュ化された結果を比べる際や、データ・ファイルの改ざんがされていないかチェックする際(チェックサム)に使われます。
ハッシュ化に使われるハッシュ関数にも種類があります。それぞれの特徴を表にまとめています。
ハッシュ関数 |
特徴 |
MD5 |
128bitのハッシュ値*を高速生成する。生成されたハッシュ値から元のデータを求めることができる等の報告から、脆弱性が指摘され、現在は使われていない。 |
SHA-1 |
160bitのハッシュ値を生成する。SHA-1にも脆弱性が指摘され、現在では利用は推奨されていない。 |
SHA-256、SHA-512 |
いずれもSHA-1の改良版。ほかにSHA-224、SHA-384等が定義されている。現在はSHA-256が使われることが多い。 |
*ハッシュ値が長ければ長いほど、安全性が高い
ハッシュ化の活用例
ハッシュ化は、その不可逆性によって生成されたハッシュ値から元データを割り出すことは技術的に困難であるといわれています。
このセクションでは、そのようなハッシュ化の特徴を生かした活用例を紹介します。
チェックサム機能
チェックサム機能は、2つ以上のデータやファイルの「同一性」を確かめる機能です。
例えば、データ・ファイルをダウンロードしたり受信した時に、その内容が通信途中で改ざんされていないことを確かめるために使われます。
具体的には、ファイルをダウンロードした際にチェックサム機能を使う場合、ファイルをハッシュ化してハッシュ値を確認します。そしてダウンロードサイト上で公開されているハッシュ値と手元のファイルのハッシュ値を比較。同一のデータから変換されるハッシュ値は常に同一のため、同じハッシュ値であればファイルが改ざんされていないと確認できます。
上記の方法以外にも、アプリケーションをパソコンにダウンロードしてデータの送受信にチェックサム機能を使うこともできます。
送信元認証
送信元認証は、メールマガジンなどの送信元が正しい人物・企業などであると確かめる機能です。
メールを送信するドメインを認証する技術は複数ありますが、そのうちの「DKIM」では公開鍵暗号とハッシュ化による電子署名(デジタル署名)をメールに付与することで、送信元を認証しています。
具体的には、メール送信者(送信サーバ―側の企業)はメールのヘッダーや本文の一部をハッシュ化し、ハッシュ化した値を手元の秘密鍵で暗号化します。これが電子署名となります。そして電子署名をメールに添付して送信します。
メールの受信者は受け取ったメールをハッシュ化し、あらかじめDKIMレコードに登録されている公開鍵を用いて電子署名を復号し、ハッシュ値をとりだします。その後メール受信者はメールのハッシュ値と復号したハッシュ値を確かめ、メールの内容が改ざんされていないかを確認します。
このようにハッシュの不可逆性を用いることで、送信元の認証やメール内容が改ざんされていないことを確認できるようになります。
パスワードの安全性向上
パスワードは個人の責任で管理することは当然ですが、ログイン時に入力するデータベースやサイト側でも記憶されています。万が一このID・パスワードが流出した場合は、サービスの不正ログインや不正利用が相次ぎ、最悪の場合は犯罪被害に巻き込まれる可能性も考えられます。
そうしたセキュリティリスクをあらかじめ想定し、入力されたパスワードをシステム等で保存する際に、ハッシュ化した値を記憶させるといった対策が実施されています。
これによって、次回入力された際にハッシュ値が一致すれば、正しいパスワードが入力されたことが判明します。
しかし、ハッシュ化にも弱点があります。事前にハッシュ化された値をあらかじめリストアップして表(テーブル)にしておき、順番に当てていく「レインボーテーブル」という方法の場合には、ハッシュ値から逆算して本来のパスワードを突破されてしまいます。同一のデータから変換されるハッシュ値は同一になるという特徴を突いた巧妙な手法です。
このような手法に対応するには、どのような方法があるのでしょうか。
ソルト
レインボーテーブルに対抗する措置として有名な手法に「ソルト」があります。
ソルトとは、ハッシュ化する前のデータに不規則な情報や文字列を付け加えてからハッシュ化する方法のことです。この手法であれば、流出したハッシュ値にはソルトが付加されているため、最初から計算をし直す必要があります。そのため、レインボーテーブルの攻撃に耐えうる方法と考えられています。ただ、ソルトが含まれることを想定したレインボーテーブルには対応できないため、万能とはいえません。
ストレッチング
そのほか、ストレッチングという複数回ハッシュ関数によるハッシュ化を繰り返す手法もあります。ハッシュ化を複数回繰り返すことで元の文字列までさかのぼることが難しくなるため、効果的と考えられますが、ソルトと比べて機械的な対策となるため、複雑性を上げるにはソルトを組み合わせる方法が有効です。
まとめ
ハッシュ化と暗号化の違いや特徴、使われるケースについてご紹介しました。
ハッシュ化は不可逆のデータ変換処理であり、復号が必要ない情報に対して使われ、使い方によってはデータやファイルの安全性を保てますが、上述のようにハッシュ化も万能とは言い切れません。
企業が取り組むべきデータセキュリティ対策の一環としては、ハッシュ化も有効な手法です。しかし、セキュリティ対策において、ハッシュ化で対応できるものばかりとは言えません。むしろハッシュ化にこだわることでかえって手間がかかる場合もあります。
そのため、暗号化を組み合わせたりツールの入れ替えを検討したりする際は、目的に応じた対策をおこなう等、全社的な取り組みが求められています。
今後の、目的に沿ったセキュリティ対策の手法を選択する際の一助になれば幸いです。