Überblick
DDS-Security 1.2 definiert ein Plugin-Architektur-Modell: ein Service-Plugin-Interface (SPI) je Sicherheits-Aspekt, mit klar abgegrenzten Trait-Surfaces und definierten Token-Austausch-Flüssen.
Die fünf Plugins:
- Authentication (§9.3) — Wer bist du? Identity-Token-Austausch, Handshake-Protokoll, Shared-Secret-Etablierung.
- AccessControl (§9.4) — Was darfst du? Governance-Policies + Permissions-XML, Topic-Zugriffs-Matrix.
- Cryptographic (§9.5) — Wie wird's geschützt? Sample-Encryption, MAC, Key-Derivation, Crypto-Header.
- Logging (§9.6) — Was wurde gemacht? Audit-Events mit Severity, Topic-Filter, Fan-Out an Sinks.
- DataTagging (§9.7) — Inhalts-Klassifizierung als sekundärer Filter (z.B.
classification=CONFIDENTIAL).
Spec-Coverage: DDS-Security 1.2 Coverage →
Die Plugin-Chain — Order matters
Bei jedem ausgehenden Sample läuft die Kette von oben nach unten; bei jedem eingehenden in umgekehrter Reihenfolge. Mismatch in einer Stufe blockt das Sample und triggert ein Logging-Event.
| Reihenfolge | Plugin | Was passiert | Was bei Fail |
| 1 | Authentication | Identity-Handshake (einmalig pro Participant-Pair via SEDP). Liefert SharedSecret. | Participant-Match abgelehnt; SECURITY_AUTHENTICATION_FAILED-Event. |
| 2 | AccessControl | Permissions-XML-Lookup: Darf dieser Identity-Holder dieses Topic schreiben/lesen? | Endpoint-Match abgelehnt; SECURITY_ACCESS_CONTROL_FAILED. |
| 3 | Cryptographic | Sample-Encrypt/MAC mit aus SharedSecret abgeleiteten Key-Material (AES-GCM, AES-GMAC). | Sample-Drop; SECURITY_CRYPTO_FAILED. |
| 4 | DataTagging | Optional: Sample-Tag-Match gegen Tag-Filter (z.B. level=SECRET). | Sample-Drop ohne SECURITY-Event (data-tagging ist Filter, kein Block). |
| 5 | Logging | Audit-Event mit Severity, Endpoint-Handle, Timestamp an Sinks (stderr, JSONL, syslog, Fanout). | Best-effort; Sink-Failure killt nicht den Sample-Path. |
Die Chain-Wire-Repräsentation lebt in zerodds-security-rtps: pro RTPS-Datagram werden Header-AAD und Crypto-Submessage-Wrapper geschrieben (§7.8 DDSI-RTPS 2.5).
Authentication-Plugin
AuthenticationPlugin DDS-Security 1.2 §9.3 · Identity + Handshake
Trait: crates/security/src/authentication.rs::AuthenticationPlugin
Kern-Methoden:
validate_local_identity() — eigene Cert/Key laden, IdentityHandle zurück.
validate_remote_identity() — Remote-Participant-Cert prüfen (CA-Chain, Validity, Revocation).
begin_handshake_request() / begin_handshake_reply() / process_handshake() — 3-Way-Handshake mit Diffie-Hellman, liefert SharedSecret.
get_authenticated_peer_credential_token() — Cert-Token für AccessControl-Lookup.
Default-Implementation: zerodds-security-pki — Identity ist X.509-Cert, Handshake via DH (P-256 Default), SharedSecret via HKDF. CRL-Pfad in crl.rs.
Custom-Auth: eigenes Plugin implementiert AuthenticationPlugin. Use-Cases: HSM-basierte Keys (PKCS#11), externe IdP (OAuth2-Token-Mapping), Hardware-attestation.
SharedSecretProvider DDS-Security 1.2 §9.3.2 · Key-Material-Lieferant
Trait: crates/security/src/authentication.rs::SharedSecretProvider
Sub-Trait, der nach erfolgreichem Handshake das Key-Material liefert. Cryptographic-Plugin konsumiert das. Default-Impl in zerodds-security-keyexchange.
AccessControl-Plugin
AccessControlPlugin DDS-Security 1.2 §9.4 · Governance + Permissions
Trait: crates/security/src/access_control.rs::AccessControlPlugin
Kern-Methoden:
validate_local_permissions() — eigenes Permissions-XML laden (CMS-signiert).
validate_remote_permissions() — Remote-Permissions prüfen.
check_create_participant() / check_create_datawriter() / check_create_datareader() — Endpoint-Erstellung gegen Permissions matchen.
get_governance_document() — Domain-Level-Policies (Default-Encryption, Allow-Unauthenticated, ...).
Default-Implementation: zerodds-security-permissions — XML-Loader, CMS-Signatur-Validierung, Topic-Glob-Match. Governance + Permissions sind separate XML-Files mit Subject-Name aus dem Identity-Cert.
Permission-Match: Glob-Pattern auf Topic-Namen (z.B. customer-*/odom). Delegation-Check in delegation_check.rs für Multi-Tier-CA-Setups.
Cryptographic-Plugin
CryptographicPlugin DDS-Security 1.2 §9.5 · Sample-Encrypt + MAC
Trait: crates/security/src/crypto.rs::CryptographicPlugin
Kern-Methoden:
register_local_participant() / register_remote_participant() — Key-Material-Slot pro Peer.
encode_serialized_payload() / decode_serialized_payload() — Sample-Encrypt/Decrypt.
encode_datawriter_submessage() / encode_datareader_submessage() — Submessage-Wrapping (AES-GCM oder AES-GMAC).
encode_rtps_message() — Datagram-Level Crypto-Header.
Default-Implementation: zerodds-security-crypto — AES-128-GCM, AES-256-GCM, AES-128-GMAC, AES-256-GMAC. Hardware-Acceleration via AES-NI in aes_gcm_hw.rs.
Wire-Form: RTPS-Crypto-Submessages in zerodds-security-rtps. Header-AAD-Verdrahtung (§9.5.3.3.4) in header_aad.rs.
Logging-Plugin
LoggingPlugin DDS-Security 1.2 §9.6 · Audit-Trail
Trait: crates/security/src/logging.rs::LoggingPlugin
Kern-Methoden:
log() — strukturiertes Event mit Severity (Emergency/Alert/Critical/Error/Warning/Notice/Info/Debug), Plugin-Class, Message, Timestamp, Endpoint-Handle.
set_log_options() — Severity-Filter, Topic-Filter, Export-Format.
Default-Implementation: zerodds-security-logging mit vier Sinks:
stderr_sink.rs — Standard-Error mit Severity-Farbe.
jsonl.rs — newline-delimited JSON für Log-Aggregator (Loki, ELK).
syslog.rs — RFC 5424 mit DDS-spezifischen Facility-Codes.
fanout.rs — Multi-Sink-Fanout, jeder Sink mit eigenem Severity-Filter.
DataTagging-Plugin
DataTaggingPlugin DDS-Security 1.2 §9.7 · Sample-Klassifizierung
Trait: crates/security/src/data_tagging.rs::DataTaggingPlugin
Kern-Methoden:
get_data_tag() — Tag pro Sample (Key/Value-Pairs, z.B. classification=CONFIDENTIAL).
check_data_tag() — eingehende Sample-Tags gegen Reader-Filter matchen.
Default-Implementation: Built-in in zerodds-security-runtime/src/data_tagging.rs. Tags reisen als RTPS-Parameter-List-Eintrag (PID_DATA_TAGS, §7.4.8).
Use-Case: Classification-Bell-LaPadula-style Read-Down/Write-Up Filter — Reader mit level=SECRET-Filter empfängt nur Samples mit level=SECRET oder darunter.
Implementation-Crates — Crates-Map