Skip to main content

Snykは脆弱な暗号アルゴリズムを検出できる?MD5にさようなら

著者
blog feature snyk code green

2025年2月25日

0 分で読めます

強力な暗号技術を使うことは、データ保護やアプリケーションセキュリティに不可欠です。たとえば、パスワードのハッシュ化(厳密には、暗号化を目的とする従来の暗号技術とは異なります)などが挙げられます。しかし、検出されないまま脆弱で古い暗号アルゴリズムを使ったレガシーコードが、本番環境にデプロイされていることがあります。Snyk Codeは、こうした脆弱性のあるアプリケーションの発見にどう役立つのでしょうか?

脆弱な暗号アルゴリズムの危険性

暗号化でもハッシュ化でも、脆弱で古いアルゴリズムは深刻なセキュリティリスクとなり、機密情報が攻撃者にさらされるおそれがあります。不十分な実装に頼ると、誤った安心感を招き、システムを脆弱な状態にしてしまいます。古いアルゴリズムの限界を理解し、最新の安全な暗号技術を実践することが重要です。

現在では、安全ではないと見なされ、使用を避けるべき暗号アルゴリズムがいくつかあります。たとえばMD5は暗号学的に破られており、特にパスワードのハッシュ化など、セキュリティ用途には適していません。衝突を簡単に見つけられるため、異なる入力から同じハッシュ値が生成されることがあります。これにより攻撃者は、元のパスワードを特定したり、保存されたハッシュと一致する偽のパスワードを作成したりできます。ほかにも、既知の脆弱性があり、もはや使用すべきでない脆弱なアルゴリズムとしてDESやRC4があります。

Javaにおける脆弱なMD5アルゴリズム

ユーザーのパスワードのハッシュ化にMD5を使用する、次のJavaアプリケーションを見てみましょう。

    @PostMapping("/login")
    public String loginUser(@RequestParam String username, @RequestParam String password) {
        String hashedPassword = userDatabase.get(username);
        if (hashedPassword != null && hashedPassword.equals(hashPassword(password))) {
            return "Login successful";
        }
        return "Invalid username or password";
    }

    private String hashPassword(String password) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(password.getBytes());
            byte[] digest = md.digest();
            return DatatypeConverter.printHexBinary(digest).toUpperCase();
        } catch (NoSuchAlgorithmException e) {
            return "Error: Hashing algorithm not found";
        }
    }

注:完全なGitHubのソースコードを参照してください。

パスワードのハッシュ化にMD5を使うべきでないことはご存じでしょう。しかし、保守するアプリケーションが多数あり、何十万行ものコードを含む多数のリポジトリを素早く調べなければならない場合はどうでしょうか?

Snykをコードリポジトリに接続(または別の方法で統合)すれば、レガシーアプリケーションに潜んでいたコードでも、GenAIなどのAIコードアシスタントが生成した欠陥のあるコードでも、脆弱なコードを簡単かつ迅速にスキャンできます。

Snykは脆弱なMD5アルゴリズムを検出し、コード内のソースからシンクまでの呼び出し経路を示します。

Snyk CodeがJavaコード内の脆弱なMD5アルゴリズムを検出します。

Javaの脆弱なMD5アルゴリズムを修正するには?

Snykはセキュリティ検出結果を詳細化し、脆弱なコードを検出するだけでなく、修正方法の分析も提供します。次の例では、オープンソースプロジェクト(ここではOWASP Security Logging)でMessageDigest APIがどのように修正されたか、また古いハッシュアルゴリズムSHA-1をより新しいバージョンのSHA-256に置き換えた方法を紹介します。

Snyk Codeの修正分析の例を示すスクリーンショット。Snyk Codeは、詳細情報や予防のためのベストプラクティス、修正例を提示します。

Snykは、ハッシュ化や暗号化に強力なアルゴリズムを使うためのベストプラクティスも提供し、機密情報を平文で保存するリスクについても説明します。

アルゴリズムのセキュリティに関する推奨事項とベストプラクティス

用途に合ったアルゴリズムを選ぶことが重要です。パスワードのハッシュ化には、ブルートフォース攻撃への耐性があり、実際のアプリケーションで使える性能を備えた安全な暗号アルゴリズムを選びましょう。業界で何十年にもわたり事実上の標準となっている代表例がBcryptです。そのほか、PBKDF2や、より広く使われているArgon2もあります。

OWASPの資料などを参考に、暗号技術に関するセキュリティのベストプラクティスを確認しましょう。

最後に、Snykを使い始めましょう(無料です!)。脆弱なコードや古い依存関係、脆弱な暗号技術などのセキュリティ上の問題を発見・検出して、セキュリティポイントを獲得しましょう。

無料のオンラインコードチェッカーツール

次のコミットの前に、コードを安全に保護しましょう。