-
Notifications
You must be signed in to change notification settings - Fork 1
security_pki_architecture
Status: β
Produktiv (mit ENV-Konfiguration) | βοΈ Stub-Modus (Development)
Version: 1.0 (November 2025)
Compliance: eIDAS-konform, DSGVO Art. 32, HGB Β§ 257
ThemisDB integriert eine Public Key Infrastructure (PKI) fΓΌr kryptographische Signaturen und Zertifikats-basiertes Key-Management. Die Implementierung erfΓΌllt eIDAS-Anforderungen fΓΌr qualifizierte elektronische Signaturen und unterstΓΌtzt Encrypt-then-Sign-Workflows fΓΌr Audit-Logs und SAGA-Transaktionen.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ThemisDB PKI Stack β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββ β
β β PKI Client βββββ PKI Key Providerβββββ Vault/HSM β β
β β (Signing) β β (KEK Derivation)β β (Optional) β β
β ββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββ β
β β β β
β β β β
β ββββββββΌββββββββββββββββββββββββΌββββββββββββββββββββββββ β
β β OpenSSL (RSA-SHA256/384/512) β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Certificate Store (X.509 PEM) β β
β β - Private Key (RSA 2048/4096) β β
β β - Public Certificate (with Serial Number) β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Datei: src/utils/pki_client.cpp | include/utils/pki_client.h
- Sign: RSA-basierte digitale Signaturen (SHA256/SHA384/SHA512)
- Verify: Signaturverifizierung mit Public Key
- Certificate Handling: X.509-Zertifikatsverarbeitung
- Dual-Mode: Produktiv (OpenSSL) vs. Stub (Base64, nur Dev)
struct PKIConfig {
std::string key_path; // Path to RSA private key (PEM)
std::string cert_path; // Path to X.509 certificate (PEM)
std::string key_passphrase; // Optional passphrase for encrypted keys
std::string vault_addr; // Optional: HashiCorp Vault address
std::string vault_token; // Optional: Vault access token
std::string signing_algorithm; // "RSA-SHA256", "RSA-SHA384", "RSA-SHA512"
};| Variable | Beschreibung | Beispiel |
|---|---|---|
THEMIS_PKI_PRIVATE_KEY |
Pfad zum RSA Private Key | /etc/themis/pki/service.key |
THEMIS_PKI_CERTIFICATE |
Pfad zum X.509 Zertifikat | /etc/themis/pki/service.crt |
THEMIS_PKI_KEY_PASSPHRASE |
Passphrase fΓΌr verschlΓΌsselte Keys (optional) | SecurePass123! |
THEMIS_PKI_VAULT_ADDR |
Vault-Server-URL (optional) | https://vault.example.com:8200 |
THEMIS_PKI_VAULT_TOKEN |
Vault Access Token (optional) | s.abcdef123456 |
THEMIS_PKI_SIGNING_ALGORITHM |
Signatur-Algorithmus |
RSA-SHA256 (default) |
Fallback: Wenn THEMIS_PKI_PRIVATE_KEY nicht gesetzt ist, aktiviert sich automatisch der Stub-Modus (Base64-Dummy-Signaturen, nur fΓΌr Development).
#include "utils/pki_client.h"
// Konfiguration aus ENV
PKIConfig cfg = PKIConfig::fromEnvironment();
// PKI Client erstellen
PKIClient pki(cfg);
// Daten signieren
std::vector<uint8_t> data = {'H', 'e', 'l', 'l', 'o'};
auto result = pki.sign(data);
if (result.success) {
std::cout << "Signature: " << result.signature_b64 << std::endl;
std::cout << "Algorithm: " << result.algorithm << std::endl;
std::cout << "Cert Serial: " << result.cert_serial << std::endl;
}
// Signatur verifizieren
bool valid = pki.verify(data, result.signature_b64);
std::cout << "Valid: " << valid << std::endl;Datei: src/security/pki_key_provider.cpp | include/security/pki_key_provider.h
- KEK-Ableitung aus PKI-Zertifikat: Verwendet X.509-Serial und Subject-DN als HKDF-Material
- Produktions-Key-Hierarchie: Master KEK β Collection KEK β Field DEK
- Vault-Integration: Optional HSM-backed Key-Storage ΓΌber HashiCorp Vault
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β X.509 Certificate (Subject DN + Serial Number) β
βββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ
β
β HKDF-SHA256
βΌ
ββββββββββββββββββββββββββ
β Master KEK (256 bit) β
βββββββββββββ¬βββββββββββββ
β
β HKDF-SHA256 (salt: collection_name)
βΌ
ββββββββββββββββββββββββββ
β Collection KEK β
βββββββββββββ¬βββββββββββββ
β
β HKDF-SHA256 (salt: entity_id + field_name)
βΌ
ββββββββββββββββββββββββββ
β Field DEK (256 bit) β
ββββββββββββββββββββββββββ
β
β AES-256-GCM
βΌ
ββββββββββββββββββββββββββ
β Encrypted Field Data β
ββββββββββββββββββββββββββ
#include "security/pki_key_provider.h"
// PKI-Config laden
PKIConfig pki_cfg = PKIConfig::fromEnvironment();
// PKIKeyProvider erstellen
auto pki_kp = std::make_shared<PKIKeyProvider>(
pki_cfg.cert_path,
pki_cfg.vault_addr,
pki_cfg.vault_token
);
// Master KEK ableiten
auto kek = pki_kp->getKey("master_kek");
// Collection-spezifischen Key ableiten
auto collection_key = pki_kp->deriveCollectionKey("master_kek", "users");Integration: src/server/saga_logger.cpp
- Encryption: Sensitive Felder werden mit AES-256-GCM verschlΓΌsselt
- Serialization: JSON-Serialisierung des Audit-Log-Eintrags
- Signing: RSA-SHA256-Signatur ΓΌber serialisierte Daten
- Storage: Log-Eintrag + Signatur werden in RocksDB persistiert
#include "server/saga_logger.h"
#include "utils/pki_client.h"
// SAGA Logger mit PKI-Client
SAGALogger logger(field_encryption, pki_client, cfg);
// Log-Eintrag erstellen (wird automatisch signiert)
logger.logOperation(saga_id, step_id, "INSERT",
"users", entity_pk, entity_json);
// Signatur wird in RocksDB unter `saga_signature:` gespeichert{
"signature": "base64_encoded_rsa_signature",
"algorithm": "RSA-SHA256",
"cert_serial": "1A2B3C4D5E6F",
"timestamp": 1731868800000,
"signed_data_hash": "sha256_of_original_data"
}Datei: src/security/lek_manager.cpp | include/security/lek_manager.h
- LEK-Wrapping: VerschlΓΌsselung von Log-Encryption-Keys mit KEK aus PKI
- Key-Rotation: UnterstΓΌtzt LEK-Rotation fΓΌr Compliance-Anforderungen
- Escrow: Optionales Key-Escrow fΓΌr BehΓΆrdenzugriff (DSGVO Art. 23)
#include "security/lek_manager.h"
LEKManager lek_mgr(db, pki_client, key_provider);
// LEK erstellen und mit KEK wrappen
auto lek = lek_mgr.createLEK("audit_logs_2025");
// LEK abrufen und entschlΓΌsseln
auto unwrapped_lek = lek_mgr.getLEK("audit_logs_2025");
// LEK rotieren (neue Version)
lek_mgr.rotateLEK("audit_logs_2025");# Keine ENV-Variablen β automatisch Stub-Modus
./themis_server
# Logs:
# [INFO] PKI Client: Running in STUB mode (no private key configured)
# [WARN] Signatures are Base64-encoded hashes, NOT cryptographically secure!Verwendung: Lokale Tests, CI/CD ohne echte Zertifikate
# 1. Zertifikat und Key generieren
openssl genrsa -out /etc/themis/pki/service.key 4096
openssl req -new -x509 -key /etc/themis/pki/service.key \
-out /etc/themis/pki/service.crt -days 3650 \
-subj "/C=DE/ST=Bavaria/L=Munich/O=ThemisDB/CN=themis.example.com"
# 2. ENV konfigurieren
export THEMIS_PKI_PRIVATE_KEY=/etc/themis/pki/service.key
export THEMIS_PKI_CERTIFICATE=/etc/themis/pki/service.crt
export THEMIS_PKI_SIGNING_ALGORITHM=RSA-SHA256
# 3. Server starten
./themis_server
# Logs:
# [INFO] PKI Client: Loaded private key from /etc/themis/pki/service.key
# [INFO] PKI Client: Certificate serial: 1A2B3C4D5E6F
# [INFO] PKI Client: Algorithm: RSA-SHA256# 1. CA-signiertes Zertifikat erhalten
# (von interner CA oder ΓΆffentlicher CA)
# 2. Key in HashiCorp Vault speichern (optional)
vault kv put secret/themis/pki \
private_key=@/path/to/service.key \
certificate=@/path/to/service.crt
# 3. ENV mit Vault-Integration
export THEMIS_PKI_PRIVATE_KEY=/etc/themis/pki/service.key
export THEMIS_PKI_CERTIFICATE=/etc/themis/pki/service.crt
export THEMIS_PKI_VAULT_ADDR=https://vault.example.com:8200
export THEMIS_PKI_VAULT_TOKEN=s.abc123def456
export THEMIS_PKI_SIGNING_ALGORITHM=RSA-SHA384
# 4. Server starten
./themis_serverVorteile:
- CA-Chain-Validierung
- Vault-backed Key-Rotation
- HSM-Integration ΓΌber Vault Transit Engine
Voraussetzungen:
- Zertifikat von qualifiziertem Vertrauensdiensteanbieter (QTSP)
- HSM (Hardware Security Module) fΓΌr Private Key Storage
- Zeitstempel-Dienst (TSA) fΓΌr Langzeitarchivierung
Konfiguration:
# 1. HSM-backed Key (z.B. PKCS#11)
export THEMIS_PKI_PRIVATE_KEY=/dev/pkcs11/slot0/key
export THEMIS_PKI_CERTIFICATE=/etc/themis/pki/eidas_qualified.crt
export THEMIS_PKI_SIGNING_ALGORITHM=RSA-SHA512 # HΓΆhere Sicherheit
# 2. Optional: TSA fΓΌr Zeitstempel
export THEMIS_PKI_TSA_URL=https://tsa.example.com/timestamp
# 3. Server starten
./themis_serverCompliance-Mapping:
| Anforderung | Umsetzung |
|---|---|
| eIDAS Art. 26 (Qualifizierte Signatur) | RSA-SHA512 mit QTSP-Zertifikat |
| eIDAS Art. 32 (Langzeitarchivierung) | TSA-Zeitstempel + Audit-Logs |
| eIDAS Art. 34 (Validierung) | X.509-Chain-Validierung |
Beschreibung: Signiert beliebige Daten mit PKI Private Key
Request:
{
"data": "SGVsbG8gV29ybGQ=", // Base64-encoded data
"algorithm": "RSA-SHA256" // Optional, default from config
}Response:
{
"signature": "base64_encoded_signature",
"algorithm": "RSA-SHA256",
"cert_serial": "1A2B3C4D5E6F",
"timestamp": 1731868800000,
"success": true
}Beschreibung: Verifiziert Signatur mit Public Key
Request:
{
"data": "SGVsbG8gV29ybGQ=",
"signature": "base64_encoded_signature",
"algorithm": "RSA-SHA256"
}Response:
{
"valid": true,
"cert_serial": "1A2B3C4D5E6F",
"message": "Signature verification successful"
}Beschreibung: Gibt Public Certificate zurΓΌck (fΓΌr Client-seitige Verifikation)
Response:
{
"certificate": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----",
"serial": "1A2B3C4D5E6F",
"subject": "/C=DE/ST=Bavaria/O=ThemisDB/CN=themis.example.com",
"issuer": "/C=DE/O=ThemisDB CA/CN=ThemisDB Root CA",
"valid_from": "2025-01-01T00:00:00Z",
"valid_to": "2035-01-01T00:00:00Z"
}-
Private Key Protection:
- Niemals im Git-Repository speichern
- Dateiberechtigungen:
chmod 400 service.key - VerschlΓΌsselte Keys mit Passphrase bevorzugen
-
Key-Rotation:
- RegelmΓ€Γige Rotation (z.B. jΓ€hrlich)
- Alte Signaturen bleiben verifizierbar (behalte alte Zertifikate)
-
HSM-Integration:
- FΓΌr Produktionsumgebungen: HSM-backed Keys
- UnterstΓΌtzte Standards: PKCS#11, Vault Transit Engine
- Certificate Pinning: Client-seitige Validierung der Certificate Fingerprints
- CRL/OCSP: RegelmΓ€Γige PrΓΌfung der Zertifikatswiderrufslisten
- Chain-Validierung: VollstΓ€ndige CA-Chain bis zum Root-Zertifikat
- Alle Sign/Verify-Operationen werden in Audit-Logs protokolliert
- Signatur-Metadaten (Timestamp, Algorithm, Cert Serial) werden persistiert
- Tamper-Evidence durch Encrypt-then-Sign
Ursache: Falscher Pfad oder verschlΓΌsselter Key ohne Passphrase
LΓΆsung:
# PrΓΌfen ob Key lesbar
openssl rsa -in /path/to/service.key -check -noout
# Falls verschlΓΌsselt: Passphrase setzen
export THEMIS_PKI_KEY_PASSPHRASE="YourPassphrase"Ursache: Falscher Public Key oder Datenkorruption
LΓΆsung:
# Manuell mit OpenSSL verifizieren
echo "SGVsbG8=" | base64 -d > data.bin
echo "signature_base64" | base64 -d > signature.bin
openssl dgst -sha256 -verify pubkey.pem -signature signature.bin data.binProblem: Produktionsserver lΓ€uft im Stub-Modus
LΓΆsung:
# PrΓΌfe ENV-Variablen
env | grep THEMIS_PKI
# Setze fehlende Variablen
export THEMIS_PKI_PRIVATE_KEY=/etc/themis/pki/service.key
export THEMIS_PKI_CERTIFICATE=/etc/themis/pki/service.crt
# Neustart
systemctl restart themis-server-
Dateien:
-
src/utils/pki_client.cpp- Core PKI Client -
src/security/pki_key_provider.cpp- KEK Derivation -
src/server/pki_api_handler.cpp- HTTP API -
src/server/saga_logger.cpp- Audit-Log-Integration
-
-
Standards:
- eIDAS Regulation (EU) No 910/2014
- X.509 v3 Certificate Standard (RFC 5280)
- RSA PKCS#1 v2.1 (RFC 3447)
- HKDF (RFC 5869)
-
Dependencies:
- OpenSSL 1.1+ (EVP, RSA, X.509)
- HashiCorp Vault (optional)
- libcurl (HTTP-Client fΓΌr Vault)
Letzte Aktualisierung: 17. November 2025
Version: 1.0
Autor: ThemisDB Development Team
ThemisDB 1.9.0-beta Β· Home Β· Wiki-Index Β· Module-Index Β· FAQ Β· Quick-Reference Β· GitHub Β· Issues Β· Discussions Β· License
- Batch Operations
- Best Practices
- CRUD Tutorial
- Custom Document Ingestion
- Getting Started Tutorial
- Interactive Examples
- Schema Design
- Video Tutorials
- AQL Reference
- AQL Examples
- AQL Overview
- AQL Feature Roadmap
- AQL Geospatial Guide
- AQL LLM Migration Guide
- AQL API
- AQL Grammar (EBNF)
- AQL Root Overview
- AQL Examples (root)
- API Reference
- API Module README
- OpenAPI Overview
- Client SDK Overview
- SDK Overview
- Operations
- Operations Overview
- Operations Runbook
- Operations Handbook
- ThemisCtl Admin Guide
- Pipeline E2E SOPs
- Deploy Overview
- Docker Overview
- Docker Hub README
- Helm Overview
- Packaging Overview
- Operator Overview
- Security Policy
- Production Hardening Checklist
- Security Hardening Guide
- Encryption Key Management
- Access Control Framework
- Zero Trust Policy
- API Authentication & Authorization
- HSM Production Setup
- PKCS11 Integration
- DSGVO / SOC2 Checklist
- Access Model Runbooks
- Access Model Dashboard
- Maturity Automation Runbook
- Access Review Automation
- Access Model Dashboard
- Access Model Runbooks
- Rights Revocation
- Dr Checklists
- Dr Testing
- Incident Response Playbook
- Incident Response Testing
- GPU Oom Recovery
- Grammar Debugging
- Metrics Scrape Troubleshooting
- Model Swap Procedure
- Quota Tuning
- Subagent Deployment
- Logging Configuration
- Content Model
- Crypto & Keys
- Feature Flags Reference
- Modular Architecture Roadmap
- Modularization Guide
- Module Architecture Index
- PostgreSQL Wire Protocol
- Query Scheduling
- Raft Consensus Design
- Resource Pooling
- Source Directory Guide
- Unified Access Model
- E1 001 Layered Retrieval Design
- E1 002 Ann Abstraction Strategy
- E1 003 Tensor Summary Types
- E1 004 Lora Package Distinction
- E1 005 Model Switch Compatibility
- E1 006 Federated Tensor Summaries
- E2 001 Evaluation Framework Design
- E2 002 Hardware Profile Strategy
- E2 003 Query Planner Routing Model
- E2 004 Approximation Governance Rules
- E2 005 Cross Layer Fallback Confidence Policy
- E3 001 Distributed Tensor Design
- E3 002 Manifest Coordination Strategy
- E3 003 Recovery And Erasure Choice
- E3 004 Tensor Fabric Infrastructure
- Contributing
- Contributing (root)
- Code of Conduct
- Support
- Maintainers
- CTest Guide
- Build Quick Reference
- Developer Wiki Index
- Build / Test / CI
- Module Index
- Branching Strategy
- Disabled Stub Policy
- Docs PR Policy
- GA Promotion Sign Off
- Github Milestones Setup
- Maturity Claim Verification Checklist
- Maturity Evidence Registry
- Merge Gate Bot Config
- Merge Gate Status Live
- Phase 1 Closure Report
- Phase Closure Policy
- Phase Dependency Graph
- Phase3 Enforcement Runbook
- Plugin Submodule Rollback
- PR Version Targeting
- PR Version Targeting Backfill
- Production Ready 2026 Delivery Plan
- Query Module Status
- Readme
- Release Promotion Gate Policy
- Release Validation Checklist
- Security Module 5671 Evidence Summary
- Sharding P6 Residual Risk Acceptance
- Sourcecode Compliance Governance
- Updates Development Status Sign Off
- Wave C Implementation Complete
- Blob Storage
- Cuda
- Ethics Ai
- Exporters
- Huggingface
- Image Analysis
- Importers
- RPC
- Scraper
- Themisdb Ai Watermark Detector
- User Storage Encrypted
- Chimera Architecture
- Chimera Future
- Chimera Readme
- Chimera Roadmap
- Covina Fastapi Ingestion Architecture
- Covina Fastapi Ingestion Future
- Covina Fastapi Ingestion Roadmap
- Vcc Base Architecture
- Vcc Base Future
- Vcc Base Roadmap
- Vcc Clara Ingestion Architecture
- Vcc Clara Ingestion Future
- Vcc Clara Ingestion Roadmap
- Vcc Veritas Architecture
- Vcc Veritas Future
- Vcc Veritas Roadmap
- 01 Hello World
- 02 Todo App
- 03 Contact Manager
- 04 Inventory System
- 05 Time Series Monitor
- 06 Graph Social Network
- 07 Vector Search Documents
- 08 Dms Erp System
- 09 Iot Sensor Network
- 10 Drone Image Analysis
- 11 Blog Wiki
- 12 Expense Tracker
- 13 Recipe Manager
- 14 Ecommerce Catalog
- 15 Event Management
- 16 Kanban Board
- 17 Crm
- 18 Realtime Chat
- 19 Recommendation Engine
- 20 Smart Home
- 21 Coding Platform
- 22 AQL Diagram Tool
- 23 Traveling Salesman
- 24 Moral Philosophy Debates
- API Versioning
- Distributed Sharding
- Feedback Plugins
- Geo
- Gnn
- Image Analysis
- Legal Lora Training
- LLM
- Lora Sync
- Migration
- Nlp
- Performance
- Railway
- Replication
- Rope Visualization
- Sample Product Config
- Security
- Client SDK Overview
- Quickstart
- Sdk Enhancements
- Sdk Implementation Summary
- Test Suite Readme
- Go
- Java
- Javascript
- Php
- Python
- Ruby
- Rust
- Typescript
- 01 Grundlegende Operationen
- 02 AQL Queries
- 03 Graph Daten
- 04 Multimodell Anwendung
- 01 Quickstart Guide
- 02 AQL Referenz Kurzuebersicht
- 03 Datenmodellierung Guide
- 04 Uebungsaufgaben
- 05 Best Practices Guide
- Training Documents
- Training Overview
- 01 Einfuehrung Und Uebersicht
- 02 Datenmodelle Und Architektur
- 03 AQL Abfragesprache
- 04 Installation Und Setup
- 05 Anwendungsbeispiele
- Training Presentations
- Dependencies Readme
- Processmonitor Readme
- Themis.admintools.shared Readme
- Themis.aqlquerybuilder Readme
- Themis.aqlquerybuilder Roadmap
- Themis.auditlogviewer Readme
- Themis.auditlogviewer Roadmap
- Themis.classificationdashboard Readme
- Themis.classificationdashboard Roadmap
- Themis.compliancereports Readme
- Themis.compliancereports Roadmap
- Themis.gisviewer.controlpanel Readme
- Themis.gisviewer.controlpanel Roadmap
- Themis.impactanalysisviewer Readme
- Themis.impactanalysisviewer Roadmap
- Themis.ingestiontool Readme
- Themis.ingestiontool Roadmap
- Themis.keyrotationdashboard Readme
- Themis.keyrotationdashboard Roadmap
- Themis.piimanager Readme
- Themis.piimanager Roadmap
- Themis.retentionmanager Readme
- Themis.retentionmanager Roadmap
- Themis.sagaverifier Readme
- Themis.sagaverifier Roadmap
- Themis.usbadmintool Readme
- Themis.usbadmintool Roadmap
- CI Readme
- CI Roadmap
- Compiler Diagnostics Readme
- Compiler Diagnostics Roadmap
- Completion Readme
- Copilot Ollama Router Readme
- Copilot Ollama Router Roadmap
- Gnn Readme
- Gnn Roadmap
- Rope Visualizer Readme
- Rope Visualizer Roadmap
- Tco Calculator Readme
- Tco Calculator Roadmap
- Tests Readme
- Tests Roadmap
- Themis Config Wx Readme
- Themis Docs Builder Readme
- Wikipedia Ingestion Readme