目次
概要
ハッシュ関数とは、入力されたデータから固定長のハッシュ値を出力する関数です。ハッシュ関数の用途や主なハッシュ関数について解説します。
ハッシュ関数とは
ハッシュ関数とは、入力されたデータから固定長のデータ(ハッシュ値)を出力する関数です。ハッシュ値はメッセージダイジェストやフィンガープリント(指紋)とも呼ばれます。
ハッシュ値は入力データよりも短くなることがほとんどなので、ハッシュ関数によってデータを圧縮していると考えることもできます。ただ、データの圧縮といってもハッシュ値から元のデータを復元することはできません。
ハッシュ関数の「ハッシュ(hash)」は、「切り刻む」という意味です。「ハッシュドビーフ」や「ハッシュドポテト」の「ハッシュ」です。もとのデータを切り刻んで小さくするといった意味合いです。
ハッシュ関数に必要な条件として、以下が挙げられます。
- 出力したハッシュ値から入力データを推測することが困難
- 異なる入力データに対して同じハッシュ値になる(ハッシュの衝突)ことが少ない
- 簡単に計算できる(計算コストが低い)
ハッシュ関数の用途
ハッシュ関数に入力されたデータが異なると、出力されるハッシュ値も(ほぼ)異なります。そして、同じ入力データなら同じハッシュ値が出力されます。この性質を利用して、ハッシュ関数によりデータの一意性を確保できます。ハッシュ関数の主な用途として以下が挙げられます。
- データの改ざん、誤り検出
- パスワードの安全な保管
- 高速な検索処理
データの改ざん、誤り検出
WebサイトからOSのISOファイルやプログラムのインストーラなどをダウンロードするときに、ハッシュ値が記載されていることがあります。ダウンロードしたファイルのハッシュ値と記載されているハッシュ値が一致していれば、ファイルは改ざんされたり破損したりしていないことを確認できます。たとえば、UbuntuのWebサイトにISOファイルのハッシュ値が記載されていて、ダウンロードしたファイルを検証できるようにしています。
http://releases.ubuntu.com/22.04.2/
デジタル署名でもハッシュ関数を利用したデータの改ざん、誤り検出を行っています。
パスワードの保管
パスワードの保管時に、パスワード自体を保管するのではなく、ハッシュ値を保管しておきます。入力されたパスワードのハッシュ値を計算して、保管しているパスワードのハッシュ値と比較すれば、パスワードを検証できます。
不正アクセスなどでアカウント情報が漏洩したとしても、パスワードのハッシュ値が知られるだけでパスワードそのものを知られることはありません。パスワードのハッシュ値からもとのパスワードを推定することは非常に難しいからです。
2011年にソニーのPSN(Play Station Network)のアカウント情報が漏洩しました(1ヶ月ほどオンラインマルチプレイができなくてとても退屈でした)。アカウントのパスワードも漏洩したと報じられていましたが、パスワードそのものが漏洩したわけではありません。漏洩したのはパスワードのハッシュ値です。パスワードのハッシュ値が知られただけでは、アカウントに不正にログインされる可能性は非常に低いです。筆者のPSNアカウントも不正にアクセスされるようなことはありませんでした。ただ、パスワードのハッシュ値が知られてしまうことはやはり問題です。
https://cdn.jp.playstation.com/msg/sp_20110427_psn.html
高速な検索処理
ハッシュ関数によって固定長のハッシュ値を出力することを利用して、高速な検索処理を行うことができます。ハッシュ関数を利用した高速な検索処理を行うためにハッシュテーブルがあります。ハッシュテーブルとは、ハッシュ関数を使ってキーを配列のインデックスに変換し、データの検索を高速化するためのデータ構造です。
主なハッシュ関数
主なハッシュ関数として以下が挙げられます。
- MD5
- SHA-1
- SHA-2
- SHA-3
MD5
MD5はRFC1321で規定されているハッシュ関数です。入力されたデータから128ビットの固定長のハッシュ値を出力します。非常によく利用されているハッシュ関数ですが、セキュリティ上の問題点が指摘されています。現在では、MD5の利用は推奨できません。
SHA-1
SHA-1は、アメリカ国立標準技術研究所(NIST)で標準化されているハッシュ関数です。入力されたデータから160ビットの固定長のハッシュ値を出力します。MD5と同様にセキュリティに問題点があります。SHA-1の利用も推奨できません。
SHA-2
SHA-1を改良したハッシュ関数がSHA-2です。SHA-2には、出力するハッシュ値のサイズからいくつかのバリエーションがあります。
SHA-2のバリエーション | ハッシュ値のサイズ |
---|---|
SHA-224 | 224ビット |
SHA-256 | 256ビット |
SHA-384 | 384ビット |
SHA-512 | 512ビット |
SHA-512/224 | 224ビット |
SHA-512/256 | 256ビット |
SHA-3
SHA-3はSHA-1/SHA-2とは異なるコンセプトのハッシュ関数です。もとはKeccakというハッシュ関数で2015年にSHA-3として標準化されています。SHA-3で出力されるハッシュ値のサイズは224,256,384,512ビットです。
ハッシュ関数 | ハッシュ値のサイズ(ビット) | 備考 |
---|---|---|
MD5 | 128 | RFC1321 |
SHA-1 | 160 | FIPS PUB 180-4 |
SHA-224 | 224 | FIPS PUB 180-4 |
SHA-256 | 256 | FIPS PUB 180-4 |
SHA-384 | 384 | FIPS PUB 180-4 |
SHA-512 | 512 | FIPS PUB 180-4 |
SHA-512/224 | 224 | FIPS PUB 180-4 |
SHA-512/256 | 256 | FIPS PUB 180-4 |
SHA3-224 | 224 | FIPS PUB 202 |
SHA3-256 | 256 | FIPS PUB 202 |
SHA3-384 | 384 | FIPS PUB 202 |
SHA3-512 | 512 | FIPS PUB 202 |
まとめ
ポイント
- ハッシュ関数とは、入力されたデータから固定長のデータ(ハッシュ値)を出力する関数です。
- ハッシュ関数の主な用途として、以下があります。
- データの改ざん、誤り検出
- パスワードの安全な保管
- 高速な検索処理
- 主なハッシュ関数として、以下があります。
- MD5
- SHA-1
- SHA-2
- SHA-3
リンク
セキュリティの基礎
- SSLとWi-Fiの暗号化の違い
- セキュリティの目的 ~機密性/完全性/可用性~
- セキュリティの脅威と対策の概要
- マルウェア ~ユーザにとって有害なソフトウェア~
- 認証の基礎 ~正規のユーザ/デバイスですか?~
- 覚えやすくて推測されにくい安全なパスワードの作り方
- 暗号化の概要
- ハッシュ関数とは
- SSLとは? ~アクセス先は本物です!データは盗聴/改ざんされません!~
- ファイアウォールの概要 ~正規の通信のみを転送~
- IDS/IPS ~不正アクセス対策~
- Cisco アクセスコントロールリストの概要
- パケットフィルタ ~不正な通信をブロックするCisco ACLの最も多い用途~
- SPI(Stateful Packet Inspection)の概要
- Cisco ACLによるパケットフィルタの設定と確認
- 名前付きACL(Named ACL)
- タイムベース(Time-based)ACL
- Cisco ACLによるパケットフィルタの設定例
- 標準ACLと拡張ACLのパケットフィルタリングをより深く理解するための演習 ~標準ACL~
- 標準ACLと拡張ACLのパケットフィルタリングをより深く理解するための演習 ~拡張ACL~
- リフレクシブ(Reflexive)ACL ~戻りの通信を自動的に許可~
- リフレクシブ(Reflexive)ACLの設定例
- Catalystスイッチのパケットフィルタリング RACL/VACL/PACL
- RACL/VACL/PACLの設定と確認コマンド
- uRPFの設定例
- VTYアクセス制御
- DHCPスプーフィング ~DHCPサーバを偽装~
- DHCPスヌーピング
- Cisco DHCPスヌーピングの設定と確認コマンド
- Cisco DHCPスヌーピングの設定例
- ARPスプーフィング
- Dynamic ARP Inspection
- Cisco Dynamic ARP Inspectionの設定と確認コマンド
- TCPインターセプトの設定例
- WAF(Web Application Firewall)の概要
- 電子メールのセキュリティ