Federal cryptographic inventory report — 34-column CSV covering TLS, SSH, non-TLS protocols, VPN, IPSec, filesystem certificates, WiFi, and MACsec
Supported in both local and remote mode
Use -outputformat csv to produce CSV as the primary output, or use -csv-output <path> to write a CSV file alongside another format (e.g., JSON + CSV in one run).
The two options cannot be combined with each other.
Local mode requires -cipherscanquick (on by default). Remote mode works with or without -cipherscanquick — omitting it will populate limited cipher data in the CSV.
The CSV output format produces a federal cryptographic inventory spreadsheet aligned to the data fields required by OMB Memorandum M-23-02 (Migrating to Post-Quantum Cryptography) and NSM-10 (National Security Memorandum on Quantum Computing). The report covers every cryptographic dataset the scanner collects — TLS, SSH, non-TLS wire protocols, VPN and IPSec clients, filesystem certificates, WiFi, and MACsec — each mapped into the same 34-column structure. Fields not covered by the fixed columns are serialised into the Additional Notes column (col 13).
.csv (auto-added if omitted)-cipherscanquick (enabled by default)-cipherscanquick; add it for full cipher detail-outputformat csv cannot combine with other formats; use -csv-output for dual output# Minimal — writes crypto-inventory.csv
.\certscanner-windows-amd64.exe -outputformat csv -output crypto-inventory.csv
# Full local scan with all datasets
.\certscanner-windows-amd64.exe -outputformat csv -output crypto-inventory.csv `
-scan-installed-apps -detect-vpn-clients -detect-ipsec `
-tags "Agency-XYZ,FY2026-Q1,OMB-M-23-02"
Remote mode scans network hosts and generates an OMB-compliant CSV from the port-level TLS, SSH, and non-TLS cipher findings. Add -cipherscanquick for full cipher suite enumeration per port. The Operating System column (col 12) reflects the scanning host's OS — the remote target's OS is not available over the network.
# Single host — full cipher enumeration
./certscanner -mode remote -hosts 192.168.1.0/24 -ports 443,8443,22 \
-cipherscanquick -outputformat csv -output remote-inventory.csv \
-tags "Agency-XYZ,FY2026-Q1,OMB-M-23-02"
# Dual output: JSON for SIEM + CSV for OMB submission in one run
./certscanner -mode remote -hosts 10.0.0.0/8 -ports 443,8443,22,8080 \
-cipherscanquick -output scan-results.json \
-csv-output remote-inventory.csv
Every cryptographic dataset detected by the scanner produces one or more rows in the CSV. Each dataset type maps its specific fields to the 34 OMB columns; fields with no direct column equivalent are written to Additional Notes (col 13).
One row per listening TLS port per application. Full cipher suite detail from live handshake.
One row per SSH port. Prefers sshd_config / sshd -T data over wire-negotiated algorithms.
Live SMB2 NEGOTIATE probe. Cipher IDs extracted from NegotiateContextList in server response.
Live AS-REQ probe. KDC's supported etype list extracted from KRB-ERROR(PREAUTH_REQUIRED).
Live RPC NULL probe confirms NFS presence. Crypto from published NFSv4.2 + Kerberos profile.
Live MQCONN probe. Cipher spec from IBM MQ TLS cipher suites.
mDNS TXT record query + RTSP OPTIONS probe. mDNS et= and pk= fields parsed for live crypto data.
Live HELLO/ACK probe confirms OPC-UA server. Crypto from OPC-UA Security Policy specification.
Live VERSIONS cell probe confirms Tor relay. Crypto from Tor protocol specification.
One row per detected VPN client (Cisco AnyConnect, GlobalProtect, WireGuard, OpenVPN, WARP, etc.). Cipher data from config files and process inspection.
One row per detected IPSec tunnel or IKE profile. Cipher data from strongSwan, Libreswan, Windows IKE, or platform config.
One row per certificate found on the filesystem (.pem, .crt, .p12, etc.). Parsed from on-disk X.509 files.
One row when WiFi is detected. Security mode and cipher suite from OS wireless configuration APIs.
One row per MACsec interface detected. Cipher suite from kernel and network driver configuration.
All 34 column names match the OMB cryptographic inventory data field names exactly. The "Populated by" column lists which dataset types fill each field.
| # | Column Name | Description | Example Value |
|---|---|---|---|
| 1 | System Name | Hostname of the scanned system. All rows. | WORKSTATION-01 |
| 2 | Reported System Vulnerability | Whether CRQC-vulnerable algorithms (RSA, EC, DH, DSA) were detected. Values: Vulnerable, Not Vulnerable, Unknown/Not Yet Assessed. |
Not Vulnerable |
| 3 | Associated Cryptographic Module Name or Description | Application or protocol name and port, e.g. "nginx (port 443)" for TLS rows, "SSH-2.0-OpenSSH_9.6" for SSH rows, "Filesystem Certificate" for on-disk certs. | nginx (port 443) |
| 4 | Associated CRQC-Vulnerable Asymmetric Algorithms | RSA, EC, DH, or DSA algorithms detected; "None known at this time" when only PQC or symmetric algorithms are observed. | ECDH / ECDHE |
| 5 | Associated Post-Quantum Asymmetric Algorithms | ML-KEM, ML-DSA, SLH-DSA, or PQC hybrids detected. For SSH, populated when sntrup761x25519 or mlkem768x25519 is in the KEX list. |
ML-KEM / CRYSTALS-Kyber |
| 6 | Associated Symmetric Algorithms | Block and stream ciphers detected (AES, ChaCha20, 3DES). For non-TLS protocols, derived from negotiated or spec-defined cipher. | AES |
| 7 | Associated Other Cryptographic Techniques | Additional techniques not covered by other columns (post-quantum signatures, hash-based MACs). Set to "None known at this time" when nothing additional applies. | None known at this time |
| 8 | System Composition | Fixed value: Software (the scanner inventories software-based cryptographic assets). |
Software |
| 9 | Software Package Name | Cryptographic library name(s) linked by the application (e.g. OpenSSL, libssl, CryptoKit). For SSH rows: detected SSH daemon libraries. For certs: Filesystem Certificate. | OpenSSL; libcrypto |
| 10 | Software Package Version | Application version from PE/ELF metadata or SSH banner. Unknown when not discoverable. | 1.25.4 |
| 11 | Vendor/Developer | Software publisher from PE metadata. For filesystem certificates: the issuer organisation field from the X.509 certificate. Unknown when not available. | DigiCert, Inc. |
| 12 | Operating System | OS name and version of the scanned host (e.g. Windows 11 Pro 23H2, RHEL 9.4, darwin 26.4.1). | RHEL 9.4 |
| 13 | Additional Notes |
Semicolon-delimited overflow field capturing protocol-specific details not covered by the 33 other columns. Content varies by dataset:
|
Config: sshd -T; KEX: mlkem768x25519; PasswordAuth: no |
| 14 | Overall Status | Asset lifecycle status. Set to In use for all active assets detected on the running host. |
In use |
| 15 | Key Exchange / Key Agreement / Key Establishment Protocols Used | KEX protocol family in use. For TLS: TLS 1.3 ML-KEM, ECDHE, DHE. For SSH: ECDH / ECDHE, DH / DHE. For IPSec: IKEv2 ECDH. For VPN: per-tunnel protocol. | TLS 1.3 ML-KEM |
| 16 | Key Exchange …: Associated Parameters and Ciphersuites | Full cipher suite name(s) observed. For TLS: IANA cipher suite strings. For SSH: comma-separated KEX algorithm names from sshd_config / sshd -T. |
TLS: TLS_AES_256_GCM_SHA384 |
| 17 | Key Exchange …: Associated Options and Protocol Extensions | Named groups and extensions used. For TLS: supported_groups values. For SSH: named groups extracted from KEX algorithm list (e.g. X25519, P-256). | TLS: X25519MLKEM768 |
| 18 | Other Cryptographic Protocols Used | Secondary protocol identifiers. For TLS and SSH rows this is None (covered by col 15). For non-TLS rows this holds the protocol name and version (e.g. SMB3, NFSv4.2). | None |
| 19 | Other Cryptographic Protocols …: Associated Parameters and Ciphersuites | Parameters for any protocol named in col 18. Empty for TLS/SSH primary rows. | None |
| 20 | Other Cryptographic Protocols …: Associated Options and Protocol Extensions | Additional extensions for the protocol in col 18. Empty for most rows. | None |
| 21 | Key Encapsulation Algorithms (KEMs) Used | Post-quantum KEM algorithms detected. Populated for TLS rows when ML-KEM is in the hybrid KEX (e.g. X25519MLKEM768) and for SSH rows when mlkem768x25519 or sntrup761x25519 is configured. |
ML-KEM / CRYSTALS-Kyber |
| 22 | KEMs: Associated Parameters | Security level and parameter set for detected KEMs (e.g. ML-KEM: 768 for ML-KEM-768, NTRU Prime: 761 for sntrup761). | ML-KEM: 768 |
| 23 | Digital Signature Algorithms Used | Signature algorithms from TLS certificate, SSH host key, or X.509 file. Values: RSA, ECDSA, EdDSA, ML-DSA, or derived from host key type for SSH (e.g. Ed25519, RSA). | ECDSA |
| 24 | Digital Signature Algorithms Used: Associated Parameters | Key sizes and curve names for detected signature algorithms (e.g. ECDSA: P-256, RSA: 2048, Ed25519: 255). | ECDSA: P-384 |
| 25 | Digital Signature Algorithms Used: Associated Hash Algorithms | Hash functions paired with detected signature algorithms (e.g. ECDSA: SHA-384, RSA: SHA-256). For SSH host key types that do not use a separate hash (Ed25519), set to None. | ECDSA: SHA-384 |
| 26 | Block Ciphers Used | Block cipher families detected across all cipher suites (AES, 3DES, Camellia). For non-TLS protocols, mapped from the negotiated or spec-defined cipher (e.g. SMB3 AES-GCM → AES). | AES |
| 27 | Block Ciphers Used: Associated Key Length Parameters | Key sizes in bits for each detected block cipher (e.g. AES: 128, 256). Derived from cipher suite names or protocol spec. | AES: 128, 256 |
| 28 | Block Ciphers Used: Associated Modes of Operation | Authenticated encryption and cipher modes (GCM, CCM, CBC, CTR). For SMB3 the mode is read from the NegotiateContextList cipher ID; for AES-GCM suites it is always GCM. | AES: GCM |
| 29 | Hash Algorithms Used | Hash functions across all cipher suites and certificates (SHA-256, SHA-384, SHA-512, SHA-1). For SSH rows, derived from MAC algorithm names and host key type. | SHA-256 |
| 30 | Hash Algorithms Used: Associated Parameters | Digest size in bits for each detected hash (e.g. SHA: SHA-256, SHA: SHA-384). | SHA: SHA-256 |
| 31 | Message Authentication Algorithms Used | MAC algorithms detected. For TLS 1.3 AEAD suites: AEAD/GCM or AEAD/ChaCha20-Poly1305. For SSH: MAC algorithm names from config (e.g. hmac-sha2-256, umac-128-etm). For SMB/MACsec: GMAC. | HMAC |
| 32 | Message Authentication Algorithms Used: Associated Parameters | Hash function and tag length for each MAC (e.g. HMAC: SHA-256, HMAC: SHA-384). For AEAD modes the tag is implicit in the cipher mode. | HMAC: SHA-256 |
| 33 | Other Cryptographic Details | Stream ciphers (ChaCha20-Poly1305), crypto library PQC capability flags, and the crypto_source qualifier for non-TLS protocols (wire = observed on network, protocol_spec = from published specification). |
No additional details. |
| 34 | Cryptographic Certifications | FIPS 140 mode status detected on the host (e.g. FIPS 140-2 Enabled). Set to Unknown when FIPS status cannot be determined. | FIPS 140-2 Enabled |
The scanner emits one row per cryptographic asset instance. The priority order within each application's port list is: TLS → SSH → SMB3 → Kerberos → NFS → IBM MQ → AirPlay → OPC-UA → Tor. Non-port datasets (VPN clients, IPSec tunnels, filesystem certificates, WiFi, MACsec) are appended after all port rows.
Application observed in memory with no TLS, SSH, or other protocol. One summary row with empty cipher columns and Unknown/Not Yet Assessed vulnerability.
One row per TLS-enabled port. All cipher suite and certificate fields populated from the live TLS handshake.
One row per SSH port. Algorithm data preferentially sourced from sshd -T -f <config> (authoritative), falling back to wire-negotiated algorithms.
One row per detected protocol (SMB3, Kerberos, NFS, IBM MQ, AirPlay, OPC-UA, Tor). Live probes extract wire crypto where available; otherwise falls back to published spec values.
One row per VPN client or IPSec tunnel detected. Cipher details enriched from config files and running process inspection beyond what the application-centric model exposes alone.
One row per item appended at the end of the file. These datasets have no parent application entry and are emitted directly from their respective scan results.
Column 2 (Reported System Vulnerability) is set as follows for each row type:
mlkem768x25519 or sntrup761x25519 as top KEX.Non-TLS protocol rows include a crypto_source qualifier in column 33 to indicate data confidence:
# Deploy via Intune Win32 app — collect OMB CSV per device, upload to SharePoint
$hostname = $env:COMPUTERNAME
$outfile = "C:\ProgramData\TYCHON\inventory-$hostname.csv"
.\certscanner-windows-amd64.exe `
-outputformat csv `
-output $outfile `
-scan-installed-apps `
-detect-vpn-clients -detect-ipsec `
-tags "Agency-XYZ,FY2026-Q1,OMB-M-23-02"
# Upload to SharePoint or S3 via separate script
if (Test-Path $outfile) {
# ... upload logic ...
}
# Combine per-host CSV files into a single agency inventory
# The header from the first file is retained; subsequent files are appended without header
head -1 inventory-HOST1.csv > agency-inventory-combined.csv
for f in inventory-*.csv; do
tail -n +2 "$f" >> agency-inventory-combined.csv
done
Each per-host CSV has identical column ordering, making naive concatenation safe for Excel, Power BI, and most CISA tooling.
Requires all federal agencies to inventory cryptographic systems by fiscal year deadlines. Specifies the data fields that must be collected for each cryptographic asset — the 34 CSV columns map directly to those requirements.
Directs NSS owners to prioritize CRQC-vulnerable system identification, particularly for systems using RSA, ECC, and DH-based key exchange — the primary targets of this inventory format. SSH, VPN, and IPSec rows directly address NSM-10 network protocol requirements.
CNSA 2.0 requires ML-KEM and ML-DSA adoption on defined schedules. The Associated Post-Quantum Asymmetric Algorithms column (col 5) and KEMs columns (col 21–22) directly surface compliance status against these requirements across TLS, SSH, and IPSec rows.
The Cryptographic Certifications column (col 34) captures FIPS 140 mode status detected on the host, supporting FISMA and FedRAMP reporting requirements.
crypto_source qualifier in column 33 indicates whether data came from the wire (wire) or the spec (protocol_spec).-outputformat csv and once with -outputformat flatndjson (or use -splitoutputs with a non-CSV format).