コンテンツにスキップ

Cryptographic Vulnerability: Weak Hashing Algorithm

暗号化の脆弱性:脆弱なハッシュアルゴリズム

説明

ハッシュ関数とは、データをエンコードし、固定サイズのハッシュ値を返すために使用される関数であり、衝突の可能性(異なる2つの入力が完全に同じハッシュ値を持つ確率)を最小限に抑えることを目的としています。これらの関数は、メッセージやファイルの完全性の確認、ファイルやデータの識別、シークレットやパスワードの確認に使用できます。

一般的なハッシュアルゴリズム:

  • MD5: Message Digest Algorithm (MD5) は1991年にMD4の代替として設計されました。2005年3月には、同じMD5ハッシュを持つ2つの異なるファイルが提示されました。さらに1年後には、1分以内に衝突を見つけることができるアルゴリズムが公開されました。ハッシュアルゴリズムにおいて、同じハッシュを持つ2つの異なる入力を見つけることは計算上不可能であるべきですが、MD5はこの要件を致命的に満たせず、2008年にソフトウェア工学研究所はMD5が「暗号学的に破綻しており、これ以上の使用には適さない」と結論付けました。
  • SHA1: Secure Hash Algorithm 1 (SHA1) はNSAによって設計されました。MD5と同様に、SHA1は衝突攻撃に対して脆弱です。2005年までにSHA1は安全ではないと見なされ、2011年に米国国立標準技術研究所 (NIST) は正式に非推奨としました。
  • SHA2: 同様にNSAによって設計されたハッシュアルゴリズムのセットであり、SHA-2はSHA1とは大幅に異なり、非常に安全であると見なされています。
  • SHA-256: SHA-2セットのメンバーです。接尾辞の256は、生成されるハッシュ値の長さである256ビットを表します。SHA-256は安全で信頼できる業界標準であり、衝突の可能性はほぼゼロ (2^256) です。
  • SHA3: SHA3は、2015年にNISTによってリリースされた、Secure Hash Algorithmファミリーの標準規格の最新メンバーです。同じ標準シリーズの一部ですが、SHA3は内部的にはSHA1やSHA2のMD5のような構造とは異なり、同様に非常に安全であると見なされています。
  • Argon2: 2015年のPassword Hashing Competitionの勝者です。現在利用可能な最も安全なパスワードハッシュアルゴリズムの1つと見なされています。Internet Engineering Task Force (IETF)、Password Hashing Competition (PHC)、The Open Worldwide Application Security Project (OWASP) など、多数のセキュリティおよび暗号化標準で採用されています。
  • Bcrypt: 1999年に導入されたBcryptは、ブルートフォース攻撃に対して高い耐性を持つように設計された、低速で適応型のアルゴリズムです。その適応性とは、計算コストをユーザーが制御できるということであり、時間の経過とともにハードウェアが進化するにつれて調整できることを意味します。Bcryptは、Open Web Application Security Project (OWASP) やPayment Card Industry Data Security Standard (PCI DSS) など、多くのセキュリティ標準でも採用されています。
  • HMAC: ハッシュベースのメッセージ認証コードはハッシュアルゴリズムではなく、ハッシュアルゴリズムとシークレットキーを組み合わせた暗号化認証技術です。HMACの強度は基盤となるハッシュアルゴリズムに依存するため、非推奨の脆弱なハッシュアルゴリズムと一緒に使用すべきではありません。

MD5SHA-1 は安全ではないため、HMACと組み合わせる場合であっても使用してはいけません。

推奨事項

脆弱なハッシュアルゴリズムを使用するリスクを軽減するには、以下を検討してください。

  • MD5とSHA-1は安全ではなく、衝突しやすいため避けてください。これらは、HMACを含むいかなる目的にも使用しないでください。

  • ハッシュ化と署名の検証には、SHA-256またはSHA-3を選択してください。これらは高いセキュリティを提供し、広く受け入れられている業界標準です。

  • 機密データ (PII、PHIなど) のハッシュ化には、Argon2またはBcryptを検討してください。これらはブルートフォース攻撃に耐えるように設計されており、セキュリティ標準によって推奨されています。

  • メッセージ認証にHMACを使用する場合は、堅牢なセキュリティを維持するために、SHA-256やSHA-3などの安全なハッシュアルゴリズムと組み合わせていることを確認してください。

リンク

標準

  • OWASP_MASVS_L1:
    • MSTG_CRYPTO_2
    • MSTG_CRYPTO_3
    • MSTG_CRYPTO_4
  • OWASP_MASVS_L2:
    • MSTG_CRYPTO_2
    • MSTG_CRYPTO_3
    • MSTG_CRYPTO_4
  • PCI_STANDARDS:
    • REQ_2_2
    • REQ_3_6
    • REQ_3_7
    • REQ_6_2
  • OWASP_MASVS_v2_1:
    • MASVS_CRYPTO_1
    • MASVS_CRYPTO_2
  • SOC2_CONTROLS:
    • CC_2_1
    • CC_4_1
    • CC_6_7
    • CC_7_1
    • CC_7_2
    • CC_7_4
    • CC_7_5
  • CNIL_FOR_DEVELOPERS:
    • DEVELOPERS_4_1_4