Comprehensive post-quantum cryptography preparedness assessment
The Quantum Readiness Scoring System evaluates a system's preparedness for the post-quantum cryptography (PQC) era. Using a comprehensive 100-point scale, it assesses hardware capabilities, operating system support, cryptographic libraries, and network readiness to provide actionable insights and upgrade recommendations.
Quantum readiness assessment is only available during local mode scans (-mode local). It can be disabled with the -disable-quantum-readiness flag.
Mission-critical systems (domain controllers, CAs, HSMs).
Score <85 → ×0.90 penalty applied.
High-importance systems (application servers, web servers).
Score <75 → ×0.95 penalty applied.
Standard business systems with normal security needs.
No score adjustment applied.
Certain system characteristics result in automatic score reductions or caps, reflecting fundamental incompatibilities with post-quantum cryptography requirements.
Assessment returns immediately with overall score 0 and status "Not Ready". Cannot support PQC key sizes or operations.
Earns 0 points for the memory component only (up to 10 pts lost). The overall assessment continues; the system is not hard-blocked.
10% penalty applied to overall score for mission-critical systems (domain controllers, CAs) that have not yet reached the critical threshold.
5% penalty applied to overall score for high-importance systems (application servers, web servers) below the target threshold.
# Enable quantum readiness assessment (default in local mode)
./certscanner -mode local -output report.json
# Disable quantum readiness assessment
./certscanner -mode local -disable-quantum-readiness -output report.json
# View quantum assessment in different formats
./certscanner -mode local -outputformat json -output quantum.json
./certscanner -mode local -outputformat flatndjson -output quantum.ndjson
./certscanner -mode local -outputformat html -output quantum.html
quantum_readiness field in scan reportquantum.* fields in all events{
"quantum_readiness": {
"assessment_id": "qr_20250915_101539_abc123",
"timestamp": "2025-09-15T10:15:39.123456-07:00",
"assessment_type": "workstation",
"overall_score": 65,
"max_possible_score": 100,
"readiness_status": "Update Required",
"status_color": "orange",
"hardware_score": {
"total_score": 32,
"total_max_score": 40,
"cpu_score": 18,
"cpu_max_score": 20,
"memory_score": 14,
"memory_max_score": 15,
"security_hw_score": 0,
"security_hw_max_score": 5
},
"operating_system_score": {
"total_score": 15,
"total_max_score": 30,
"os_version_score": 12,
"os_version_max_score": 20,
"crypto_api_score": 3,
"crypto_api_max_score": 10
},
"crypto_library_score": {
"total_score": 12,
"total_max_score": 25,
"openssl_score": 8,
"openssl_max_score": 15,
"system_crypto_score": 4,
"system_crypto_max_score": 10
},
"network_score": {
"total_score": 6,
"total_max_score": 6,
"bandwidth_score": 3,
"bandwidth_max_score": 3,
"protocol_score": 3,
"protocol_max_score": 3
},
"recommendations": [
"Upgrade to macOS 15.0+",
"Update OpenSSL to 3.4.0+"
]
}
}
In addition to the system-level 0–100 score, each TLS port, application, and the overall system receives a letter grade (A+ through F) derived from what the scanner observes on the wire: TLS protocol, key exchange, certificate, and cipher suite quality.
PKI platform certificates (ADCS, Vault PKI, AWS PCA) also receive a letter grade using a separate cert-intrinsic formula — see PKI Certificate Grade below.
| Grade | Score | Meaning |
|---|---|---|
| A+ | 98–100 | CNSA 2.0 compliant — ML-KEM-1024 + post-quantum cert + TLS 1.3. |
| A | 85–97 | Quantum ready — PQC KEX present (ML-KEM-768 or hybrid), strong cert. |
| B | 70–84 | Best achievable with classical-only crypto — TLS 1.3 + X25519 + good cert. |
| C | 50–69 | Moderate risk — TLS 1.2 + ECDHE or weak cert. |
| D | 30–49 | Significant risk — RSA KEX, old TLS, or poor cert. |
| F | 0–29 | Critical — broken ciphers, TLS 1.0/1.1 primary, very weak RSA. |
Design intent: An A grade is unreachable without actual PQC key exchange. TLS 1.3 + ML-KEM-768 + any reasonable cert (RSA-2048+) guarantees a minimum A. A+ requires CNSA 2.0 key sizes (ML-KEM-1024).
| Component | Max Points | Key Rules |
|---|---|---|
| Protocol Level | 20 | TLS 1.3 = 20; TLS 1.2 = 10; TLS 1.1 = 3; TLS 1.0 = 1. Deduct −3 if TLS 1.1 in supported list; −5 if TLS 1.0. |
| Primary Key Exchange | 35 | ML-KEM-1024 hybrid = 35; ML-KEM-768 hybrid = 32; ML-KEM-1024 only = 33; ML-KEM-768 only = 30; ML-KEM-512 = 25; X25519/X448 = 20; secp384r1/P-521 = 18; secp256r1 = 17; RSA (no ephemeral) = 5. |
| Certificate Public Key | 20 | ML-DSA/SLH-DSA/FALCON = 20; EC P-384+/P-521/Ed448 = 17; EC P-256/Ed25519 = 16; RSA-4096 = 15; RSA-3072 = 13; RSA-2048 = 12; RSA-1024 = 3. |
| Signature Hash | 10 | SHA-512/SHA-384 = 10; SHA-256 = 8; SHA-1 = 2; MD5 = 0; unknown = 5. |
| Cipher Suite Quality | 15 | Start 15. AES-128-GCM = −1; CBC mode = −4; broken (RC4/DES/3DES/NULL) = −8; any insecure in supported list = −3; weak cipher = −1. Floor at 0. |
Applied post-sum; can push score below a grade threshold. Floor at 0.
| Condition | Deduction |
|---|---|
| Certificate is expired | −10 pts |
| Certificate is self-signed | −5 pts |
| Certificate validity > 5 years | −8 pts |
| Certificate validity > 3 years | −5 pts |
OperatingSystemScore| Configuration | Max Score | Grade |
|---|---|---|
| Classical only — TLS 1.3 + X25519 + Ed25519 + SHA-384 + AES-256 | 83 | B |
| TLS 1.3 + ML-KEM-768 only + RSA-2048 + SHA-256 + AES-256 | 85 | A |
| TLS 1.3 + ML-KEM-768 hybrid + ML-DSA cert + perfect | 97 | A |
| TLS 1.3 + ML-KEM-1024 only + ML-DSA cert + perfect | 98 | A+ |
| TLS 1.3 + ML-KEM-1024 hybrid + ML-DSA cert + perfect | 100 | A+ |
PKI platform certificate events (event.dataset: pki_certificate) from ADCS, HashiCorp Vault PKI, and AWS Private CA receive a dedicated quantum grade. Unlike TLS port grading there is no live connection to assess, so the 100-point budget is redistributed across cert-intrinsic properties only.
Output fields: tychon.crypto.grade (letter A+–F) and tychon.crypto.grade_score (0–100).
Design intent: An A grade is unreachable without a PQC key — consistent with TLS port grading. RSA-2048 + SHA-256 in good standing ≈ 57 → C. ML-DSA-87 with a signing chain = 100 → A+. The maximum any classical-only cert can achieve is EC P-521 + SHA-384 + valid + signed = 32+15+15+10 = 72 → B.
| Grade | Score | Meaning (PKI cert context) |
|---|---|---|
| A+ | 98–100 | CNSA 2.0 PQC key (ML-DSA-87 / FN-DSA-1024 / SLH-DSA-192+) with strong hash, valid, signed. |
| A | 85–97 | PQC key below CNSA 2.0 (ML-DSA-65) — quantum-safe but not highest security level. |
| B | 70–84 | Lower-level PQC (ML-DSA-44 / SLH-DSA-128) or best achievable with classical crypto (EC P-521). |
| C | 50–69 | Classical EC P-256/P-384 or RSA-2048/4096 — quantum-vulnerable, migration required. |
| D | 30–49 | Weak RSA, expiring soon, or combination of multiple deductions. |
| F | 0–29 | RSA-1024, DSA, expired, or SHA-1/MD5 signature. |
| Component | Max | Scoring rules |
|---|---|---|
| Key Algorithm | 60 | See key algorithm table below. |
| Signature Hash | 15 | PQC sig / SHA-384 / SHA-512 = 15; SHA-256 = 12; SHA-1 = 3; MD5 = 0; unknown = 7. |
| Lifetime & Validity | 15 | Starts at 15; deductions applied (see validity table below). |
| Chain Trust | 10 | Non-self-signed = 10; self-signed = 5 (root CAs are legitimately self-signed). |
| Algorithm / Key | Points | Notes |
|---|---|---|
| ML-DSA-87 / FN-DSA-1024 / SLH-DSA-192/256 | 60 | CNSA 2.0 Level 5 — only path to A+ |
| ML-DSA-65 / Dilithium3 | 52 | NIST Level 3 — quantum-safe, sub-CNSA 2.0 |
| ML-DSA-44 / FN-DSA-512 / SLH-DSA-128 / Dilithium2 | 45 | NIST Level 1–2 — quantum-safe, lower security margin |
| EC P-521 | 32 | Classical strong, quantum-vulnerable |
| EC P-384 / Ed448 | 30 | Classical strong, quantum-vulnerable |
| EC P-256 / Ed25519 | 28 | Classical baseline, quantum-vulnerable |
| RSA-4096 | 25 | Classical, quantum-vulnerable |
| RSA-3072 | 22 | Classical, quantum-vulnerable |
| RSA-2048 | 20 | NIST minimum, quantum-vulnerable |
| RSA-1024 | 5 | Weak — replace immediately |
| DSA / unknown | 2 | Deprecated or unrecognized |
Component starts at 15. Deductions are additive and floored at 0. Expiry and shelf-life deductions stack.
| Condition | Deduction | Remaining |
|---|---|---|
| Certificate is expired | −15 (floor at 0) | 0 |
| Expires in < 30 days | −8 | 7 |
| Expires in < 90 days | −4 | 11 |
| Expires in < 180 days | −2 | 13 |
| Validity period > 10 years | −3 | 12 |
| Validity period > 5 years | −1 | 14 |
| Valid, reasonable lifetime | 0 | 15 |
| Certificate | Key | Hash | Validity | Chain | Total | Grade |
|---|---|---|---|---|---|---|
| Issued leaf cert | ML-DSA-87 | SHA-384 | 1 yr | Signed | 100 | A+ |
| Root CA | ML-DSA-87 | SHA-384 | 10 yr | Self-signed | 92 | A |
| Intermediate CA | ML-DSA-65 | SHA-256 | 5 yr | Signed | 88 | A |
| Leaf cert | ML-DSA-44 | SHA-256 | 1 yr | Signed | 82 | B |
| Best classical | EC P-521 | SHA-384 | 1 yr | Signed | 72 | B (ceiling) |
| Common RSA CA | RSA-2048 | SHA-256 | 10 yr | Self-signed | 49 | D |
| Expiring RSA | RSA-2048 | SHA-256 | <30 days | Signed | 44 | D |
| Expired cert | RSA-2048 | SHA-256 | Expired | Signed | 42 | D |
| Weak legacy | RSA-1024 | SHA-1 | Valid | Signed | 23 | F |