Enhanced NDJSON format with threat intelligence and ECS compliance
The Tychon format is an enhanced NDJSON output optimized for security platforms and SIEM systems. It includes threat intelligence, ECS-compliant field names, and denormalized data for efficient searching and analysis.
All tychon format events use completely flat JSON with dot notation (e.g., crypto.key_algorithm, tls.certificate.subject). No nested objects are supported - all fields are at the root level with descriptive dot-separated names.
.\certscanner-windows-amd64.exe -host example.com `
-outputformat tychon `
-output security-scan.tychon.ndjson
Network TLS cipher suites with complete certificate and threat intelligence
Cryptographic libraries discovered in process memory
Certificates and crypto files found on disk
Encrypted Outlook archive files discovered
VPN client software discovered on the system
IPSec tunnel configurations discovered
System quantum readiness assessment (local mode only)
Digital certificate keystores discovered on the system
Individual certificate details from keystore discovery
| Field | Type | Description |
|---|---|---|
| @timestamp | String | ISO 8601 event timestamp |
| id | String | Unique SHA-1 hash for finding |
| tychon.type | String | Event type classification |
| tychon.scan_mode | String | Scan mode (local/remote/connected) |
| tychon.active | Boolean | Asset active status from tracking |
| tychon.pqc_vulnerable | Boolean | Quantum vulnerability assessment |
| tags | Array | User-defined scan tags |
| Field | Type | Description |
|---|---|---|
| certificate.subject.common_name | String | Certificate subject CN |
| certificate.issuer.common_name | String | Certificate issuer CN |
| certificate.not_after | String | Certificate expiration |
| certificate.signature_algorithm | String | Signature algorithm |
| certificate.fingerprint_sha256 | String | SHA-256 fingerprint |
| certificate.is_file | String | "true" for filesystem certs |
{"@timestamp":"2025-09-02T13:00:17.123Z","id":"abc123def456","tychon.type":"cipher","tychon.scan_mode":"remote","tychon.active":true,"tychon.pqc_vulnerable":false,"server.address":"example.com","server.port":443,"service.protocol.type":"TLS","service.protocol.name":"TLSV1.3","cipher.name":"TLS_AES_256_GCM_SHA384","cipher.key_length_bits":256,"cipher.negotiated_group":"X25519MLKEM768","cipher.is_preferred":true,"cipher.intel.security_level":"high","cipher.intel.pqc_ready":true,"certificate.subject.common_name":"example.com","certificate.issuer.common_name":"DigiCert TLS RSA SHA256 2020 CA1","certificate.not_after":"2025-03-01T23:59:59Z","certificate.fingerprint_sha256":"ab:cd:ef:12:34:56:78:90","certificate.is_file":"false","tags":["production","quarterly-scan"]}
{"@timestamp":"2025-09-02T13:00:17.456Z","id":"def789abc123","tychon.type":"library","tychon.scan_mode":"local","tychon.active":true,"process.pid":1234,"process.name":"nginx","process.executable":"/usr/sbin/nginx","file.path":"/usr/lib/libssl.so.3","library.name":"libssl.so.3","library.crypto_type":"TLS Library","library.company_name":"OpenSSL Project","library.detected_apis":"SSL_connect,SSL_accept,TLS_method","tags":["server","crypto-audit"]}
{"@timestamp":"2025-09-02T13:00:17.789Z","id":"ghi456jkl789","tychon.type":"filesystem","tychon.scan_mode":"local","tychon.active":true,"file.path":"/etc/ssl/certs/ca-cert.pem","certificate.subject.common_name":"Internal Root CA","certificate.issuer.common_name":"Internal Root CA","certificate.not_after":"2033-01-01T00:00:00Z","certificate.signature_algorithm":"SHA256-RSA","certificate.is_self_signed":true,"certificate.is_file":"true","tags":["filesystem-scan"]}
{"@timestamp":"2025-09-17T20:35:45.267Z","event.action":"keystore_certificate_detected","event.category":"security","event.type":"info","event.dataset":"tychon.keystore_certificate","id":"52d4362845b11fdaadc28c459bb340211a33cc72","observer.hostname":"workstation-01","observer.name":"tychon-pqc-scanner","observer.type":"scanner","observer.version":"1.0.61","file.path":"macOS:Login","file.name":"macOS:Login","file.extension":"","file.mtime":"2025-09-17T16:23:20.093843-04:00","crypto.key_algorithm":"RSA","crypto.key_size":2048,"crypto.signature_algorithm":"SHA256-RSA","crypto.fingerprint_sha1":"7afc9d01a62f03a2de9637936d4afe68090d2de18d03f29c88cfb0b1ba63587f","tls.certificate.subject":"CN=Developer ID Certification Authority,OU=Apple Certification Authority,O=Apple Inc.,C=US","tls.certificate.issuer":"CN=Apple Root CA,OU=Apple Certification Authority,O=Apple Inc.,C=US","tls.certificate.serial_number":"1763908746353189132","tls.certificate.not_before":"2012-02-01T22:12:15Z","tls.certificate.not_after":"2027-02-01T22:12:15Z","tls.certificate.version":3,"tls.certificate.alias":"Developer ID Certification Authority","tls.certificate.is_ca":true,"tls.certificate.is_self_signed":false,"tls.certificate.has_private_key":false,"keystore.type":"macOS-Keychain","keystore.accessible":true,"keystore.requires_auth":false,"keystore.cert_count":18,"vulnerability.is_vulnerable":false,"vulnerability.risk_level":"medium","vulnerability.risk_reason":"RSA key size below recommended 3072 bits for PQC","pqc.vulnerable":true,"pqc.reason":"RSA key size 2048 bits is below recommended 3072 bits for PQC","tychon.scan_mode":"local","tychon.asset_type":"keystore_certificate","tychon.keystore_type":"macOS-Keychain","tychon.certificate_usage":"stored"}
{"@timestamp":"2025-09-17T20:35:45.123Z","event.action":"keystore_discovered","event.category":"security","event.type":"info","event.dataset":"tychon.keystore","id":"8a1b2c3d4e5f6789abcd","observer.hostname":"workstation-01","observer.name":"tychon-pqc-scanner","observer.type":"scanner","observer.version":"1.0.61","file.path":"macOS:System","file.name":"macOS:System","file.extension":"","file.mtime":"2025-09-17T16:23:20.093Z","keystore.type":"macOS-Keychain","keystore.accessible":true,"keystore.requires_auth":false,"keystore.cert_count":45,"keystore.vulnerable_certificates":8,"keystore.pqc_vulnerable_certificates":12,"keystore.expired_certificates":2,"keystore.expiring_soon_certificates":3,"keystore.certificate_types":"ca:15,end_entity:30","keystore.key_algorithms":"RSA:35,ECDSA:8,DSA:2","tychon.scan_mode":"local","tychon.asset_type":"keystore","tychon.keystore_type":"macOS-Keychain"}
| Field | Type | Description |
|---|---|---|
| @timestamp | String | ISO 8601 timestamp for the event (formatted as "2006-01-02T15:04:05.000Z") |
| id | String | A unique SHA-1 hash identifying the specific finding |
| tychon.type | String | Event type: "cipher", "library", "filesystem", "java_crypto_library", "archivefile", or "connected" |
| tychon.scan_mode | String | Scan mode: "local", "remote", or "connected" |
| tychon.scan_timestamp | String | ISO 8601 timestamp when the scan was performed |
| tychon.scanner_version | String | Version of the certscanner tool that generated this event |
| tychon.active | Boolean | True if the asset is currently active/seen (from DB tracking) |
| tychon.last_seen | String | ISO 8601 timestamp of when an inactive asset was last seen |
| tychon.pqc_vulnerable | Boolean | True if the asset is vulnerable to quantum computing attacks |
| tychon.host.machine_serial_number | String | Hardware serial number of the scanning machine |
| tychon.host.bios_serial_number | String | BIOS serial number of the scanning machine |
| tychon.host.organization | String | Organization name of the scanning system |
| tychon.host.domain | String | Domain of the scanning system |
| tychon.host.os.quantum_ready | Boolean | Whether the host OS is considered Post-Quantum ready |
| tychon.host.os.quantum_ready_when | String | Estimate of when the host OS will no longer be secure (e.g., "now", "2030", "never") |
| certificate.is_file | String | "true" if certificate found on filesystem, "false" if from network |
| tags | Array | User-defined tags applied to the scan results |
| Field | Type | Description |
|---|---|---|
| server.address | String | The IP address or hostname of the scanned target |
| server.ip | String | The IP address of the target |
| server.port | Integer | The port number of the service |
| service.protocol.type | String | The high-level protocol ("TLS", "SSH") |
| service.protocol.name | String | The specific protocol version (e.g., "TLSV1.2") |
| Field | Type | Description |
|---|---|---|
| process.pid | Integer | Process ID |
| process.name | String | Process name |
| process.command_line | String | Full command line of the process |
| process.owner | String | User that owns the process |
| process.executable | String | Path to the process executable |
| file.path | String | Path to the file (executable or library) |
| file.name | String | Name of the file |
| file.directory | String | Directory of the file |
| file.extension | String | File extension |
| file.size | Integer | File size in bytes |
| file.created | String | ISO 8601 timestamp of file creation |
| file.accessed | String | ISO 8601 timestamp of last file access |
| file.mtime | String | ISO 8601 timestamp of last file modification |
| file.hash.sha1 | String | SHA-1 hash of the file |
| file.hash.sha256 | String | SHA-256 hash of the file |
| pe.file_version | String | File version from PE header |
| pe.product_version | String | Product version from PE header |
| pe.description | String | File description from PE header |
| pe.company | String | Company name from PE header |
| pe.product | String | Product name from PE header |
| Field | Type | Description |
|---|---|---|
| tls.cipher | String | IANA name of the cipher suite |
| tls.cipher_openssl | String | OpenSSL name of the cipher suite |
| tls.curve | String | The key exchange group/curve used |
| tls.mac | String | The MAC algorithm used in the cipher suite |
| tls.version | String | The TLS version number (e.g., "1.2") |
| tls.version_protocol | String | The protocol name ("TLS") |
| tls.server.protocol.weight | Integer | A risk score based on the protocol version |
| tls.server.cipher.weight | Integer | A risk score based on the cipher suite strength |
| tls.server.signature_hash.weight | Integer | A risk score based on the signature hash |
| tychon.cipher.is_preferred | Boolean | True if this is the server's preferred cipher |
| tychon.cipher.key_length_bits | Integer | The bit length of the symmetric encryption key |
| tychon.cipher.ephemeral_key_length_bits | Integer | The bit length of the ephemeral key |
| tychon.cipher.peer_signing_digest | String | The digest used for peer signing |
| tychon.cipher.alpn_protocol | String | The negotiated ALPN protocol |
| tychon.cipher.session_id | String | The session ID of the TLS session |
| tychon.cipher.session_ticket_lifetime_hint_seconds | Integer | The lifetime hint for the session ticket |
| tychon.cipher.extended_master_secret_supported | Boolean | True if Extended Master Secret is supported |
| tychon.cipher.tls13_early_data_supported | Boolean | True if TLS 1.3 early data is supported |
| tychon.cipher.renegotiation_forbidden | Boolean | True if renegotiation is forbidden |
| tychon.cipher.compression_method | String | The compression method used |
| Field | Type | Description |
|---|---|---|
| x509.version_number | Integer | The X.509 version |
| x509.serial_number | String | The certificate's serial number |
| x509.signature_algorithm | String | The algorithm used to sign the certificate |
| x509.issuer.common_name | String | Issuer's Common Name |
| x509.issuer.country | String | Issuer's Country |
| x509.issuer.distinguished_name | String | Issuer's full Distinguished Name |
| x509.issuer.locality | String | Issuer's Locality |
| x509.issuer.organization | String | Issuer's Organization |
| x509.issuer.organizational_unit | String | Issuer's Organizational Unit |
| x509.issuer.state_or_province | String | Issuer's State or Province |
| x509.subject.common_name | String | Subject's Common Name |
| x509.subject.country | String | Subject's Country |
| x509.subject.distinguished_name | String | Subject's full Distinguished Name |
| x509.subject.locality | String | Subject's Locality |
| x509.subject.organization | String | Subject's Organization |
| x509.subject.organizational_unit | String | Subject's Organizational Unit |
| x509.subject.state_or_province | String | Subject's State or Province |
| x509.not_before | String | ISO 8601 timestamp for the start of validity |
| x509.not_after | String | ISO 8601 timestamp for the end of validity |
| x509.is_valid | Boolean | True if the certificate is currently valid |
| x509.public_key_algorithm | String | The public key algorithm |
| x509.public_key_size | Integer | The bit size of the public key |
| x509.public_key_curve | String | The curve name for EC keys |
| x509.key_usage | String | Comma-separated list of key usages |
| x509.enhanced_key_usage | String | Comma-separated list of extended key usages |
| x509.is_self_signed | Boolean | True if the certificate is self-signed |
| x509.hash | String | The SHA-256 fingerprint of the certificate |
| x509.subject_key_identifier | String | The subject key identifier |
| Field | Type | Description |
|---|---|---|
| library.name | String | The name of the library |
| library.version | String | The version of the library |
| library.path | String | The path to the library file or JAR |
| library.type | String | The type of library (e.g., "java_crypto") |
| library.crypto_features | String | Comma-separated list of crypto features |
| library.detection_time | String | ISO 8601 timestamp of when the library was detected |
| java.vendor | String | The vendor of the Java runtime |
| java.version | String | The version of the Java runtime |
| java.manifest | Object | A map of key-value pairs from the JAR's MANIFEST.MF file |
| Field | Type | Description |
|---|---|---|
| archive.type | String | Type of archive (e.g., "outlook_pst", "outlook_ost") |
| archive.encryption.enabled | Boolean | True if the archive is encrypted/password-protected |
| archive.encryption.type | String | Type of encryption used for the archive |
| archive.encryption.strength | String | Description of encryption strength |
| archive.format.version | String | Version of the archive file format |
| Field | Type | Description |
|---|---|---|
| vpn.client_name | String | Name of the VPN client software |
| vpn.vendor | String | VPN vendor/manufacturer |
| vpn.version | String | VPN client version |
| vpn.type | String | VPN type (SSL, IPSec, OpenVPN, etc.) |
| vpn.config_count | Integer | Number of configured VPN profiles |
| vpn.is_active | Boolean | Whether VPN is currently active |
| vpn.install_path | String | Installation path of VPN client |
| vpn.config_path | String | Path to VPN configuration files |
| vpn.service_name | String | Name of the VPN service |
| vpn.service_status | String | Status of VPN service (running, stopped) |
| vpn.last_connection | String | Timestamp of last VPN connection |
| vpn.protocols_supported | Array | List of supported VPN protocols |
| vpn.detection_method | String | How the VPN was detected (registry, service, file) |
| Field | Type | Description |
|---|---|---|
| ipsec.tunnel_name | String | Name of the IPSec tunnel |
| ipsec.tunnel_type | String | Type (site-to-site, client-to-site) |
| ipsec.local_endpoint | String | Local endpoint IP address |
| ipsec.remote_endpoint | String | Remote endpoint IP address |
| ipsec.local_subnet | String | Local subnet CIDR |
| ipsec.remote_subnet | String | Remote subnet CIDR |
| ipsec.authentication_method | String | Authentication method (PSK, Certificate) |
| ipsec.encryption_algorithm | String | Encryption algorithm used |
| ipsec.integrity_algorithm | String | Integrity/hash algorithm used |
| ipsec.dh_group | String | Diffie-Hellman group |
| ipsec.key_lifetime | Integer | Key lifetime in seconds |
| ipsec.pfs_enabled | Boolean | Perfect Forward Secrecy enabled |
| ipsec.status | String | Tunnel status (connected, disconnected) |
| ipsec.bytes_in | Integer | Bytes received through tunnel |
| ipsec.bytes_out | Integer | Bytes sent through tunnel |
| ipsec.last_connected | String | Last connection timestamp |
| ipsec.pqc_vulnerable | Boolean | Whether tunnel is vulnerable to quantum attacks |
| Field | Type | Description |
|---|---|---|
| tychon.cipher.detail.nist_security_category | String | NIST security classification (e.g., "Recommended", "Legacy-Use") |
| tychon.cipher.detail.is_quantum_ready | Boolean | Whether the cipher is resistant to quantum attacks |
| tychon.cipher.detail.friendly_name | String | Human-readable name for the cipher algorithm |
| tychon.cipher.detail.algo.auth | String | Authentication algorithm (e.g., "RSA", "ECDSA") |
| tychon.cipher.detail.algo.hash | String | Hash/MAC algorithm (e.g., "SHA256", "AEAD") |
| tychon.cipher.detail.algo.vulnerabilities | String | Comma-separated list of known vulnerabilities |
| tychon.cipher.detail.security | String | NIST security category (e.g., "Recommended", "Legacy-Use") |
| tychon.cipher.detail.overall_risk | String | Overall risk assessment (e.g., "Low", "Medium", "High") |
| tychon.cipher.detail.recommendations | String | Security recommendations for the cipher |
| tychon.cipher.detail.bit_operator | String | Hexadecimal cipher suite identifier (e.g., "0xC0,0x30") |
| tychon.cipher.detail.openssl_name | String | OpenSSL name for the cipher suite |
Fields present in keystore and keystore_certificate events (local mode only). Note: All tychon format fields use flat JSON with dot notation - no nested objects.
| Field | Type | Description |
|---|---|---|
| keystore.type | String | Type of keystore (Windows-CAPI, macOS-Keychain, PKCS12, JKS, etc.) |
| keystore.accessible | Boolean | Whether the keystore is accessible/readable |
| keystore.requires_auth | Boolean | Whether keystore requires authentication |
| keystore.cert_count | Integer | Total number of certificates in keystore |
| keystore.owner | String | Owner of the keystore file/object |
| keystore.permissions | String | File system permissions |
| keystore.error_message | String | Error message if keystore access failed |
| crypto.key_algorithm | String | Public key algorithm (RSA, ECDSA, etc.) |
| crypto.key_size | Integer | Key size in bits |
| crypto.signature_algorithm | String | Signature algorithm used |
| crypto.fingerprint_sha1 | String | SHA-1 fingerprint of certificate |
| tls.certificate.subject | String | Certificate subject DN |
| tls.certificate.issuer | String | Certificate issuer DN |
| tls.certificate.serial_number | String | Certificate serial number |
| tls.certificate.not_before | String | Certificate valid from timestamp |
| tls.certificate.not_after | String | Certificate valid until timestamp |
| tls.certificate.alias | String | Certificate alias/friendly name in keystore |
| tls.certificate.is_ca | Boolean | Whether certificate is a Certificate Authority |
| tls.certificate.is_self_signed | Boolean | Whether certificate is self-signed |
| tls.certificate.has_private_key | Boolean | Whether private key is present in keystore |
| vulnerability.is_vulnerable | Boolean | Whether certificate has known vulnerabilities |
| vulnerability.risk_level | String | Risk level (low, medium, high, critical) |
| vulnerability.risk_reason | String | Reason for vulnerability assessment |
| pqc.vulnerable | Boolean | Whether certificate is vulnerable to quantum attacks |
| pqc.reason | String | Reason for post-quantum vulnerability |
| observer.hostname | String | Hostname of scanning system |
| observer.name | String | Name of scanning tool |
| observer.type | String | Type of observer (scanner) |
| observer.version | String | Version of scanning tool |
| observer.fips_mode_enabled | Boolean | FIPS 140-2 mode status |
| observer.bigfix_client_installed | Boolean | Indicates if BigFix client is installed |
| observer.bigfix_client_id | String | BigFix client ID for asset correlation |
Fields present in quantum_readiness events (local mode only)
| Field | Type | Description |
|---|---|---|
| quantum.assessment_id | String | Unique identifier for the quantum readiness assessment |
| quantum.fips_mode_enabled | Boolean | FIPS 140-2 mode status at assessment time |
| quantum.system_type | String | Classification of system type (workstation, server) |
| quantum.criticality_level | String | System criticality (critical, important, standard) |
| quantum.overall_score | Integer | Total quantum readiness score (0-100) |
| quantum.hardware_score | Integer | Hardware assessment score (0-40) |
| quantum.hardware_max_score | Integer | Maximum possible hardware score |
| quantum.os_score | Integer | Operating system score (0-30) |
| quantum.os_max_score | Integer | Maximum possible OS score |
| quantum.crypto_score | Integer | Crypto library score (0-25) |
| quantum.crypto_max_score | Integer | Maximum possible crypto score |
| quantum.network_score | Integer | Network readiness score (0-5) |
| quantum.network_max_score | Integer | Maximum possible network score |
| quantum.readiness_status | String | Readiness status (Ready, Partially Ready, Update Required, Not Ready) |
| quantum.status_color | String | Status visualization color (green, yellow, orange, red) |
| quantum.ready_timeline | String | Estimated timeline to quantum readiness |
| quantum.recommendations | String | Comma-separated actionable recommendations |
# Direct streaming to Elasticsearch
.\certscanner-windows-amd64.exe -host production-hosts.txt -cipherscan `
-outputformat tychon `
-posttoelastic -elasticnode "https://siem.company.com:9200" `
-elasticapikey "$env:ELASTIC_API_KEY" `
-elasticindex "crypto-intelligence"
# Continuous monitoring with asset tracking
.\certscanner-windows-amd64.exe -mode local -scanfilesystem -scanmemory `
-outputformat tychon -tags "continuous-monitoring" `
-posttoelastic -elasticnode "$env:ELASTIC_URL"
# Find PQC-vulnerable assets
GET crypto-intelligence/_search
{
"query": {
"term": { "tychon.pqc_vulnerable": true }
}
}
# Find inactive crypto libraries
GET crypto-intelligence/_search
{
"query": {
"bool": {
"must": [
{ "term": { "tychon.type": "library" }},
{ "term": { "tychon.active": false }}
]
}
}
}
# Find expiring certificates
GET crypto-intelligence/_search
{
"query": {
"range": {
"certificate.not_after": {
"lte": "now+30d"
}
}
}
}