Start · Sprachen · PHP · Referenz · sodium_crypto_auth_keygen

sodium_crypto_auth_keygen

Funktion

Erzeugt einen kryptografisch sicheren, zufälligen Schlüssel für die Verwendung mit <code>sodium_crypto_auth()</code> und <code>sodium_crypto_auth_verify()</code>.

seit PHP 7.2.0 Kategorie: crypto

Signatur

sodium_crypto_auth_keygen(): string

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

Typ
string
Beschreibung
Gibt einen zufälligen Binär-String der Länge 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!';
}
Nachricht ist authentisch und wurde nicht 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;
Hex-Schlüssel (32 Byte = 64 Hex-Zeichen): [64 zufällige Hex-Zeichen] Länge in Byte: 32 MAC erzeugt: [128 zufällige Hex-Zeichen]

// 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() oder base64_encode() kodieren, bevor er in Textformaten (JSON, .env) gespeichert wird.
  • sodium_crypto_auth bietet 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.