CtrlK
CommunityDocumentationLog inGet started
Tessl Logo

cisco/software-security

A software security skill that integrates with Project CodeGuard to help AI coding agents write secure code and prevent common vulnerabilities. Use this skill when writing, reviewing, or modifying code to ensure secure-by-default practices are followed.

83%

Average

Evaluation84%

1.79x

Agent success when using this tile

Overview
Review
Evals
Files

codeguard-1-crypto-algorithms.mdrules/

description:
Cryptographic Security Guidelines & Post-Quantum Readiness
alwaysApply:
Yes

rule_id: codeguard-1-crypto-algorithms

Cryptographic Security Guidelines & Post-Quantum Readiness

1. Banned (Insecure) Algorithms

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

Reason: These are cryptographically broken and vulnerable to collision or man-in-the-middle attacks.

2. Deprecated (Legacy/Weak) Algorithms

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

3. Recommended & Post-Quantum Ready Algorithms

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:

    EVP_EncryptInit_ex() // Use EVP_aes_256_gcm() for PQC readiness EVP_EncryptUpdate() EVP_EncryptFinal_ex()

RSA/PKEY Operations

  • Deprecated: RSA_new(), RSA_free(), RSA_get0_n()

  • Replacement:

    EVP_PKEY_new() EVP_PKEY_up_ref() EVP_PKEY_free()

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:

// Example: Secure replacement for HMAC-SHA1

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)

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();

int len, ciphertext_len;
if (EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len) != 1)
    handle_error();
ciphertext_len = len;

if (EVP_EncryptFinal_ex(ctx, ciphertext + len, &len) != 1)
    handle_error();
ciphertext_len += len;

EVP_CIPHER_CTX_free(ctx);
tessl i cisco/software-security@1.2.5

LANGUAGE_RULES.md

SKILL.md

tile.json