日経XTECHに暗号化とハッシュ化の違いに関する判りやすい記事がありました。今まで漠然とこの二つを理解していたので、この記事を読むまでは明確に違いを説明できなかったのではないかと思います。
暗号化は複合化と一対
元となるデータに対して特別な処理をすることで別のデータに変換する処理のことを暗号化と呼んでいます。この「特別な処理」が暗号アルゴリズムです。逆に暗号化されたデータを元のデータに戻すことは複合化と呼んでいます。この暗号化と複合化が必ず一対になっていて可逆的であることが最大の特徴です。
この暗号化や複合化の処理には鍵が必要になります。暗号アルゴリズムが盗まれたとしても鍵の情報が判らないと元のデータに戻すことはできません。
暗号化は複合化によって元のデータに戻す必要があるときに使う手法ということになります。
ハッシュは非可逆
ハッシュというのは元のデータがあったときに、ハッシュ関数を通して別のデータに置き換える手法です。ハッシュ関数は検索の高速化やデータの比較処理の高速化、改竄の検出に利用されます。
話題がそれてしまいますが、検索の高速化になぜハッシュが役に立つのか調べてみました。例えば、データベースでデータを格納する物理的な場所への返還にハッシュ関数を使う場合ああるようです。あるデータをデータベースの中に格納するときにハッシュテーブルを元に格納場所を決め、次に参照したいときには同じハッシュテーブルに従って物理的な場所を特定するという方法です。
また、昔、回線のデータ転送品質が悪かった時代には一塊のデータの後ろにハッシュ値をつけて転送し、受取先でももう一回ハッシュ値を計算して、ハッシュ値が合うか否かをチェックすることを通してエラーを摘出する手法が活躍していました。
パスワードをチェックするときにも、データベースにはパスワードそのものを入れません。漏洩してしまうリスクがあるためです。パスワードを登録する際にハッシュ関数を通してハッシュ値をデータベースに格納し、次のログインのときには、また入力された情報をハッシュ関数にかけて、ハッシュ値が同じになるかどうかでチェックをします。
つまりハッシュの方法であれば非可逆で構いません。複合化の必要がないところが最大の特徴です。
以前は「パスワードを忘れてしまった」際に氏名や誕生日などを入力すると、メールでパスワードそのものを返信してくれるようなサイトがありました。これはセキュリティ的には危ない実装方法
ということになります。パスワードが漏洩するリスクが高いです。
逆に最近はパスワードを忘れてしまったときは、元のパスワードを照会することはでいずに、リセットして新しいパスワードを設定しなおすようにしているサイトになっています。これはデータベースに収録されているデータから元のパスワードには変換できないように実装されている可能性が
高いということになります。
ハッシュでも危険
それではハッシュを使えば安心なのかというと、最近は警鐘を鳴らすサイトも増えています。
ハッシュを使っても危険ということは、ID/パスワード方式でのセキュリティ確保だけでは厳しい状況になってきたということになります。
最近では、ID/パスワード方式に加えて、二段階認証を取り入れるサイトが増えてきました。ID/パスワード方式でログインしたあとに、メールやメッセージ等でランダムで発生させたコードを送って、このコードを使わない限りはログインに成功できないシステムです。スマホに認証用のアプリをインストールして自分専用のコードを生成し、これを入力させることで二段階目の認証を通すことができるサイトもあります。
私自身、銀行やECサイト、クレジットカードのサイトなど、お金を使ったりする秘匿性の高いサイトでは必ず二段階認証をONにするようにしました。
これでもなお十分ということはありませんので、今後もセキュリティ強化に向けた技術開発は進んでいくものと思います。
コメント