DDS-Security / SROS2
The pain
DDS-Security (SROS2) is powerful but brittle to set up (22 reports). The recurring failure is that turning security on breaks discovery or communication, often with little diagnostic, plus genuine correctness gaps:
- Enabling discovery encryption and topic-level protection together stops endpoints from matching.
- Security with the Micro XRCE-DDS agent makes discovery fail outright.
- Security enclave overrides don’t take effect —
ros2 node listreturns only system topics with security on. - Incomplete privilege inheritance has produced actual security vulnerabilities.
Most recent example
Fast-DDS#5753 — “Discovery Matching fails when discovery_protection_kind= ENCRYPT and topic-level protection are both enabled” (2025-04-08). Two standard, supported security settings combined cause endpoints to stop matching — security configuration as a discovery-breaker.
Reference list (most recent)
| Date | Source | Problem |
|---|---|---|
| 2025-04-08 | Fast-DDS#5753 | Discovery encryption + topic protection → no match |
| 2025-03-13 | Fast-DDS#5707 | Security + Micro XRCE agent → discovery fails |
| 2024-08-07 | ros2#1589 | Incomplete privilege inheritance → vulnerability |
| 2024-05-08 | sros2#306 | Enclave override ineffective; only system topics visible |
| 2024-04-17 | sros2#293 | Node list empty with security enabled |
How ZeroDDS solves it
A complete DDS-Security 1.2 implementation, tested as a cross-vendor matrix — so “security on” is a tested configuration, not a cliff.
- Full DDS-Security 1.2. Authentication, access control, cryptographic, logging and data-tagging built-in plugins are all implemented (including CRL and a conformance matrix). Security is not an afterthought layer that desyncs with discovery — it is part of the audited stack.
- Secured discovery is a regression cell, not a surprise. The exact “encrypt discovery + protect topics” combinations that break elsewhere are cells in ZeroDDS’s cross-vendor security matrix, exercised against Cyclone, Fast DDS and OpenDDS. The secured handshake (authentication, key exchange, secured SEDP/data) is e2e-tested.
- Profiles, not raw plumbing. A
SecurityProfileplus aruntime_create_secureFFI entry point turns security on through a defined surface, rather than hand-assembling enclaves and governance/permissions XML whose mistakes fail silently. - Memory-safe by construction. The privilege/parse paths run in safe Rust with explicit bounds — the class of memory-safety vulnerabilities behind (ros2#1589) is not expressible in the safe core.
Honest status: secured cross-vendor interop is broad but not yet 100 % green in every cell (e.g. specific OpenDDS secured-SEDP decode paths are still being closed). Where a secured cell is verified we say so; the open cells are tracked, not hidden.
Why it no longer has to be a pain
The security cluster is security configuration that silently breaks discovery. ZeroDDS implements the full spec and treats the dangerous combinations as explicit regression tests across vendors, exposed through a profile API — so turning security on is a supported, tested step instead of a separate debugging project.
Reproduce it yourself
# Secured runtime via the profile + FFI entry point; cross-vendor secured matrix
# harness exercises encrypt-discovery + topic-protection combinations.
→ Back to overview · Next: Performance
DDS-Security / SROS2
Der Schmerz
DDS-Security (SROS2) ist mächtig, aber fragil aufzusetzen (22 Reports). Der wiederkehrende Fehler ist, dass das Einschalten von Security Discovery oder Kommunikation bricht, oft mit wenig Diagnostik, plus echte Korrektheits-Lücken:
- Discovery-Encryption und Topic-Level-Protection zusammen zu aktivieren hindert Endpoints am Matchen.
- Security mit dem Micro-XRCE-DDS-Agent lässt Discovery komplett scheitern.
- Security-Enclave-Overrides greifen nicht —
ros2 node listgibt mit Security nur System-Topics zurück. - Unvollständige Privilege-Inheritance hat tatsächliche Sicherheitslücken produziert.
Jüngstes Beispiel
Fast-DDS#5753 — „Discovery Matching fails when discovery_protection_kind=ENCRYPT and topic-level protection are both enabled” (2025-04-08). Zwei standardmäßige, unterstützte Security-Einstellungen kombiniert lassen Endpoints aufhören zu matchen — Security-Konfiguration als Discovery-Brecher.
Referenzliste (jüngste zuerst)
| Datum | Quelle | Problem |
|---|---|---|
| 2025-04-08 | Fast-DDS#5753 | Discovery-Encryption + Topic-Protection → kein Match |
| 2025-03-13 | Fast-DDS#5707 | Security + Micro-XRCE-Agent → Discovery scheitert |
| 2024-08-07 | ros2#1589 | Unvollständige Privilege-Inheritance → Vulnerability |
| 2024-05-08 | sros2#306 | Enclave-Override wirkungslos; nur System-Topics sichtbar |
| 2024-04-17 | sros2#293 | Node-Liste leer mit aktivierter Security |
Wie ZeroDDS es löst
Eine vollständige DDS-Security-1.2-Implementierung, getestet als Cross-Vendor-Matrix — sodass „Security an” eine getestete Konfiguration ist, keine Klippe.
- Volle DDS-Security 1.2. Authentication-, Access-Control-, Cryptographic-, Logging- und Data-Tagging-Built-in-Plugins sind alle implementiert (inkl. CRL und einer Conformance-Matrix). Security ist keine nachträgliche Schicht, die mit Discovery desynct — sie ist Teil des auditierten Stacks.
- Secured Discovery ist eine Regressions-Zelle, keine Überraschung. Genau die „encrypt discovery + protect topics”-Kombinationen, die anderswo brechen, sind Zellen in der Cross-Vendor-Security-Matrix von ZeroDDS, gegen Cyclone, Fast DDS und OpenDDS exerziert. Der Secured-Handshake (Authentication, Key-Exchange, Secured-SEDP/Data) ist e2e-getestet.
- Profile, kein rohes Plumbing. Ein
SecurityProfileplus einruntime_create_secure-FFI-Entry-Point schaltet Security über eine definierte Oberfläche ein, statt Enclaves und Governance-/Permissions-XML von Hand zusammenzubauen, deren Fehler still scheitern. - Memory-safe by construction. Die Privilege-/Parse-Pfade laufen in sicherem Rust mit expliziten Bounds — die Klasse von Memory-Safety-Vulnerabilities hinter (ros2#1589) ist im sicheren Kern nicht ausdrückbar.
Ehrlicher Status: Secured-Cross-Vendor-Interop ist breit, aber noch nicht in jeder Zelle 100 % grün (z.B. werden spezifische OpenDDS-Secured-SEDP-Decode-Pfade noch geschlossen). Wo eine Secured-Zelle verifiziert ist, sagen wir es; die offenen Zellen werden getrackt, nicht versteckt.
Warum es kein Schmerz mehr sein muss
Der Security-Cluster ist Security-Konfiguration, die still Discovery bricht. ZeroDDS implementiert die volle Spec und behandelt die gefährlichen Kombinationen als explizite Regressions-Tests über Vendoren, exponiert über eine Profile-API — sodass das Einschalten von Security ein unterstützter, getesteter Schritt ist statt eines separaten Debugging-Projekts.
Selbst reproduzieren
# Secured-Runtime via Profile + FFI-Entry-Point; Cross-Vendor-Secured-Matrix-
# Harness exerziert encrypt-discovery + topic-protection-Kombinationen.
→ Zurück zur Übersicht · Weiter: Performance