はじめに
なんとなくざっくりした理解でも使えてしまう両者。一括りに「暗号化」と説明しているサイトも見かけますが、実は異なるものです。原理を正しく理解して柔軟に使い分ける必要があります。
インターネット上で動くサービスにセキュア指向はつきものですから、ITに関わる全てのエンジニアが注視すべきポイントです。
ハッシュ化とは
あるデータ(クリアテキスト、メディア等)を、ハッシュ関数( 一方向性関数 )を用いて固定長(文字数が〇文字と決まっている)の文字列に変えるものです。復号不可能(元に戻せない)です。 筆者は学部生時代に「一方向性関数・固定長・複合不可能」と三要素で暗記しました。
パスワード等、復号されたくないものに使われます。データベースに、パスワードをハッシュ化して保存すれば、そのデータベースが流出してもパスワードは漏洩しません。正当な権限を持ったユーザーからアクセスがあったときに、入力されたパスワードをハッシュ化して比較し、同じ文字列になればアクセスを許可するわけです。
その他、サムチェックと呼ばれる利用もあります。(図1.を参照)
LinuxのISOイメージ等、大きなファイルをダウンロードした場合にファイルに欠損がないかがわかります。公式サイトのハッシュ値とダウンロードしたファイルのハッシュ値が同一か確認することで簡単にわかります。高速・低遅延で安定した通信が可能な現代のネットワークではダウンロードの際にファイルが欠損することはほとんどありませんので見かけなくなってきました。
メジャーな方式ではSHA2(イケメン)、SHA1(非推奨)、 md5(超非推奨)などがあります。
暗号化とは
あるデータを、暗号化アルゴリズムを使って復元可能かつ、複号用の鍵無しでは複号不可能な形式にするものです。
暗号化・復号化には鍵と呼ばれる125bit程度の文字列が使われます。
SSH通信等で使われています。
メジャーな方式として、RSA、AES、トリプルDES(超非推奨)などがあります。
両者の違い
先述しましたが、復号できるかできないか、出力される値が固定長か否かの点です。
それに準じて使用される目的も異なります。ハッシュ化は自分自身が復号する必要がない、万一漏洩しても復号されたくないデータベースに使用されます。
他方、暗号化は必要に応じて復号したいものに使用されます。SNS(https)やリモートアクセス(SSH)などがあげられます。
暗号化はハッシュ化よりも複雑な手順を踏むことが多く、相対的に重たい処理だと言えます。
おわりに
次々 と高水準なOSSがリリースされる昨今。 知識が未熟なエンジニアでもセキュアな(実用的な)環境で開発できるのは、自主学習という観点でも、ビジネス的な観点でも大変望ましいことです。
しかし持論ですが、セキュリティの分野は基礎理論の数学の部分を理解することが望ましいと考えています。詳しい原理については、間を見て編集することにします。