Security anti-pattern for weak encryption (CWE-326, CWE-327). Use when generating or reviewing code that encrypts data, handles encryption keys, or uses cryptographic modes. Detects DES, ECB mode, static IVs, and custom crypto implementations.
Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.
Quelldateien prüfen
Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Ein direkter Befehl überspringt den Prüf-Prompt. Prüfen Sie die Quelle, bevor Sie ihn ausführen.
Security anti-pattern for weak encryption (CWE-326, CWE-327). Use when generating or reviewing code that encrypts data, handles encryption keys, or uses cryptographic modes. Detects DES, ECB mode, static IVs, and custom crypto implementations.
Weak Encryption Anti-Pattern
Severity: High
Summary
Applications use outdated algorithms (DES, RC4), insecure modes (ECB), or mismanage IVs/nonces (static, reused), enabling easy decryption. AI models suggest these weak practices from older tutorials, leading to data breaches and compliance failures.
The Anti-Pattern
The anti-pattern involves using cryptographic techniques that are no longer considered secure for protecting sensitive data.
1. Outdated or Broken Algorithms
Using algorithms like DES, 3DES, or RC4 is a critical flaw. These algorithms have known vulnerabilities and are easily broken with modern computing power.
BAD Code Example
# VULNERABLE: Using the outdated DES algorithm.from Crypto.Cipher import DES
from Crypto import Random
key = Random.get_random_bytes(8) # DES uses an 8-byte (64-bit) key, but only 56 bits are effective.defencrypt_data_des(plaintext):
cipher = DES.new(key, DES.MODE_ECB) # ECB mode is also insecure.# Pad the plaintext to be a multiple of 8 bytes (DES block size).
padded_plaintext = plaintext + (8 - len(plaintext) % 8) * chr(8 - len(plaintext) % 8)
ciphertext = cipher.encrypt(padded_plaintext.encode('utf-8'))
return ciphertext
# DES can be brute-forced in under 24 hours with commodity hardware.
2. Insecure Modes of Operation (e.g., ECB)
Even if using a strong algorithm like AES, using it in Electronic Codebook (ECB) mode is highly insecure. ECB encrypts identical blocks of plaintext into identical blocks of ciphertext, revealing patterns in the data.
BAD Code Example
# VULNERABLE: Using AES in ECB mode.from Crypto.Cipher import AES
from Crypto import Random
key = Random.get_random_bytes(16) # AES-128 key.defencrypt_data_ecb(plaintext):
cipher = AES.new(key, AES.MODE_ECB)
# Pad the plaintext to be a multiple of 16 bytes (AES block size).
padded_plaintext = plaintext + (16 - len(plaintext) % 16) * chr(16 - len(plaintext) % 16)
ciphertext = cipher.encrypt(padded_plaintext.encode('utf-8'))
return ciphertext
# If you encrypt an image with many identical color blocks using AES-ECB,# the encrypted image will still show the original image's outline and patterns.# This leaks significant information about the plaintext.
GOOD Code Example
# SECURE: Use a modern, authenticated encryption mode like AES-256-GCM.from cryptography.hazmat.primitives.ciphers.aead import AESGCM
from cryptography.exceptions import InvalidTag
import os
# Generate a strong, random key. AES-256 uses a 32-byte key.
key = AESGCM.generate_key(bit_length=256)
defencrypt_data_gcm(plaintext):
aesgcm = AESGCM(key)
# GCM requires a unique, unpredictable nonce (Initialization Vector).# It must never be reused with the same key. A 12-byte nonce is standard.
nonce = os.urandom(12)
# AES-GCM performs both encryption and provides an authentication tag (integrity check).
ciphertext = aesgcm.encrypt(nonce, plaintext.encode('utf-8'), None)
# Store and transmit the nonce along with the ciphertext.return nonce + ciphertext
defdecrypt_data_gcm(encrypted_data_with_nonce):
aesgcm = AESGCM(key)
nonce = encrypted_data_with_nonce[:12]
ciphertext = encrypted_data_with_nonce[12:]
try:
# The decrypt method will also verify the authentication tag.# If the data is tampered with, it will raise an `InvalidTag` exception.
plaintext = aesgcm.decrypt(nonce, ciphertext, None).decode('utf-8')
return plaintext
except InvalidTag:
raise ValueError("Decryption failed: data may have been tampered with or corrupted.")
# AES-256-GCM provides strong confidentiality, integrity, and authenticity.# Each encryption is unique due to the nonce, preventing pattern leakage.
Detection
Code review for algorithm choice: Search your codebase for calls to cryptographic functions using DES, 3DES, RC4, MD5 (for encryption), or SHA-1 (for encryption/signatures).
Check modes of operation: Look for ECB mode being used with block ciphers like AES.
Inspect IV/Nonce generation: Verify how initialization vectors (IVs) or nonces are generated. Are they random and unique for each encryption? Avoid static, predictable, or reused IVs.
Custom crypto implementations: Be extremely wary of any "homegrown" encryption algorithms. These are almost always insecure.
Prevention
Use strong, modern algorithms: For symmetric encryption, always use AES-256. For authenticated encryption, prefer AES-256-GCM or ChaCha20-Poly1305.
Avoid insecure modes of operation: Never use ECB mode. If using CBC mode, always pair it with a strong MAC (Message Authentication Code) in an Encrypt-then-MAC scheme. Better yet, use AEAD modes like GCM.
Generate random, unique IVs/Nonces: Generate a unique, unpredictable IV (CBC) or nonce (GCM) for every encryption using a cryptographically secure random number generator. Never reuse a nonce with the same key in GCM (enables catastrophic key recovery).
Use established cryptographic libraries: Never "roll your own" encryption. Use well-vetted, standard libraries (e.g., cryptography in Python, javax.crypto in Java).
Ensure key strength: Use sufficiently long keys (e.g., 256 bits for AES).