ハッシュとは?ハッシュ関数の完全な解説
簡単な回答
ハッシュ化では、一方向関数を使用して任意の入力を固定サイズの出力 (ハッシュ) に変換します。同じ入力からは常に同じハッシュが生成されます。異なる入力は異なるハッシュ (衝突耐性) を生成します。ハッシュは、データの整合性、パスワードの保存、デジタル署名に使用されます。無料のハッシュ ジェネレーターを使用して、ブラウザーで SHA-256、SHA-1、および MD5 ハッシュを計算します。
導入
ハッシュとは、任意のサイズの入力データをハッシュまたはダイジェストと呼ばれる固定サイズの出力に変換するプロセスです。ハッシュ関数は、この変換を実行するアルゴリズムです。暗号化ハッシュ関数には、データの整合性、パスワードの保存、デジタル署名、およびコンテンツのアドレス指定に役立つ特別な特性があります。暗号化とは異なり、ハッシュは一方向であり、ハッシュから入力を復元することはできません。一般的なハッシュ関数には、SHA-256 (ビットコインと TLS で使用される)、SHA-3、および古い MD5 と SHA-1 (セキュリティ目的で現在は壊れています) が含まれます。
ステップバイステップ
-
ハッシュ関数のプロパティを理解する
暗号化ハッシュ関数には 4 つの重要な特性があります。 (1) 決定性 — 同じ入力は常に同じ出力を与えます。 (2) 計算が速い。 (3) 一方向 — ハッシュから入力を回復することは不可能です。 (4) 衝突耐性 — 同じハッシュを持つ 2 つの異なる入力を見つけることは不可能です。 (5) アバランシェ効果 — 小さな入力変化が出力を大幅に変化させます。
-
一般的なアルゴリズムを学ぶ
SHA-256 (256 ビット出力、64 16 進数文字) は、ビットコイン、TLS、およびデジタル署名で使用される最新の標準です。 SHA-512 はより安全ですが、速度が遅くなります。 SHA-3 は最新のファミリーです。 MD5 (128 ビット) と SHA-1 (160 ビット) は衝突耐性が壊れているため、セキュリティのために使用しないでください。
-
ハッシュと暗号化を区別する
ハッシュ化は一方向であり、逆にすることはできません。暗号化は双方向であり、キーを使用して復号化できます。ハッシュは整合性と検証のために行われます。暗号化は機密保持のためです。回復する必要があるデータを保存するためにハッシュを使用しないでください。
-
ハッシュを正しく使用する
データの整合性を確保するために、データをハッシュし、既知の正常なハッシュと比較します。パスワードには、速度が速すぎてブルート フォースに対して脆弱な生の SHA-256 ではなく、独自のソルトを備えた低速キー ストレッチ ハッシュ (bcrypt、scrypt、Argon2) を使用します。
例
SHA-256 ハッシュ
入力: Hello, World!
出力: dffd6021bb2bd5b0af676290809ec008dfca50a8d29e6ac0a52c2d7e9f0a3b0c
雪崩効果
入力: こんにちは世界! (対ハローワールド?)
出力: 1文字変更したにもかかわらず完全に異なるハッシュ
MD5 ハッシュ (壊れた、レガシーのみ)
入力: Hello, World!
出力: ed0760733d7505e9ceacf8af225020ac
よくある問題
- セキュリティのために MD5 または SHA-1 を使用します。どちらも衝突耐性がありません。セキュリティ目的には、SHA-256 以上を使用してください。
- ソルトを使用せずにパスワードをハッシュする - 同一のパスワードは同一のハッシュを生成し、レインボー テーブル攻撃を可能にします。 bcrypt、scrypt、または Argon2 を固有のソルトとともに使用します。
- ハッシュと暗号化の混同 - ハッシュは一方向です (元に戻すことはできません)。暗号化は双方向です (キーを使用して復号化できます)。
- ハッシュが一意であることを期待します。衝突は理論的には可能ですが、安全なアルゴリズムでは実際には不可能です (SHA-256 には 2^256 の可能な出力があります)。
ヒント
- データの整合性の検証、コンテンツのアドレス指定、およびデジタル署名には SHA-256 を使用します。
- パスワードの保存には、生の SHA-256 ではなく、bcrypt、scrypt、または Argon2 を使用してください。これらのアルゴリズムには、ブルート フォースに対抗するためのキー ストレッチ機能が備わっています。
- ハッシュは一方向です。回復する必要があるデータの保存には決して使用しないでください。機密データには暗号化を使用します。
- ハッシュ ジェネレーターを使用すると、ブラウザで SHA-256 やその他のハッシュを即座に計算できます。