Server-seitige Verschlüsselung
Die Server-seitige Verschlüsselung bietet eine zusätzliche Datenschutzebene. Alle Daten werden vor dem Schreiben in die Datenbank auf dem Server verschlüsselt, unabhängig vom Status der Client-seitigen Verschlüsselung.
Übersicht
Zweck
| Szenario | Schutz |
|---|---|
| Datenbankleck | Daten mit Serverschlüssel verschlüsselt |
| Backups | Backups enthalten nur Chiffretext |
| Physischer Serverzugriff | Daten ohne Schlüssel nicht lesbar |
| CSE deaktiviert | Server-Verschlüsselung funktioniert immer |
Funktionsweise
Data from client
↓
[Server encryption AES-256-CFB]
↓
Database (ciphertext)
Verschlüsselungsalgorithmus
Parameter
| Parameter | Wert |
|---|---|
| Algorithmus | AES-256-CFB |
| Schlüssellänge | 256 Bit |
| Modus | CFB (Cipher Feedback) |
| IV | 128 Bit, zufällig pro Verschlüsselung |
| Bibliothek | OpenSSL (über PHP) |
CFB-Modus
Eigenschaften des CFB-Modus (Cipher Feedback):
- Wandelt Blockchiffre in Stromchiffre um
- Kein Padding erforderlich
- Jeder Block hängt vom vorherigen ab
- IV muss für jede Verschlüsselung einzigartig sein
Struktur der verschlüsselten Daten
[IV (128 bits)] + [Ciphertext]
Der IV wird im Klartext zusammen mit dem Chiffretext gespeichert und zur Entschlüsselung verwendet.
Serververschlüsselungsschlüssel
Schlüsselgenerierung
Der Schlüssel wird einmalig bei der Systeminstallation generiert:
| Parameter | Wert |
|---|---|
| Größe | 256 Bit |
| Quelle | Kryptografisch sicherer Generator |
| Entropie | 256 Bit |
| Speicherformat | base64:{base64_encoded_key} |
Schlüsselspeicherung
Der Schlüssel kann auf zwei Arten gespeichert werden:
Methode 1: In einer Datei (Standard)
| Parameter | Wert |
|---|---|
| Standardpfad | {PROJECT_DIR}/init/encryption_key |
| Pfadüberschreibung | Umgebungsvariable ENCRYPTION_KEY_PATH |
| Format | base64:{base64_encoded_key} |
Methode 2: In einer Umgebungsvariable
Der Schlüssel kann direkt über eine Umgebungsvariable übergeben werden, ohne Datei.
Zugriffsberechtigungen einrichten
Bei der Speicherung des Schlüssels in einer Datei ist die Einrichtung der Zugriffsberechtigungen obligatorisch:
# Owner — application user (e.g., www-data)
chown www-data:www-data /path/to/encryption_key
# Read-only for owner
chmod 400 /path/to/encryption_key
Wenn Ihre Organisation strenge Sicherheitsrichtlinien oder regulatorische Anforderungen an die Speicherung kryptografischer Schlüssel hat (HSM, externe Secret Stores, zertifizierte Lösungen), kontaktieren Sie den technischen Support von Passwork, um Integrationsoptionen zu besprechen.
Schlüsselintegritätsprüfung
Die Schlüsselintegrität wird beim Anwendungsstart überprüft:
- Schlüssel aus Datei laden
- SHA-512-Hash des Schlüssels berechnen
- Mit gespeichertem Hash in der Datenbank vergleichen
- Bei Abweichung — Startfehler
Dies verhindert die Verwendung eines falschen Schlüssels und Datenbeschädigung.
Was auf dem Server verschlüsselt wird
Der Serverschlüssel verschlüsselt folgende Daten:
- Eintragsdaten (Passwörter, benutzerdefinierte Felder, Anhänge)
- Tresorschlüssel
- Eintragschlüssel
- Externe-Link-Daten
- LDAP-Integrationspasswörter
- SMTP-Serverpasswörter
Die Verschlüsselung erfolgt automatisch vor dem Speichern in der Datenbank, die Entschlüsselung beim Lesen.
Konfiguration
Umgebungsvariablen
| Variable | Beschreibung | Standardwert |
|---|---|---|
ENCRYPTION_KEY_PATH | Schlüsseldateipfad | %init_dir%/encryption_key |
ENCRYPTION_CIPHER | Verschlüsselungsalgorithmus | AES-256-CFB |
Chiffre-Konfiguration
Unterstützte Algorithmen
Das System unterstützt jeden Verschlüsselungsalgorithmus, der in OpenSSL auf dem Server verfügbar ist. Dies ermöglicht die Auswahl eines Algorithmus gemäß den Anforderungen Ihrer Organisation oder regulatorischen Vorgaben.
Beispiele unterstützter Algorithmen:
| Typ | Algorithmen |
|---|---|
| AES (256 Bit) | AES-256-CFB (Standard), AES-256-GCM, AES-256-CBC, AES-256-CTR |
| AES (128 Bit) | AES-128-GCM, AES-128-CBC, AES-128-CTR |
| ChaCha20 | ChaCha20-Poly1305 |
| Nationale Standards | Camellia, ARIA, GOST (falls von OpenSSL unterstützt) |
Die vollständige Liste der verfügbaren Algorithmen hängt von der auf dem Server installierten OpenSSL-Version ab.
Verfügbare Algorithmen anzeigen
Um alle auf dem Server verfügbaren Algorithmen anzuzeigen:
php bin/console app:cipher-methods:list
Der Befehl gibt eine Liste aller unterstützten Chiffriermethoden und ihrer Aliase aus OpenSSL aus.
Algorithmus ändern
Methode 1: Über Konfigurationsdatei
Erstellen oder bearbeiten Sie init/config.env:
ENCRYPTION_CIPHER=AES-256-GCM
Methode 2: Über Umgebungsvariable
export ENCRYPTION_CIPHER="AES-256-GCM"
- Der Algorithmuswechsel erfordert die Neuverschlüsselung aller Daten (ähnlich der Schlüsselrotation)
- Erstellen Sie vor dem Wechsel ein Backup
- Planen Sie ein Wartungsfenster für große Datenbanken
Algorithmusvalidierung
Das System validiert die Korrektheit des Algorithmus bei der ersten Verschlüsselung. Wenn ein nicht unterstützter Algorithmus angegeben wird, schlägt die Operation mit einem Fehler fehl.
Um die Verfügbarkeit eines Algorithmus zu prüfen:
// Check algorithm support
in_array('AES-256-GCM', openssl_get_cipher_methods())
Interaktion mit Client-seitiger Verschlüsselung
Zweistufiges Modell
Datenfluss bei aktivierter CSE:
- Benutzer gibt Passwort ein
- Client (Browser) verschlüsselt Daten mit Eintragschlüssel (AES-256-CBC) — Ebene 1 (CSE)
- Server empfängt bereits verschlüsselte Daten
- Server verschlüsselt mit Serverschlüssel (OpenSSL AES-256-CFB) — Ebene 2 (Server-seitig)
- Datenbank speichert doppelten Chiffretext
Bei deaktivierter CSE:
- Daten kommen im Klartext an
- Nur Server-Verschlüsselung wird angewendet
- Datenbank speichert eine Verschlüsselungsebene
Sicherheitsgarantien
| Szenario | CSE aktiviert | CSE deaktiviert |
|---|---|---|
| Datenbankleck | Zwei Schutzebenen | Server-Verschlüsselung |
| Serverkompromittierung | CSE schützt Daten | ⚠️ Daten zugänglich |
| Datenbankadministrator | Kann nicht lesen | Sieht Chiffretext |