Signatur
Beschreibung
sodium_crypto_aead_aegis256_encrypt() implementiert das AEGIS-256-Verfahren, einen modernen AEAD-Algorithmus (Authenticated Encryption with Additional Data). Die Funktion verschlüsselt die Nachricht und erzeugt gleichzeitig einen Authentifizierungs-Tag, der sicherstellt, dass weder der Chiffretext noch die zusätzlichen Daten nach der Verschlüsselung verändert wurden.
Zusätzliche Daten (additional_data) werden nicht verschlüsselt, fließen aber in den Authentifizierungs-Tag ein. Damit eignen sich zusätzliche Daten ideal für Metadaten wie Header, Versionsnummern oder Empfänger-IDs, die lesbar, aber vor Manipulation geschützt sein sollen.
AEGIS-256 gilt als sehr performant und sicher und ist eine der modernsten Alternativen zu AES-GCM oder ChaCha20-Poly1305. Der 256-Bit-Schlüssel und der 256-Bit-Nonce bieten ein hohes Sicherheitsniveau. Der korrekte Nonce muss bei jeder Verschlüsselung eindeutig sein — ein Nonce-Wiederverwendungsangriff kann die Vertraulichkeit kompromittieren.
Zum Entschlüsseln und Verifizieren des Chiffretexts wird die Gegenfunktion sodium_crypto_aead_aegis256_decrypt() verwendet. Schlüssel und Nonce müssen dabei exakt übereinstimmen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $message Pflicht | string | Die Klartextnachricht, die verschlüsselt werden soll. Kann beliebige Binärdaten enthalten. | |
| $additional_data Pflicht | string | Zusätzliche, nicht verschlüsselte Daten, die in den Authentifizierungs-Tag einfließen. Kann ein leerer String sein, falls keine zusätzlichen Daten benötigt werden. | |
| $nonce Pflicht | string | Ein einmaliger Zufallswert (Nonce) mit einer Länge von exakt SODIUM_CRYPTO_AEAD_AEGIS256_NPUBBYTES (32 Bytes). Der Nonce darf für denselben Schlüssel niemals wiederverwendet werden. |
|
| $key Pflicht | string | Der geheime Schlüssel mit einer Länge von exakt SODIUM_CRYPTO_AEAD_AEGIS256_KEYBYTES (32 Bytes). Kann mit sodium_crypto_aead_aegis256_keygen() erzeugt werden. |
Rückgabewert
SODIUM_CRYPTO_AEAD_AEGIS256_ABYTES (32 Bytes) länger als die ursprüngliche Nachricht.Beispiele
Einfache Verschlüsselung und Entschlüsselung mit AEGIS-256
<?php
// Schlüssel und Nonce erzeugen
$key = sodium_crypto_aead_aegis256_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_AEGIS256_NPUBBYTES);
$nachricht = 'Geheime Nachricht: Angriff um Mitternacht!';
$zusatzDaten = 'Empfänger: Server-A';
// Verschlüsseln
$chiffretext = sodium_crypto_aead_aegis256_encrypt(
$nachricht,
$zusatzDaten,
$nonce,
$key
);
echo 'Chiffretext (hex): ' . bin2hex($chiffretext) . PHP_EOL;
// Entschlüsseln
$klartext = sodium_crypto_aead_aegis256_decrypt(
$chiffretext,
$zusatzDaten,
$nonce,
$key
);
if ($klartext === false) {
echo 'Authentifizierung fehlgeschlagen!';
} else {
echo 'Entschlüsselt: ' . $klartext . PHP_EOL;
}
// Speicher bereinigen
sodium_memzero($key);
Verschlüsselung mit Zusatzdaten für HTTP-Header-Schutz
<?php
$key = sodium_crypto_aead_aegis256_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_AEGIS256_NPUBBYTES);
// Metadaten als zusätzliche Daten (werden authentifiziert, aber nicht verschlüsselt)
$header = json_encode(['version' => 1, 'user_id' => 42]);
$nutzlast = json_encode(['konto_stand' => 12345.67]);
$verschluesselt = sodium_crypto_aead_aegis256_encrypt(
$nutzlast,
$header,
$nonce,
$key
);
// Übertragung: $header (Klartext), $nonce, $verschluesselt
// Empfängerseite:
$entschluesselt = sodium_crypto_aead_aegis256_decrypt(
$verschluesselt,
$header, // Muss identisch sein
$nonce,
$key
);
if ($entschluesselt !== false) {
$daten = json_decode($entschluesselt, true);
echo 'Kontostand: ' . $daten['konto_stand'] . PHP_EOL;
} else {
echo 'Manipulation erkannt oder falscher Schlüssel!';
}
sodium_memzero($key);
// Wichtig · Fallstricke
Nonce-Einzigartigkeit: Der Nonce muss für jede Verschlüsselung mit demselben Schlüssel einzigartig sein. Eine Wiederverwendung des Nonces kann die gesamte Vertraulichkeit des Verschlüsselungsschemas kompromittieren. Verwende stets random_bytes(SODIUM_CRYPTO_AEAD_AEGIS256_NPUBBYTES) zur Erzeugung.
Schlüsselschutz: Schlüssel sollten nach der Verwendung mit sodium_memzero() aus dem Speicher gelöscht werden, um das Risiko von Speicher-Dump-Angriffen zu minimieren.
Verfügbarkeit: AEGIS-256 ist ab PHP 8.4.0 verfügbar und erfordert libsodium >= 1.0.19. Stelle sicher, dass die verwendete Serverumgebung diese Voraussetzungen erfüllt. Ältere PHP-Versionen müssen auf sodium_crypto_aead_chacha20poly1305_encrypt() oder sodium_crypto_aead_aes256gcm_encrypt() ausweichen.
Manipulation der Zusatzdaten: Wenn beim Entschlüsseln andere Zusatzdaten als beim Verschlüsseln übergeben werden, schlägt die Authentifizierung fehl und die Funktion gibt false zurück. Das Rückgabeergebnis muss daher stets geprüft werden.