Signatur
Beschreibung
sodium_crypto_aead_chacha20poly1305_ietf_keygen() erzeugt einen zufälligen 256-Bit-Schlüssel (32 Byte), der für die symmetrische, authentifizierte Verschlüsselung mit dem ChaCha20-Poly1305-IETF-Algorithmus verwendet werden kann. Der Schlüssel eignet sich direkt als Eingabe für sodium_crypto_aead_chacha20poly1305_ietf_encrypt() und sodium_crypto_aead_chacha20poly1305_ietf_decrypt().
ChaCha20-Poly1305-IETF ist eine moderne, schnelle und sichere AEAD-Konstruktion (Authenticated Encryption with Associated Data), die sowohl Vertraulichkeit als auch Integrität und Authentizität der verschlüsselten Daten garantiert. Die IETF-Variante verwendet eine 96-Bit-Nonce (im Gegensatz zur originalen 64-Bit-Nonce) und ist daher besser für viele Protokoll-Szenarien geeignet.
Die Funktion nutzt intern den kryptographisch sicheren Zufallsgenerator der libsodium-Bibliothek und ist damit einer manuellen Schlüsselableitung über random_bytes() äquivalent – jedoch klarer in der Absicht und garantiert mit dem richtigen Schlüsselformat kompatibel.
Generierte Schlüssel sollten sicher gespeichert werden, z. B. in Umgebungsvariablen, einem Secrets-Manager oder einem verschlüsselten Schlüsselspeicher. Sie sollten niemals im Klartext in Quellcode oder Versionsverwaltung abgelegt werden.
Rückgabewert
SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES (32 Byte) zurück, der als Schlüssel für die ChaCha20-Poly1305-IETF-AEAD-Funktionen verwendet werden kann.Beispiele
Schlüssel generieren und Nachricht verschlüsseln
<?php
// Schlüssel und Nonce erzeugen
$key = sodium_crypto_aead_chacha20poly1305_ietf_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES); // 12 Byte
$plaintext = 'Geheime Nachricht';
$additionalData = 'optionale-kontextdaten';
// Verschlüsseln
$ciphertext = sodium_crypto_aead_chacha20poly1305_ietf_encrypt(
$plaintext,
$additionalData,
$nonce,
$key
);
// Entschlüsseln
$decrypted = sodium_crypto_aead_chacha20poly1305_ietf_decrypt(
$ciphertext,
$additionalData,
$nonce,
$key
);
if ($decrypted === false) {
throw new RuntimeException('Entschlüsselung fehlgeschlagen – Daten wurden möglicherweise manipuliert.');
}
echo $decrypted;
// Speicher bereinigen
sodium_memzero($key);
Schlüssel Base64-kodiert speichern und wiederverwenden
<?php
// Schlüssel generieren und für spätere Verwendung kodieren
$key = sodium_crypto_aead_chacha20poly1305_ietf_keygen();
$keyBase64 = sodium_bin2base64($key, SODIUM_BASE64_VARIANT_ORIGINAL);
// Schlüssel z. B. in .env oder Secrets-Manager ablegen
echo 'CHACHA_KEY=' . $keyBase64 . PHP_EOL;
// Später: Schlüssel aus Umgebungsvariable laden
$keyFromEnv = sodium_base642bin(
getenv('CHACHA_KEY'),
SODIUM_BASE64_VARIANT_ORIGINAL
);
if (strlen($keyFromEnv) !== SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES) {
throw new RuntimeException('Ungültige Schlüssellänge.');
}
echo 'Schlüssel korrekt geladen, Länge: ' . strlen($keyFromEnv) . ' Byte' . PHP_EOL;
// Wichtig · Fallstricke
Sicherheitshinweise:
- Speichere generierte Schlüssel niemals im Klartext in Quellcode oder Versionsverwaltungssystemen wie Git.
- Die Nonce muss für jede Verschlüsselungsoperation mit demselben Schlüssel einmalig und einzigartig sein. Eine Wiederverwendung von Nonce + Schlüssel bricht die Sicherheit vollständig.
- Die Länge des Schlüssels ist durch die Konstante
SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES(32) definiert. - Verwende
sodium_memzero(), um den Schlüssel nach der Verwendung sicher aus dem Speicher zu entfernen. - Diese Funktion ist für die IETF-Variante gedacht (96-Bit-Nonce). Für die originale Variante existiert
sodium_crypto_aead_chacha20poly1305_keygen()mit einer 64-Bit-Nonce.