Skip to main content

Cryptographic Asset Inventory

PropertyValue
ControlsSID-CRYPTO-01 through SID-CRYPTO-05
EUDI RequirementsGEN-7.3.2-02, GEN-7.5-02, GEN-7.5-03, WIN-8.4.4-02
ISO 27001A.8.24 (Cryptography)

Purpose

This document provides a formal inventory of all cryptographic assets across the SIROS ID platform: keys, algorithms, protection levels, and lifecycle properties. It addresses the finding that individual cryptographic controls exist and are verified, but a consolidated asset classification with ECCG mapping was missing.

ECCG Classification

The EUDI Cooperation Group (ECCG) Security Requirements classify cryptographic assets by their sensitivity level and required protection. The table below maps each SIROS ID cryptographic asset to the appropriate ECCG category.

ECCG CategoryAssets in ScopeRequired Protection
Issuer signing keysHSM-backed ECDSA/RSA keys (vc)HSM (PKCS#11 or QSCD) per GEN-7.5-02
User authentication keysWebAuthn credentials, PRF-derived keysHardware authenticator or platform authenticator per WUH-8.3.1-Sec-07
Wallet instance keysPer-credential ES256 signing key pairsClient-side encrypted keystore per WIN-8.4.1-Sec-01
Transport keysTLS certificates, mTLS client certsFilesystem with restricted permissions; PKI-managed
Session secretsJWT signing keys, admin tokensConfiguration secrets; operator-managed rotation
Ephemeral keysECDH (VP encryption), noncesIn-memory only; auto-destroyed on TTL or use

Asset Inventory by Component

Credential Issuer / Verifier (vc)

AssetAlgorithmSizeProtectionLifecycle
Issuer signing key (HSM)ECDSA / or RSA256–384 bit ECPKCS#11 HSM — key never leaves HSM boundaryHSM-managed; PIN-authenticated sessions
Issuer signing key (software fallback)ECDSA / or RSAVariablePEM file on filesystemManually provisioned; no at-rest encryption
mDOC Document Signer keyECDSA / or Ed25519256–384 bitSame as issuer key (HSM or file)IACA PKI-managed
Ephemeral VP encryption keyECDH256 bitIn-memory TTL cache (10 min)Generated per VP request; auto-evicted
Cryptographic noncescrypto/rand256 bit (32 bytes)In-memory, ephemeralSingle-use per flow
mDOC session MAC keyHMAC (COSE MAC)Session-derivedIn-memory per sessionSession lifetime
DIDComm encryption keysECDH-ES+A256KW / ECDH-1PU+A256KWX25519, ,In-memory, ephemeralPer-message generation
DIDComm signing keysEdDSA, ES256, ES384, ES512VariableVia configured signerPer-message
Content encryption (DIDComm)A256GCM, A256CBC-HS512, XC20P256 bitIn-memory, ephemeralPer-message

Wallet Backend (go-wallet-backend)

AssetAlgorithmSizeProtectionLifecycle
JWT signing secretHMAC-SHA256 (HS256)ConfigurableConfig file, env var, or file pathOperator-provisioned; manual rotation
Admin API bearer tokenOpaque (constant-time compare)256 bit (32 bytes)Config, env, file, or auto-generatedAuto-generated at startup if absent; no rotation mechanism
TLS server certificate + keyPKI-provisionedPer certificateFilesystem paths (PEM)External PKI lifecycle
MongoDB mTLS client certPKI-provisionedPer certificateFilesystem paths (PEM)External PKI lifecycle
Wallet provider attestation keyOperator-provisionedPer keyFilesystem paths (PEM)External PKI lifecycle

Wallet Frontend (wallet-frontend)

AssetAlgorithmSizeProtectionLifecycle
Main encryption keyAES-256-GCM256 bitWrapped with AES-KW; stored in encrypted containerGenerated at wallet creation; persisted server-side
Password-derived wrapping keyPBKDF2-SHA256 (600K iterations) → AES-KW256 bitDerived on-demand; never storedDerived per unlock; random salt in container
PRF-derived wrapping keyHKDF-SHA256 → AES-KW256 bitDerived from authenticator PRF outputDerived per unlock; random salt/info per credential
ECDH encapsulation key pair (V2)ECDH → AES-KW256 bitPrivate key AES-GCM wrapped with main keyGenerated at wallet creation; persisted in container
Credential signing key pairsECDSA (ES256)256 bitJWK in JWE-encrypted containerGenerated per did:key; no rotation
VP/KB-JWT signingES256 (via credential key)256 bitSame as credential keyPer-presentation
JWE container encryptionAES-256-GCM (via main key)256 bitMain key hierarchyFull container re-encrypted on each save

Biometric Identity Verification (facetec-api)

AssetAlgorithmSizeProtectionLifecycle
JWT signing secretHMAC (shared secret)ConfigurableConfig file or env varOperator-provisioned; manual rotation
Legacy app keyOpaque (constant-time compare)VariableConfig, env, or file pathOperator-provisioned
FaceTec device keyOpaque (SDK key)VariableConfig, env, or file pathFaceTec-provisioned
Issuer API keyOpaque (bearer token)VariableConfig, env, or file pathOperator-provisioned
TLS server + mTLS upstream certsPKI-provisionedPer certificateFilesystem paths (PEM)External PKI lifecycle

Trust Evaluation (go-trust)

AssetAlgorithmSizeProtectionLifecycle
X.509 chain verificationPKIX path validationN/AVerification-only — no private key materialN/A
JWK/x5c public key parsingVarious (per key)N/AVerification-onlyN/A
LoTE JWS verificationJWS (configurable toggle)N/AVerification-onlyN/A
DID Web VH signature verificationEdDSA (eddsa-jcs-2022)N/AVerification-onlyN/A
info

go-trust holds no private key material. It only verifies signatures and certificate chains from trust registries.

Policy Authorization (go-spocp)

No cryptographic operations. Pure S-expression policy matching engine.

Supported Algorithm Suite

PurposeAlgorithmsNotes
Credential signingES256, ES384, ES512, EdDSA, RS256, RS384, RS512ES256 recommended for EUDIW
Key agreementECDH , ECDH , X25519X25519 for DIDComm
Key wrappingAES-KW-256RFC 3394
Content encryptionAES-256-GCM, A256CBC-HS512, XC20PAES-256-GCM primary
Key derivationPBKDF2-SHA256 (600K), HKDF-SHA256OWASP-compliant iteration count
DigestSHA-256, SHA-384, SHA-512SHA-256 default for MSO/SD-JWT
Randomcrypto/rand (Go), WebCrypto API (browser)CSPRNG throughout
TLSTLS 1.2+ (configurable min), TLS 1.3 option

Key Hierarchy (Wallet Frontend)

Risk Observations

ObservationImpactMitigation Path
HMAC JWT secrets in config/env (wallet-backend, facetec-api)Secret exposure if config leaksOperator: use file-based secrets with restricted permissions; consider vault integration
PKCS#11 PIN in YAML configHSM PIN exposureOperator: externalize to secrets manager
File-based issuer keys (software fallback)Plaintext PEM at restUse HSM mode for production deployments per GEN-7.5-02
No automated rotation for JWT signing secretsCompromise windowOperator: establish rotation SOP
No rotation for wallet credential signing keysLong-lived key materialAcceptable for credential-bound keys; keys destroyed with wallet
Admin token auto-generated but not rotatedStatic admin credentialOperator: configure explicit token with rotation schedule