Skip to content

CRYPTOGRAPHY_POLICY

GitHub Actions edited this page Jan 2, 2026 · 1 revision

Kryptographie-Policy fΓΌr ThemisDB

Version: 1.0
Datum: 15. Dezember 2025
Status: GΓΌltig
Genehmigt durch: ThemisDB Security Team
NÀchste Überprüfung: 15. Juni 2026


1. Zweck und Geltungsbereich

1.1 Zweck

Diese Kryptographie-Policy definiert die Standards und Anforderungen fΓΌr den Einsatz kryptographischer Verfahren in ThemisDB. Sie stellt sicher, dass alle kryptographischen Operationen den aktuellen Best Practices und Compliance-Anforderungen (BSI C5, ISO 27001, DSGVO) entsprechen.

1.2 Geltungsbereich

Diese Policy gilt fΓΌr:

  • Alle kryptographischen Operationen in ThemisDB
  • VerschlΓΌsselung von Daten at-rest und in-transit
  • SchlΓΌsselmanagement und -verwaltung
  • Entwicklung, Betrieb und Wartung

1.3 Referenzen

  • BSI C5 (2020): Cloud Computing Compliance Criteria Catalogue, Kontrollen CRY-01 bis CRY-06
  • BSI TR-02102-1: Kryptographische Verfahren: Empfehlungen und SchlΓΌssellΓ€ngen (2024-01)
  • ISO/IEC 27001:2013: Informationssicherheit, Anhang A.10 (Kryptographie)
  • NIST SP 800-38D: Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM)
  • NIST SP 800-57: Recommendation for Key Management

2. Kryptographische Standards

2.1 Zugelassene Algorithmen

2.1.1 Symmetrische VerschlΓΌsselung

PrimΓ€r:

Algorithmus:     AES-256-GCM (Advanced Encryption Standard)
Modus:          Galois/Counter Mode (AEAD - Authenticated Encryption with Associated Data)
SchlΓΌssellΓ€nge: 256 bit (32 bytes)
IV-LΓ€nge:       96 bit (12 bytes) - zufΓ€llig generiert pro Operation
Tag-LΓ€nge:      128 bit (16 bytes) - fΓΌr Authentifizierung

BegrΓΌndung:

  • AES-256 ist BSI-empfohlen fΓΌr "VS-NfD" (Verschlusssache - Nur fΓΌr den Dienstgebrauch)
  • GCM bietet sowohl Vertraulichkeit als auch IntegritΓ€t (AEAD)
  • Keine bekannten praktischen Angriffe auf AES-256-GCM

Alternative (falls erforderlich):

Algorithmus:     ChaCha20-Poly1305
SchlΓΌssellΓ€nge: 256 bit
Nonce-LΓ€nge:    96 bit
Tag-LΓ€nge:      128 bit

NICHT zugelassen:

  • ❌ AES-ECB (keine Authentifizierung, Pattern Leakage)
  • ❌ DES, 3DES (veraltet, zu kurze SchlΓΌssel)
  • ❌ RC4 (Bias in Keystream)
  • ❌ AES-CBC ohne HMAC (keine Authentifizierung)

2.1.2 Asymmetrische VerschlΓΌsselung

RSA:

SchlΓΌssellΓ€nge: Minimum 2048 bit, empfohlen 4096 bit
Padding:        OAEP (Optimal Asymmetric Encryption Padding) mit SHA-256
Verwendung:     SchlΓΌsselaustausch, Zertifikate

Elliptic Curve (ECDH, ECDSA):

Kurven:         P-256 (NIST), P-384, Curve25519
Verwendung:     TLS, SchlΓΌsselaustausch

NICHT zugelassen:

  • ❌ RSA < 2048 bit
  • ❌ RSA ohne Padding
  • ❌ Schwache Kurven (< 256 bit)

2.1.3 Hashing und Message Authentication

Hash-Funktionen:

PrimΓ€r:     SHA-256, SHA-384, SHA-512
Verwendung: IntegritΓ€tsprΓΌfung, Signaturen, HMAC

Message Authentication Codes (MAC):

Algorithmus: HMAC-SHA256
Verwendung:  Nachrichtenauthentifizierung

