Start · Sprachen · PHP · Referenz · sodium_crypto_sign_publickey_from_secretkey

sodium_crypto_sign_publickey_from_secretkey

Funktion

Extrahiert den öffentlichen Ed25519-Schlüssel aus einem gegebenen geheimen Schlüssel.

seit PHP 7.2.0 Kategorie: crypto

Signatur

sodium_crypto_sign_publickey_from_secretkey(string $secret_key): string

Beschreibung

Die Funktion sodium_crypto_sign_publickey_from_secretkey() leitet aus einem 64-Byte langen geheimen Ed25519-Schlüssel den zugehörigen 32-Byte langen öffentlichen Schlüssel ab. Dies ermöglicht es, den öffentlichen Schlüssel jederzeit reproduzierbar aus dem geheimen Schlüssel zu rekonstruieren, ohne das ursprüngliche Schlüsselpaar erneut erzeugen zu müssen.

Typischer Anwendungsfall ist die Situation, in der nur der geheime Schlüssel sicher gespeichert wurde und der öffentliche Schlüssel zur Verifikation von Signaturen benötigt wird. Dies spart Speicherplatz, da nicht beide Schlüssel separat persistiert werden müssen.

Der geheime Schlüssel muss zuvor mit sodium_crypto_sign_keypair() oder sodium_crypto_sign_seed_keypair() erzeugt und anschließend über sodium_crypto_sign_secretkey() extrahiert worden sein. Ein ungültiger oder falscher Schlüssel führt zu einem Fehler.

Diese Funktion ist Teil der libsodium-Bibliothek, die in PHP ab Version 7.2 nativ integriert ist und moderne, sichere kryptographische Primitiven bereitstellt.

Parameter

Name Typ Default Beschreibung
$secret_key Pflicht string Der geheime Ed25519-Schlüssel mit einer Länge von SODIUM_CRYPTO_SIGN_SECRETKEYBYTES (64 Byte), der zuvor mit sodium_crypto_sign_secretkey() aus einem Schlüsselpaar extrahiert wurde.

Rückgabewert

Typ
string
Beschreibung
Gibt den abgeleiteten öffentlichen Ed25519-Schlüssel als binären String mit einer Länge von SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES (32 Byte) zurück.

Beispiele

Öffentlichen Schlüssel aus gespeichertem geheimen Schlüssel rekonstruieren

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

// Geheimen Schlüssel extrahieren und (z. B. in Datenbank) speichern
$secretKey = sodium_crypto_sign_secretkey($keypair);

// Später: öffentlichen Schlüssel aus dem geheimen Schlüssel ableiten
$publicKey = sodium_crypto_sign_publickey_from_secretkey($secretKey);

// Zur Verifikation nutzen
$message = 'Hallo Welt!';
$signature = sodium_crypto_sign_detached($message, $secretKey);

if (sodium_crypto_sign_verify_detached($signature, $message, $publicKey)) {
    echo 'Signatur gültig.' . PHP_EOL;
} else {
    echo 'Signatur ungültig!' . PHP_EOL;
}

// Sicherheitshalber geheimen Schlüssel aus dem Speicher löschen
sodium_memzero($secretKey);
Signatur gültig.

Vergleich des abgeleiteten mit dem originalen öffentlichen Schlüssel

<?php
// Schlüsselpaar erzeugen
$keypair = sodium_crypto_sign_keypair();
$originalPublicKey = sodium_crypto_sign_publickey($keypair);
$secretKey = sodium_crypto_sign_secretkey($keypair);

// Öffentlichen Schlüssel aus geheimem Schlüssel ableiten
$derivedPublicKey = sodium_crypto_sign_publickey_from_secretkey($secretKey);

// Beide sollten identisch sein
if (hash_equals($originalPublicKey, $derivedPublicKey)) {
    echo 'Abgeleiteter Schlüssel stimmt mit dem Original überein.' . PHP_EOL;
} else {
    echo 'Schlüssel stimmen NICHT überein!' . PHP_EOL;
}

sodium_memzero($secretKey);
Abgeleiteter Schlüssel stimmt mit dem Original überein.

// Wichtig · Fallstricke

Sicherheitshinweis: Der geheime Schlüssel sollte nach der Verwendung mit sodium_memzero() aus dem Arbeitsspeicher gelöscht werden, um zu verhindern, dass er bei einem Speicherdump kompromittiert werden kann.

Die Funktion wirft eine SodiumException, wenn die Länge des übergebenen $secret_key nicht exakt SODIUM_CRYPTO_SIGN_SECRETKEYBYTES (64 Byte) beträgt. Stellen Sie sicher, dass der Schlüssel immer mit den korrekten libsodium-Funktionen erzeugt wurde.

Verwechseln Sie den Ed25519-Schlüssel nicht mit einem X25519-Schlüssel (für Diffie-Hellman). Für die Konvertierung eines Ed25519-Schlüssels in einen X25519-Schlüssel stehen separate Funktionen wie sodium_crypto_sign_ed25519_sk_to_curve25519() zur Verfügung.