
코드베이스에서 양자 취약 암호화를 스캔합니다. Q-Day 이전에 RSA, ECDSA, Ed25519, ECDH를 탐지합니다. CycloneDX CBOM + SARIF 출력.
양자 취약 암호화를 위해 코드베이스를 스캔합니다. Q-Day 이전에 마이그레이션이 필요한 항목을 명확히 파악하세요.

pqaudit는 RSA, ECDSA, Ed25519, ECDH, DH 및 Shor 알고리즘에 의해 깨지는 기타 알고리즘의 사용을 감지합니다. 또한 이미 마이그레이션된 PQC 사용(ML-KEM, ML-DSA, SLH-DSA)도 식별하여 마이그레이션 진행 상황을 추적할 수 있습니다. 사람이 읽을 수 있는 텍스트, JSON, CycloneDX CBOM, GitHub Code Scanning용 SARIF 또는 독립형 HTML 보고서로 출력합니다.
2026년 3월 31일, Google은 ECDSA-256을 해독하는 데 이전 추정치보다 20배 적은 큐비트 — 약 1,200 논리 큐비트 및 500,000 미만의 물리 큐비트 — 가 필요하다는 연구를 발표했습니다. NSA의 CNSA 2.0은 2027년까지 새로운 국가 안보 시스템에 대해 PQC를 의무화합니다. 마이그레이션 기간이 열려 있지만 점점 줄어들고 있습니다.
npx pqaudit ./my-project
또는 전역 설치:
npm install -g pqaudit
pqaudit ./my-project
# 현재 디렉토리 스캔, 사람이 읽을 수 있는 출력
pqaudit .
# critical 및 high 등급만 표시
pqaudit ./src --severity high
# CycloneDX CBOM 생성
pqaudit . --format cbom --output cbom.json
# GitHub Code Scanning용 SARIF 생성
pqaudit . --format sarif --output results.sarif
# CI 모드 — critical/high 발견 사항이 있으면 종료 코드 1
pqaudit . --ci
# 낮은 신뢰도의 주석 일치 항목을 포함한 모든 발견 사항 표시
pqaudit . --min-confidence 0
# 파일별로 병합하지 않고 모든 발생 항목 표시
pqaudit . --no-dedupe
# 의존성 스캔 건너뛰기
pqaudit . --no-deps
# 사용자 정의 규칙 사용
pqaudit . --rules ./my-rules.yaml
# TLS/SSH 엔드포인트 스캔 (양자 취약 암호 확인)
pqaudit . --scan-endpoint api.example.com:443 --scan-endpoint git.example.com:22
# 엔드포인트만 스캔 (코드 스캔 없음)
pqaudit --scan-endpoint example.com:443 --scan-endpoint example.com:22
| 플래그 | 설명 | 기본값 |
|---|---|---|
-f, --format <format> | 출력 형식: text, json, cbom, sarif, html | text |
-o, --output <file> | 출력을 파일에 쓰기 | stdout |
-s, --severity <level> | 최소 심각도: critical, high, medium, low, safe | safe |
--min-confidence <0-100> | 이 신뢰도 임계값 미만의 발견 사항 필터링 | 50 |
--no-dedupe | 파일별로 병합하지 않고 모든 발생 항목 표시 | 중복 제거 켜짐 |
--no-deps | 의존성 스캔 건너뛰기 | 의존성 스캔 켜짐 |
--include <patterns...> | 포함할 Glob 패턴 | 모든 소스 파일 |
--exclude <patterns...> | 추가로 제외할 Glob 패턴 | node_modules, dist 등 |
--rules <path> | 사용자 정의 규칙 YAML 파일 경로 | 내장 규칙 |
--scan-endpoint <endpoints...> | 프로브할 TLS/SSH 엔드포인트 (host:port) | 없음 |
--network-timeout <ms> | 네트워크 연결 제한 시간 | 5000 |
--ci | critical 또는 high 발견 사항이 있으면 종료 코드 1 | 꺼짐 |
pqaudit — Post-Quantum Cryptography Readiness Scanner
스캔 대상: ./my-project
PQC 준비 안 됨 — 양자 취약 암호 감지됨
스캔된 파일: 65 | 발견 사항: 12
Critical: 7 High: 2 Medium: 1 Low: 0 Safe: 2
--- CRITICAL (7) ---
[!!] Ed25519 — Ed25519 서명 — Shor 알고리즘에 취약 (14회 발생)
src/crypto/signing.ts:14
> import { sign, verify } from "@noble/ed25519";
수정: ML-DSA-65 (FIPS 204) 또는 하이브리드 Ed25519+ML-DSA-65
신뢰도: 98% | 노력: 보통 | 경로: ast
[!!] RSA — RSA 서명 — 양자 인수분해에 취약 (3회 발생)
src/auth/jwt.ts:42
> jwt.sign(payload, key, { algorithm: "RS256" });
수정: ML-DSA-65 (FIPS 204)
신뢰도: 96% | 노력: 복잡 | 경로: ast
[!!] ECDSA — 인증서가 ECDSA 256비트 키 사용 — Shor 알고리즘에 취약
tls://api.example.com:443
> ECDSA 256비트 키, TLSv1.3
수정: 사용 가능한 경우 양자 후 인증서 알고리즘
신뢰도: 100% | 노력: 복잡 | 경로: network
...
| 알고리즘 | 위협 | 대체 알고리즘 |
|---|---|---|
| RSA (모든 키 크기) | Shor 알고리즘 | ML-KEM-768 / ML-DSA-65 |
| ECDSA / Ed25519 | 타원 곡선에 대한 Shor | ML-DSA-65 (FIPS 204) |
| ECDH / X25519 / DH | 키 교환에 대한 Shor | ML-KEM-768 (FIPS 203) |
| DSA | Shor 알고리즘 | ML-DSA-65 (FIPS 204) |
| 알고리즘 | 위협 | 대체 알고리즘 |
|---|---|---|
| AES-128 | Grover가 64비트로 축소 | AES-256 |
| TLS 1.0/1.1, SSLv3 | 폐기된 프로토콜 | TLS 1.3 |
| SSH (네트워크를 통해 감지) | DH/ECDH 키 교환 | PQ 하이브리드 키 교환 |
ML-KEM (Kyber), ML-DSA (Dilithium), SLH-DSA (SPHINCS+), AES-256, ChaCha20-Poly1305, SHA-256, SHA-3
CycloneDX 1.6을 준수하는 암호 자재 명세서를 생성합니다. 각 암호화 발견 사항은 cryptoProperties, NIST 양자 보안 수준 및 증거 위치가 포함된 crypto-asset 구성 요소가 됩니다.
pqaudit . --format cbom --output cbom.json
GitHub의 코드 스캐닝과 호환되는 SARIF 2.1.0 출력을 생성합니다. github/codeql-action/upload-sarif를 통해 업로드하세요.
pqaudit . --format sarif --output results.sarif
시각적 대시보드(심각도 분석, PQC 준비 점수, 발견 사항 표)가 포함된 독립형 HTML 파일입니다. 외부 종속성이 없으며 오프라인에서 작동합니다.
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는 5개 에코시스템에서 알려진 암호화 라이브러리에 대해 매니페스트 파일을 확인합니다.
| 에코시스템 | 매니페스트 파일 | 패키지 예시 |
|---|---|---|
| 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 |
PQC 안전 라이브러리(@noble/post-quantum, pqcrypto, cloudflare/circl)는 인벤토리 추적을 위해 safe로 표시됩니다.
규칙은 YAML로 정의됩니다:
- id: MY_CUSTOM_RULE
description: "사용자 정의 양자 취약 패턴"
severity: critical
category: signature
algorithm: MyAlgo
replacement: ML-DSA-65
effort: complex
languages: ["javascript", "typescript"]
patterns:
- "myVulnerableFunction\\("
- "import.*myVulnerableLib"
전체 규칙 스키마 및 새 규칙 제출 방법은 CONTRIBUTING.md를 참조하세요.
pqaudit는 구성 파일에서 양자 취약 암호 설정을 스캔합니다:
sshd_config/ssh_config의 RSA/ECDSA 키 유형, DH/ECDH 키 교환확장자가 없는 구성 파일(Dockerfile, sshd_config, ssh_config)은 자동으로 감지되어 스캔됩니다.
실시간 TLS 및 SSH 엔드포인트를 프로브하여 양자 취약 암호 구성을 확인합니다:
pqaudit --scan-endpoint api.example.com:443 --scan-endpoint git.example.com:22
TLS 엔드포인트 (모든 포트, 또는 tls://host:port 지정):
SSH 엔드포인트 (포트 22 자동 감지, 또는 ssh://host:port 지정):
네트워크 발견 사항은 100% 신뢰도를 가지며(관찰된 사실, 패턴 일치 아님) 모든 출력 형식에서 코드 발견 사항과 함께 표시됩니다.
pqaudit는 네 가지 탐지 방법을 사용합니다:
계획:
규칙, 버그 수정 및 새 기능 제출에 대한 지침은 CONTRIBUTING.md를 참조하세요.
MIT