Key Derivation:

Algorithmus: HKDF-SHA256 (HMAC-based Key Derivation Function)
Verwendung:  Content-based metadata, SchlΓΌsselableitung

NICHT zugelassen:

  • ❌ MD5 (Kollisionen gefunden)
  • ❌ SHA-1 (schwach, Sunset 2020)

2.1.4 Digitale Signaturen

RSA:        RSA-SHA256, Minimum 2048 bit
ECDSA:      P-256 oder P-384
EdDSA:      Ed25519 (fΓΌr moderne Anwendungen)

2.2 Transport Layer Security (TLS)

Protokoll:      TLS 1.3 (primΓ€r), TLS 1.2 (fallback)
Cipher Suites:  
  - TLS_AES_256_GCM_SHA384
  - TLS_CHACHA20_POLY1305_SHA256
  - ECDHE-RSA-AES256-GCM-SHA384
  - ECDHE-RSA-AES128-GCM-SHA256

NICHT zugelassen:
  - SSLv2, SSLv3 (unsicher)
  - TLS 1.0, TLS 1.1 (veraltet)
  - Cipher Suites mit RC4, DES, MD5
  - NULL-Cipher
  - Export-Grade Cipher

3. SchlΓΌsselmanagement

3.1 SchlΓΌsselhierarchie

ThemisDB verwendet eine zweistufige SchlΓΌsselhierarchie:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Key Encryption Key (KEK)               β”‚
β”‚ - Gespeichert: Vault/KMS/HSM           β”‚
β”‚ - Rotation: JΓ€hrlich                   β”‚
β”‚ - LΓ€nge: 256 bit                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚ verschlΓΌsselt
               β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Data Encryption Keys (DEK)             β”‚
β”‚ - Gespeichert: VerschlΓΌsselt im Cache  β”‚
β”‚ - Rotation: VierteljΓ€hrlich            β”‚
β”‚ - LΓ€nge: 256 bit                       β”‚
β”‚ - TTL: 1 Stunde (Cache)                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

3.2 SchlΓΌsselerzeugung

Anforderungen:

  • Verwendung kryptographisch sicherer Zufallszahlengeneratoren (CSPRNG)
  • OpenSSL RAND_bytes() oder /dev/urandom (Linux)
  • Mindest-Entropie: 256 bit fΓΌr symmetrische SchlΓΌssel

Verfahren:

// Korrekt:
std::vector<uint8_t> key(32);  // 256 bit
if (RAND_bytes(key.data(), key.size()) != 1) {
    throw KeyGenerationException("Insufficient entropy");
}

// NICHT zulΓ€ssig:
std::srand(time(NULL));  // ❌ std::rand() ist NICHT kryptographisch sicher

3.3 SchlΓΌsselspeicherung

KEK (Key Encryption Keys):

  • MUSS in externem Key Management System gespeichert werden:
    • HashiCorp Vault (empfohlen)
    • AWS KMS, Azure Key Vault, GCP KMS
    • Hardware Security Module (HSM) mit PKCS#11
  • DARF NICHT im Klartext auf Festplatte gespeichert werden
  • Zugriff nur ΓΌber authentifizierte Service-Principals

DEK (Data Encryption Keys):

  • VerschlΓΌsselt mit KEK
  • Cache: Max. 1000 Keys, 1 Stunde TTL
  • LRU-Eviction bei Cache-Überlauf
  • Im Memory nur fΓΌr aktive Operationen

Verboten:

  • ❌ Hardcoded Keys im Quellcode
  • ❌ Keys in Konfigurationsdateien (ohne VerschlΓΌsselung)
  • ❌ Keys in Versionskontrolle (Git)
  • ❌ Keys in Logdateien

3.4 SchlΓΌsselrotation

Rotationsfrequenzen:

SchlΓΌsseltyp RegulΓ€re Rotation Notfall-Rotation
KEK (Master) JΓ€hrlich < 24 Stunden
DEK (Data) VierteljΓ€hrlich < 7 Tage
TLS-Zertifikate JΓ€hrlich (90 Tage empfohlen) < 24 Stunden

