Architekturnotiz · ETSI-TS-119-432-Konformitätszuordnung

Signature Creation Application (SCA).

Der CodeB-Fern-Signatur-Dienst — der Browser-Signer unter sign.html zusammen mit dem CSC-v2-API-Server — spielt die Rolle der Signature Creation Application (SCA) nach ETSI TS 119 432. Sie komponiert das Data-To-Be-Signed (DTBS), führt das Signature Activation Protocol (SAP) für die Nutzer-Autorisierung durch, übergibt die SAD an das Remote Wallet Secure Cryptographic Device (RWSCD, aktuell unser software-basierter ICryptoModule) und schließt die Signatur zu einem PAdES-Umschlag ab. Diese Seite bildet jeden CodeB-Endpunkt und jeden Browser-Schritt auf das ETSI-Vokabular ab, damit ein Auditor Konformität End-to-End nachvollziehen kann.

Umfangserklärung. Das RWSCD ist derzeit software-basiert (pro Tenant PFX; pro Nutzer in Phase 1b), sodass das Gesamtsystem AdES gemäß Verordnung (EU) 910/2014 Art. 3(11) produziert. Nicht QES. Nicht qualifiziert. Die ICryptoModule-Abstraktion ist HSM-vorbereitet — sobald sie an eine zertifizierte QSCD verdrahtet wird (Azure Key Vault Managed HSM FIPS 140-3 Level 3 oder PKCS#11 gegen Utimaco / Thales), arbeitet dieselbe SCA unverändert gegen eine qualifizierte RWSCD.

Die vier ETSI-Akteure

  • Signer — die natürliche Person, deren Wille die Signatur bindet. Meldet sich per OIDC an.
  • SCA (Signature Creation Application) — komponiert DTBS, sammelt Signer-Intent, orchestriert SAP, treibt RWSCD, schließt den Umschlag ab. = sign.html + csc.ashx.
  • SIC (Signature Initiator Client) — wo der Signer startet. In der Referenzstrecke sind SIC und SCA in sign.html vereint; im API-Fluss ist der SIC Ihre Business-App, die die CSC-v2-API aufruft.
  • RWSCD — hält den Signaturschlüssel, gibt Operationen nur bei gültiger SAD frei. = ICryptoModule. Heute: SoftwareCryptoModule.cs. Roadmap: HsmAzureKeyVaultCryptoModule.cs, HsmPkcs11CryptoModule.cs.

ETSI-TS-119-432-Verb → CodeB-Endpunkt-Zuordnung

ETSI TS 119 432 VerbCodeB-Endpunkt / SchrittWas passiert
identify-signerOIDC Authorization Code + PKCEStandard-OIDC-Round-Trip.
discover-credentialsPOST /csc/v2/credentials/listLiefert Credential-IDs des Signers.
get-credential-infoPOST /csc/v2/credentials/infoSubject DN, Issuer DN, Serial, Gültigkeit, Algorithmus.
prepare-signatureSCA komponiert die CMS-signedAttributes-DER, hasht mit SHA-256Client-seitig (sign.html) oder server-seitig (signDoc).
authorize-signature (SAP init)POST /csc/v2/credentials/authorizeSCAL1 → sofortige SAD. SCAL2 → pending=true + WebAuthn-Challenge.
authorize-signature-confirmPOST /csc/v2/credentials/authorize/confirmSCAL2 nur. WebAuthn-Assertion + PIN.
authorize-signature (via Wallet)OpenID4VP vp-start mit transaction_dataARF-§5.7.5: die EU-Wallet wird SAP-Autorisator. Siehe unten.
sign-hashPOST /csc/v2/signatures/signHashRWSCD signiert den SAD-gebundenen Hash. Rohes ECDSA r||s.
sign-docPOST /csc/v2/signatures/signDocServer-seitig Ein-Schritt: SCA komponiert + RWSCD signiert + PAdES-Zusammenbau.
finalize-signatureSCA baut den PAdES-UmschlagStufen B-B / B-T / B-LT / B-LTA.
timestamp-signaturePOST /csc/v2/signatures/timestamp oder /tsaRFC-3161-Zeitstempel. Extern oder tenant-intern.
revocation-infoPOST /csc/v2/ocspRFC-6960-OCSP für Signer- und TSA-Zertifikate.

ARF §5.7.5 — Wallet als SAP-Autorisator

Das ARF 3.0 (21. Juli 2026) §5.7.5 definiert einen transaction_data-Parameter auf OpenID4VP-Anfragen. Das ist der Mechanismus, durch den die EU-Wallet den WebAuthn-/PIN-Zweitfaktor in SCAL2 ersetzt.

Wire-Format

Die SCA hängt ?transaction_data=<b64u> an /oidc.ashx?action=vp-start. Der b64u-Wert dekodiert zu einem JSON-Array base64url-kodierter Einträge. Jeder Eintrag dekodiert zu einem JSON-Objekt mit u.a. type, credential_ids, documentDigests, processID.

Was heute (2026-07-27) ausgeliefert ist

  • Ausgeliefert: vp-start akzeptiert transaction_data, validiert strikt, speichert auf VpSession, gibt das Array im signierten JAR-Request-Objekt aus.
  • Ausgeliefert: LAUTE Diagnostik ([ARF-TXDATA-DIAG]) + [METRIC] arf.txdata.accepted|rejected.
  • Ausgeliefert: pro-Tenant-Persistenz durch SaveVpSessionToDisk — überlebt App-Pool-Recycles für die volle 300 s TTL.
  • Nächste Iteration: KB-JWT-transaction_data_hashes-Extraktion in vp-response + Surface in die GET-Poll-Antwort + SAD-Issuance-Hook in credentials/authorize.

Standards & Verweise