-
Notifications
You must be signed in to change notification settings - Fork 1
security_encryption_roadmap
Stand: 5. Dezember 2025
Version: 1.0.0
Kategorie: Security
Status: ✅ Implementierung abgeschlossen (8. November 2025 - Aktualisiert)
- ✅ KEK Persistence - Persistent IKM Storage in RocksDB
- ✅ Schema-based Encryption - Write & Read Path mit JWT-Context
- ✅ JWT Claims Extraction - user_id (sub) + groups aus Token
- ✅ Complex Type Support - vector, vector<uint8_t>, nested JSON
- ✅ Group-DEK Management - Multi-Party Encryption mit Rotation
- ✅ QueryEngine Integration - HTTP-Layer Decryption (Post-Processing)
- ✅ Graph-Encryption Design - Schema-driven via edges collection
- ✅ Key Rotation Strategy - Lazy Re-Encryption (Write-Back on Read)
- ✅ Performance Benchmarks - 6 Benchmarks in
bench_encryption.cpp - ✅ E2E Integration Tests - 10 Test-Szenarien in
test_encryption_e2e.cpp - ✅ Content Blob Encryption - Per-user HKDF-based blob encryption with "anonymous" fallback
- ✅ Vector Metadata Encryption - Schema-driven metadata encryption in batch_insert (excl. embeddings)
- ✅ Lazy Re-Encryption (Content) - Automatic key version upgrade on blob read
-
Konfiguration:
config:content_encryption_schema→{enabled: true, key_id: "content_blob"} -
Ablauf:
- Import via
/content/import→ Blob verschlüsselt mit HKDF(DEK, user_id, "content_blob") - Falls
user_idleer → Fallback auf "anonymous" Salt - Storage: JSON
{key_id, key_version, iv, ciphertext, tag}untercontent_blob:{id} - Retrieval via
/content/{id}/blob→ Entschlüsselung mit identischem HKDF
- Import via
-
Test:
test_http_content.cpp::BlobEncryption_StoresEncrypted_DecryptsOnRetrieval
-
Konfiguration:
config:encryption_schema→{collections: {name: {encryption: {enabled: true, fields: [...]}}}} -
Legacy-Support: Alte Schema-Form
{collections: {name: {fields: {field: {encrypt: true}}}}}ebenfalls unterstützt -
Ablauf:
- Batch-Insert prüft Schema für Collection (z.B. "test_docs")
- Metadatenfelder (außer
vector_field) werden verschlüsselt: HKDF(DEK, user_id, "field:{name}") - BaseEntity speichert:
{field: monostate, field_enc: true, field_encrypted: JSON} - Embedding bleibt unverschlüsselt für ANN-Index
-
Test:
test_http_vector.cpp::VectorBatchInsert_EncryptsMetadata_WhenSchemaEnabled- Nutzt
BaseEntity::deserializestatt JSON-Parsing (binäres Format) - Prüft monostate plaintext,
_encflag,_encryptedJSON mit iv/tag/ciphertext
- Nutzt
-
Trigger: Beim Lesen eines Content Blobs wird
blob.key_versionmitlatest_versionverglichen -
Ablauf:
- Entschlüssle mit alter Version
- Falls
blob.key_version < latest_version: Re-encrypt mit neuem Key - Speichere aktualisierte Version transparent
- Log: "Content blob {id} successfully re-encrypted to version {v}"
-
Test:
test_http_content.cpp::BlobLazyReencryption_UpgradesKeyVersionOnRead- Hinweis: Vollständige Validierung benötigt KeyProvider-Mock für echte Rotation
cd c:\VCC\themis
.\build.ps1Erwartete Ausgabe:
- Alle Targets erfolgreich kompiliert
- Keine Compiler-Warnings bei encryption-bezogenen Dateien
Betroffene Dateien:
-
src/server/auth_middleware.cpp(JWT Claims) -
src/server/http_server.cpp(Schema Encryption) -
benchmarks/bench_encryption.cpp(Performance Tests) -
tests/test_encryption_e2e.cpp(E2E Tests)
cd build
.\bench_encryption.exe --benchmark_filter="Schema|HKDF|Vector"Erwartete Metriken:
-
BM_HKDF_Derive_FieldKey: <50 µs (Baseline für alle Feldschlüssel) -
BM_SchemaEncrypt_SingleField/64: <200 µs (Email-Verschlüsselung) -
BM_SchemaEncrypt_SingleField/256: <500 µs (Adresse-Verschlüsselung) -
BM_SchemaEncrypt_MultiField_Entity: <2 ms (Realistische User-Entity: 4 Felder) -
BM_VectorFloat_Encryption: <5 ms (768-dim BERT-Embedding)
Performance-Ziele:
- ✅ <1 ms pro Feld (Average)
- ✅ <10% Throughput-Degradation vs. unencrypted
Performance-Optimierungen:
Status Update (08.11.2025):
- ✅ AES-NI Hardware-Acceleration: IMPLEMENTIERT
- CPU-Feature-Detection in
include/security/crypto_capabilities.h - Automatische Nutzung via OpenSSL EVP (kein manueller SIMD-Code nötig)
- Benchmark-Funktion verfügbar für Performance-Messungen
- Speedup: 4-8x auf unterstützten CPUs
- CPU-Feature-Detection in
Ausstehende Optimierungen:
-
HKDF-Caching für wiederholte Feldschlüssel-Ableitungen
- Aktuelle Implementierung: HKDF pro Feld (kein Cache)
- Vorgeschlagene Architektur: Thread-local LRU-Cache für (user_id, field_name) → derived_key
- Erwarteter Speedup: 3-5x bei wiederholten Operationen
- Geschätzter Aufwand: 4-6 Stunden
-
Batch-Encryption für Multi-Field Entities
- Single HKDF call + parallel field encryption
- Erwarteter Speedup: 20-30% für Entities mit >3 Feldern
- Geschätzter Aufwand: 6-8 Stunden
cd build
.\themis_tests.exe --gtest_filter="EncryptionE2E.*"10 Test-Szenarien:
-
UserIsolation- User A != User B (verschiedene HKDF-Keys) -
GroupSharing- HR-Team teilt Salary-Daten (Group-DEK) -
GroupDEKRotation- User-Exit → Zugriff verloren (v2 Key) -
SchemaEncryption_MultiField- 3-Feld-Entity (email/phone/ssn) -
ComplexType_VectorFloat- 768-dim Embedding -
ComplexType_NestedJSON- Verschachtelte Metadaten -
KeyRotation_VersionTracking- DEK v1/v2 parallel -
Performance_BulkEncryption- 1000 Entities (>1000 ops/sec) -
CrossField_Consistency- Verschiedene Felder → verschiedene Keys -
EdgeCase_EmptyString- Empty String Handling
Erwartete Ausgabe:
[==========] Running 10 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 10 tests from EncryptionE2ETest
[ RUN ] EncryptionE2ETest.UserIsolation_UserA_CannotDecrypt_UserB_Data
[ OK ] EncryptionE2ETest.UserIsolation_UserA_CannotDecrypt_UserB_Data (15 ms)
...
[==========] 10 tests from 1 test suite ran. (XXX ms total)
[ PASSED ] 10 tests.
Falls Tests fehlschlagen:
-
UserIsolation: HKDF-Ableitung prüfen (Salt = user_id?) -
GroupSharing: Group-DEK Storage korrekt? (group_dek:<name>:v1) -
GroupDEKRotation: Version-Tracking in EncryptedBlob.key_version korrekt? -
Performance_BulkEncryption: Target >1000 ops/sec (sonst Optimierung nötig)
Encryption-Schema für sensible Collections aktivieren:
{
"collections": {
"users": {
"encryption": {
"enabled": true,
"fields": ["email", "phone", "ssn", "address"],
"context_type": "user"
}
},
"employees": {
"encryption": {
"enabled": true,
"fields": ["salary", "bonus", "tax_id"],
"context_type": "group",
"group": "hr_team"
}
},
"documents": {
"encryption": {
"enabled": true,
"fields": ["content", "metadata", "embedding"],
"context_type": "user"
}
},
"edges": {
"encryption": {
"enabled": true,
"fields": ["weight", "metadata", "properties"],
"context_type": "user"
}
}
}
}Deployment:
curl -X PUT http://localhost:8080/config/encryption-schema \
-H "Authorization: Bearer $ADMIN_JWT" \
-H "Content-Type: application/json" \
-d @config/encryption_schema.jsonPrometheus Metrics (falls implementiert):
-
themis_encryption_ops_total{operation="encrypt|decrypt"}- Total Operations -
themis_encryption_duration_seconds{operation="encrypt|decrypt"}- Latenz-Histogram -
themis_encryption_errors_total{type="decrypt_failed|key_not_found"}- Error Counter -
themis_hkdf_derivations_total- HKDF Key-Derivations
Grafana Dashboard:
- Encryption Latency (p50, p95, p99)
- Throughput (ops/sec)
- Error Rate (Decrypt Failures)
- Key Rotation Events
DEK Rotation (alle 90 Tage):
# 1. Neue DEK-Version erstellen
curl -X POST http://localhost:8080/admin/rotate-dek \
-H "Authorization: Bearer $ADMIN_JWT"
# 2. Lazy Re-Encryption aktiviert → Alte Daten werden bei nächstem Schreibzugriff migriert
# Kein manueller Re-Encryption-Job nötigGroup-DEK Rotation (User-Exit):
# 1. User aus Gruppe entfernen (VCC-User-System)
curl -X DELETE http://localhost:9090/api/v1/groups/hr_team/members/user_bob
# 2. Group-DEK rotieren
curl -X POST http://localhost:8080/admin/rotate-group-dek \
-H "Authorization: Bearer $ADMIN_JWT" \
-d '{"group": "hr_team"}'
# 3. Neue Daten automatisch mit v2 verschlüsselt
# Alte Daten (v1) bleiben lesbar für noch autorisierte UserMonitoring:
-
EncryptedBlob.key_versionDistribution (wie viele v1 vs. v2 Blobs?) - Re-Encryption Progress (% migriert nach Rotation)
-
Searchable Encryption - Order-Preserving Encryption für Range-Queries
- Problem:
WHERE salary > 50000funktioniert nicht auf verschlüsselten Feldern - Lösung: OPE (Order-Preserving Encryption) für sortierbare Ciphertexts
- Trade-Off: Schwächere Sicherheit vs. Query-Support
- Problem:
-
QueryEngine Push-Down Decryption
- Problem: Filter/Sort auf verschlüsselten Feldern limitiert
- Lösung: JWT-Context in QueryEngine propagieren, Filter nach Decrypt anwenden
- Aufwand: Mittel (Context-Propagation durch alle Query-Layers)
-
Performance-Optimierung
- HKDF-Caching: Wiederholte Feldschlüssel-Ableitungen cachen (TTL: 5 min)
- Batch-Encryption: Multi-Field Entities parallel verschlüsseln (ThreadPool)
- SIMD: AES-NI Intrinsics für OpenSSL prüfen
-
Homomorphic Encryption - Rechnen auf verschlüsselten Daten
- Use-Case: Aggregationen (
SUM(salary)) ohne Decrypt - Technologie: Partial Homomorphic Encryption (Paillier)
- Aufwand: Hoch (neue Crypto-Bibliothek, Performance-Risiko)
- Use-Case: Aggregationen (
-
Secure Multi-Party Computation (SMPC) - Verteilte Schlüsselverwaltung
- Use-Case: KEK aufgeteilt auf 3 Nodes (2-of-3 Threshold)
- Technologie: Shamir's Secret Sharing + HSM Integration
- Aufwand: Sehr Hoch (Enterprise-Feature)
-
Field-Level Access Control - Granulare Berechtigungen
- Use-Case: User kann
emaillesen, aber nichtssn - Implementierung: ACL-Schema erweitern, QueryEngine Enforcement
- Aufwand: Mittel (Policy-Engine Integration)
- Use-Case: User kann
Aktuelle Docs:
-
docs/encryption_strategy.md- Architektur & Implementierung -
docs/key_rotation_strategy.md- Rotation Workflows -
docs/encryption_next_steps.md- Dieses Dokument
API-Dokumentation:
-
GET/PUT /config/encryption-schema- Schema-Management -
POST /admin/rotate-dek- DEK Rotation -
POST /admin/rotate-group-dek- Group-DEK Rotation -
GET/PUT /entities?decrypt=true- Transparent Decryption
Code-Kommentare:
-
include/security/field_encryption.h- FieldEncryption Klasse -
src/server/http_server.cpp::handlePutEntity- Write Path -
src/server/http_server.cpp::handleGetEntity- Read Path -
utils/hkdf_helper.h- HKDF Key-Derivation
Entwickler:
- Encryption Infrastructure: GitHub Copilot (November 2025)
- Code-Review: ThemisDB Core Team
Issues:
- Performance-Probleme: Benchmarks durchführen, Profiling mit
perf(Linux) oder VS Profiler (Windows) - Decrypt-Fehler: WARN-Logs prüfen (
THEMIS_WARN: Failed to decrypt field) - Key-Rotation-Issues:
EncryptedBlob.key_versionFeld prüfen
Weitere Hilfe:
- ThemisDB Slack:
#encryptionChannel - Wiki:
https://github.com/makr-code/ThemisDB/wiki/Encryption
ThemisDB v1.3.4 | GitHub | Documentation | Discussions | License
Last synced: January 02, 2026 | Commit: 6add659
Version: 1.3.0 | Stand: Dezember 2025
- Übersicht
- Home
- Dokumentations-Index
- Quick Reference
- Sachstandsbericht 2025
- Features
- Roadmap
- Ecosystem Overview
- Strategische Übersicht
- Geo/Relational Storage
- RocksDB Storage
- MVCC Design
- Transaktionen
- Time-Series
- Memory Tuning
- Chain of Thought Storage
- Query Engine & AQL
- AQL Syntax
- Explain & Profile
- Rekursive Pfadabfragen
- Temporale Graphen
- Zeitbereichs-Abfragen
- Semantischer Cache
- Hybrid Queries (Phase 1.5)
- AQL Hybrid Queries
- Hybrid Queries README
- Hybrid Query Benchmarks
- Subquery Quick Reference
- Subquery Implementation
- Content Pipeline
- Architektur-Details
- Ingestion
- JSON Ingestion Spec
- Enterprise Ingestion Interface
- Geo-Processor Design
- Image-Processor Design
- Hybrid Search Design
- Fulltext API
- Hybrid Fusion API
- Stemming
- Performance Tuning
- Migration Guide
- Future Work
- Pagination Benchmarks
- Enterprise README
- Scalability Features
- HTTP Client Pool
- Build Guide
- Implementation Status
- Final Report
- Integration Analysis
- Enterprise Strategy
- Verschlüsselungsstrategie
- Verschlüsselungsdeployment
- Spaltenverschlüsselung
- Encryption Next Steps
- Multi-Party Encryption
- Key Rotation Strategy
- Security Encryption Gap Analysis
- Audit Logging
- Audit & Retention
- Compliance Audit
- Compliance
- Extended Compliance Features
- Governance-Strategie
- Compliance-Integration
- Governance Usage
- Security/Compliance Review
- Threat Model
- Security Hardening Guide
- Security Audit Checklist
- Security Audit Report
- Security Implementation
- Development README
- Code Quality Pipeline
- Developers Guide
- Cost Models
- Todo Liste
- Tool Todo
- Core Feature Todo
- Priorities
- Implementation Status
- Roadmap
- Future Work
- Next Steps Analysis
- AQL LET Implementation
- Development Audit
- Sprint Summary (2025-11-17)
- WAL Archiving
- Search Gap Analysis
- Source Documentation Plan
- Changefeed README
- Changefeed CMake Patch
- Changefeed OpenAPI
- Changefeed OpenAPI Auth
- Changefeed SSE Examples
- Changefeed Test Harness
- Changefeed Tests
- Dokumentations-Inventar
- Documentation Summary
- Documentation TODO
- Documentation Gap Analysis
- Documentation Consolidation
- Documentation Final Status
- Documentation Phase 3
- Documentation Cleanup Validation
- API
- Authentication
- Cache
- CDC
- Content
- Geo
- Governance
- Index
- LLM
- Query
- Security
- Server
- Storage
- Time Series
- Transaction
- Utils
Vollständige Dokumentation: https://makr-code.github.io/ThemisDB/