Rotationsprozess (Vier-Phasen-Modell):

  1. Phase 1: Dual-Write (Woche 1-2)

    • Neuer SchlΓΌssel wird erstellt
    • Neue Daten mit neuem SchlΓΌssel verschlΓΌsselt
    • Alte Daten mit altem SchlΓΌssel entschlΓΌsselbar
  2. Phase 2: Re-Encryption (Woche 3-4)

    • Hintergrundjob verschlΓΌsselt alte Daten neu
    • Progress Tracking und Monitoring
    • Idempotente Operation (Wiederholbar)
  3. Phase 3: Deprecation (Woche 5)

    • Alter SchlΓΌssel wird als DEPRECATED markiert
    • Monitoring fΓΌr unerwartete Zugriffe
    • 30 Tage Übergangszeit
  4. Phase 4: Deletion (Woche 8+)

    • Alter SchlΓΌssel wird gelΓΆscht
    • Audit-Log-Eintrag
    • BestΓ€tigung durch Security Team

Notfall-Rotation (bei Kompromittierung):

  • Sofortige Deaktivierung des kompromittierten SchlΓΌssels
  • Erstellung eines neuen SchlΓΌssels innerhalb 1 Stunde
  • Re-Encryption mit hoher PrioritΓ€t (24-48 Stunden)
  • Incident Report und Root-Cause-Analysis

3.5 SchlΓΌsselvernichtung

Verfahren:

  • Sicheres Überschreiben (mindestens 1x mit Zufallsdaten)
  • Verwendung von memset_s() oder explicit_bzero()
  • Loggen der Vernichtung im Audit-Log
  • Aufbewahrung von Metadaten (wann, wer, warum) fΓΌr 7 Jahre
// Korrekt:
void secureZero(std::vector<uint8_t>& key) {
    #ifdef _WIN32
        SecureZeroMemory(key.data(), key.size());
    #else
        explicit_bzero(key.data(), key.size());
    #endif
}

// NICHT ausreichend:
key.clear();  // ❌ Compiler kânnte optimieren

4. Implementierungsrichtlinien

4.1 Initialization Vector (IV) / Nonce

Anforderungen:

  • MUSS fΓΌr jede VerschlΓΌsselung einzigartig sein
  • MUSS kryptographisch zufΓ€llig generiert werden (CSPRNG)
  • DARF NICHT wiederverwendet werden (fΓΌr denselben SchlΓΌssel)
  • LΓ€nge: 96 bit (12 bytes) fΓΌr AES-GCM

Implementierung:

// Korrekt:
std::vector<uint8_t> iv(12);
RAND_bytes(iv.data(), iv.size());

// NICHT zulΓ€ssig:
std::vector<uint8_t> iv(12, 0);  // ❌ Null-IV
iv = last_iv;  // ❌ IV-Wiederverwendung
iv = counter++;  // ❌ Vorhersagbar

4.2 Authentication Tags

Anforderungen:

  • MUSS bei AEAD-Modi (GCM, CCM, ChaCha20-Poly1305) verwendet werden
  • Tag-LΓ€nge: Minimum 96 bit, empfohlen 128 bit
  • MUSS vor EntschlΓΌsselung verifiziert werden
  • Bei Verifikationsfehler: Sofort abbrechen, keine Information preisgeben

Implementierung:

// EntschlΓΌsselung mit Tag-Verifikation
int ret = EVP_DecryptFinal_ex(ctx, plaintext + len, &len);
if (ret <= 0) {
    // Tag-Verifikation fehlgeschlagen
    throw DecryptionException("Authentication failed");
    // ❌ NICHT: Details über den Fehler preisgeben
}

4.3 Padding (falls erforderlich)

Bei Modi die Padding erfordern (CBC):

  • MUSS PKCS#7 Padding verwendet werden
  • Padding Oracle-Angriffe vermeiden: Konstante Zeit fΓΌr Fehler
  • Besser: Verwende AEAD-Modi (kein Padding erforderlich)

4.4 Fehlerbehandlung

