
Escanea bases de código en busca de criptografía vulnerable a la computación cuántica. Detecta RSA, ECDSA, Ed25519, ECDH antes del Q-Day. Salida CycloneDX CBOM + SARIF.
Escanea bases de código en busca de criptografía vulnerable a ordenadores cuánticos. Obtén una imagen clara de lo que necesita migrar antes del Q-Day.

pqaudit detecta el uso de RSA, ECDSA, Ed25519, ECDH, DH y otros algoritmos rotos por el algoritmo de Shor. También identifica el uso de PQC ya migrados (ML-KEM, ML-DSA, SLH-DSA) para que puedas seguir el progreso de la migración. Salida como texto legible, JSON, CycloneDX CBOM, SARIF para el escaneo de código de GitHub, o un informe HTML autocontenido.
El 31 de marzo de 2026, Google publicó una investigación que muestra que romper ECDSA-256 requiere 20 veces menos qubits de lo estimado anteriormente — aproximadamente 1200 qubits lógicos y menos de 500,000 qubits físicos. La CNSA 2.0 de la NSA exige PQC para nuevos sistemas de seguridad nacional para 2027. La ventana de migración está abierta pero se está cerrando.
npx pqaudit ./my-project
O instalar globalmente:
npm install -g pqaudit
pqaudit ./my-project
# Escanea el directorio actual, salida legible
pqaudit .
# Solo muestra hallazgos críticos y altos
pqaudit ./src --severity high
# Generar CycloneDX CBOM
pqaudit . --format cbom --output cbom.json
# Generar SARIF para GitHub Code Scanning
pqaudit . --format sarif --output results.sarif
# Modo CI — código de salida 1 si existen hallazgos críticos/altos
pqaudit . --ci
# Mostrar todos los hallazgos, incluyendo coincidencias de comentarios de baja confianza
pqaudit . --min-confidence 0
# Mostrar cada ocurrencia en lugar de colapsar por archivo
pqaudit . --no-dedupe
# Omitir escaneo de dependencias
pqaudit . --no-deps
# Usar reglas personalizadas
pqaudit . --rules ./my-rules.yaml
# Escanear endpoints TLS/SSH en busca de criptografía vulnerable a ordenadores cuánticos
pqaudit . --scan-endpoint api.example.com:443 --scan-endpoint git.example.com:22
# Escanear solo endpoints (sin escaneo de código)
pqaudit --scan-endpoint example.com:443 --scan-endpoint example.com:22
pqaudit — Post-Quantum Cryptography Readiness Scanner
Scanned: ./my-project
NOT PQC READY — Quantum-vulnerable cryptography detected
Files scanned: 65 | Findings: 12
Critical: 7 High: 2 Medium: 1 Low: 0 Safe: 2
--- CRITICAL (7) ---
[!!] Ed25519 — Ed25519 signatures — vulnerable to Shor's algorithm (14 occurrences)
src/crypto/signing.ts:14
> import { sign, verify } from "@noble/ed25519";
Fix: ML-DSA-65 (FIPS 204) or hybrid Ed25519+ML-DSA-65
Confidence: 98% | Effort: moderate | Via: ast
[!!] RSA — RSA signature — vulnerable to quantum factoring (3 occurrences)
src/auth/jwt.ts:42
> jwt.sign(payload, key, { algorithm: "RS256" });
Fix: ML-DSA-65 (FIPS 204)
Confidence: 96% | Effort: complex | Via: ast
[!!] ECDSA — Certificate uses ECDSA 256-bit key — vulnerable to Shor's algorithm
tls://api.example.com:443
> ECDSA 256-bit key, TLSv1.3
Fix: Post-quantum certificate algorithms when available
Confidence: 100% | Effort: complex | Via: network
...
| Algoritmo | Amenaza | Reemplazo |
|---|---|---|
| AES-128 | Grover reduce a 64 bits | AES-256 |
| TLS 1.0/1.1, SSLv3 | Protocolos obsoletos | TLS 1.3 |
| SSH (detectado vía red) | Intercambio de claves DH/ECDH | Intercambio de claves híbrido PQ |
ML-KEM (Kyber), ML-DSA (Dilithium), SLH-DSA (SPHINCS+), AES-256, ChaCha20-Poly1305, SHA-256, SHA-3
Genera un Cryptographic Bill of Materials conforme a CycloneDX 1.6. Cada hallazgo criptográfico se convierte en un componente crypto-asset con cryptoProperties, niveles de seguridad cuántica NIST y ubicaciones de evidencia.
pqaudit . --format cbom --output cbom.json
Genera salida SARIF 2.1.0 compatible con el escaneo de código de GitHub. Subir mediante github/codeql-action/upload-sarif.
pqaudit . --format sarif --output results.sarif
Archivo HTML autocontenido con un panel visual — desglose de severidad, puntuación de preparación PQC y tabla de hallazgos. Sin dependencias externas, funciona sin conexión.
pqaudit . --format html --output report.html
name: PQC Audit
on: [push, pull_request]
jobs:
pqaudit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
- run: npx pqaudit . --format sarif --output pqaudit.sarif --ci
- uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: pqaudit.sarif
category: pqaudit
pqaudit revisa archivos de manifiesto en busca de librerías criptográficas conocidas en cinco ecosistemas:
Las librerías seguras para PQC (@noble/post-quantum, pqcrypto, cloudflare/circl) se marcan como seguras para el seguimiento del inventario.
Las reglas se definen en YAML:
- id: MY_CUSTOM_RULE
description: "Patrón personalizado vulnerable a ordenadores cuánticos"
severity: critical
category: signature
algorithm: MyAlgo
replacement: ML-DSA-65
effort: complex
languages: ["javascript", "typescript"]
patterns:
- "myVulnerableFunction\\("
- "import.*myVulnerableLib"
Consulta CONTRIBUTING.md para el esquema completo de reglas y cómo enviar nuevas reglas.
pqaudit escanea archivos de configuración en busca de ajustes criptográficos vulnerables a ordenadores cuánticos:
sshd_config/ssh_configLos archivos de configuración sin extensión (Dockerfile, sshd_config, ssh_config) se detectan y escanean automáticamente.
Sondea endpoints TLS y SSH en vivo para configuraciones criptográficas vulnerables a ordenadores cuánticos:
pqaudit --scan-endpoint api.example.com:443 --scan-endpoint git.example.com:22
Endpoints TLS (cualquier puerto, o especificar tls://host:port):
Endpoints SSH (puerto 22 detectado automáticamente, o especificar ssh://host:port):
Los hallazgos de red tienen 100% de confianza (hechos observados, no coincidencias de patrones) y aparecen junto a los hallazgos de código en todos los formatos de salida.
pqaudit utiliza cuatro métodos de detección:
Planificado:
Consulta CONTRIBUTING.md para obtener pautas sobre cómo enviar reglas, correcciones de errores y nuevas funcionalidades.
MIT
| Bandera | Descripción | Predeterminado |
|---|
-f, --format <formato> | Formato de salida: text, json, cbom, sarif, html | text |
-o, --output <archivo> | Escribir salida a archivo | stdout |
-s, --severity <nivel> | Nivel de severidad mínimo: critical, high, medium, low, safe | safe |
--min-confidence <0-100> | Filtrar hallazgos por debajo de este umbral de confianza | 50 |
--no-dedupe | Mostrar todas las ocurrencias en lugar de colapsar por archivo | dedupe on |
--no-deps | Omitir escaneo de dependencias | escanear dependencias |
--include <patrones...> | Patrones glob para incluir | todos los archivos fuente |
--exclude <patrones...> | Patrones glob adicionales para excluir | node_modules, dist, etc. |
--rules <ruta> | Ruta al archivo YAML de reglas personalizadas | reglas integradas |
--scan-endpoint <endpoints...> | Endpoints TLS/SSH a sondear (host:port) | ninguno |
--network-timeout <ms> | Tiempo de espera de conexión de red | 5000 |
--ci | Código de salida 1 si existen hallazgos críticos o altos | desactivado |
| Algoritmo | Amenaza | Reemplazo |
|---|
| RSA (cualquier tamaño de clave) | Algoritmo de Shor | ML-KEM-768 / ML-DSA-65 |
| ECDSA / Ed25519 | Shor en curvas elípticas | ML-DSA-65 (FIPS 204) |
| ECDH / X25519 / DH | Shor en intercambio de claves | ML-KEM-768 (FIPS 203) |
| DSA | Algoritmo de Shor | ML-DSA-65 (FIPS 204) |
| Ecosistema | Archivos de manifiesto | Paquetes de ejemplo |
|---|
| npm | package.json | @noble/ed25519, node-rsa, jsonwebtoken, ethers |
| Rust | Cargo.toml | ed25519-dalek, rsa, ring, p256, pqcrypto |
| Go | go.mod | golang.org/x/crypto, cloudflare/circl |
| Python | requirements.txt, pyproject.toml | cryptography, pycryptodome, paramiko |
| Java | build.gradle, pom.xml | BouncyCastle, Google Tink |