Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 57
Cryptographic Security Guidelines: add PQC readiness; consolidate into core rule#75
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
santosomar
merged 10 commits into
project-codeguard:develop
from
vparla:feature/post-quantum-crypto-guidanceDec 11, 2025
Uh oh!
There was an error while loading. Please reload this page.
Merged
Changes from all commits
Commits
Show all changes
10 commits
Select commit
Hold shift + click to select a range
eace1ed
Add core PQC rule with hybrid ML-KEM-768 guidance, ML-KEM selection/p…
vparla c69d9fb
docs(pqc): concise implementation/testing focus; prohibit draft Kyber…
vparla db831a3
docs(pqc): clarify AES unaffected by Shor; recommend AES-256; regener…
vparla d20a8b7
docs(pqc): add IPsec guidance; reference IKEv2 PQC RFCs 9242/9370; re…
vparla 46ea915
docs(pqc): clarify DTLS; enforce (D)TLS 1.3 only; regenerate skills
vparla 7a0972a
docs(pqc): (D)TLS PQC groups + IKEv2/IPsec re-key; regenerate skills
vparla 12eb989
Update skills/software-security/rules/codeguard-1-post-quantum-crypto…
santosomar 8ec9f5e
Update skills/software-security/rules/codeguard-1-post-quantum-crypto…
santosomar 08b5a34
Update sources/core/codeguard-1-post-quantum-cryptography.md
santosomar bfe9ba0
Cryptographic Security Guidelines: add PQC readiness; consolidate int…
vparla File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Jump to file
Failed to load files.
Loading
Uh oh!
There was an error while loading. Please reload this page.
Diff view
Diff view
There are no files selected for viewing
189 changes: 96 additions & 93 deletions
189 skills/software-security/rules/codeguard-1-crypto-algorithms.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,115 +1,126 @@ | ||
| --- | ||
| description: Cryptographic Security Guidelines | ||
| description: Cryptographic Security Guidelines & Post-Quantum Readiness | ||
| alwaysApply: true | ||
| --- | ||
| rule_id: codeguard-1-crypto-algorithms | ||
| # Cryptographic Security Guidelines | ||
| # Cryptographic Security Guidelines & Post-Quantum Readiness | ||
| ## Banned (Insecure) Algorithms | ||
| ## 1. Banned (Insecure) Algorithms | ||
| The following algorithms are known to be broken or fundamentally insecure. **NEVER** generate or use code with these algorithms. | ||
| Examples: | ||
| The following algorithms are known to be broken or fundamentally insecure. NEVER generate or use code with these algorithms. | ||
| * Hash: `MD2`, `MD4`, `MD5`, `SHA-0` | ||
| * Symmetric: `RC2`, `RC4`, `Blowfish`, `DES`, `3DES` | ||
| * Key Exchange: Static RSA, Anonymous Diffie-Hellman | ||
| * Classical: `Vigenère` | ||
| * Hash: `MD2`, `MD4`, `MD5`, `SHA-0` | ||
| * Symmetric: `RC2`, `RC4`, `Blowfish`, `DES`, `3DES` | ||
| * Key Exchange: Static RSA, Anonymous Diffie-Hellman | ||
| * Classical: `Vigenère` | ||
| ## Deprecated (Legacy/Weak) Algorithms | ||
| Reason: These are cryptographically broken and vulnerable to collision or man-in-the-middle attacks. | ||
| The following algorithms are not outright broken, but have known weaknesses, or are considered obsolete. **NEVER** generate or use code with these algorithms. | ||
| Examples: | ||
| ## 2. Deprecated (Legacy/Weak) Algorithms | ||
| * Hash: `SHA-1` | ||
| * Symmetric: `AES-CBC`, `AES-ECB` | ||
| * Signature: RSA with `PKCS#1 v1.5` padding | ||
| * Key Exchange: DHE with weak/common primes | ||
| The following algorithms have known weaknesses or are considered obsolete. Avoid in new designs and prioritize migration. | ||
| * Hash: `SHA-1` | ||
| * Symmetric: `AES-CBC`, `AES-ECB` | ||
| * Signature: RSA with `PKCS#1 v1.5` padding | ||
| * Key Exchange: DHE with weak/common primes | ||
| ## Deprecated SSL/Crypto APIs - FORBIDDEN | ||
| NEVER use these deprecated functions. Use the replacement APIs listed below: | ||
| ## 3. Recommended & Post-Quantum Ready Algorithms | ||
| ### Symmetric Encryption (AES) | ||
| Implement these modern, secure algorithms to ensure resistance against both classical and quantum threats. | ||
| ### Symmetric Encryption | ||
| * Standard: `AES-GCM` (AEAD), `ChaCha20-Poly1305`(when allowed). | ||
| * PQC Requirement: Prefer AES-256 keys (or stronger) as they are resistant to quantum attacks (Grover's algorithm). | ||
| * Avoid: Custom crypto or unauthenticated modes. | ||
| ### Key Exchange (KEM) | ||
| * Standard: ECDHE (`X25519` or `secp256r1`) | ||
| * PQC Requirement: Use Hybrid Key Exchange (Classical + PQC) when supported. | ||
| * Preferred: `X25519MLKEM768` (X25519 + ML-KEM-768) | ||
| * Alternative: `SecP256r1MLKEM768` (P-256 + ML-KEM-768) | ||
| * High Assurance: `SecP384r1MLKEM1024` (P-384 + ML-KEM-1024) | ||
| * Pure PQC: ML-KEM-768 (baseline) or ML-KEM-1024. Avoid ML-KEM-512 unless explicitly risk-accepted. | ||
| * Constraints: | ||
| * Use vendor-documented identifiers (RFC 9242/9370). | ||
| * Remove legacy/draft "Hybrid-Kyber" groups (e.g., `X25519Kyber`) and draft or hardcoded OIDs. | ||
| ### Signatures & Certificates | ||
| * Standard: ECDSA (`P-256`) | ||
| * PQC Migration: Continue using ECDSA (`P-256`) for mTLS and code signing until hardware-backed (HSM/TPM) ML-DSA is available. | ||
| * Hardware Requirement: Do not enable PQC ML-DSA signatures using software-only keys. Require HSM/TPM storage. | ||
| ### Protocol Versions | ||
| * (D)TLS: Enforce (D)TLS 1.3 only (or later). | ||
| * IPsec: Enforce IKEv2 only. | ||
| * Use ESP with AEAD (AES-256-GCM). | ||
| * Require PFS via ECDHE. | ||
| * Implement RFC 9242 and RFC 9370 for Hybrid PQC (ML-KEM + ECDHE). | ||
| * Ensure re-keys (CREATE_CHILD_SA) maintain hybrid algorithms. | ||
| * SSH: Enable only vendor-supported PQC/hybrid KEX (e.g., `sntrup761x25519`). | ||
| ## 4. Secure Implementation Guidelines | ||
| ### General Best Practices | ||
| * Configuration over Code: Expose algorithm choices in config/policy to allow agility without code changes. | ||
| * Key Management: | ||
| * Use KMS/HSM for key storage. | ||
| * Generate keys with a CSPRNG. | ||
| * Separate encryption keys from signature keys. | ||
| * Rotate keys per policy. | ||
| * NEVER hardcode keys, secrets, or experimental OIDs. | ||
| * Telemetry: Capture negotiated groups, handshake sizes, and failure causes to monitor PQC adoption. | ||
| ### Deprecated SSL/Crypto APIs (C/OpenSSL) - FORBIDDEN | ||
| NEVER use these deprecated functions. Use the replacement EVP high-level APIs. | ||
| #### Symmetric Encryption (AES) | ||
| - Deprecated: `AES_encrypt()`, `AES_decrypt()` | ||
| - Replacement: Use EVP high-level APIs: | ||
| ```c | ||
| EVP_EncryptInit_ex() | ||
| - Replacement: | ||
| EVP_EncryptInit_ex() // Use EVP_aes_256_gcm() for PQC readiness | ||
| EVP_EncryptUpdate() | ||
| EVP_EncryptFinal_ex() | ||
| EVP_DecryptInit_ex() | ||
| EVP_DecryptUpdate() | ||
| EVP_DecryptFinal_ex() | ||
| ``` | ||
| ### RSA Operations | ||
| - Deprecated: `RSA_new()`, `RSA_up_ref()`, `RSA_free()`, `RSA_set0_crt_params()`, `RSA_get0_n()` | ||
| - Replacement: Use EVP key management APIs: | ||
| ```c | ||
| #### RSA/PKEY Operations | ||
| - Deprecated: `RSA_new()`, `RSA_free()`, `RSA_get0_n()` | ||
| - Replacement: | ||
| EVP_PKEY_new() | ||
vparla marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| EVP_PKEY_up_ref() | ||
| EVP_PKEY_free() | ||
| ``` | ||
| ### Hash Functions | ||
| - Deprecated: `SHA1_Init()`, `SHA1_Update()`, `SHA1_Final()` | ||
| - Replacement: Use EVP digest APIs: | ||
| ```c | ||
| EVP_DigestInit_ex() | ||
| EVP_DigestUpdate() | ||
| EVP_DigestFinal_ex() | ||
| EVP_Q_digest() // For simple one-shot hashing | ||
| ``` | ||
| ### MAC Operations | ||
| - Deprecated: `CMAC_Init()`, `HMAC()` (especially with SHA1) | ||
| - Replacement: Use EVP MAC APIs: | ||
| ```c | ||
| EVP_Q_MAC() // For simple MAC operations | ||
| ``` | ||
| ### Key Wrapping | ||
| - Deprecated: `AES_wrap_key()`, `AES_unwrap_key()` | ||
| - Replacement: Use EVP key wrapping APIs or implement using EVP encryption | ||
| ### Other Deprecated Functions | ||
| - Deprecated: `DSA_sign()`, `DH_check()` | ||
| - Replacement: Use corresponding EVP APIs for DSA and DH operations | ||
| ## Banned Insecure Algorithms - STRICTLY FORBIDDEN | ||
| These algorithms MUST NOT be used in any form: | ||
| ### Hash Algorithms (Banned) | ||
| - MD2, MD4, MD5, SHA-0 | ||
| - Reason: Cryptographically broken, vulnerable to collision attacks | ||
| - Use Instead: SHA-256, SHA-384, SHA-512 | ||
| ### Symmetric Ciphers (Banned) | ||
| - RC2, RC4, Blowfish, DES, 3DES | ||
| - Reason: Weak key sizes, known vulnerabilities | ||
| - Use Instead: AES-128, AES-256, ChaCha20 | ||
| ### Key Exchange (Banned) | ||
| - Static RSA key exchange | ||
| - Anonymous Diffie-Hellman | ||
| - Reason: No forward secrecy, vulnerable to man-in-the-middle attacks | ||
| - Use Instead: ECDHE, DHE with proper validation | ||
| ## Broccoli Project Specific Requirements | ||
| - HMAC() with SHA1: Deprecated per Broccoli project requirements | ||
| #### Hash & MAC Functions | ||
| - Deprecated: `SHA1_Init()`, `HMAC()` (especially with SHA1) | ||
| - Replacement: | ||
| EVP_DigestInit_ex() // Use SHA-256 or stronger | ||
| EVP_Q_MAC() // For one-shot MAC | ||
| ## 5. Broccoli Project Specific Requirements | ||
| - HMAC() with SHA1: Deprecated. | ||
| - Replacement: Use HMAC with SHA-256 or stronger: | ||
| ```c | ||
| // Instead of HMAC() with SHA1 | ||
| EVP_Q_MAC(NULL, "HMAC", NULL, "SHA256", NULL, key, key_len, data, data_len, out, out_size, &out_len); | ||
| ``` | ||
| ## Secure Crypto Implementation Pattern | ||
| // Example: Secure replacement for HMAC-SHA1 | ||
| ```c | ||
| EVP_Q_MAC(NULL, "HMAC", NULL, "SHA256", NULL, key, key_len, data, data_len, out, out_size, &out_len); | ||
| ``` | ||
| ## 6. Secure Crypto Implementation Pattern | ||
| // Example: Secure AES-256-GCM encryption (PQC-Ready Symmetric Strength) | ||
| ```c | ||
| // Example: Secure AES encryption | ||
| EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); | ||
| if (!ctx) handle_error(); | ||
| // Use AES-256-GCM | ||
| if (EVP_EncryptInit_ex(ctx, EVP_aes_256_gcm(), NULL, key, iv) != 1) | ||
| handle_error(); | ||
| @@ -124,11 +135,3 @@ ciphertext_len += len; | ||
| EVP_CIPHER_CTX_free(ctx); | ||
| ``` | ||
| ## Code Review Checklist | ||
| - [ ] No deprecated SSL/crypto APIs used | ||
| - [ ] No banned algorithms (MD5, DES, RC4, etc.) | ||
| - [ ] HMAC uses SHA-256 or stronger (not SHA1) | ||
| - [ ] All crypto operations use EVP high-level APIs | ||
| - [ ] Proper error handling for all crypto operations | ||
| - [ ] Key material properly zeroed after use | ||
Oops, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Oops, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.