This reference describes the AgileSec Analytics cryptographic asset data model to represent cryptographic findings collected across an infrastructure. It covers document structure and every field and sub-field, including variable types, where the value comes from, and whether it is required. This reference also lists all enumerations.
1 Document Structure
Every AgileSec document represents a single cryptographic finding. The document structure is:
{
"@timestamp" — populated at pre-insert processing
"first_found" — populated at post-insert processing
"version" — populated by sensor
"object" — populated at pre-insert processing
"observation" — required; populated by sensor
├── "sensor" — required
├── "source" — required
└── "file" — optional
"crypto" — required; populated by sensor
├── algorithm
├── db
├── key
├── keystore
├── library
├── protocol
├── token
└── x509
"analysis" — populated at post-insert processing
"labels" — optional; populated by sensor
"custom" — optional
"_unmapped" — optional; populated by migration tool
}
Document-level required fields: version, observation, crypto
2 Top-Level Fields
|
Field |
Type |
Required |
Populated By |
Description |
|---|---|---|---|---|
|
|
date-time |
No |
Pre-insert-processing |
The last time this document was inserted into OpenSearch. Provided by indexing service. |
|
|
date-time |
No |
Post-insert processing |
The first time this document was inserted into OpenSearch. |
|
|
string |
Yes |
Sensor |
Schema version in |
|
|
object |
No* |
Pre-insert-processing |
High-level summary of the finding derived from |
|
|
object |
Yes |
Sensor / Unified Sensor |
All non-cryptographic context about the finding. |
|
|
object |
Yes |
Sensor / Unified Sensor |
Cryptographic details of the finding. Exactly one subtype must be present. |
|
|
object |
No* |
Pre-insert / Postprocessing |
Policy, priority, and cryptographic analysis results. *Planned to be required in future version |
|
|
array |
No |
Sensor |
Scan-level custom key-value metadata. Not mapped in OpenSearch. |
|
|
object |
No |
Custom Sensors |
Custom sensor-specific fields. Mapped in OpenSearch; can be used for visualization. |
|
|
object |
No |
Data Conversion Tool |
Fields that could not be migrated to the new schema. Not mapped in OpenSearch. |
3 object
High-level summary of the finding, computed and populated by pre-insert-processing.
|
Field |
Type |
Required |
Description |
|---|---|---|---|
|
|
string |
Yes |
Human-readable summary of the finding. Pattern: |
|
|
string |
Yes |
SHA256 hash of the cryptographic object itself, independent of location. The same certificate found in two different places will have the same fingerprint but different UIDs. Lowercase hex, 64 chars. |
|
|
string |
Yes |
Type of the cryptographic object. See |
|
|
string |
No |
Subtype of the cryptographic object. See |
|
|
string |
Yes |
Unique ID for this specific finding in OpenSearch. Calculated as |
|
|
object |
No |
Resolution status of this finding. |
|
|
boolean |
Yes (if present) |
|
|
|
date-time |
No |
Date when the object was removed from the infrastructure. |
|
|
string |
No |
Reason for resolution. |
3.1 object.summary Format
The summary follows the pattern "<ObjectType>: <friendly_name>-<parameters>".
|
Object Type |
Format |
Example |
|---|---|---|
|
Algorithm |
|
|
|
X.509 Certificate |
|
|
|
Cryptographic Key |
|
|
|
Keystore |
|
|
|
Cryptographic Token |
|
|
|
Cryptographic Library |
|
|
|
Cryptographic Protocol |
(object block not present for protocol documents) |
— |
|
DB |
(object block not present for db documents) |
— |
4 observation
All non-cryptographic context about the finding. sensor and source are required.
4.1 observation.sensor
Information about the sensor that produced the finding.
|
Field |
Type |
Required |
Description |
|---|---|---|---|
|
|
string |
Yes |
Sensor type, e.g. |
|
|
string |
Yes |
Sensor display name. Typically mirrors |
|
|
string |
Yes |
Sensor ID. Default |
|
|
string |
Yes |
Execution ID for this sensor run. Default |
|
|
integer |
No |
Message sequence number within this execution. |
|
|
string |
No |
How the sensor was executed. Enum: |
4.2 observation.source
Describes the source system where the cryptographic asset was found.
Required: type + at least one of name or ip.
|
Field |
Type |
Required |
Description |
|---|---|---|---|
|
|
string |
Yes |
Type of source system. See |
|
|
string |
Conditional |
Unique name of the source (hostname, repo URL, filename). Required when |
|
|
string (IP) |
Conditional |
Source IP address. Required when |
|
|
string |
No |
Full unique location of the asset within the infrastructure. Format depends on source type — see Location Format table below. |
|
|
string |
No |
Display-friendly short version of the location. |
|
|
string |
No |
Repository branch where the asset was found. GIT sources only. |
|
|
string |
No |
Unique ID assigned to this object by the source system. |
|
|
integer |
No |
Port number. Network and protocol sources only. |
|
|
string |
No |
Operating system of the machine where the asset was found. Host-based sensors only. |
|
|
string (IP) |
No |
Client IP. Used for network sniffing where the sensor is not the client. |
|
|
array[IP] |
No |
Network interface IPs of the source machine. |
|
|
string |
No |
Whether the interface IPs are |
|
|
string |
No |
Process name where the asset was found. Network sources only. |
|
|
string |
No |
Application name. SSH protocol sources only, e.g., |
|
|
string |
No |
Hostname. Network sources only. |
|
|
string |
No |
SHA256 hash of the source file. File Upload sources only. |
|
|
object |
No |
Start position in source code: |
|
|
object |
No |
End position in source code: |
|
|
string |
No |
Code snippet where the asset appears. Source Code Repository only. |
4.2.1 Location Format by Source Type
|
Source Type |
|
|
|---|---|---|
|
Host |
|
|
|
Source Code Repository |
|
|
|
Network |
|
|
|
File Upload |
Full storage URL (e.g. S3 URL) |
Filename only |
4.3 observation.file
Describes the file in which the cryptographic asset was found. Optional.
Required fields (if present): path, name, directory, extension, size
|
Field |
Type |
Required |
Description |
|---|---|---|---|
|
|
string |
Yes |
Absolute file path. No |
|
|
string |
Yes |
Filename including extension. e.g. |
|
|
string |
Yes |
Directory path of the file. No |
|
|
string |
Yes |
File extension without dot, e.g., |
|
|
integer |
Yes |
File size in bytes. Must be ≥ 0. |
|
|
boolean |
No |
Whether this file is inside an archive. Default |
|
|
integer |
No |
Byte offset within the file where the asset starts. |
|
|
string |
No |
File type enriched by the backend, e.g., |
|
|
string |
No |
File owner username. |
|
|
string |
No |
Semantic path type, e.g., |
|
|
string |
No |
SHA256 hash of the file contents. Lowercase hex, 64 chars. |
|
|
date-time |
No |
File creation time. Use |
|
|
date-time |
No |
Last modification time. |
|
|
date-time |
No |
Last access time. |
|
|
object |
No |
POSIX permissions. Contains |
|
|
object |
No |
Access Control List entries keyed by entity type. Each entry is an array of |
|
|
object |
No |
Additional file metadata. Not mapped in OpenSearch. |
|
|
object |
No |
When the file is inside an archive: |
5 crypto
Contains the cryptographic details of the finding. Exactly one of the following subtypes must be present per document.
5.1 crypto.algorithm
Describes an algorithm-type cryptographic asset.
Required fields: name, fingerprint_sha256, function, type
|
Field |
Type |
Required |
Description |
|---|---|---|---|
|
|
string |
Yes |
Algorithm name. Lowercase with |
|
|
string |
Yes |
Primary cryptographic function of the algorithm. See |
|
|
string |
Yes |
Cryptosystem classification. See |
|
|
string |
No |
Whether this is a |
|
|
string |
Yes |
SHA256 fingerprint of the algorithm object. Lowercase hex, 64 chars. |
|
|
string |
No |
OID of the algorithm. |
|
|
string |
No |
Operational context where this algorithm is used. See |
|
|
object |
No |
Algorithm parameters. May contain: |
|
|
string |
No |
Name of the library implementing this algorithm. |
|
|
string |
No |
Programming language of the implementing library. |
5.2 crypto.x509
Describes an X.509 certificate-type cryptographic asset.
Required fields: fingerprint_sha256, fingerprint_sha1, issuer, self_signed, serial_number, signature_algorithm, subject, public_key, exp
|
Field |
Type |
Required |
Description |
|---|---|---|---|
|
|
string |
Yes |
SHA256 fingerprint of the certificate. Lowercase hex, 64 chars. |
|
|
string |
Yes |
SHA1 fingerprint of the certificate. Lowercase hex, 40 chars. |
|
|
boolean |
Yes |
|
|
|
string |
Yes |
Certificate serial number. Uppercase hex, no separators, e.g., |
|
|
string |
Yes |
Signature algorithm in normalized uppercase form, e.g., |
|
|
string |
No |
Raw signature bytes. Uppercase hex. |
|
|
object |
Yes |
Certificate subject. See Subject / Issuer fields. |
|
|
object |
Yes |
Certificate issuer. See Subject / Issuer fields. |
|
|
key object |
Yes |
The subject public key. Has the same structure as |
|
|
date-time |
Yes |
Certificate expiry ( |
|
|
date-time |
No |
Certificate valid-from ( |
|
|
integer |
No |
X.509 version. Typically |
|
|
string |
No |
Calculated certificate usage. Enum: |
|
|
array[string] |
No |
Detailed usage. Values: |
|
|
object |
No |
Parsed certificate extensions. See Extensions. |
5.2.1 X.509 Subject / Issuer Fields
Both subject and issuer share the same structure. All values are arrays of strings. Omit null fields.
|
Field |
DN Attribute |
Description |
|---|---|---|
|
|
CN |
Common name |
|
|
O |
Organization name |
|
|
OU |
Organizational unit |
|
|
L |
Locality or city |
|
|
S |
State or province |
|
|
C |
Two-letter country code |
5.2.2 X.509 Extensions
|
Extension |
OID |
Required sub-fields |
Optional sub-fields |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
— |
|
|
|
|
— |
|
|
|
|
— |
|
|
|
|
— |
|
|
|
|
|
|
|
|
|
— |
|
|
any |
— |
Array of |
5.3 crypto.key
Describes a cryptographic key asset. This structure is also used inline as crypto.x509.public_key and crypto.db.x509.public_key.
Required fields: algorithm, classification, size, format, fingerprint_sha256, is_encrypted, type
|
Field |
Type |
Required |
Description |
|---|---|---|---|
|
|
string |
Yes |
Key algorithm. Uppercase, e.g., |
|
|
string |
Yes |
Key type. Enum: |
|
|
string |
Yes |
Cryptographic classification. Enum: |
|
|
integer |
Yes |
Key size in bits, e.g., |
|
|
string |
Yes |
Key encoding format, e.g., |
|
|
string |
Yes |
SHA256 fingerprint of the key. Lowercase hex, 64 chars. |
|
|
boolean |
Yes |
Whether the key is encrypted at rest. |
|
|
object |
No |
ECC-specific parameters. Fields: |
|
|
object |
No |
RSA-specific parameters. Fields: |
|
|
object |
No |
DSA-specific parameters. Fields: |
|
|
object |
No |
Extra metadata from third-party vaults or HSMs. See Key Meta fields below. |
5.3.1 Key Meta Fields
|
Field |
Type |
Description |
|---|---|---|
|
|
string |
Key lifecycle state. Enum: |
|
|
array[string] |
Permitted operations. Values: |
|
|
array[string] |
Additional attributes applied to the key. |
|
|
date-time |
Key creation time. |
|
|
date-time |
Last update time. |
|
|
date-time |
Key expiry time. |
|
|
date-time |
Key valid-from time. |
|
|
object |
Free-form tags. Not mapped in OpenSearch. |
5.4 crypto.keystore
Describes a keystore-type cryptographic asset.
Required fields: type
|
Field |
Type |
Required |
Description |
|---|---|---|---|
|
|
string |
Yes |
Keystore type, in |
5.5 crypto.token
Describes a JWT or JWE token-type cryptographic asset.
Required fields: fingerprint_sha256, algorithm, header, payload, subtype, type
|
Field |
Type |
Required |
Description |
|---|---|---|---|
|
|
string |
Yes |
Signing or encryption algorithm, e.g., |
|
|
string |
Yes |
Token type. Enum: |
|
|
string |
Yes |
Token subtype. Enum: |
|
|
string |
Yes |
SHA256 fingerprint of the token. Lowercase hex, 64 chars. |
|
|
string |
No |
SHA1 fingerprint of the token. Lowercase hex, 40 chars. |
|
|
object |
Yes |
Token header. Must contain either ( |
|
|
string |
Yes |
Signing algorithm declared in the header. |
|
|
string |
Conditional |
Token type ( |
|
|
string |
Conditional |
Encryption algorithm (JWE). Required if |
|
|
object |
Yes |
Token payload. |
|
|
string |
No |
Issuer (RFC 7519). |
|
|
string |
No |
Subject (RFC 7519). |
|
|
string |
No |
Audience (RFC 7519). |
|
|
date-time |
No |
Expiration time (RFC 7519). |
|
|
date-time |
No |
Not before (RFC 7519). |
|
|
date-time |
No |
Issued at (RFC 7519). |
|
|
string |
No |
JWT ID (RFC 7519). |
|
|
object |
No |
All non-RFC 7519 payload fields. e.g. |
⚠️ Any payload field that is not one of
iss, sub, aud, exp, nbf, iat, jtimust be placed insidepayload.other.
5.6 crypto.library
Describes a cryptographic library-type asset.
Required fields: name, version
|
Field |
Type |
Required |
Description |
|---|---|---|---|
|
|
string |
Yes |
Library name. Lowercase, e.g., |
|
|
string |
Yes |
Library version. Underscore-separated, e.g., |
|
|
string |
No |
Semantic version extracted from |
|
|
string |
No |
Programming language of the library. |
|
|
string |
No |
Operating system or platform. |
5.7 crypto.protocol
Describes a network protocol-type cryptographic asset.
Note: Protocol documents do not include an
objectblock or@timestamp.
Required fields: name, ciphers
|
Field |
Type |
Required |
Description |
|---|---|---|---|
|
|
string |
Yes |
Protocol name, e.g., |
|
|
array[string] |
Yes |
List of cipher suites supported. |
|
|
array[string] |
No |
Protocol version(s), e.g., |
|
|
array[string] |
No |
MAC algorithms. SSH only. |
|
|
array[string] |
No |
Key exchange algorithms. |
|
|
array[string] |
No |
Host key algorithms. SSH only. |
|
|
string |
No |
The actually negotiated protocol version. Default |
5.8 crypto.db
Describes an encrypted database-type cryptographic asset.
|
Field |
Type |
Required |
Description |
|---|---|---|---|
|
|
object |
No |
Details of the database encryption. See Encryption fields below. |
|
|
x509 object |
No |
Certificate used to protect the database encryption key. Has the same structure as |
5.8.1 crypto.db.encryption Fields
Required fields: algorithm, db_name
|
Field |
Type |
Required |
Description |
|---|---|---|---|
|
|
string |
Yes |
Encryption algorithm, e.g., |
|
|
string |
Yes |
Name of the encrypted database. |
|
|
string |
No |
Encryption method, e.g., |
|
|
date-time |
No |
When the Data Encryption Key was created. |
|
|
string |
No |
Type of key protector, e.g., |
|
|
string |
No |
Fingerprint of the key protector. Lowercase hex. |
|
|
string |
No |
Encryption status, e.g., |
Note: Database-specific metadata (compatibility level, host, edition, port, recovery model, version, user) not mapped to the schema is stored in
_unmapped.database.
6 analysis
Policy, priority, and cryptographic analysis results. Populated by pre-insert-processing and postprocessing.
6.1 analysis.policy
Required fields: cve, flag, init, init_version, score_value, priority_score, severity_score, severity
|
Field |
Type |
Required |
Description |
|---|---|---|---|
|
|
boolean |
Yes |
Whether the policy has been initialized for this object. |
|
|
integer |
Yes |
Policy initialization version. e.g. |
|
|
array[string] |
Yes |
Policy flags triggered for this finding. See |
|
|
array[string] |
Yes |
CVE IDs related to this finding. Empty array if none. |
|
|
number |
Yes |
Combined cryptographic score (0–10). |
|
|
number |
Yes |
Relevancy / priority of the finding (0–3). |
|
|
number |
Yes |
Technical severity (0–3). |
|
|
object |
Yes |
Map of |
|
|
string |
No |
Human-readable remediation guidance. |
6.2 analysis.policy_pqc
Post-quantum cryptography policy assessment.
Required fields: priority_score, severity_score
|
Field |
Type |
Required |
Description |
|---|---|---|---|
|
|
number |
Yes |
PQC relevancy score (0–3). Same scale as |
|
|
number |
Yes |
PQC technical severity. |
|
|
string |
No |
The algorithm being assessed, e.g., |
|
|
string |
No |
Human-readable PQC assessment description. |
|
|
array[string] |
No |
PQC vulnerability flags. See |
|
|
boolean |
No |
Whether the algorithm is post-quantum safe. |
|
|
integer |
No |
Key size in bits used for quantum vulnerability assessment. |
|
|
integer |
No |
Estimated number of logical qubits a quantum computer would need to break this object. |
6.3 analysis.cryptography
Required fields: type, algorithms, pq_types
|
Field |
Type |
Required |
Description |
|---|---|---|---|
|
|
string |
Yes |
Underlying crypto system type: |
|
|
array[string] |
Yes |
Names of the algorithms in use. |
|
|
string |
Yes |
Post-quantum type of the weakest underlying algorithm. See |
|
|
string |
No |
Mathematical foundation. See |
|
|
integer |
No |
Classical security strength in bits, e.g., |
|
|
integer |
No |
Quantum security strength in bits. |
|
|
integer |
No |
NIST security level (1–5). |
6.4 analysis.proirity
|
Field |
Type |
Description |
|---|---|---|
|
|
boolean |
True = This finding is at a high-priority location. |
|
|
boolean |
True = This finding is a high-priority object type. |
|
|
boolean |
True = This finding is at a low-priority location. |
|
|
boolean |
True = This finding is a low-priority object type. |
|
|
object |
Priority details object. |
6.5 Other analysis Fields
|
Field |
Type |
Description |
|---|---|---|
|
|
string |
SHA256 fingerprint of the correlated public key (used to link private keys to their certificates). |
|
|
boolean |
Whether the certificate issuer is a known/trusted CA. |
|
|
boolean |
Whether the certificate issuer is a corporate CA. |
|
|
boolean |
Whether the certificate subject is a known entity. |
|
|
boolean |
Whether the certificate subject is a corporate entity. |
|
|
boolean |
Whether the vendor is known. |
|
|
boolean |
Whether the vendor is a corporate entity. |
|
|
boolean |
Whether another finding exists with the same file hash or location. |
|
|
boolean |
Whether the certificate validity period is under 90 days ( |
6.6 labels, custom, _unmapped, transport
|
Field |
Type |
Mapped |
Description |
|---|---|---|---|
|
|
array |
No |
Scan-level custom metadata. Array of |
|
|
object |
Yes |
Custom sensor-specific fields. Free-form. Can be used for OpenSearch visualization. |
|
|
object |
No |
Catch-all for fields with no mapping in the schema (e.g., database metadata in DB documents). |
|
|
array |
No |
Raw payload used for sensor-to-Unified-Sensor transport. Each item has the format: |
7 Common Types
|
Type Name |
Format |
Pattern / Constraint |
Example |
|---|---|---|---|
|
|
ISO 8601 UTC |
Ends with |
|
|
|
Lowercase hex |
|
|
|
|
Lowercase hex |
|
|
|
|
Uppercase hex |
|
|
|
|
String |
|
|
|
|
Standard base64 |
|
— |
7.1 Datetime Normalization Rules
All datetime values must follow UTC Z format with no milliseconds:
|
Input |
Normalized |
|---|---|
|
|
|
|
|
|
|
|
|
7.2 Hex Case Rules
|
Context |
Case |
|---|---|
|
|
Lowercase |
|
|
Lowercase |
|
|
Lowercase |
|
|
Lowercase |
|
|
Lowercase |
|
|
Uppercase |
|
|
Uppercase |
|
RSA |
Uppercase |
|
ECC |
Uppercase |
8 Enumerations
8.1 algorithm.application_context
-
storage_encryption -
transport_encryption -
digital_signature -
authentication -
secure_boot -
password_hashing -
key_wrapping -
secure_channel
8.2 algorithm.function
-
encryption -
decryption -
hashing -
signing -
verification -
key_encapsulation -
key_agreement -
key_derivation -
random_number_generation -
message_authentication -
""
8.3 algorithm.mathematical_basis
-
integer_factorization_problem -
discrete_logarithm_problem -
elliptic_curve_discrete_logarithm_problem -
isogeny_based -
code_based -
lattice_based -
multivariate_polynomial_based -
hash_based -
hybrid
8.4 analysis.policy.flag
-
algorithm_insecure -
algorithm_pqc -
algorithm_weak -
algorithm_weak_cipher -
algorithm_weak_digest -
algorithm_weak_mode -
certificate_blocklist -
certificate_ca_long_life -
certificate_endentity_long_life -
certificate_expired -
certificate_expiring_30days -
certificate_intermediate_ca_long_life -
certificate_self_signed_end_entity -
certificate_weak_public_key -
certificate_weak_signature_algorithm -
hsm_extractable_key -
hsm_multipurpose_key -
key_hardcoded -
key_private_clear_text -
key_private_unprotected -
key_private_unprotected_allusers_acl -
key_private_unprotected_no_acl -
key_weak_size -
keystore_in_source_code -
library_heartbleed -
library_old_version -
library_openssl3_vulnerable -
private_key_in_source_code -
protocol_insecure_cipher -
protocol_insecure_kex -
protocol_insecure_mac -
protocol_insecure_version -
protocol_weak_cipher -
token_expired -
token_insecure_algorithm -
token_long_life -
token_no_expiration
8.5analysis.policy_pqc.flag
-
dlp_shor_attack -
ecdlp_shor_attack -
ifp_shor_attack
8.6 common.cryptosystem_type
-
classical -
postquantum -
hybrid -
""
8.7 key.classification
-
asymmetric -
symmetric -
unknown -
""
8.8 key.meta.operations
-
sign -
verify -
encrypt -
decrypt -
wrap -
unwrap -
agreement -
derive -
encapsulate -
decapsulate
8.9 key.meta.state
-
pre-activation -
active -
suspended -
deactivated -
compromised -
destroyed
8.10 key.type
-
public -
private -
secret -
unknown -
""
8.11 object.subtype
-
Private Key -
Public Key" -
SSH Private Key -
SSH Public Key -
Root CA -
Intermediate CA -
End-Entity -
Network Connection -
Network Endpoint -
Data-at-Rest Encryption
8.12 object.type
-
Cryptographic Key -
Keystore -
X.509 Certificate -
Algorithm -
Cryptographic Library -
Cryptographic Token -
Encryption -
Cryptographic Protocol
8.13 observation.sensor.exec_type
-
Platform -
API -
Remote
8.14 observation.sensor.type
-
AWS KMS -
Azure Key Vault -
Bitbucket -
CipherInsights -
Container -
GitHub -
GitLab -
GIT Repository/GIT Sensor -
Host Certstore -
Host Filesystem -
Host Network Process -
JROG Artifactory/Artifactory Sensor -
Keyfactor Command -
MSSQL Database -
Network Sensor -
PKCS#11 -
Qualys Network -
Tenable Network -
Thales CTM -
Thales Luna HSM -
Venafi TLS Protect
8.15 observation.source.type
-
Artifact Repository -
Certificate Management -
CI/CD -
Container Repository -
Database -
File Upload -
Hardware Security Module -
Host -
Key Management Service -
Network -
Source Code Repository -
Other
8.16 token.subtype
-
Static Token -
Automated App Token
8.17 token.type
-
JWT -
JWE -
""
8.18 x509.usage
-
CA -
Intermediate CA -
End-Entity
8.19 x509.usage_details
-
URL -
Timestamp -
OCSP -
Code Signing