Signatur
Beschreibung
sodium_crypto_aead_aes256gcm_keygen() erzeugt einen zufälligen 256-Bit-Schlüssel (32 Byte), der für die authentifizierte Verschlüsselung mit sodium_crypto_aead_aes256gcm_encrypt() und sodium_crypto_aead_aes256gcm_decrypt() verwendet werden kann. Die Funktion nutzt intern einen kryptografisch starken Zufallszahlengenerator und ist damit die empfohlene Methode zur sicheren Schlüsselerzeugung.
AES-256-GCM ist ein symmetrisches Verschlüsselungsverfahren mit integrierter Authentifizierung (AEAD — Authenticated Encryption with Associated Data). Neben dem eigentlichen Nachrichteninhalt kann zusätzlich ein öffentlicher, aber authentifizierter Kontext mitgegeben werden, der zwar nicht verschlüsselt, aber vor Manipulationen geschützt ist.
Wichtig: Nicht alle Prozessoren unterstützen AES-NI-Hardware-Beschleunigung. Bevor AES-256-GCM eingesetzt wird, sollte geprüft werden, ob die Funktion sodium_crypto_aead_aes256gcm_is_available() true zurückgibt. Auf Systemen ohne Hardware-Unterstützung empfiehlt sich stattdessen sodium_crypto_aead_chacha20poly1305_keygen().
Der erzeugte Schlüssel sollte niemals im Klartext gespeichert oder übertragen werden. Für die dauerhafte Speicherung bietet sich eine Ableitung aus einem Passwort mittels sodium_crypto_pwhash() oder die sichere Speicherung in einem Key-Management-System an.
Rückgabewert
SODIUM_CRYPTO_AEAD_AES256GCM_KEYBYTES (32 Byte) zurück, der als Schlüssel für AES-256-GCM-Operationen genutzt werden kann.Beispiele
Schlüssel erzeugen und Nachricht verschlüsseln
<?php
// Prüfen ob AES-256-GCM auf dieser Hardware verfügbar ist
if (!sodium_crypto_aead_aes256gcm_is_available()) {
throw new RuntimeException('AES-256-GCM wird auf dieser Hardware nicht unterstützt.');
}
// Schlüssel und Nonce generieren
$key = sodium_crypto_aead_aes256gcm_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES); // 12 Byte
$plaintext = 'Geheime Nachricht';
$additionalData = 'öffentlicher Kontext'; // nicht verschlüsselt, aber authentifiziert
// Verschlüsseln
$ciphertext = sodium_crypto_aead_aes256gcm_encrypt(
$plaintext,
$additionalData,
$nonce,
$key
);
echo 'Verschlüsselt (hex): ' . bin2hex($ciphertext) . PHP_EOL;
// Entschlüsseln
$decrypted = sodium_crypto_aead_aes256gcm_decrypt(
$ciphertext,
$additionalData,
$nonce,
$key
);
if ($decrypted === false) {
throw new RuntimeException('Entschlüsselung fehlgeschlagen — Daten wurden manipuliert!');
}
echo 'Entschlüsselt: ' . $decrypted . PHP_EOL;
// Schlüssel sicher aus dem Speicher entfernen
sodium_memzero($key);
Schlüssellänge und Hex-Kodierung zur Speicherung
<?php
if (!sodium_crypto_aead_aes256gcm_is_available()) {
throw new RuntimeException('AES-256-GCM nicht verfügbar.');
}
$key = sodium_crypto_aead_aes256gcm_keygen();
echo 'Schlüssellänge in Byte: ' . strlen($key) . PHP_EOL;
echo 'SODIUM_CRYPTO_AEAD_AES256GCM_KEYBYTES: ' . SODIUM_CRYPTO_AEAD_AES256GCM_KEYBYTES . PHP_EOL;
// Für Speicherung als Hex-String kodieren
$keyHex = bin2hex($key);
echo 'Schlüssel (hex, 64 Zeichen): ' . $keyHex . PHP_EOL;
// Aus Hex wieder zurück in Binärformat
$keyBin = hex2bin($keyHex);
sodium_memzero($key);
// Wichtig · Fallstricke
Hardware-Verfügbarkeit: AES-256-GCM ist nur auf Prozessoren mit AES-NI-Befehlssatz performant und sicher nutzbar. Vor dem Einsatz immer sodium_crypto_aead_aes256gcm_is_available() prüfen — ist sie false, liefert die Verschlüsselung einen Fehler.
Nonce-Wiederverwendung: Die Nonce (Number used once) darf für denselben Schlüssel niemals zweimal verwendet werden. Eine Wiederverwendung bricht die Sicherheitsgarantien von GCM vollständig. Für eine sichere Nonce-Strategie empfiehlt sich ein atomarer Zähler oder random_bytes(SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES).
Schlüsselverwaltung: Erzeugte Schlüssel sollten nach Gebrauch mit sodium_memzero() aus dem Arbeitsspeicher gelöscht werden, um das Auslesen durch andere Prozesse oder Speicher-Dumps zu erschweren.
Alternativen: Wenn die Hardware kein AES-NI unterstützt oder plattformübergreifende Kompatibilität benötigt wird, ist sodium_crypto_aead_chacha20poly1305_ietf_keygen() eine sichere und schnelle Alternative.