Signatur
Beschreibung
sodium_crypto_auth_keygen() generiert einen zufälligen Schlüssel mit der exakt richtigen Länge (SODIUM_CRYPTO_AUTH_KEYBYTES, d. h. 32 Byte) für den HMAC-SHA512/256-Authentifizierungs-Algorithmus der libsodium-Bibliothek. Die Funktion nutzt intern den kryptografisch sicheren Zufallszahlengenerator des Betriebssystems und ist damit die empfohlene Methode zur Schlüsselerzeugung.
Der zurückgegebene Schlüssel wird zusammen mit sodium_crypto_auth() verwendet, um eine Nachricht zu authentifizieren (Message Authentication Code, MAC), und mit sodium_crypto_auth_verify(), um die Integrität und Authentizität einer Nachricht zu prüfen. Dieses Verfahren schützt vor Manipulationen an übertragenen oder gespeicherten Daten, setzt aber voraus, dass der Schlüssel beiden Parteien bekannt ist (symmetrisches Verfahren).
Der erzeugte Schlüssel sollte sicher gespeichert (z. B. in Umgebungsvariablen oder einem Secret-Manager) und niemals im Quellcode fest eingebettet werden. Er ist ein Binär-String und sollte bei Bedarf mit sodium_bin2hex() oder base64_encode() für Transport oder Speicherung kodiert werden.
Rückgabewert
SODIUM_CRYPTO_AUTH_KEYBYTES (32 Byte) zurück, der als Schlüssel für sodium_crypto_auth() geeignet ist.Beispiele
Schlüssel erzeugen, Nachricht authentifizieren und verifizieren
<?php
// Schlüssel einmalig erzeugen und sicher speichern
$key = sodium_crypto_auth_keygen();
$message = 'Wichtige Nachricht, die nicht manipuliert werden darf.';
// MAC (Message Authentication Code) berechnen
$mac = sodium_crypto_auth($message, $key);
// Nachricht und MAC übertragen oder speichern ...
// Empfängerseite: Authentizität prüfen
if (sodium_crypto_auth_verify($mac, $message, $key)) {
echo 'Nachricht ist authentisch und wurde nicht manipuliert.';
} else {
echo 'Warnung: Nachricht wurde manipuliert!';
}
Schlüssel als Hex-String speichern und wiederherstellen
<?php
// Schlüssel erzeugen und als Hex-String kodieren (z. B. für .env-Datei)
$key = sodium_crypto_auth_keygen();
$keyHex = sodium_bin2hex($key);
echo 'Hex-Schlüssel (32 Byte = 64 Hex-Zeichen): ' . $keyHex . PHP_EOL;
echo 'Länge in Byte: ' . strlen($key) . PHP_EOL;
// Später: Schlüssel aus Hex wiederherstellen
$keyRestored = sodium_hex2bin($keyHex);
// Schlüssel für Authentifizierung verwenden
$mac = sodium_crypto_auth('Testdaten', $keyRestored);
echo 'MAC erzeugt: ' . sodium_bin2hex($mac) . PHP_EOL;
// Wichtig · Fallstricke
Sicherheitshinweise:
- Den erzeugten Schlüssel niemals im Quellcode hardcoden. Stattdessen Umgebungsvariablen, Secret-Manager oder verschlüsselte Konfigurationsdateien verwenden.
- Der Schlüssel muss geheim bleiben — wer den Schlüssel kennt, kann beliebige MACs fälschen.
- Bei der Übertragung des Schlüssels auf Binär-Zeichen achten: Den Schlüssel stets mit
sodium_bin2hex()oderbase64_encode()kodieren, bevor er in Textformaten (JSON, .env) gespeichert wird. sodium_crypto_authbietet keine Verschlüsselung, sondern nur Authentizität und Integrität. Für Vertraulichkeit ist zusätzlich Verschlüsselung (z. B.sodium_crypto_secretbox()) erforderlich.- Die Funktion ist seit PHP 7.2 im Kern verfügbar. Für ältere PHP-Versionen existiert die
paragonie/sodium_compat-Bibliothek.