MD5、SHA-1、SHA-256、SHA-512、SHA-3、RIPEMD-160、Keccak-256など様々な暗号化アルゴリズムを使用してハッシュを生成します。
ハッシュ関数は、入力(または「メッセージ」)を固定サイズのバイト文字列(通常はダイジェスト)に変換する数学的関数で、ランダムに見えます。ハッシュ関数はデータの整合性検証、パスワード保存、デジタル署名などに使用されます。理想的なハッシュ関数は次のような特性を持ちます:決定論的(同じ入力は常に同じ出力を提供)、計算が速い、ハッシュからメッセージを生成することが不可能、入力の小さな変化が大きく異なるハッシュを生成、同じハッシュを持つ2つの異なるメッセージを見つけることが不可能です。
ハッシュ関数のセキュリティは、以下に対する耐性によって決まります:1)衝突攻撃(同じハッシュを持つ2つの異なる入力を見つける)、2)原像攻撃(ハッシュ値から入力を回復する)、3)第二原像攻撃(与えられた入力と同じハッシュを持つ別の入力を見つける)。SHA-256やSHA-3などの現代のハッシュアルゴリズムは、これらの攻撃に耐えるように設計されています。ただし、MD5やSHA-1などの古いアルゴリズムには既知の脆弱性があるため、セキュリティが重要なアプリケーションでは使用すべきではありません。
MD5は128ビット(16バイト)のハッシュ値を生成します。MD4を置き換えるために1991年にRonald Rivestによって設計されました。
セキュリティ:深刻に破られている - 衝突攻撃が実証されています。セキュリティ目的には一切使用すべきではありません。
使用例:レガシーシステムのみ。ファイル整合性チェックを含む新しいアプリケーションには使用すべきではありません。
SHA-1は160ビット(20バイト)のハッシュ値を生成します。NSAによって設計され、1995年に公開されました。
セキュリティ:破られている - 2017年以降、実用的な衝突攻撃が実証されています。セキュリティアプリケーションには適していません。
使用例:すべての新しいアプリケーションで避けるべきです。多くのシステムがSHA-1サポートを積極的に削除しています。
SHA-2ファミリーの一部であるSHA-256は、256ビット(32バイト)のハッシュ値を生成します。NSAによって設計され、2001年に公開されました。
セキュリティ:強力 - SHA-256に対する実用的な攻撃は実証されていません。広く信頼され使用されています。
使用例:デジタル署名、証明書、データ整合性、ビットコイン、その他のセキュアなアプリケーション。
SHA-2ファミリーの一部であるSHA-512は、512ビット(64バイト)のハッシュ値を生成します。NSAによって設計され、2001年に公開されました。
セキュリティ:強力 - SHA-256より大きな出力サイズですが、ほとんどの攻撃シナリオで必ずしもより安全であるとは限りません。
使用例:より長いハッシュ出力を必要とするアプリケーションに使用されますが、ほとんどのセキュリティアプリケーションにはSHA-256で十分です。
SHA-3は公開コンペティション後、2012年にNISTによって選ばれました。Keccakアルゴリズムに基づいており、様々なダイジェストサイズを生成できます。
セキュリティ:非常に強力 - SHA-2とは異なる内部構造で設計されており、異なるタイプの攻撃から保護を提供します。
使用例:暗号システムの将来性確保、最高レベルのセキュリティを必要とするアプリケーション。
RIPEMD-160は160ビット(20バイト)のハッシュ値を生成します。ヨーロッパでHans Dobbertin、Antoon Bosselaers、Bart Preneelによって開発されました。
セキュリティ:中程度 - MD5 やSHA-1より強力ですが、SHA-2/SHA-3ほど研究されていません。
使用例:暗号通貨アドレス(ビットコインはSHA-256と組み合わせてRIPEMD-160を使用)。
Keccak-256は256ビットのハッシュを生成するKeccakアルゴリズムの変種です。SHA-3に似ていますが、異なるパディングルールを使用します。
セキュリティ:非常に強力 - SHA-3のコアアルゴリズムですが、パラメータ化が異なります。
使用例:トランザクションハッシング、スマートコントラクト、作業証明のためのイーサリアムブロックチェーン。