SV.WEAK.CRYPT

破られたまたは危険な暗号化アルゴリズムの使用

チェッカーの目的は、不備またはリスク、あるいは廃止された暗号化機能があるかどうかを検出することです。

チェッカーは、よく知られている弱い実装または暗号化 API やライブラリの使用を検出します。「MD2」、「MD4」、「MD5」、「SHA」、「SHA1」、「SHA-1」アルゴリズムの使用に関する欠陥がある場合は、チェッカーが報告します。

脆弱性とリスク

機密データが十分に保護されていない場合、データの機密性または整合性が失われる可能性があります。DES 暗号化は、ブルートフォース攻撃で破られる可能性があります。MD5 ベースのアルゴリズムの方が少しセキュアなので、DES ベースのアルゴリズムより好まれていますが、さらに新しい SHA-1 ベースのアルゴリズムでも既に破られています。SHA-256 や SHA-512 などのハッシュアルゴリズムは、連邦情報処理規格 (FIPS) から承認されており、よりセキュアであると考えられています。セキュリティ分野の専門家が最善と考える暗号アルゴリズムを使用することが重要です。

脆弱コード例 1

コピー
 public static UUID nameUUIDFromBytes (byte[] name) {
     try {
         MessageDigest md = MessageDigest.getInstance("MD5");
         return make Uuid(md.digest(name), 3);
     } catch (NoSuchAlgorithmException e) {
         throw new AssertionError(e);
     }
 }

3 行目で SV.WEAK.CRYPT が欠陥を報告します。

修正コード例 1

コピー
 public static UUID name UUIDFromBytes (byte[] name) {
     try {
         MessageDigest md = MessageDigest.getinstance("SHA-256");
         return makeUuid(md.digest(name), 3);
     } catch (NoSuchAlgorithmException e) {
         throw new AssertionError(e);
     }
 }

メッセージ - ダイジェストアルゴリズムをよりセキュアな SHA-256 に変更すると、指摘はなくなります。

脆弱コード例 2

コピー
Cipher c1 = Cipher.getInstance("DES");

DES アルゴリズムが堅牢性に欠けるという欠陥を SV.WEAK.CRYPT が報告します。

修正コード例 2

コピー
Cipher c1 = Cipher.getInstance("RSA/None/OAEPWITHSHA-256ANDMGF1PADDING");

OAEP パディングを含む安全な RSA アルゴリズムを使用した場合、指摘は報告されません。

脆弱なコード例 3

コピー
NullCipher nc = new NullCipher();

NullCipher によってプレーンテキストが変換されないため脆弱になるという欠陥を SV.WEAK.CRYPT が報告します。

修正コード例 3

コピー
Cipher c = Cipher.getInstance("AES/GCM/NoPadding")

より安全なアルゴリズムをもつ Cipher を使用した場合、指摘は報告されません。

関連チェッカー

セキュリティトレーニング

Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。