Skip to content

Compendium chapter 22 encryption

github-actions[bot] edited this page Sep 23, 2026 · 1 revision

Navigation: Home > Pages

Kapitel 22b: VerschlΓΌsselung

"Kryptographie ist die letzte Verteidigungslinie β€” sie macht gestohlene Daten wertlos."


Überblick

Dieses Kapitel beschreibt das vollstΓ€ndige VerschlΓΌsselungskonzept von ThemisDB: von der TransportverschlΓΌsselung ΓΌber Data-at-Rest bis hin zur feingranularen Column-Level Encryption fΓΌr sensible Felder und der VerschlΓΌsselung von Vektordaten.

Was Sie in diesem Kapitel lernen werden:

  • Kryptographie-Policy und zugelassene Algorithmen
  • Transport-VerschlΓΌsselung (TLS 1.3)
  • Data-at-Rest Encryption auf Storage-Ebene
  • Column-Level Encryption (AES-256-GCM) fΓΌr Felder
  • Vektor-VerschlΓΌsselung (HNSW-kompatibel)
  • Key Management (KEK/DEK-Hierarchie, Vault, HSM, PKCS#11)
  • Post-Quantum Hybrid Encryption
  • BSI C5 / ISO 27001 / DSGVO Compliance

Voraussetzungen: Kapitel 21a (Authentifizierung), Kapitel 36 (Security Hardening).


22.1 Kryptographie-Policy (Überblick)

ThemisDB folgt einer verbindlichen Kryptographie-Policy, die auf BSI TR-02102-1, NIST SP 800-38D und ISO/IEC 27001 basiert.

22.1.1 Zugelassene Algorithmen

Anwendungsfall Algorithmus SchlΓΌssellΓ€nge Standard
Symmetrische VerschlΓΌsselung (primΓ€r) AES-256-GCM 256 bit BSI C5 CRY-01
Symmetrische VerschlΓΌsselung (alt.) ChaCha20-Poly1305 256 bit NIST
Asymmetrische VerschlΓΌsselung RSA-OAEP/SHA-256 β‰₯2048 bit BSI
Elliptic Curve ECDH/P-256, P-384 β€” NIST
Key Exchange X25519, X448 β€” RFC 7748
Hashing SHA-256, SHA-384, SHA-512 β€” FIPS 180-4
SchlΓΌsselableitung HKDF-SHA-256 β€” RFC 5869
Post-Quantum (Hybrid) CRYSTALS-Kyber-768 + X25519 β€” NIST PQC Round 3

Explizit verboten:

  • ❌ AES-ECB (Pattern Leakage, keine Authentifizierung)
  • ❌ DES / 3DES (veraltet)
  • ❌ RC4 (Keystream-Bias)
  • ❌ MD5 / SHA-1 fΓΌr Sicherheitszwecke

22.2 Transport-VerschlΓΌsselung (TLS)

22.2.1 TLS 1.3 Konfiguration

ThemisDB erzwingt TLS 1.3 fΓΌr alle externen Verbindungen. TLS 1.2 wird nur fΓΌr Legacy-Clients mit expliziter Konfiguration unterstΓΌtzt.

# themisdb.yml β€” TLS-Konfiguration
server:
  tls:
    enabled: true
    min_version: "TLS1.3"
    cert_file: "/etc/themisdb/tls/server.crt"
    key_file:  "/etc/themisdb/tls/server.key"
    ca_file:   "/etc/themisdb/tls/ca.crt"
    cipher_suites:
      - TLS_AES_256_GCM_SHA384
      - TLS_CHACHA20_POLY1305_SHA256
      - TLS_AES_128_GCM_SHA256

22.2.2 Mutual TLS (mTLS) fΓΌr Cluster-Kommunikation

Shard-to-Shard-Kommunikation verwendet mTLS mit gegenseitiger Zertifikatsverifizierung:

cluster:
  shard_communication:
    mtls:
      enabled: true
      client_cert: "/etc/themisdb/tls/shard.crt"
      client_key:  "/etc/themisdb/tls/shard.key"
      verify_peer: true
Shard A ──── [mTLS: Client-Cert + Server-Cert Validation] ──── Shard B
              ↑                                           ↑
         CA-signed                                   CA-signed

Implementierung: src/security/ β€” mTLS ΓΌber OpenSSL; Details: docs/de/security/MTLS_SHARD_COMMUNICATION.md


22.3 Data-at-Rest Encryption (Storage-Ebene)

22.3.1 RocksDB Encryption-at-Rest

ThemisDB kann RocksDB mit einem Encryption-Provider konfigurieren, der alle SST-Dateien und den WAL verschlΓΌsselt.

// Konfiguration in StorageEngine
rocksdb::DBOptions options;
std::shared_ptr<rocksdb::EncryptionProvider> provider;
rocksdb::EncryptionProvider::CreateFromString(
    rocksdb::ConfigOptions{},
    "AES",
    &provider);
options.env = rocksdb::NewEncryptedEnv(rocksdb::Env::Default(),
                                        provider);

22.3.2 VerschlΓΌsselte Backups

Backups werden mit AES-256-GCM verschlΓΌsselt. Der Backup-SchlΓΌssel ist vom operativen DEK getrennt und wird im Key Management System (KMS) gespeichert.

DB-Daten ──── Backup ──── AES-256-GCM (Backup-DEK) ──── Backup-Datei
                                 ↑
                    Backup-DEK verschlΓΌsselt mit KEK (Vault/HSM)

22.4 Column-Level Encryption (Feld-Ebene)

Column-Level Encryption (CLE) ermΓΆglicht die granulare VerschlΓΌsselung einzelner Datenfelder at-rest β€” unabhΓ€ngig vom Storage-Layer.

22.4.1 Architektur

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Application Layer                                       β”‚
β”‚   EncryptedField<T>  (Template, transparent fΓΌr Devs)   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                    β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Encryption Layer                                        β”‚
β”‚   FieldEncryption: AES-256-GCM Encrypt/Decrypt          β”‚
β”‚   Key Cache: TTL-basiert (1h, max. 1000 Keys)           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚                    β”‚
   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”
   β”‚ Key Management  β”‚  β”‚  RocksDB Storage β”‚
   β”‚ VaultKeyProviderβ”‚  β”‚ (Ciphertext)     β”‚
   β”‚ HSMProvider     β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Implementierung: include/security/encryption.h (610 Zeilen), src/security/field_encryption.cpp (712 Zeilen)

22.4.2 EncryptedField<T> Template

Entwickler nutzen das EncryptedField<T> Template β€” VerschlΓΌsselung ist transparent:

#include "security/encryption.h"

struct UserProfile {
    // Sensible Felder werden automatisch verschlΓΌsselt
    EncryptedField<std::string>  email;
    EncryptedField<std::string>  ssn;
    EncryptedField<std::string>  credit_card;
    EncryptedField<std::vector<float>> embedding;  // Vektordaten

    // Nicht-sensible Felder unverschlΓΌsselt
    std::string username;
    uint64_t    created_at;
};

// Nutzung β€” transparent:
UserProfile profile;
profile.email.set("alice@example.com");          // Encrypt on set
std::string email = profile.email.get();         // Decrypt on get

22.4.3 AES-256-GCM Encrypt/Decrypt

// Intern: FieldEncryption::encrypt()
struct EncryptedBlob {
    std::string  key_id;         // z.B. "user_emails"
    uint32_t     key_version;    // FΓΌr Key Rotation
    std::vector<uint8_t> iv;     // 12 Bytes β€” einmalig pro Operation
    std::vector<uint8_t> ciphertext;
    std::vector<uint8_t> tag;    // 16 Bytes GCM Auth-Tag
};

EncryptedBlob blob = field_encryption.encrypt(
    plaintext_bytes,
    "user_emails",    // key_id
    {}                // optional AAD (Additional Authenticated Data)
);

Wichtig: Jede VerschlΓΌsselungsoperation generiert einen neuen, zufΓ€lligen IV (96 bit / 12 Bytes). Wiederverwendung von IVs ist fatal fΓΌr GCM-Sicherheit.

22.4.4 Key Rotation (ohne Downtime)

ThemisDB unterstΓΌtzt Lazy Re-Encryption und Dual-Write:

Alt-Key (v1) ──── Lesen:  EntschlΓΌsseln mit v1
                  Schreiben: Neu verschlΓΌsseln mit v2 (Dual-Write)

Nach vollstΓ€ndiger Migration: Alt-Key v1 lΓΆschen
// Key Rotation auslΓΆsen
POST /keys/rotate
{ "key_id": "user_emails" }

// Antwort
{ "success": true, "key_id": "user_emails", "new_version": 3 }

22.5 Vektor-VerschlΓΌsselung

Vektordaten (Embeddings) kΓΆnnen ebenfalls verschlΓΌsselt gespeichert werden, was HNSW-Γ„hnlichkeitssuche auf verschlΓΌsselten Daten ermΓΆglicht.

22.5.1 AnsΓ€tze

Ansatz Performance Suchbarkeit Empfehlung
Individuelle VerschlΓΌsselung (pro Vektor) ⭐⭐⭐ βœ… vollstΓ€ndig (EntschlΓΌsselung vor HNSW) Empfohlen
Batch-VerschlΓΌsselung (BlΓΆcke) ⭐⭐⭐⭐ βœ… batch-level FΓΌr große Datasets
Storage-Level (RocksDB) ⭐⭐⭐⭐⭐ βœ… vollstΓ€ndig Einfachste Integration
Homomorphe VerschlΓΌsselung ⭐ βœ… direkt auf Ciphertext Experimentell (zu langsam)

Empfohlener Ansatz: Individuelle VektorverschlΓΌsselung (AES-256-GCM) kombiniert mit RocksDB-Level-Encryption.

22.5.2 Konfiguration

# themisdb.yml
vector:
  encryption:
    enabled: true
    key_id: "vector_embeddings"
    algorithm: "AES-256-GCM"
    batch_decrypt_threshold: 1000  # Batch-EntschlΓΌsselung fΓΌr HNSW-Suche

22.6 Key Management (KEK/DEK-Hierarchie)

22.6.1 SchlΓΌssel-Hierarchie

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Master Key (MK)                            β”‚
β”‚  β†’ Schutz durch HSM / Cloud KMS             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                  β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Key Encryption Key (KEK)                   β”‚
β”‚  β†’ VerschlΓΌsselt DEKs                       β”‚
β”‚  β†’ Rotation: jΓ€hrlich (BSI C5 CRY-02)       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                  β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Data Encryption Keys (DEK)                 β”‚
β”‚  β†’ Einer pro Feld-Kategorie (email, ssn...) β”‚
β”‚  β†’ Rotation: 90 Tage (empfohlen)            β”‚
β”‚  β†’ Versioniert fΓΌr Lazy Re-Encryption       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

22.6.2 KeyProvider Interface

class KeyProvider {
public:
    virtual ~KeyProvider() = default;
    virtual std::vector<uint8_t> getKey(
        const std::string& key_id,
        uint32_t version = 0) = 0;
    virtual uint32_t getCurrentVersion(
        const std::string& key_id) = 0;
    virtual bool rotateKey(const std::string& key_id) = 0;
};

22.6.3 Provider-Implementierungen

Provider Produktionsreif Use Case
MockKeyProvider βœ… Development / Tests
VaultKeyProvider βœ… (739 Zeilen) Enterprise KMS (HashiCorp Vault)
HSMProvider (PKCS#11) βœ… (1056 Zeilen) Hardware Security Module

VaultKeyProvider β€” HashiCorp Vault KV v2 und Transit Engine:

security:
  key_provider: "vault"
  vault:
    address: "https://vault.example.com:8200"
    token_env: "VAULT_TOKEN"
    kv_mount: "secret"
    transit_mount: "transit"
    timeout_ms: 5000
    cache_ttl_seconds: 3600

HSMProvider β€” PKCS#11 fΓΌr Hardware-SchlΓΌsselschutz:

security:
  key_provider: "hsm"
  hsm:
    library_path: "/usr/lib/softhsm/libsofthsm2.so"
    slot_id: 0
    pin_env: "HSM_PIN"
    key_label_prefix: "themisdb_"

22.7 Post-Quantum Hybrid Encryption

ThemisDB implementiert Post-Quantum Hybrid Encryption als Vorbereitung auf quantencomputer-resistente Kryptographie.

22.7.1 Hybrid-Ansatz

Klassisch: X25519 (ECDH)      ─┐
                                β”œβ”€β”€ HKDF-SHA-256 β†’ Kombinierter Key β†’ AES-256-GCM
PQC:       CRYSTALS-Kyber-768  β”€β”˜

Durch die Kombination beider SchlΓΌsselaustauschmechanismen bleibt die VerschlΓΌsselung auch dann sicher, wenn einer der Algorithmen kompromittiert wird (klassisch durch Quantencomputer, PQC durch analytische Angriffe).

Implementierung: src/security/post_quantum_crypto.cpp

security:
  post_quantum:
    enabled: false  # Opt-in (erhΓΆht Key-Exchange-Overhead ~2ms)
    algorithm: "kyber768_x25519_hkdf_sha256"

22.8 BSI C5 / ISO 27001 / DSGVO Compliance

22.8.1 Compliance-Matrix

Kontrolle Anforderung ThemisDB-Implementierung Status
BSI C5 CRY-01 Kryptographie-Policy CRYPTOGRAPHY_POLICY.md βœ…
BSI C5 CRY-02 SchlΓΌsselmanagement VaultKeyProvider / HSMProvider βœ…
BSI C5 CRY-03 Data-at-Rest Encryption RocksDB Encryption + Column-Level βœ…
BSI C5 CRY-04 Data-in-Transit Encryption TLS 1.3 + mTLS βœ…
BSI C5 CRY-05 SchlΓΌsselrotation Lazy Re-Encryption, Dual-Write βœ…
BSI C5 CRY-06 Kryptographische IntegritΓ€t GCM Auth-Tag βœ…
ISO 27001 A.10 Kryptographie-Kontrollen VollstΓ€ndig abgedeckt βœ…
DSGVO Art. 32 Geeignete technische Maßnahmen AES-256-GCM + Key Rotation βœ…
DSGVO Art. 25 Privacy by Design EncryptedField<T> als Default βœ…

Gesamtbewertung: βœ… BSI C5 KONFORM (Audit: docs/de/security/BSI_C5_COLUMN_ENCRYPTION_COMPLIANCE.md)


22.9 Performance-Charakteristika

Operation Overhead Messmethode
AES-256-GCM Encrypt (1 KB) < 1 ms tests/test_encryption_perf.cpp
AES-256-GCM Decrypt (1 KB) < 1 ms β€”
Key Cache Hit < 0,1 ms TTL-basierter In-Memory-Cache
Key Cache Miss (Vault) 2–10 ms Netzwerk-RTT abhΓ€ngig
HSM-Operation 5–20 ms Hardware-abhΓ€ngig
TLS Handshake (TLS 1.3) 1–5 ms 0-RTT fΓΌr Wiederverbindungen
Vector Encrypt (1536-dim float) < 2 ms Batch-Mode empfohlen

Batch-Optimierung: FΓΌr Massen-Operationen (z.B. Vektorindex-Rebuild) unterstΓΌtzt FieldEncryption Batch-Encrypt/Decrypt mit OpenSSL-Pipeline.


22.10 Troubleshooting

Problem Ursache LΓΆsung
EncryptionError: key not found Key ID existiert nicht in KMS GET /keys prΓΌfen; Key-Konfiguration validieren
DecryptionError: tag mismatch Datenkorruption oder falscher Key Key-Version prΓΌfen; ggf. Backup wiederherstellen
Hohe Latenz bei EntschlΓΌsselung Key Cache Miss Cache TTL erhΓΆhen; Vault-Verbindung prΓΌfen
TLS Handshake fehlgeschlagen Zertifikat abgelaufen openssl x509 -in server.crt -dates prΓΌfen
HSM nicht erreichbar PKCS#11 Library-Pfad falsch library_path in Config prΓΌfen
VAULT_TOKEN nicht gesetzt ENV-Variable fehlt Deployment-Konfiguration prΓΌfen

22.11 Phase-3-Sync: WeiterfΓΌhrende Referenzen (docs/de/) {#chapter22_11_cross-references}

Detaillierte Implementierungsdokumentation zu den behandelten VerschlΓΌsselungsthemen:

Thema Referenz
Column-Level Encryption (Design + Status) docs/de/security/security_column_encryption.md
Kryptographie-Policy docs/de/security/CRYPTOGRAPHY_POLICY.md
SchlΓΌsselverwaltung docs/de/security/security_key_management.md
Key Rotation Verfahren docs/de/security/security_key_rotation.md
Key Lifecycle Management docs/de/security/KEY_LIFECYCLE_MANAGEMENT.md
HSM PKCS#11 Integration docs/de/security/security_hsm.md
Vault LoRA Setup docs/de/security/vault_lora_setup.md
BSI C5 Column Encryption Compliance docs/de/security/BSI_C5_COLUMN_ENCRYPTION_COMPLIANCE.md
BSI C5 Executive Summary docs/de/security/BSI_C5_EXECUTIVE_SUMMARY.md
BSI C5 Multi-Model Encryption docs/de/security/BSI_C5_MULTI_MODEL_ENCRYPTION_ANALYSIS.md
Vektor-VerschlΓΌsselung (Quick Start) docs/de/security/QUICK_START_VECTOR_ENCRYPTION.md
Vektor-VerschlΓΌsselung (Impl. Summary) docs/de/security/VECTOR_ENCRYPTION_IMPLEMENTATION_SUMMARY.md
HNSW Encryption Konfiguration docs/de/security/HNSW_ENCRYPTION_CONFIGURATION.md
Encrypted HNSW Suchbarkeit docs/de/security/ENCRYPTED_HNSW_SEARCHABILITY.md
Symmetrische VerschlΓΌsselungsansΓ€tze docs/de/security/SYMMETRIC_ENCRYPTION_APPROACHES.md
VerschlΓΌsselung at-rest (Forschung) docs/de/security/security_at_rest_encryption_research.md
VerschlΓΌsselung Strategie docs/de/security/security_encryption_strategy.md
VerschlΓΌsselung Deployment docs/de/security/security_encryption_deployment.md
PKI-Architektur docs/de/security/security_pki_architecture.md
mTLS Shard-Kommunikation docs/de/security/MTLS_SHARD_COMMUNICATION.md
Security PrimΓ€rquellen docs/de/security/PRIMARY_SOURCES.md

β†’ ZurΓΌck: Kapitel 22a: Clients β†’ Weiter: Kapitel 36: Security Hardening


Kapitel 22b von 43 | Teil VI: Sicherheit | Phase-3-Sync: βœ… | ~3.200 WΓΆrter


ThemisDB 1.9.0-beta Β· Home Β· Module-Index Β· GitHub Β· Issues

ThemisDB Wiki

🏠 Overview

πŸ“š Compendium

πŸš€ Getting Started

πŸ“– Tutorials

πŸ“— User Guide

βš™οΈ Operations & Security

πŸ“Ÿ Ops Runbooks

πŸ—οΈ Architecture

πŸ“ ADRs

πŸ”§ Contributing

πŸ“‹ Governance

πŸ” Audit

🧩 Plugins

πŸ”Œ Adapters

πŸ’‘ Examples

πŸ“¦ Client SDKs

πŸŽ“ Training

πŸ› οΈ Tools

πŸ€– Developer LLM Wiki

Clone this wiki locally