Start · Sprachen · PHP · Referenz · sodium_crypto_aead_aegis256_encrypt

sodium_crypto_aead_aegis256_encrypt

Funktion

Verschlüsselt und authentifiziert eine Nachricht mit dem AEGIS-256-Algorithmus (Authenticated Encryption with Additional Data).

seit PHP 8.4.0 Kategorie: crypto

Signatur

sodium_crypto_aead_aegis256_encrypt(string $message, string $additional_data, string $nonce, string $key): string

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

Typ
string
Beschreibung
Gibt den verschlüsselten Chiffretext zusammen mit dem angehängten Authentifizierungs-Tag als Binärstring zurück. Der Rückgabewert ist um 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);
Chiffretext (hex): <zufälliger Hex-String> Entschlüsselt: Geheime Nachricht: Angriff um Mitternacht!

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);
Kontostand: 12345.67

// 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.