Anforderungen:

  • Kryptographische Fehler MÜSSEN geloggt werden (ohne sensitive Daten)
  • Keine Details ΓΌber Fehler an Angreifer zurΓΌckgeben
  • Konstante Zeit fΓΌr Fehlerbehandlung (Timing-Angriffe vermeiden)
// Gut:
try {
    decrypt(ciphertext);
} catch (const DecryptionException& e) {
    AuditLogger::log("Decryption failed", {
        {"key_id", key_id},
        {"error_type", "auth_failed"}
        // ❌ NICHT loggen: plaintext, key, iv
    });
    throw;  // Generic error nach außen
}

5. Compliance und Auditing

5.1 Audit-Logging

Zu loggende Ereignisse:

SchlΓΌsseloperationen:
  - SchlΓΌsselerzeugung (key_id, algorithm, creator)
  - SchlΓΌsselabruf (key_id, version, timestamp)
  - SchlΓΌsselrotation (key_id, old_version, new_version)
  - SchlΓΌsseldeaktivierung (key_id, reason)
  - SchlΓΌsselvernichtung (key_id, timestamp, operator)

VerschlΓΌsselungsoperationen:
  - VerschlΓΌsselung (key_id, key_version, success)
  - EntschlΓΌsselung (key_id, key_version, success/failure)
  - Authentifizierungsfehler (key_id, timestamp)

Administrative Operationen:
  - Policy-Γ„nderungen (what, who, when)
  - KonfigurationsΓ€nderungen (parameter, old_value, new_value)
  - Notfall-Rotationen (reason, initiated_by)

NICHT loggen:

  • ❌ Plaintext-Daten
  • ❌ Kryptographische SchlΓΌssel
  • ❌ IVs oder Nonces (außer als Hash)
  • ❌ VollstΓ€ndige Ciphertexte

5.2 Monitoring

Metriken:

Performance:
  - encryption_operations_total{operation, key_id}
  - encryption_duration_seconds{operation, quantile}
  - key_cache_hit_rate{key_id}

Sicherheit:
  - key_rotation_age_days{key_id}
  - deprecated_key_access_total{key_id}
  - encryption_errors_total{error_type}
  - authentication_failures_total{key_id}

Alerts:

Critical:
  - Deprecated key access > 0
  - Authentication failure rate > 1%
  - Key rotation overdue > 30 days

Warning:
  - Cache hit rate < 90%
  - Encryption error rate > 0.1%
  - Key age > 80% of rotation interval

5.3 Compliance-Nachweise

Erforderliche Dokumentation:

  • βœ… Kryptographie-Policy (dieses Dokument)
  • βœ… SchlΓΌsselmanagement-Verfahren
  • βœ… Rotations-Runbooks
  • βœ… Incident-Response-Playbook
  • βœ… Audit-Logs (7 Jahre Aufbewahrung)

RegelmÀßige Überprüfungen:

  • JΓ€hrliche Policy-Review
  • VierteljΓ€hrliche Compliance-Audits
  • Monatliche SchlΓΌsselrotations-Checks

6. Rollen und Verantwortlichkeiten

6.1 Security Officer

Verantwortlichkeiten:

  • Genehmigung von Policy-Γ„nderungen
  • Überwachung der Compliance
  • Incident-Response bei Kompromittierung
  • JΓ€hrliche Policy-Review

6.2 Development Team

Verantwortlichkeiten:

  • Implementierung gemÀß Policy
  • Code-Reviews fΓΌr kryptographische Operationen
  • Unit-Tests fΓΌr VerschlΓΌsselung
  • Dokumentation von Γ„nderungen

6.3 Operations Team

Verantwortlichkeiten:

  • SchlΓΌsselrotation durchfΓΌhren
  • KMS/Vault-Administration
  • Monitoring und Alerting
  • Backup und Recovery

6.4 Compliance Team

Verantwortlichkeiten:

  • Audit-ÜberprΓΌfungen
  • Compliance-Berichte
  • Externe Audits koordinieren

7. Ausnahmen und Genehmigungsprozess

7.1 Ausnahmeregelung

