Complete reference of every protocol, cipher suite, and algorithm detected by TYCHON PQC Scanner
Customer-facing reference — detection methods, PQC readiness assessment, and NDJSON event mappings
Core Network Protocols
Specialty / Emerging
App / Host Detection
Host Crypto & Libraries
Quick Reference
The scanner performs a full TLS handshake against each target port, offering all known cipher suites and collecting the server's negotiated cipher, protocol version, certificate chain, and key exchange group. A fast-path probe (-cipherscanquick) collects the single negotiated suite without full enumeration.
| Version | Status | PQC Readiness | Notes |
|---|---|---|---|
TLS 1.3 | Recommended | transitional | Only AEAD cipher suites; forward secrecy mandatory; supports PQC/hybrid key exchange groups |
TLS 1.2 | Acceptable | transitional | ECDHE/DHE suites with AEAD are acceptable; RSA key exchange and CBC are flagged |
TLS 1.1 | Deprecated | vulnerable | RFC 8996 deprecated; no AEAD; SHA-1 MACs common |
TLS 1.0 | Deprecated | vulnerable | RFC 8996 deprecated; BEAST/POODLE applicable; disable immediately |
SSLv3 | Broken | vulnerable | POODLE attack; RFC 7568 prohibited; any server supporting SSLv3 is flagged critical |
DTLS 1.2 | Acceptable | transitional | UDP-based TLS for VoIP, gaming, IoT; same cipher suite coverage as TLS 1.2 |
| Suite Name | IANA ID | Encryption | HMAC | PQC Readiness |
|---|---|---|---|---|
TLS_AES_256_GCM_SHA384 | 0x1302 | AES-256-GCM | AEAD | safe Recommended |
TLS_CHACHA20_POLY1305_SHA256 | 0x1303 | ChaCha20-Poly1305 | AEAD | safe |
TLS_AES_128_GCM_SHA256 | 0x1301 | AES-128-GCM | AEAD | safe |
TLS_AES_128_CCM_SHA256 | 0x1304 | AES-128-CCM | AEAD | safe |
TLS_AES_128_CCM_8_SHA256 | 0x1305 | AES-128-CCM-8 | AEAD | safe |
Note: TLS 1.3 symmetric encryption is quantum-safe; however the key exchange (ECDH, DHE) is still classically-based and vulnerable to Shor's algorithm unless a PQC/hybrid group is used.
| Suite Name | IANA ID | Key Exchange | Encryption | MAC | PQC Readiness |
|---|---|---|---|---|---|
ECDHE-RSA-AES256-GCM-SHA384 | 0xC030 | ECDHE | AES-256-GCM | AEAD | transitional |
ECDHE-RSA-AES128-GCM-SHA256 | 0xC02F | ECDHE | AES-128-GCM | AEAD | transitional |
ECDHE-ECDSA-AES256-GCM-SHA384 | 0xC02C | ECDHE | AES-256-GCM | AEAD | transitional |
ECDHE-ECDSA-AES128-GCM-SHA256 | 0xC02B | ECDHE | AES-128-GCM | AEAD | transitional |
ECDHE-RSA-CHACHA20-POLY1305 | 0xCCA8 | ECDHE | ChaCha20-Poly1305 | AEAD | transitional |
ECDHE-ECDSA-CHACHA20-POLY1305 | 0xCCA9 | ECDHE | ChaCha20-Poly1305 | AEAD | transitional |
DHE-RSA-AES256-GCM-SHA384 | 0x009F | DHE | AES-256-GCM | AEAD | transitional |
DHE-RSA-AES128-GCM-SHA256 | 0x009E | DHE | AES-128-GCM | AEAD | transitional |
DHE-RSA-CHACHA20-POLY1305 | 0xCCAA | DHE | ChaCha20-Poly1305 | AEAD | transitional |
AES256-GCM-SHA384 | 0x009D | RSA | AES-256-GCM | AEAD | vulnerable |
AES128-GCM-SHA256 | 0x009C | RSA | AES-128-GCM | AEAD | vulnerable |
| Suite Name | IANA ID | Key Exchange | Encryption | MAC | PQC Readiness |
|---|---|---|---|---|---|
ECDHE-RSA-AES256-SHA384 | 0xC028 | ECDHE | AES-256-CBC | SHA-384 | transitional |
ECDHE-RSA-AES128-SHA256 | 0xC027 | ECDHE | AES-128-CBC | SHA-256 | transitional |
ECDHE-RSA-AES256-SHA | 0xC014 | ECDHE | AES-256-CBC | SHA-1 | vulnerable |
ECDHE-RSA-AES128-SHA | 0xC013 | ECDHE | AES-128-CBC | SHA-1 | vulnerable |
DHE-RSA-AES256-SHA256 | 0x006B | DHE | AES-256-CBC | SHA-256 | transitional |
DHE-RSA-AES128-SHA256 | 0x0067 | DHE | AES-128-CBC | SHA-256 | transitional |
AES256-SHA256 | 0x003D | RSA | AES-256-CBC | SHA-256 | vulnerable |
AES128-SHA256 | 0x003C | RSA | AES-128-CBC | SHA-256 | vulnerable |
AES256-SHA | 0x0035 | RSA | AES-256-CBC | SHA-1 | vulnerable |
AES128-SHA | 0x002F | RSA | AES-128-CBC | SHA-1 | vulnerable |
| Suite Name | IANA ID | Key Exchange | Encryption | Risk |
|---|---|---|---|---|
ECDHE-RSA-DES-CBC3-SHA | 0xC012 | ECDHE | 3DES-CBC | Critical |
DHE-RSA-DES-CBC3-SHA | 0x0016 | DHE | 3DES-CBC | Critical |
DES-CBC3-SHA | 0x000A | RSA | 3DES-CBC | Critical |
RC4-SHA | 0x0005 | RSA | RC4-128 | Critical |
RC4-MD5 | 0x0004 | RSA | RC4-128 | Critical |
ECDHE-RSA-RC4-SHA | 0xC011 | ECDHE | RC4-128 | Critical |
DES-CBC-SHA | 0x0009 | RSA | DES-CBC | Critical |
NULL-MD5 / NULL-SHA | 0x0001/0x0002 | RSA | None | Critical — No Encryption |
| Suite Name | Key Exchange | Encryption | Origin Standard | PQC Readiness |
|---|---|---|---|---|
ECDHE-RSA-CAMELLIA256-SHA384 | ECDHE | Camellia-256-CBC | ISO/IEC 18033-3, RFC 6367 | transitional |
ECDHE-RSA-CAMELLIA128-SHA256 | ECDHE | Camellia-128-CBC | ISO/IEC 18033-3 | transitional |
ECDHE-RSA-ARIA256-GCM-SHA384 | ECDHE | ARIA-256-GCM | Korean IETF RFC 6209 | transitional |
ECDHE-RSA-ARIA128-GCM-SHA256 | ECDHE | ARIA-128-GCM | Korean IETF RFC 6209 | transitional |
| Group Name | ID | Type | PQC? | Detection Method | Standard |
|---|---|---|---|---|---|
X25519MLKEM768 | 0x11EC | Hybrid (X25519 + ML-KEM-768) | Yes | Full handshake | NIST FIPS 203 + RFC 7748 |
SecP256r1MLKEM768 | 0x11EB | Hybrid (P-256 + ML-KEM-768) | Yes | Full handshake | NIST FIPS 203 + FIPS 186-5 |
SecP384r1MLKEM1024 | 0x11ED | Hybrid (P-384 + ML-KEM-1024) | Yes | Full handshake | NIST FIPS 203 + FIPS 186-5 |
MLKEM512 | 0x0200 | Pure ML-KEM | Yes | Full handshake | NIST FIPS 203 |
MLKEM768 | 0x0201 | Pure ML-KEM | Yes | Full handshake | NIST FIPS 203 |
MLKEM1024 | 0x0202 | Pure ML-KEM | Yes | Full handshake | NIST FIPS 203 |
BIKE-L1 / BIKE-L3 / BIKE-L5 | OQS | Code-based KEM | Yes | Passive HRR | OQS / IETF draft |
FrodoKEM-640/976/1344 (AES & SHAKE) | OQS | Lattice KEM (conservative) | Yes | Passive HRR | OQS / IETF draft |
x25519_mlkem512, p256_mlkem512, bp256_mlkem512 | OQS | Hybrid ML-KEM (non-IANA) | Yes | Passive HRR | OQS draft |
bp384_mlkem768, p384_mlkem768, x448_mlkem768 | OQS | Hybrid ML-KEM (non-IANA) | Yes | Passive HRR | OQS draft |
bp512_mlkem1024, p521_mlkem1024 | OQS | Hybrid ML-KEM (non-IANA) | Yes | Passive HRR | OQS draft |
X25519 | 0x001D | Classical ECDH | No | Full handshake | RFC 7748 |
X448 | 0x001E | Classical ECDH | No | Full handshake | RFC 7748 |
secp256r1 (P-256) | 0x0017 | NIST ECC | No | Full handshake | FIPS 186-5, RFC 8422 |
secp384r1 (P-384) | 0x0018 | NIST ECC | No | Full handshake | FIPS 186-5, RFC 8422 |
secp521r1 (P-521) | 0x0019 | NIST ECC | No | Full handshake | FIPS 186-5, RFC 8422 |
ffdhe2048 – ffdhe8192 | 0x0100–0x0104 | Finite-Field DH | No | Full handshake | RFC 7919 |
secp256k1 | 0x0016 | ECC (Bitcoin curve) | No | Full handshake | Non-NIST, legacy |
tychon.cipher_negotiation.kex.* fields including quantum_safe and cnsa_20_level.
Blue rows: Server's required group is identified via passive TLS HelloRetryRequest parsing — TLS presence, cipher suite, and KEX group name are all captured without completing the handshake. Validated against all 721 ports of the Open Quantum Safe interop server.
| Port | Protocol | STARTTLS Method |
|---|---|---|
| 21 | FTP | AUTH TLS |
| 25 | SMTP | STARTTLS |
| 110 | POP3 | STLS |
| 143 | IMAP | STARTTLS |
| 389 | LDAP | STARTTLS |
| 587 | SMTP (submission) | STARTTLS |
| 3306 | MySQL | MySQL SSL handshake |
| 5432 | PostgreSQL | SSLRequest |
| 1433 | MSSQL | PRELOGIN TLS upgrade |
| 3389 | RDP | CREDSSP / TLS negotiation |
| 6379 | Redis | STARTTLS |
The scanner performs a full SSH handshake, collecting all negotiated algorithms for key exchange, host key type, symmetric encryption, and MAC. No authentication is attempted.
| Algorithm Category | Algorithm Name | PQC Readiness | Notes |
|---|---|---|---|
| Key Exchange | |||
| Key Exchange | curve25519-sha256 | transitional | Most deployed modern KEX; no PQC protection |
| Key Exchange | ecdh-sha2-nistp256/384/521 | transitional | NIST ECC; forward secrecy; no PQC |
| Key Exchange | diffie-hellman-group-exchange-sha256 | transitional | RFC 4419; group size determines classical security |
| Key Exchange | diffie-hellman-group14-sha1 | vulnerable | SHA-1 MAC; 2048-bit DH; deprecated |
| Key Exchange | diffie-hellman-group1-sha1 | broken | 768-bit DH; LOGJAM applicable; disabled by default in modern OpenSSH |
| Host Key Type | |||
| Host Key | ssh-ed25519 | transitional | EdDSA on Curve25519; modern default |
| Host Key | ecdsa-sha2-nistp256/384/521 | transitional | ECDSA; forward-secrecy for host auth |
| Host Key | rsa-sha2-256 / rsa-sha2-512 | transitional | RSA host key with SHA-2; acceptable key sizes ≥3072 |
| Host Key | ssh-rsa | vulnerable | RSA with SHA-1; deprecated RFC 8332 |
| Symmetric Encryption | |||
| Encryption | aes256-gcm@openssh.com | safe Recommended | AES-256-GCM AEAD; preferred |
| Encryption | aes128-gcm@openssh.com | safe | AES-128-GCM AEAD |
| Encryption | chacha20-poly1305@openssh.com | safe | ChaCha20-Poly1305 AEAD; preferred on CPUs without AES-NI |
| Encryption | aes256-ctr / aes192-ctr / aes128-ctr | safe | AES-CTR; requires separate MAC; acceptable |
| Encryption | aes256-cbc / aes128-cbc | transitional | AES-CBC; Lucky13 risk if no EtM MAC |
| MAC | |||
| MAC | hmac-sha2-256-etm@openssh.com | safe | Encrypt-then-MAC; preferred |
| MAC | hmac-sha2-512-etm@openssh.com | safe Recommended | Encrypt-then-MAC; preferred |
| MAC | hmac-sha1 | vulnerable | SHA-1 collision risk; deprecate |
| MAC | hmac-md5 | broken | MD5 broken; disable immediately |
An SMB2 NEGOTIATE Request is sent to 127.0.0.1:445 offering all dialects 2.0.2 through 3.1.1. The server's NEGOTIATE Response is parsed for the negotiated dialect and, for SMB 3.1.1, the NegotiateContextList encryption cipher IDs. On Windows the LanmanServer EncryptData registry DWORD is also checked.
| Detected State | Cipher / Condition | PQC Readiness | Quantum Risk | Migration Priority |
|---|---|---|---|---|
| SMBv1 response | No encryption — SMBv1 | vulnerable | Critical | Critical |
| SMB 2.0.2 / 2.1 negotiated | No encryption (SMB2 lacks native encryption) | vulnerable | High | High |
| SMB 3.0 / 3.0.2 negotiated | AES-128-CCM (only option) | safe | Low | Low |
| SMB 3.1.1 — AES-128-GCM | AES-128-GCM | safe | Low | Low |
| SMB 3.1.1 — AES-256-GCM | AES-256-GCM (preferred) | safe Recommended | Low | Low |
| SMB 3.1.1 — AES-128-CCM | AES-128-CCM | safe | Low | Low |
| SMB 3.1.1 — AES-256-CCM | AES-256-CCM | safe | Low | Low |
Note: SMB symmetric encryption (AES-GCM/CCM) is quantum-safe. The primary risk is unencrypted SMBv1/v2 traffic which can be captured and replayed. Upgrade path: enable SMB 3.1.1 with EncryptData=1 (Windows) and prefer AES-256-GCM.
No active network probe is sent (USM responses require valid credentials). On Linux/macOS /etc/snmp/snmpd.conf is parsed for createUser directives, collecting auth and priv protocol names. On Windows the SNMP service registry key is checked — Windows SNMP supports only v1/v2c (community strings, no encryption).
| Category | Protocol | USM Role | PQC Readiness | Quantum Risk |
|---|---|---|---|---|
| Authentication | ||||
| Insecure auth | MD5 | Auth | vulnerable | Medium |
| Weak auth | SHA / SHA-1 | Auth | vulnerable | Medium |
| Acceptable auth | SHA-256 | Auth | transitional | Low |
| Acceptable auth | SHA-384 | Auth | transitional | Low |
| Acceptable auth | SHA-512 | Auth | transitional | Low |
| Privacy (Encryption) | ||||
| Broken priv | DES / CBC-DES | Priv | vulnerable | Critical |
| Broken priv | 3DES / 3DES-EDE | Priv | vulnerable | Critical |
| Acceptable priv | AES-128 / CFB-AES-128 | Priv | safe | Low |
| Preferred priv | AES-256 / CFB-AES-256 | Priv | safe Recommended | Low |
| Windows SNMP Service | ||||
| SNMPv1/v2c only | Community string auth — no encryption | Both | vulnerable | Critical |
Windows reads SupportedEncryptionTypes from the Group Policy or LSA registry key (or infers the OS-version default). Linux/macOS parses /etc/krb5.conf [libdefaults] for permitted_enctypes, default_tkt_enctypes, and allow_weak_crypto. RC4-HMAC is exploitable via Kerberoasting (RFC 8429 deprecates it); DES is banned by CNSA 2.0.
| Enctype | Bitmask Bit (Windows) | Category | PQC Readiness | Quantum Risk |
|---|---|---|---|---|
DES-CBC-CRC | 0x01 | Broken / banned | vulnerable | Critical |
DES-CBC-MD5 | 0x02 | Broken / banned | vulnerable | Critical |
RC4-HMAC | 0x04 | Deprecated — Kerberoastable | vulnerable | Critical |
AES128-CTS-HMAC-SHA1-96 | 0x08 | Acceptable | transitional | Medium |
AES256-CTS-HMAC-SHA1-96 | 0x10 | Preferred | transitional | Medium |
AES256-CTS-HMAC-SHA384-192 | krb5.conf only | Preferred (SHA-384) | transitional | Medium |
arcfour-hmac / arcfour-hmac-md5 | krb5.conf only | Deprecated — RC4 alias | vulnerable | Critical |
VPN clients are detected by process name, registry presence, and configuration file paths. Tunnel protocol, cipher suite, and key exchange algorithm are extracted from config files when available.
| VPN Client | Platforms | Primary Protocol | Detection Method |
|---|---|---|---|
| Cloudflare WARP | Win / Mac / Linux | WireGuard / MASQUE | Process, Registry, Config |
| Palo Alto GlobalProtect | Win / Mac / Linux | IPSec/IKEv2, SSL/TLS | Process, Registry, Config |
| Cisco AnyConnect / Secure Client | Win / Mac / Linux | DTLS, TLS, IPSec | Process, Registry, Config |
| Fortinet FortiClient | Win / Mac / Linux | SSL-VPN, IPSec/IKEv2 | Process, Registry, Config |
| Zscaler Client Connector | Win / Mac / Linux | TLS, DTLS | Process, Registry |
| Check Point Endpoint Security | Win / Mac / Linux | IPSec, SSL-VPN | Process, Registry |
| WireGuard | Win / Mac / Linux | WireGuard (ChaCha20-Poly1305) | Process, Config (wg0.conf) |
| OpenVPN | Win / Mac / Linux | SSL/TLS over UDP/TCP | Process, Config (.ovpn) |
| Tailscale | Win / Mac / Linux | WireGuard | Process, Config |
| Ivanti Pulse Secure | Win / Mac | SSL-VPN | Process, Registry |
| NordVPN / NordLayer | Win / Mac / Linux | NordLynx (WireGuard), OpenVPN | Process, Config |
| Perimeter81 / Check Point Harmony | Win / Mac / Linux | WireGuard, IPSec | Process, Config |
| ProtonVPN | Win / Mac / Linux | WireGuard, OpenVPN, IKEv2 | Process, Config |
| ExpressVPN | Win / Mac / Linux | Lightway (wolfSSL), OpenVPN | Process, Config |
| Surfshark | Win / Mac / Linux | WireGuard, OpenVPN, IKEv2 | Process, Config |
| Windows Built-in VPN | Win | IKEv2, L2TP/IPSec, PPTP, SSTP | Registry, WMI |
| SoftEther VPN | Win / Linux | SSL-VPN, L2TP, OpenVPN | Process, Config |
| Twingate | Win / Mac / Linux | WireGuard | Process |
| CyberGhost | Win / Mac | WireGuard, OpenVPN, IKEv2 | Process, Registry |
| Implementation | Platforms | Config File | IKE Versions |
|---|---|---|---|
| Windows Built-in IPSec | Windows | Registry / PowerShell | IKEv1, IKEv2 |
| strongSwan | Win / Mac / Linux | ipsec.conf, swanctl.conf | IKEv1, IKEv2 |
| libreswan | Linux | ipsec.conf | IKEv1, IKEv2 |
| openswan | Linux (legacy) | ipsec.conf | IKEv1 |
| Linux Kernel IPSec (xfrm) | Linux | iproute2 / netstat | IKEv1, IKEv2 |
Fields captured: protocol (IKEv1/IKEv2), mode (tunnel/transport), authentication method (PSK/certificate/EAP), encryption algorithm, integrity algorithm, DH group, tunnel endpoint addresses.
| Cipher Suite | Key Length | CNSA 2.0 | PQC Readiness | Score |
|---|---|---|---|---|
GCM-AES-256 | 256-bit | Yes | safe | 80 / 100 |
GCM-AES-256-XPN | 256-bit | Yes | safe | 80 / 100 |
GCM-AES-128 | 128-bit | No (CNSA 2.0 requires 256) | transitional | 50 / 100 |
GCM-AES-128-XPN | 128-bit | No | transitional | 50 / 100 |
| Unknown / none | — | No | vulnerable | 20 / 100 |
Additional flags assessed: encrypt (authentication-only vs. confidentiality), replay_protect (replay window size), MKA (802.1X key agreement) enabled, validate: strict/check/disabled.
IBM MQ uses TLS at the TCP layer — the TLS handshake completes before any MQ protocol bytes are exchanged. On port 1414 (standard listener), a 28-byte MQTSH probe is sent after TLS fails; a TSH signature in the response confirms MQ presence without TLS. Port 1415 (dedicated SSL listener) and port 9443 (MQ REST API) receive a direct TLS ClientHello. TLS-protected MQ channels are also detected by the standard TLS probe and labeled ibmmq+tls.
| Configuration | Port | Detection Method | PQC Readiness | Quantum Risk | Action |
|---|---|---|---|---|---|
| MQ channel with TLS 1.3 + PQC hybrid KEX | 1414 / 1415 | TLS probe → ibmmq+tls | transitional | Medium | Upgrade KEX to X25519MLKEM768 when IBM MQ supports it |
| MQ channel with TLS 1.2 (ECDHE-AES-GCM) | 1414 / 1415 | TLS probe → ibmmq+tls | transitional | High | Upgrade to TLS 1.3; add PQC hybrid KEX |
| MQ channel with TLS 1.0 / 1.1 or weak cipher | 1414 / 1415 | TLS probe → ibmmq+tls | vulnerable | Critical | Disable TLS 1.0/1.1; enforce TLS 1.2+ with AEAD ciphers |
| MQ channel — no TLS (SSLCIPH not set) | 1414 | MQTSH binary probe | vulnerable | Critical | Set SSLCIPH on all channels; enforce SSLPEER; require TLS 1.2+ |
MQTSH probe: 28-byte Transmission Segment Header (StrucId="TSH ", SegmentType=INITIAL). IBM MQ responds with a recognizable error frame when TLS is absent, exposing the channel without authentication or encryption. Common IBM MQ process names monitored: amqrmppa, runmqlsr, amqzmgr0.
Local NFS mounts and server exports are parsed from the OS mount table — no network probing required for local detection. For remote scans, port 2049 receives a direct TLS ClientHello (RFC 9289 NFS-over-TLS) first; if TLS fails, a 40-byte ONC RPC NULL call (XID 0x12345678, Program 100003 / NFS, Procedure 0) confirms NFS presence. Security flavor is classified from mount options or export configuration.
Security Flavor (sec=) | Encrypted | Auth | PQC Readiness | Quantum Risk | Action |
|---|---|---|---|---|---|
tls — NFS-over-TLS (RFC 9289) | Yes | TLS certificate | transitional | Medium | Upgrade TLS cipher to 1.3 with PQC hybrid KEX |
krb5p — Kerberos privacy | Yes (AES256-CTS) | Kerberos | transitional | Medium | Symmetric AES is quantum-safe; Kerberos session KEX is not — await PQC Kerberos RFC |
krb5i — Kerberos integrity | No (data plaintext) | Kerberos + HMAC | vulnerable | High | Upgrade to krb5p for data encryption or migrate to NFS-over-TLS |
krb5 — Kerberos auth only | No | Kerberos | vulnerable | High | Upgrade to krb5p for data encryption or migrate to NFS-over-TLS |
sys — AUTH_SYS (UID/GID) | No | None (spoofable) | vulnerable | Critical | Replace with krb5p or NFS-over-TLS immediately; AUTH_SYS provides no real authentication |
| No security (NFSv2 / v3, no sec option) | No | None | vulnerable | Critical | Upgrade to NFSv4.1+ with Kerberos or NFS-over-TLS |
NFS version detected from mount options (vers= or nfsvers=). Linux server exports are read from /proc/fs/nfsd/exports; client mounts from /proc/mounts. macOS mount table parsed via /sbin/mount. Windows NFS stub returns no results (Windows NFS client usage is rare in enterprise environments). Remote detection: port 2049 labeled nfs+tls when TLS succeeds.
DTLS is TLS over UDP. The active scanner probes DTLS 1.2 (RFC 6347) on well-known VoIP, gaming, IoT, and VPN ports. The passive sniffer parses DTLS record-layer headers from SPAN/TAP traffic without decryption, extracting version, cipher suite, and epoch. Common ports: 443 (QUIC), 4433 (test), 5349 (STUN/TURN over TLS), 5061 (SIP-TLS), 10000 (Jitsi/WebRTC).
| Version | Status | PQC Readiness | Notes |
|---|---|---|---|
DTLS 1.3 | Recommended | transitional | RFC 9147; AEAD only; supports PQC hybrid KEX groups (same as TLS 1.3) |
DTLS 1.2 | Acceptable | transitional | RFC 6347; AEAD suites acceptable; CBC suites flagged; replay protection via epoch+sequence |
DTLS 1.0 | Deprecated | vulnerable | Based on TLS 1.1; SHA-1 MACs; disable |
Cisco AnyConnect, Zscaler, and WebRTC all rely on DTLS for low-latency encrypted transport. The scanner probes DTLS by sending a DTLS 1.2 ClientHello fragment over UDP and parsing any valid DTLS ServerHello or Alert response.
QUIC (RFC 9000) is a UDP-based multiplexed transport that carries TLS 1.3 handshake packets in Long Header Initial packets. The passive sniffer parses QUIC Initial packets to extract the ClientHello embedded inside CRYPTO frames, revealing the offered cipher suites and PQC key exchange groups — without decryption. HTTP/3 (RFC 9114) runs exclusively over QUIC. Active probing of QUIC is not performed by the scanner (QUIC requires a full implementation stack).
| QUIC Version | TLS Embedded | PQC Readiness | Notes |
|---|---|---|---|
| QUIC v1 (RFC 9000) | TLS 1.3 only | transitional | Initial packets are plaintext (salted); handshake bytes extractable passively |
| QUIC v2 (RFC 9369) | TLS 1.3 only | transitional | Different version salt; sniffer handles both v1 and v2 |
| QUIC draft-29 | TLS 1.3 only | transitional | Pre-RFC draft used by older Chromium; sniffer distinguishes from RFC version |
| gQUIC (Google legacy) | Custom QUIC crypto | vulnerable | Not RFC-compliant; proprietary handshake; detected by version tag pattern |
RADIUS (RFC 2865) uses a shared-secret MD5-based authenticator — classically weak, quantum-catastrophic. RADIUS over TLS (RadSec, RFC 6614) and RADIUS over DTLS (RFC 7360) provide transport encryption. The passive sniffer distinguishes cleartext RADIUS from RadSec by protocol and port, and parses EAP-TLS / EAP-TTLS handshakes from Access-Request attributes to extract the inner TLS cipher suite.
| Transport Mode | Port(s) | Encryption | PQC Readiness | Quantum Risk |
|---|---|---|---|---|
| Cleartext RADIUS (UDP) | 1812, 1813 | MD5 authenticator only | vulnerable | Critical |
| RadSec — RADIUS/TLS (TCP) | 2083 | TLS 1.2 / 1.3 | transitional | High |
| RADIUS/DTLS (UDP) | 2083 | DTLS 1.2 / 1.3 | transitional | High |
| EAP-TLS inner tunnel | 1812 (attribute) | TLS inside RADIUS AVP | transitional | High |
| EAP-MD5 / CHAP | 1812 (attribute) | MD5 challenge only | vulnerable | Critical |
TACACS+ (Cisco proprietary, RFC 8907) obfuscates its payload using MD5 XOR with a shared secret — this provides confidentiality against passive capture but is not encryption and is trivially reversible with the shared secret. TACACS+ over TLS (RFC 9105) wraps the protocol in TLS 1.3. The passive sniffer identifies cleartext TACACS+ frames by the 12-byte header magic and detects TLS-wrapped TACACS+ by the TLS record on port 49.
| Transport | Encryption | PQC Readiness | Quantum Risk | Action |
|---|---|---|---|---|
| Cleartext TACACS+ (MD5 obfuscation) | MD5 XOR only — not encryption | vulnerable | Critical | Migrate to TACACS+ over TLS (RFC 9105) |
| TACACS+ over TLS (RFC 9105) | TLS 1.3 required | transitional | High | Add PQC hybrid KEX when supported by Cisco/TACACS+ server |
NTPv4 (RFC 5905) has no built-in encryption. NTS (RFC 8915) adds authenticated time synchronization using a TLS 1.3 Key Exchange (NTS-KE on TCP port 4460) followed by AEAD-authenticated NTP packets over UDP 123. The passive sniffer identifies NTP packets by version and mode fields and detects NTS-KE TLS sessions by port and ALPN extension (ntske/1).
| Protocol | Authentication | Confidentiality | PQC Readiness | Quantum Risk |
|---|---|---|---|---|
| NTPv4 — no auth | None | None | vulnerable | Critical |
| NTPv4 — symmetric key (MD5/SHA-1) | MD5 or SHA-1 HMAC | None | vulnerable | High |
| NTPv4 — symmetric key (SHA-256) | SHA-256 HMAC | None | transitional | Medium |
| NTS — NTS-KE (TLS 1.3) + AEAD NTP | TLS certificate + AEAD | AEAD-authenticated (not encrypted) | transitional | High |
Time tampering enables HNDL (Harvest Now Decrypt Later) by shifting timestamps on certificate revocation or key rotation events. NTS is the recommended migration path; NTS-KE cipher suite is captured by the passive sniffer from the TLS ClientHello ALPN extension.
WireGuard (RFC-like, in-kernel since Linux 5.6) uses a fixed, opinionated crypto stack: Noise_IKpsk2 handshake, ChaCha20-Poly1305 for data, Curve25519 for key agreement, BLAKE2s for hashing, and SipHash for cookie MAC. The passive sniffer identifies WireGuard handshake initiation packets by the 4-byte type field (0x00000001) and 32-byte ephemeral public key prefix at a fixed offset in the UDP payload.
| Component | Algorithm | PQC Readiness | Quantum Risk |
|---|---|---|---|
| Key Agreement (handshake) | Curve25519 (X25519) | transitional | High |
| Symmetric Encryption | ChaCha20-Poly1305 | safe | Low |
| Hash / KDF | BLAKE2s | safe | Low |
| Cookie MAC | SipHash-2-4 | safe | Low |
| Pre-shared key (optional) | PSK XOR with Curve25519 output | safe | Low |
Modern data-center and cloud networks use overlay encapsulation for east-west traffic. The passive sniffer decapsulates VXLAN (RFC 7348), GENEVE (RFC 8926), GRE (RFC 2784), and ERSPAN (Cisco) frames and analyzes the inner payload for TLS, SSH, QUIC, and other protocol patterns. This enables visibility into VM-to-VM encrypted and unencrypted traffic without agent deployment on each guest.
| Encapsulation | Port / Protocol | Inner Payload Analysis | Encryption (outer) | Notes |
|---|---|---|---|---|
| VXLAN (RFC 7348) | UDP 4789 | Full inner Ethernet frame parsed | None (cleartext UDP) | Widely used in AWS VPC, Azure VNet, OpenStack Neutron |
| GENEVE (RFC 8926) | UDP 6081 | Full inner Ethernet frame + TLV options | None (cleartext UDP) or IPSec | Used by OVN, Hyper-V, NSX-T |
| GRE (RFC 2784) | IP protocol 47 | Inner IP packet parsed | None (cleartext) | Used in MPLS, site-to-site tunnels; no native encryption |
| ERSPAN (Cisco) | GRE type 0x88BE / 0x22EB | Mirrored inner frame | None (mirror traffic) | Used for network taps; sniffer accepts ERSPAN input directly |
Outer encapsulation itself provides no encryption — inner traffic analysis reveals cleartext protocols (HTTP, Telnet, FTP) as well as TLS/SSH. The sniffer recursively parses up to 3 levels of encapsulation to find the innermost protocol.
Mutual TLS requires the client to present a certificate in addition to the server. The scanner detects mTLS by observing whether the server sends a TLS CertificateRequest message during the handshake. If detected, the requires_client_cert field is set in the event. This is common for Elastic Agent (port 6789), internal service meshes (Istio, Linkerd), and zero-trust API gateways.
| Field | Type | Description |
|---|---|---|
requires_client_cert | boolean | true if server sent TLS CertificateRequest during handshake |
tls_version | string | TLS version negotiated (1.2 or 1.3) |
cipher_suite | string | Negotiated cipher suite name |
key_exchange_group | string | Key exchange group (e.g. X25519MLKEM768) |
When TLS and SSH probes fail on a port, the scanner falls back to a library of 44+ protocol-specific probes to determine if the service is running in cleartext. Each probe sends a minimal protocol-appropriate request and matches the response against known signatures. A positive match produces a tychon.plaintext event flagging the protocol, encryption state, and compliance references.
| Protocol | Default Port | Probe Method | Risk |
|---|---|---|---|
| HTTP | 80, 8080, 8000, 8008 | GET / HTTP/1.0 | Critical |
| FTP | 21 | TCP banner / FEAT | Critical |
| SMTP | 25, 587 | EHLO probe | Critical |
| POP3 | 110 | +OK banner | Critical |
| IMAP | 143 | * OK IMAP banner | Critical |
| Telnet | 23 | IAC DO TERMINAL | Critical |
| Finger | 79 | CRLF probe | Critical |
| NNTP | 119 | 200/201 banner | Critical |
| IRC | 6667 | NICK / USER probe | Critical |
| LDAP | 389 | BER bind request | Critical |
| RDP | 3389 | COTP / X.224 probe | High |
| VNC | 5900, 5901 | RFB handshake | Critical |
| MySQL | 3306 | Protocol v10 greeting | Critical |
| PostgreSQL | 5432 | Startup message | Critical |
| Redis | 6379 | PING command | Critical |
| MongoDB | 27017 | isMaster wire probe | Critical |
| Memcached | 11211 | stats command | Critical |
| Elasticsearch | 9200 | HTTP /_cluster/health | Critical |
| Cassandra | 9042 | CQL OPTIONS frame | Critical |
| ZooKeeper | 2181 | Four-letter ruok | Critical |
| Kafka | 9092 | API Versions request v0 | Critical |
| RabbitMQ / AMQP | 5672 | AMQP 0-9-1 header probe | Critical |
| etcd | 2379 | HTTP /version | Critical |
| Consul | 8500 | HTTP /v1/status/leader | Critical |
| CouchDB | 5984 | HTTP / (JSON) | Critical |
| InfluxDB | 8086 | HTTP /ping | Critical |
| Docker daemon | 2375 | HTTP /version | Critical |
| Kubernetes API (unauth) | 8080 | HTTP /healthz | Critical |
| SNMP (generic) | 161 UDP | GetRequest v1/v2c | Critical |
| Syslog | 514 UDP/TCP | RFC 3164 PRI probe | High |
| rsync | 873 | @RSYNCD header | Critical |
| TFTP | 69 UDP | RRQ probe | Critical |
| NFS ONC RPC | 2049 | NULL call RPC | Critical |
| MSSQL | 1433 | PRELOGIN packet | High |
| Oracle TNS | 1521 | TNS CONNECT packet | Critical |
| X11 Display | 6000 | Client greeting | Critical |
| Printer (JetDirect) | 9100 | PJL INFO probe | High |
| SIP (VoIP signaling) | 5060 | OPTIONS message | High |
| RTSP (streaming) | 554 | OPTIONS * RTSP/1.0 | High |
| HTTP generic (any port) | Various | GET / fallback on any open port | Critical |
Output fields: service_name, protocol, encryption_state (plaintext/encrypted/unknown), encryption_detail, is_vulnerable, compliance_refs, recommendations. Events are emitted only when a cleartext service is positively identified — TLS/SSH services are not re-emitted here.
The NTLM authentication level is read from the Windows Local Security Authority registry key. LmCompatibilityLevel controls whether the system sends LM, NTLMv1, or NTLMv2 responses. NTLMv1 uses DES encryption and MD4 hashing — classically broken and exploitable via pass-the-hash and relay attacks. NTLMv2 is the minimum acceptable standard.
| LmCompatibilityLevel | Protocol Sent | PQC Readiness | Quantum Risk |
|---|---|---|---|
| 0 — LM & NTLM | LM + NTLMv1 | vulnerable | Critical |
| 1 — NTLMv1 with session security | NTLMv1 | vulnerable | Critical |
| 2 — NTLMv2 (send only) | NTLMv2 send; accepts LM/NTLMv1 responses | vulnerable | High |
| 3 — NTLMv2 only | NTLMv2 only | transitional | Medium |
| 4 — NTLMv2, refuse LM | NTLMv2; DC refuses LM | transitional | Medium |
| 5 — NTLMv2, refuse LM + NTLMv1 | NTLMv2 only (strictest) | transitional | Medium |
NTLM is inherently vulnerable to relay attacks regardless of version. Migration to Kerberos with AES is strongly recommended. NTLM is detected via registry-only (no network probe). Events emitted as part of tychon.non_tls_cipher with protocol: ntlm.
FIPS 140-2/3 mode restricts the OS and cryptographic modules to NIST-approved algorithms. The scanner detects FIPS enforcement state via platform-native APIs: Windows registry HKLM\System\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy\Enabled, Linux /proc/sys/crypto/fips_enabled, and macOS security framework APIs. FIPS mode is reported in tychon.quantum_readiness as a positive compliance indicator.
| Platform | Detection Method | Key Checked |
|---|---|---|
| Windows | Registry DWORD | HKLM\System\...\FipsAlgorithmPolicy\Enabled = 1 |
| Linux | Kernel sysctl | /proc/sys/crypto/fips_enabled = 1 |
| macOS | Security framework API | CCCryptorGetFIPSStatus() or System Policy plist |
FIPS mode does not itself provide PQC protection — it restricts algorithms to approved NIST primitives. FIPS 140-3 (which includes modules certified for ML-KEM/ML-DSA) is the path to PQC-compliant cryptographic enforcement.
AirPlay 2 uses a proprietary authentication layer (SRP-based pairing) over TCP and encrypts media via AES-128-CTR derived from the pairing session. The scanner probes port 7000 (RTSP-based AirPlay control channel) and identifies AirPlay services by process name, mDNS _airplay._tcp advertisement, and HTTP response header patterns. Encryption quality depends on pairing PIN enforcement and network isolation.
| Component | Mechanism | PQC Readiness | Quantum Risk |
|---|---|---|---|
| Pairing Authentication | SRP-6a (password-authenticated) | transitional | High |
| Media Encryption | AES-128-CTR | safe | Low |
| Session Key Exchange | SRP-derived (no perfect forward secrecy) | transitional | Medium |
| Unauthenticated AirPlay (no PIN) | No authentication | vulnerable | Critical |
The scanner reads the active wireless profile from the OS to determine the 802.11 authentication and encryption settings. On Windows it reads WLAN profile XML via the WlanGetProfileList API. On Linux it parses wpa_supplicant.conf or NetworkManager config files. On macOS it uses CoreWLAN framework APIs to query the active SSID and security type.
| Protocol | Authentication | Encryption | PQC Readiness | Quantum Risk |
|---|---|---|---|---|
| WEP | Open / Shared Key | RC4 (40/104-bit) | vulnerable | Critical |
| WPA (TKIP) | PSK / 802.1X | RC4-TKIP | vulnerable | Critical |
| WPA2-Personal (CCMP) | PSK (4-way handshake) | AES-128-CCMP | transitional | Medium |
| WPA2-Enterprise (EAP) | 802.1X + EAP-TLS / PEAP | AES-128-CCMP | transitional | High |
| WPA3-Personal (SAE) | SAE (Dragonfly handshake) | AES-128/256-CCMP | transitional | Medium |
| WPA3-Enterprise (GCMP-256) | 802.1X + EAP-TLS | AES-256-GCMP | transitional | Medium |
| Open / No encryption | None | None | vulnerable | Critical |
OPC-UA (IEC 62541) is the dominant industrial automation protocol for factory-floor communication. The scanner probes port 4840 (unencrypted) and 4843 (TLS) for OPC-UA Binary protocol HEL messages. It also detects OPC-UA over WebSockets (port 443/8443 via HTTP Upgrade). The binary protocol includes a built-in Security Mode: None, Sign, or SignAndEncrypt.
| Security Mode | Encryption | PQC Readiness | Quantum Risk |
|---|---|---|---|
| None | No encryption, no signing | vulnerable | Critical |
| Sign | RSA-SHA256 signature; no encryption | vulnerable | High |
| SignAndEncrypt (Basic256) | AES-128-CBC + RSA-1024 | vulnerable | High |
| SignAndEncrypt (Basic256Sha256) | AES-128-CBC + RSA-2048 | transitional | High |
| SignAndEncrypt (Aes128-Sha256-RsaOaep) | AES-128-CTR + RSA-2048 OAEP | transitional | High |
| SignAndEncrypt (Aes256-Sha256-RsaPss) | AES-256-CTR + RSA-2048 PSS | transitional | Medium |
| OPC-UA over TLS (port 4843) | TLS 1.2 / 1.3 | transitional | High |
Operational Technology (OT) protocols used in utilities, SCADA, and substation automation have security extensions that TQC detects and assesses.
| SA Version | Authentication | PQC Readiness | Quantum Risk |
|---|---|---|---|
| DNP3 (no SA) | None — plaintext protocol | vulnerable | Critical |
| DNP3-SA v2 | HMAC-SHA-1 challenge-response | vulnerable | High |
| DNP3-SA v5 | HMAC-SHA-256 + AES-GMAC; ECDSA/RSA update keys | transitional | High |
| IEC 62351 Part | Protocol | Security Method | PQC Readiness |
|---|---|---|---|
| Part 3 (TCP/IP) | MMS / IEC 60870-5-104 over TCP | TLS 1.2+ | transitional |
| Part 4 (MMS) | Manufacturing Message Spec | TLS + X.509 certificates | transitional |
| Part 5 (IEC 60870-5) | SCADA serial/network | HMAC-SHA-256 | transitional |
| Part 6 (IEC 61850 GOOSE/SV) | Multicast substation msgs | HMAC-SHA-256 / GMAC | transitional |
The Noise Protocol Framework (Noise Spec v34) is a cryptographic framework for building secure handshake protocols. It underlies WireGuard, Lightning Network (BOLT #8), and various P2P messaging apps. The scanner detects Noise-based services via process name, config file patterns, and TCP port 9735 (Lightning Network). Lightning Network uses Noise_XK with secp256k1 for authentication.
| Component | Default Algorithm | PQC Readiness | Quantum Risk |
|---|---|---|---|
| DH Function | Curve25519 (WireGuard) / secp256k1 (Lightning) | transitional | High |
| Symmetric Cipher | ChaCha20-Poly1305 or AES-256-GCM | safe | Low |
| Hash Function | SHA-256 or BLAKE2s | safe | Low |
The Signal Protocol (used by Signal, WhatsApp, Facebook Messenger) and the IETF MLS (Messaging Layer Security, RFC 9420) protocol are end-to-end encrypted messaging protocols. The scanner detects these via installed application inventory and process detection. These are noted for their end-to-end encryption posture — neither currently has PQC-capable deployments in production, though Signal has a PQXDH experimental mode (X25519 + Kyber768).
| Protocol | Key Agreement | Encryption | PQC Readiness |
|---|---|---|---|
| Signal Protocol (X3DH + Double Ratchet) | X25519 + Ed25519 | AES-256-CBC + HMAC-SHA256 | transitional |
| Signal PQXDH (experimental) | X25519 + Kyber-768 | AES-256-GCM | safe |
| MLS (RFC 9420) | X25519 / P-256 (TreeKEM) | AES-128/256-GCM | transitional |
Tor (The Onion Router) is detected by process name (tor, tor.exe), SOCKS proxy port 9050/9150, installed application fingerprinting, and Tor Browser bundle directory patterns. Tor uses a custom onion routing protocol with AES-128-CTR for relay encryption and Curve25519/ed25519 for circuit construction — not PQC-capable. In enterprise environments, Tor presence is typically a policy violation flag.
| Component | Algorithm | PQC Readiness | Notes |
|---|---|---|---|
| Circuit construction (ntor) | Curve25519 | transitional | ntor v2 with ML-KEM proposed but not widely deployed |
| Relay cell encryption | AES-128-CTR | safe | Symmetric — quantum-safe |
| Hidden service (v3 .onion) | Ed25519 + X25519 | transitional | v3 uses SHA3/BLAKE2; still classically-based ECC |
ZRTP (RFC 6189) is a key agreement protocol for securing RTP media streams without a PKI. It uses DH (Curve25519, DH3k, EC25519) to derive SRTP keys for AES encryption. The scanner detects ZRTP via SIP/VoIP client process names and UDP media stream signatures. ZRTP is commonly used by Linphone, Jitsi, Signal Desktop, and government secure voice systems.
| ZRTP Key Agreement | Algorithm | PQC Readiness | Quantum Risk |
|---|---|---|---|
| Curve25519 | X25519 ECDH | transitional | High |
| DH3k (3072-bit) | FFDH-3072 | transitional | High |
| SRTP cipher (AES-128-CM) | AES-128-CTR | safe | Low |
| SRTP cipher (AES-256-CM) | AES-256-CTR | safe | Low |
WebRTC mandates DTLS-SRTP (RFC 5764) for all media encryption. The DTLS handshake occurs on ephemeral UDP ports negotiated via SDP; the scanner probes these on common WebRTC port ranges (49152–65535) after detecting browser/conferencing app processes. DTLS establishes the master secret, then SRTP (RFC 3711) encrypts the media stream using AES-128-CM or AES-256-CM.
| Component | Protocol | PQC Readiness | Quantum Risk |
|---|---|---|---|
| Key Exchange | DTLS 1.2 with ECDHE (P-256 / X25519) | transitional | High |
| Media Encryption | SRTP AES-128-CM-HMAC-SHA1-80 | safe | Low |
| Fingerprint Auth | SHA-256 certificate fingerprint (SDP) | transitional | Medium |
| ICE (transport) | STUN/TURN over TLS | transitional | High |
S/MIME (RFC 8551) provides email encryption and digital signatures using X.509 certificates and CMS (Cryptographic Message Syntax). The scanner detects S/MIME usage via filesystem certificate scan (looking for S/MIME-specific EKU: id-kp-emailProtection), mail client profile files (Outlook profile registry, Thunderbird profile), and process detection. S/MIME certificates found on disk are included in the standard certificate inventory.
| CMS Algorithm | Purpose | PQC Readiness | Quantum Risk |
|---|---|---|---|
| RSA-OAEP / RSA-PKCS1v15 (key wrap) | Message encryption | transitional | High |
| AES-128/256-CBC (content encryption) | Message content | safe | Low |
| ECDH key agreement (RFC 5753) | Message encryption | transitional | High |
| RSA-SHA256 / ECDSA / Ed25519 (signature) | Digital signature | transitional | High |
| 3DES-CBC (legacy) | Legacy content encryption | vulnerable | Critical |
OpenPGP (RFC 4880, RFC 9580) keys are detected by scanning for GnuPG keyring files in standard locations. Public and secret key packets are parsed for key algorithm, size, and creation date. OpenPGP v6 (RFC 9580) adds support for ML-KEM and ML-DSA as per NIST FIPS 203/204, but v4 keys (the overwhelming majority) use RSA or Curve25519.
| Key Algorithm | OpenPGP Version | PQC Readiness | Quantum Risk |
|---|---|---|---|
| RSA (encrypt + sign) | v4 (RFC 4880) | transitional | High |
| DSA + Elgamal (legacy) | v4 (RFC 4880) | vulnerable | Critical |
| ECDSA / EdDSA (Curve25519) | v4 (RFC 4880) | transitional | High |
| ML-KEM-768 + X25519 (hybrid) | v6 (RFC 9580) | safe | Low |
| ML-DSA-65 (Dilithium3) | v6 (RFC 9580) | safe | Low |
OpenVPN wraps TLS in its own framing over UDP (default) or TCP on port 1194. The scanner probes port 1194 for the OpenVPN control channel signature (HMAC-authenticated TLS record) and parses .ovpn config files for cipher, auth, tls-cipher, tls-auth, and tls-crypt directives. TLS-auth and tls-crypt provide HMAC authentication of the control channel before the TLS handshake begins.
| Directive | Algorithm | PQC Readiness | Quantum Risk |
|---|---|---|---|
cipher AES-256-GCM | AES-256-GCM data channel | safe | Low |
cipher AES-128-CBC | AES-128-CBC data channel | transitional | Medium |
cipher BF-CBC | Blowfish-CBC (64-bit) | vulnerable | Critical |
tls-cipher ECDHE+AES256+SHA256 | TLS control channel | transitional | High |
tls-crypt (pre-TLS HMAC) | HMAC-SHA256 pre-authentication | transitional | Medium |
Beyond IKE negotiation, the scanner reads the specific ESP and AH transform sets in active Security Associations (SA). This captures the actual encryption and integrity algorithms used for packet-level protection, which may differ from what IKE advertised.
| Transform | Algorithm | PQC Readiness | Quantum Risk |
|---|---|---|---|
| ESP — AES-256-GCM (AEAD) | AES-256-GCM | safe | Low |
| ESP — AES-128-GCM (AEAD) | AES-128-GCM | safe | Low |
| ESP — AES-256-CBC + HMAC-SHA256 | AES-256-CBC | transitional | Medium |
| ESP — AES-128-CBC + HMAC-SHA1 | AES-128-CBC | transitional | Medium |
| ESP — 3DES-CBC + HMAC-SHA1 | 3DES-CBC | vulnerable | Critical |
| AH — HMAC-SHA256 | SHA-256 authentication only, no encryption | transitional | Medium |
| AH — HMAC-SHA1 / MD5 | SHA-1 or MD5 authentication | vulnerable | High |
| NULL encryption (ESP-null) | Authentication only — no encryption | vulnerable | Critical |
IBM BigFix (now HCL BigFix) uses a proprietary protocol over TCP port 52311 for agent-to-server communication. Relay and root server connections can be TLS-encrypted, but older deployments use the unencrypted BES protocol with SHA-1 signed content. The scanner detects BigFix by process name (BESClient, BESRootServer), probes port 52311 for the BES protocol handshake signature, and parses the client configuration file.
| Connection Mode | Encryption | PQC Readiness | Quantum Risk |
|---|---|---|---|
| BES plaintext (legacy) | SHA-1 signed content, no transport encryption | vulnerable | Critical |
| BES over TLS 1.2 | TLS 1.2 (ECDHE-AES) | transitional | High |
| BES over TLS 1.3 | TLS 1.3 (AEAD suites) | transitional | High |
| Key Algorithm | Key Size / Curve | PQC Readiness | Quantum Risk | Migration Priority |
|---|---|---|---|---|
| RSA | < 2048 bits | vulnerable | Critical | Critical |
| RSA | 2048 bits | transitional | High | High |
| RSA | 3072 / 4096+ bits | transitional | High | Medium |
| ECDSA | P-256 / P-384 / P-521 | transitional | High | High |
| ED25519 | 255 bits (Curve25519) | transitional | Medium | Medium |
| DSA | 1024 / 2048 bits | vulnerable | Critical | Critical |
Cert metadata captured: subject, issuer, serial, not-before, not-after, SHA-1 and SHA-256 fingerprints, key usage / EKU, SANs, chain depth, CRL/OCSP endpoints, FIPS 140 certification flag, signature algorithm.
| Keystore Format | Extension(s) | Platform | Encryption Assessed |
|---|---|---|---|
| JKS — Java KeyStore | .jks | All (Java) | PBEWithSHA1AndDESede (weak), AES-256 (strong) |
| PKCS#12 | .p12, .pfx | All | PBKDF2, PKCS12KDF; AES-256-CBC; MAC SHA-256 |
| PEM | .pem, .crt, .cer, .key | All | AES-128/256-CBC passphrase encryption detected |
| DER | .der, .cer | All | Binary format; no container encryption |
| Windows Certificate Store | Registry | Windows | CNG encryption for private keys |
| macOS Keychain | Security framework | macOS | Secure Enclave or system keychain encryption |
| Linux NSS database | cert8.db, cert9.db | Linux | SQLite3 / Berkeley DB; PBKDF2 |
| Linux system CA store | /etc/ssl/certs/, /var/lib/ca-certificates/ | Linux | Public roots only; no private key material |
The Security framework SecItemCopyMatching(kSecClassIdentity) enumerates all certificate+private key pairs in the process's keychain search list (login + System keychains). Private key bytes never leave securityd or the Secure Enclave — only metadata is accessed via SecKeyCopyAttributes. Common identities include Microsoft AAD, GlobalProtect VPN, and MDM enrollment certificates.
| Key Type | Bits / Curve | PQC Readiness | Quantum Risk | Migration Priority |
|---|---|---|---|---|
| RSA | < 2048 | vulnerable | Critical | Critical |
| RSA | 2048 | transitional | High | High |
| RSA | 3072 / 4096+ | transitional | High | Medium |
| EC (ECDSA) | P-256 / P-384 / P-521 | transitional | High | High |
| ED25519 | 255-bit Curve25519 | transitional | Medium | Medium |
| Library | Min PQC-Capable Version | PQC Status | PQC Algorithms | Notes |
|---|---|---|---|---|
| OpenSSL | 3.5.0+ (Apr 2025) | PQC Capable | ML-KEM, ML-DSA, SLH-DSA (FIPS 140-3) | Via built-in FIPS provider |
| OpenSSL | 3.0 – 3.4 | Partial | ML-KEM (oqs-provider only) | OQS provider required |
| OpenSSL | < 3.0 | Not Capable | None | EOL; upgrade required |
| LibreSSL | — | Not Capable | None | OpenSSL 1.x API compatibility fork |
| BoringSSL (Google) | 2023+ | Partial | X25519Kyber768 hybrid (TLS only) | No standalone PQC API |
| NSS (Mozilla) | 3.94+ (Oct 2024) | Partial | ML-KEM-768 hybrid (TLS 1.3) | IETF draft spec; Firefox 132+ |
| Mbed TLS | 3.6.0+ | Partial | ML-KEM (experimental) | Requires compile-time flag; not production-ready |
| wolfSSL | 5.7.0+ | Partial | ML-KEM, ML-DSA, SLH-DSA | Compile-time flags required; FIPS module is paid |
| Botan | 3.4.0+ | PQC Capable | ML-KEM, ML-DSA, SLH-DSA (finalized) | Full NIST FIPS 203/204/205 implementation |
| Botan | 3.0 – 3.3 | Partial | Draft Kyber / Dilithium | Pre-standardization drafts |
| GnuTLS | — | Not Capable | None | No mainline PQC as of 2026 |
| Apple Security (CommonCrypto, CoreTLS, CryptoKit) | — | Not Capable | None | No public PQC APIs as of 2026 |
| Windows SChannel / CNG / CAPI | — | Not Capable | None | No native PQC as of 2026; Preview available in Insider |
| Java Cryptographic Providers (detected via JVM memory scan) | ||||
| BouncyCastle (Java) | 1.77+ (beta) | Partial | ML-KEM, ML-DSA, SLH-DSA (beta) | Most widely deployed Java PQC library |
| Bouncy Castle FIPS Java | 2.0.0+ | PQC Capable | ML-KEM, ML-DSA, SLH-DSA (FIPS 140-3) | FIPS 140-3 validated PQC; separate artifact from BC core |
| SunJCE (Oracle JDK built-in) | JDK 21+ (preview) | Not Capable | None (JEP 452 KEM API only) | KEM API skeleton added; no PQC implementation bundled |
| Amazon Corretto Crypto Provider (ACCP) | 2.3.0+ | Not Capable | None | AWS-native JCE provider; relies on AWS-LC for non-PQC ops |
| IBM IBMJCE / IBMJCEFIPS | IBM JDK 11+ | Not Capable | None | IBM JDK bundled provider; no PQC support announced |
| Conscrypt (Google / Android) | 2.5.0+ | Not Capable | None (BoringSSL subset) | Used in Android apps on desktops via Conscrypt JCE provider |
| Tink (Google) | 1.14+ | Partial | ML-KEM-768 (experimental) | High-level crypto library; PQC added in 1.14 experimental APIs |
| Jasypt / PKCS11 Bridge | — | Not Capable | None | Wrapper libraries; PQC depends on underlying JCE provider |
Private key bytes are never read from memory. Library detection uses shared-object paths, version strings, and module signatures found in process memory maps. Java crypto libraries are detected via class loading patterns in the JVM heap.
The quantum readiness score is a composite of four independently scored dimensions. Scores influence the letter-grade (A–F) and readiness status reported in tychon.quantum_readiness.
| Dimension | Max Score | Key Factors |
|---|---|---|
| Hardware | 40 pts | CPU architecture (x86_64/ARM64), AES-NI, AVX2/NEON instructions, RAM capacity, TPM version, HSM presence, Secure Boot |
| OS & Crypto API | 30 pts | OS version / patch level, TLS 1.3 native support, FIPS mode enabled, modern cipher API availability, IPv6 support |
| Crypto Libraries | 20 pts | OpenSSL version, PQC-capable libraries detected, no legacy library presence |
| Network | 10 pts | Estimated bandwidth, TLS 1.3 negotiation success rate, IPv6 availability |
| event.dataset | event.action | Protocol / Source | One event per |
|---|---|---|---|
tychon.cipher | cipher_negotiation | TLS (all versions) | Negotiated cipher suite per port |
tychon.cipher_quick | quick_cipher_scan | TLS (fast path) | Single negotiated suite per port |
tychon.ssh | ssh_crypto_detected | SSH | SSH algorithm set per port |
tychon.non_tls_cipher | non_tls_cipher_detected | SMB3, SNMPv3, Kerberos, SMTP, IMAP, LDAP, PostgreSQL, IBM MQ, NFS | One cipher profile per detected protocol instance |
tychon.vpn_client | vpn_client_detected | VPN clients | Detected VPN client installation |
tychon.ipsec_tunnel | ipsec_tunnel_detected | IPSec | IPSec tunnel or policy |
tychon.macsec | macsec_interface_detected | MACsec | MACsec interface |
tychon.filesystem_certificate | certificate_discovered | Filesystem | X.509 certificate file |
tychon.keystore_certificate | keystore_discovered | JKS / PKCS12 / etc. | Certificate within a keystore |
tychon.keystore | keystore_discovered | JKS / PKCS12 / etc. | Keystore file (summary) |
tychon.crypto_library | crypto_library_detected | Memory scan | Crypto library per process |
tychon.java_crypto_library | crypto_library_detected | JVM memory scan | Java crypto library per process |
tychon.quantum_readiness | quantum_readiness_assessed | Composite assessment | One per scan |
tychon.pqc_inventory | pqc_inventory | App + port pairs | Application + port with cipher data |
tychon.application | application_detected | App-centric mode | Application (process executable) |
tychon.connected_quick | connected_quick_scan | Active connections | Outbound connection probe |
tychon.installed_app | installed_app_detected | OS app registry | Installed application |
tychon.browser_extension | browser_extension_detected | Browser profiles | Browser extension |
tychon.plaintext | plaintext_detected | 44+ protocol probes | Cleartext service identified on a port (post-TLS/SSH fallback) |
tychon.kex | kex_negotiated | TLS 1.3 PQC probe | Key exchange group per port (CNSA 2.0 level, quantum_safe flag) |
tychon.connection | connection_profiled | 3D cipher intel (TLS+KEX+protocol) | Composite connection security profile per port |
tychon.non_tls_cipher (NTLM) | ntlm_detected | Registry (Windows) | NTLM LmCompatibilityLevel per host |
tychon.non_tls_cipher (WiFi) | wifi_detected | OS wireless profile | Active wireless connection encryption type |
| Algorithm / Configuration | Protocol Context | pqc_readiness | quantum_risk | migration_priority | Reason |
|---|---|---|---|---|---|
| ML-KEM hybrid KEX (X25519+ML-KEM-768) | TLS 1.3 | safe | Low | Low | NIST FIPS 203; CNSA 2.0 compliant |
| AES-256-GCM (symmetric) | TLS, SMB3, MACsec, IPSec | safe | Low | Low | 256-bit key resists Grover's algorithm |
| AES-128-GCM (symmetric) | TLS, SMB3, MACsec | safe | Low | Low | 128-bit effectively 64-bit post-Grover; acceptable |
| ChaCha20-Poly1305 (symmetric) | TLS, WireGuard VPN | safe | Low | Low | 256-bit key symmetric; quantum-safe |
| ECDHE key exchange | TLS 1.2 / 1.3 | transitional | High | High | Shor's algorithm breaks ECDH on a CRQC |
| DHE key exchange | TLS 1.2 | transitional | High | High | Shor's algorithm breaks discrete logarithm |
| RSA key exchange / signature | TLS, certificates | transitional | High | High | Shor's algorithm factors RSA modulus |
| ECDSA / ED25519 signatures | Certificates, SSH | transitional | High | High | Shor's algorithm breaks ECC |
| AES128-CTS-HMAC-SHA1-96 (Kerberos) | Kerberos | transitional | Medium | Medium | Symmetric AES session; no PQC Kerberos standard yet |
| AES-256 SNMPv3 priv + SHA-256 auth | SNMPv3 | transitional | Low | Low | Best available; no PQC SNMPv3 standard yet |
| SHA-1 / MD5 MACs | TLS, SSH, SNMPv3 | vulnerable | High | High | Classical collision attacks (Grover accelerates) |
| 3DES / Triple-DES | TLS, IPSec, SNMPv3, Kerberos | vulnerable | Critical | Critical | SWEET32 (classical); 112-bit key = 56-bit post-Grover |
| RC4 | TLS, Kerberos | vulnerable | Critical | Critical | Classically broken; RFC 7465 prohibits in TLS |
| DES | Kerberos, SNMPv3, SMB | vulnerable | Critical | Critical | 56-bit key; broken classically since 1998 |
| NULL encryption | TLS | vulnerable | Critical | Critical | No encryption — authentication only |
| RSA < 2048 bits | Certificates, TLS key exchange | vulnerable | Critical | Critical | Below minimum classical security; quantum makes it worse |
| SMBv1 | SMB | vulnerable | Critical | Critical | No encryption; WannaCry; EternalBlue |
| SNMPv1 / v2c (community strings) | SNMP | vulnerable | Critical | Critical | Cleartext; no authentication integrity |
| IBM MQ — no TLS (SSLCIPH not set) | IBM MQ | vulnerable | Critical | Critical | Plaintext message queues; no authentication or encryption |
| IBM MQ — TLS 1.2+ channel | IBM MQ | transitional | High | High | Classical asymmetric KEX; upgrade to TLS 1.3 + PQC hybrid |
NFS sec=sys / no sec | NFS | vulnerable | Critical | Critical | No encryption, no real authentication (UID/GID spoofable) |
NFS sec=krb5 / krb5i | NFS | vulnerable | High | High | Auth only or integrity only; data in plaintext |
NFS sec=krb5p | NFS | transitional | Medium | Medium | AES256-CTS data encryption; KEX is quantum-vulnerable |
| NFS-over-TLS (RFC 9289) | NFS | transitional | Medium | Medium | TLS 1.3 with classical KEX; add PQC hybrid group |
| Detection Category | Windows | macOS | Linux | Detection Method |
|---|---|---|---|---|
| TLS / SSL cipher scanning | ✓ | ✓ | ✓ | Active TCP probe |
| SSH algorithm scanning | ✓ | ✓ | ✓ | Active TCP probe |
| SMB3 encryption (network probe) | ✓ | ✓ | ✓ | TCP NEGOTIATE packet |
| SMB encryption enforcement | ✓ | — | — | Registry: LanmanServer\EncryptData |
| SNMPv3 (config file) | — | ✓ | ✓ | Parse /etc/snmp/snmpd.conf |
| SNMP service (Windows v1/v2c) | ✓ | — | — | Registry: services\SNMP |
| Kerberos enctypes (registry) | ✓ | — | — | Registry: SupportedEncryptionTypes bitmask |
| Kerberos enctypes (krb5.conf) | — | ✓ | ✓ | Parse /etc/krb5.conf [libdefaults] |
| VPN client detection | ✓ | ✓ | ✓ | Process, Registry, Config files |
| IPSec tunnel detection | ✓ | ✓ | ✓ | Config files, service status, process |
| MACsec interface detection | ✓ | ✓ | ✓ | sysfs, ip link, Registry |
| Filesystem certificate scan | ✓ | ✓ | ✓ | Walk configured paths |
| Windows Certificate Store | ✓ | — | — | CryptoAPI / Windows registry |
| macOS Keychain identities | — | ✓ | — | Security framework (CGO) |
| Linux NSS database | — | — | ✓ | SQLite / BDB cert9.db |
| JKS / PKCS12 keystores | ✓ | ✓ | ✓ | Filesystem walk + OpenSSL |
| Crypto library memory scan | ✓ | ✓ | ✓ | Process memory maps + version detection |
| Java crypto library scan | ✓ | ✓ | ✓ | JVM heap / class path analysis |
| Quantum readiness scoring | ✓ | ✓ | ✓ | Composite of all above |
| NTLM LmCompatibilityLevel | ✓ | — | — | Registry — HKLM\...\Lsa\LmCompatibilityLevel |
| UEFI / Secure Boot firmware type | ✓ | ✓ | ✓ | Registry (Win) / EFI sysfs (Linux) / hardware assumption (macOS) |
| WiFi encryption (active connection) | ✓ | ✓ | ✓ | WLAN profile XML (Win) / wpa_supplicant + NM conf (Linux) / interface detection (macOS) |
| STARTTLS cipher probing | ✓ | ✓ | ✓ | Protocol-native handshake: SMTP, IMAP, LDAP, PostgreSQL on localhost |
| IBM MQ channel detection (port 1414) | ✓ | ✓ | ✓ | MQTSH binary probe (no TLS) + standard TLS probe (TLS channels) |
| IBM MQ SSL listener (port 1415) | ✓ | ✓ | ✓ | Direct TLS ClientHello |
| NFS client mount detection | — | ✓ | ✓ | macOS: /sbin/mount | Linux: /proc/mounts |
| NFS server export detection | — | — | ✓ | Linux: /proc/fs/nfsd/exports |
| NFS remote probe (port 2049) | ✓ | ✓ | ✓ | TLS ClientHello (RFC 9289) + ONC RPC NULL call fallback |
| DTLS probe (UDP) | ✓ | ✓ | ✓ | DTLS 1.2 ClientHello fragment over UDP |
| QUIC/HTTP3 (passive sniffer) | ✓ | ✓ | ✓ | SPAN/TAP: QUIC Initial packet + CRYPTO frame CHLO extraction |
| RADIUS (passive sniffer) | ✓ | ✓ | ✓ | SPAN/TAP: UDP 1812/1813; RadSec TCP 2083; EAP-TLS inner cipher |
| TACACS+ (passive sniffer) | ✓ | ✓ | ✓ | SPAN/TAP: TCP 49 header magic; TLS-wrapped variant |
| NTP / NTS (passive sniffer) | ✓ | ✓ | ✓ | SPAN/TAP: UDP 123 NTPv4; TCP 4460 NTS-KE ALPN |
| WireGuard wire protocol (passive) | ✓ | ✓ | ✓ | SPAN/TAP: UDP 51820 handshake initiation type field |
| VXLAN / GENEVE / GRE / ERSPAN (passive) | ✓ | ✓ | ✓ | SPAN/TAP: decapsulate + analyze inner payload |
| mTLS (CertificateRequest detection) | ✓ | ✓ | ✓ | Active TLS probe: detect TLS CertificateRequest in handshake |
| Plaintext protocol detection (44+ probes) | ✓ | ✓ | ✓ | Active TCP probe fallback after TLS/SSH fail |
| FIPS mode detection | ✓ | ✓ | ✓ | Win: registry DWORD | Linux: /proc/sys/crypto/fips_enabled | macOS: Security framework API |
| AirPlay detection | ✓ | ✓ | — | TCP port 7000 probe + mDNS _airplay._tcp; process detection |
| WiFi / WPA encryption | ✓ | ✓ | ✓ | WLAN profile XML (Win) / wpa_supplicant + NM conf (Linux) / CoreWLAN (macOS) |
| OPC-UA detection | ✓ | ✓ | ✓ | TCP 4840 (binary) + 4843 (TLS) HEL probe; config file parse |
| DNP3 Secure Authentication | ✓ | ✓ | ✓ | TCP/UDP 20000 probe + config file parse |
| IEC 62351 detection | ✓ | ✓ | ✓ | Config file parse + TLS probe on IEC 61850 / MMS ports |
| Noise Protocol / Lightning Network | ✓ | ✓ | ✓ | Process detection + TCP 9735 probe + config file detection |
| Signal / MLS detection | ✓ | ✓ | ✓ | Installed app inventory + process detection |
| Tor detection | ✓ | ✓ | ✓ | Process detection (tor / tor.exe) + SOCKS port 9050/9150 + app bundle paths |
| ZRTP detection | ✓ | ✓ | ✓ | SIP/VoIP client process detection + UDP media port probe |
| DTLS-SRTP / WebRTC detection | ✓ | ✓ | ✓ | Browser / conferencing app process detection |
| S/MIME detection | ✓ | ✓ | ✓ | Filesystem cert scan (EKU: emailProtection) + mail client profile |
| PGP / OpenPGP key detection | ✓ | ✓ | ✓ | ~/.gnupg / %APPDATA%\gnupg key ring file scan |
| OpenVPN protocol detection | ✓ | ✓ | ✓ | UDP/TCP 1194 probe + .ovpn config parse |
| IPSec ESP/AH transform audit | ✓ | ✓ | ✓ | Linux xfrm SA table / Windows IKEEXT / strongSwan config |
| IBM BigFix / HCL BigFix detection | ✓ | ✓ | ✓ | Process (BESClient) + TCP 52311 BES handshake probe |