Start · Sprachen · PHP · Referenz · sodium_crypto_box_secretkey

sodium_crypto_box_secretkey

Funktion

Extrahiert den geheimen Schlüssel (Secret Key) aus einem mit <code>sodium_crypto_box_keypair()</code> oder <code>sodium_crypto_box_keypair_from_secretkey_and_publickey()</code> erzeugten Schlüsselpaar.

seit PHP 7.2.0 Kategorie: crypto

Signatur

sodium_crypto_box_secretkey(string $key_pair): string

Beschreibung

sodium_crypto_box_secretkey() nimmt ein kombiniertes Schlüsselpaar-Binary (wie es von den sodium_crypto_box_keypair*()-Funktionen erzeugt wird) und gibt daraus den privaten/geheimen Schlüssel zurück. Das Schlüsselpaar ist intern eine Verkettung von Secret Key und Public Key; diese Funktion extrahiert nur den Secret-Key-Teil.

Der zurückgegebene Secret Key hat eine Länge von SODIUM_CRYPTO_BOX_SECRETKEYBYTES (32 Byte) und wird für die Ver- und Entschlüsselung mit sodium_crypto_box() bzw. sodium_crypto_box_open() benötigt. Er sollte niemals übertragen oder öffentlich gespeichert werden.

Typischer Einsatz: Ein Schlüsselpaar wird einmalig erzeugt und sicher gespeichert. Wenn nur der geheime Schlüssel – z. B. für die Entschlüsselung einer Nachricht – benötigt wird, kann er mit dieser Funktion aus dem gespeicherten Keypair extrahiert werden, ohne das Paar manuell zu zerlegen.

Verwenden Sie sodium_memzero(), um den Secret Key nach Benutzung sicher aus dem Speicher zu löschen, und sorgen Sie dafür, dass er ausschließlich in sicheren, verschlüsselten Speicherorten abgelegt wird.

Parameter

Name Typ Default Beschreibung
$key_pair Pflicht string Ein kombiniertes Keypair-Binary, wie es sodium_crypto_box_keypair() oder sodium_crypto_box_keypair_from_secretkey_and_publickey() zurückgibt. Die Länge muss exakt SODIUM_CRYPTO_BOX_KEYPAIRBYTES (64 Byte) betragen.

Rückgabewert

Typ
string
Beschreibung
Gibt den rohen binären Secret Key (32 Byte, Länge = SODIUM_CRYPTO_BOX_SECRETKEYBYTES) zurück. Im Fehlerfall (ungültige Schlüsselpaar-Länge) wird eine SodiumException geworfen.

Beispiele

Secret Key aus frisch generiertem Keypair extrahieren

<?php
// Neues Schlüsselpaar erzeugen
$keypair = sodium_crypto_box_keypair();

// Public Key und Secret Key extrahieren
$publicKey = sodium_crypto_box_publickey($keypair);
$secretKey = sodium_crypto_box_secretkey($keypair);

echo 'Public Key (hex):  ' . sodium_bin2hex($publicKey) . PHP_EOL;
echo 'Secret Key (hex):  ' . sodium_bin2hex($secretKey) . PHP_EOL;
echo 'Public Key Länge:  ' . strlen($publicKey) . ' Byte' . PHP_EOL;
echo 'Secret Key Länge:  ' . strlen($secretKey) . ' Byte' . PHP_EOL;

// Secret Key sicher aus dem Speicher löschen
sodium_memzero($secretKey);
sodium_memzero($keypair);
Public Key (hex): <32-Byte-Hex-String> Secret Key (hex): <32-Byte-Hex-String> Public Key Länge: 32 Byte Secret Key Länge: 32 Byte

Gespeichertes Keypair laden und zum Entschlüsseln verwenden

<?php
// Annahme: Keypair wurde bei der Erstellung base64-kodiert in einer Datei gespeichert
// $storedKeypairBase64 = file_get_contents('/secure/path/keypair.key');

// Simuliertes Beispiel
$aliceKeypair  = sodium_crypto_box_keypair();
$bobKeypair    = sodium_crypto_box_keypair();
$bobPublicKey  = sodium_crypto_box_publickey($bobKeypair);

// Alice verschlüsselt eine Nachricht für Bob
$nonce   = random_bytes(SODIUM_CRYPTO_BOX_NONCEBYTES);
$aliceSecretKey = sodium_crypto_box_secretkey($aliceKeypair);

$encryptBox = sodium_crypto_box_keypair_from_secretkey_and_publickey(
    $aliceSecretKey,
    $bobPublicKey
);
$ciphertext = sodium_crypto_box('Geheime Nachricht', $nonce, $encryptBox);

// Bob entschlüsselt — extrahiert seinen Secret Key aus dem Keypair
$bobSecretKey  = sodium_crypto_box_secretkey($bobKeypair);
$alicePublicKey = sodium_crypto_box_publickey($aliceKeypair);

$decryptBox = sodium_crypto_box_keypair_from_secretkey_and_publickey(
    $bobSecretKey,
    $alicePublicKey
);
$plaintext = sodium_crypto_box_open($ciphertext, $nonce, $decryptBox);

echo $plaintext . PHP_EOL;

// Schlüssel sicher löschen
sodium_memzero($aliceSecretKey);
sodium_memzero($bobSecretKey);
Geheime Nachricht

// Wichtig · Fallstricke

Sicherheitshinweise:

  • Der Secret Key darf niemals übertragen, geloggt oder in unsicheren Speicherorten abgelegt werden. Verwenden Sie verschlüsselte Datenbanken oder Secrets-Manager.
  • Nach der Verwendung sollte der Secret Key mit sodium_memzero() aus dem PHP-Speicher entfernt werden, um ihn vor Memory-Dump-Angriffen zu schützen.
  • Wenn das übergebene $key_pair nicht die exakte Länge von SODIUM_CRYPTO_BOX_KEYPAIRBYTES (64 Byte) hat, wird eine SodiumException geworfen. Fangen Sie diese in produktivem Code ab.
  • Die Libsodium-Extension ist seit PHP 7.2 fest eingebaut; für ältere PHP-Versionen war das PECL-Paket libsodium erforderlich.