Ausnahmen von dieser Policy sind nur in begrΓΌndeten FΓ€llen zulΓ€ssig und erfordern:

  1. Schriftliche BegrΓΌndung mit technischer Rechtfertigung
  2. Risk Assessment durch Security Team
  3. Formale Genehmigung durch Security Officer
  4. Befristete GΓΌltigkeit (max. 12 Monate)
  5. Kompensatorische Kontrollen definieren
  6. Audit-Trail der Entscheidung

7.2 Legacy-Systeme

FΓΌr bestehende Implementierungen vor dieser Policy:

  • Migration Plan innerhalb 12 Monate
  • TemporΓ€re Ausnahme mit Risikobewertung
  • Monitoring der Legacy-Verwendung
  • Deprecation Timeline festlegen

8. Policy-Wartung

8.1 Γ„nderungsmanagement

Versionierung:

  • Semantic Versioning (MAJOR.MINOR.PATCH)
  • MAJOR: Grundlegende Γ„nderungen (neue Algorithmen)
  • MINOR: ErgΓ€nzungen (neue Abschnitte)
  • PATCH: Korrekturen, Klarstellungen

Γ„nderungsprozess:

  1. Vorschlag durch Security Team oder Stakeholder
  2. Impact Analysis
  3. Review durch Development, Ops, Compliance
  4. Genehmigung durch Security Officer
  5. Kommunikation an alle Teams
  6. Implementation Grace Period (30 Tage)

8.2 Review-Zyklus

  • RegulΓ€r: JΓ€hrlich (15. Dezember)
  • Ad-hoc: Bei SicherheitsvorfΓ€llen oder neuen Bedrohungen
  • Trigger: Neue BSI/NIST-Empfehlungen

8.3 Schulung

  • Alle Entwickler MÜSSEN diese Policy vor Implementierung kryptographischer Funktionen lesen
  • JΓ€hrliche Security-Awareness-Schulung
  • Spezielle Schulung bei Policy-Updates

9. AnhΓ€nge

9.1 Referenz-Implementierung

Siehe:

  • docs/security/security_column_encryption.md (Design)
  • include/security/encryption.h (API)
  • src/security/field_encryption.cpp (Implementierung)
  • tests/test_encryption.cpp (Tests)

9.2 Compliance-Mapping

BSI C5 ISO 27001 NIST Diese Policy
CRY-01 A.10.1.1 SC-12 Abschnitt 2
CRY-02 A.10.1.2 SC-12, SC-13 Abschnitt 3
CRY-03 A.10.1.1 SC-28 Abschnitt 2
CRY-04 A.13.1.1 SC-8 Abschnitt 2.2
CRY-05 A.10.1.2 SC-12 Abschnitt 3.4
CRY-06 A.10.1.1 SC-13 Abschnitt 4.2

9.3 Verbotene Praktiken

HΓ€ufige Fehler (NICHT tun):

// ❌ Schwache Schlüssel
std::vector<uint8_t> key = {'p', 'a', 's', 's', 'w', 'o', 'r', 'd'};

// ❌ IV-Wiederverwendung
static std::vector<uint8_t> iv(12, 0);  // Konstante IV

// ❌ Keine Authentifizierung
// CBC-Modus ohne HMAC

// ❌ Hardcoded Keys
const char* KEY = "super_secret_key_1234567890";

// ❌ Unsichere Zufallszahlen
std::srand(time(NULL));
int iv = std::rand();

// ❌ Fehler ignorieren
EVP_EncryptFinal_ex(ctx, out, &len);  // return value ignoriert

10. Genehmigung und Inkrafttreten

Erstellt von: ThemisDB Security Team
Erstellt am: 15. Dezember 2025

Genehmigt von:

  • Chief Security Officer (CSO)
  • Chief Technology Officer (CTO)
  • Compliance Officer

Inkrafttreten: 15. Dezember 2025
NÀchste Überprüfung: 15. Juni 2026 (6 Monate)

Γ„nderungshistorie:

Version Datum Autor Γ„nderungen
1.0 2025-12-15 Security Team Initiale Version

Dokumentstatus: βœ… Aktiv
Vertraulichkeit: Intern
Klassifizierung: Organisatorisch

ThemisDB Wiki

🏠 Overview

πŸš€ 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