演習でlocalStrageを使ってログイン機能を実装した時にcrypto.jsを使用し、入力されたパスワードのハッシュ化を行ったので、暗号化とハッシュ化について調べてみた。
ハッシュ化
ハッシュ化とは特定の計算手法に基づいて、元のデータを不規則な文字列に置換する処理。
ハッシュ化を施すアルゴリズムはハッシュ関数と呼ばれ、ハッシュ関数によって生成されるランダムな文字列はハッシュ値と呼ばれる。
暗号化は可逆的な変換であり、ハッシュ化は不可逆。
使用例
- パスワード保存・管理
- ビットコイン、ブロックチェーン
- 電子メール
ハッシュ化の規格
-
MD5
現在は非推奨 -
SHA-1
グーグルも既にSHA-1の証明書受け入れを停止 -
SHA-2
SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256 -
SHA-3
2015年に公表された新たなハッシュ関数
暗号化
暗号化とは、元のデータに処理を施し、別なデータに変換すること。
変換されたデータを元に戻す作業のことを復号化という。
暗号化の種類
共通鍵暗号方式(AES)
共通鍵暗号方式は、暗号化と復号化に同じ鍵を使うもの。
暗号化する側と復号化する側以外の第三者に鍵が漏れないように管理する必要があるため、秘密鍵暗号方式とも呼ばれる。
公開鍵暗号方式(RSA)
公開鍵暗号方式は、暗号化と復号化に違う鍵を使うもの。
暗号化には公開された鍵を使い、復号化では受信者がもつ秘密の鍵を使う。復号化する側=受信者の鍵さえ管理すればよいため、共通鍵暗号方式と比べて、鍵の漏洩リスクは少ないが、暗号化、復号化ともに処理速度が遅いという難点がある。
ハイブリッド暗号方式
ハイブリッド暗号方式とは、公開鍵暗号方式と共通鍵暗号方式を組み合わせた暗号方式
で、Webの暗号で広く普及しているHTTPS(SSL/TLS)などで用いられている。