Signatur
Beschreibung
sodium_crypto_scalarmult_ristretto255_base() multipliziert den festgelegten Basis-Punkt der Ristretto255-Kurve mit dem gegebenen Skalar n und liefert den resultierenden Kurvenpunkt als öffentlichen Schlüssel zurück. Dies ist die grundlegende Operation für die Erzeugung von Schlüsselpaaren im Ristretto255-Schema.
Ristretto255 ist eine Gruppe auf Basis von Curve25519, die cofactor-freie, prime-order-Arithmetik ermöglicht. Dadurch lassen sich Protokolle sicherer implementieren, da Probleme mit kleinen Untergruppen eliminiert werden, die bei reiner Curve25519- bzw. Edwards25519-Arithmetik auftreten können.
Der geheime Skalar n muss exakt SODIUM_CRYPTO_SCALARMULT_RISTRETTO255_SCALARBYTES (32 Byte) lang sein. Der zurückgegebene öffentliche Schlüssel ist ebenfalls 32 Byte lang (SODIUM_CRYPTO_SCALARMULT_RISTRETTO255_BYTES). Diese Funktion eignet sich u. a. für Zero-Knowledge-Proofs, Passwort-authentifizierte Schlüsselvereinbarungsprotokolle (PAKE) und andere kryptografische Protokolle, die eine sichere Gruppenarithmetik erfordern.
Wichtig: Der Skalar n wird nicht automatisch auf den Gruppenordnung-Bereich reduziert oder geclamped – für korrekte Ergebnisse sollte er zufällig oder über sodium_crypto_core_ristretto255_scalar_random() erzeugt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $n Pflicht | string | Der geheime Skalar als binärer String. Muss genau SODIUM_CRYPTO_SCALARMULT_RISTRETTO255_SCALARBYTES (32 Byte) lang sein. Wird mit dem Basis-Punkt multipliziert, um den öffentlichen Schlüssel zu erzeugen. |
Rückgabewert
SODIUM_CRYPTO_SCALARMULT_RISTRETTO255_BYTES (32 Byte) Länge. Wirft eine SodiumException, wenn der Skalar ungültig ist oder ein Fehler auftritt.Beispiele
Schlüsselpaar mit Ristretto255 erzeugen
<?php
// Zufälligen geheimen Skalar erzeugen
$secretKey = sodium_crypto_core_ristretto255_scalar_random();
// Öffentlichen Schlüssel aus dem geheimen Skalar berechnen
$publicKey = sodium_crypto_scalarmult_ristretto255_base($secretKey);
echo 'Geheimer Schlüssel (hex): ' . sodium_bin2hex($secretKey) . PHP_EOL;
echo 'Öffentlicher Schlüssel (hex): ' . sodium_bin2hex($publicKey) . PHP_EOL;
echo 'Länge öffentlicher Schlüssel: ' . strlen($publicKey) . ' Byte' . PHP_EOL;
Diffie-Hellman-ähnliche Schlüsselvereinbarung mit Ristretto255
<?php
// Alice erzeugt ihr Schlüsselpaar
$aliceSecret = sodium_crypto_core_ristretto255_scalar_random();
$alicePublic = sodium_crypto_scalarmult_ristretto255_base($aliceSecret);
// Bob erzeugt sein Schlüsselpaar
$bobSecret = sodium_crypto_core_ristretto255_scalar_random();
$bobPublic = sodium_crypto_scalarmult_ristretto255_base($bobSecret);
// Beide berechnen das gemeinsame Geheimnis
$sharedAlice = sodium_crypto_scalarmult_ristretto255($aliceSecret, $bobPublic);
$sharedBob = sodium_crypto_scalarmult_ristretto255($bobSecret, $alicePublic);
// Das gemeinsame Geheimnis muss übereinstimmen
if (sodium_memcmp($sharedAlice, $sharedBob) === 0) {
echo 'Gemeinsames Geheimnis stimmt überein!' . PHP_EOL;
echo 'Shared Secret (hex): ' . sodium_bin2hex($sharedAlice) . PHP_EOL;
} else {
echo 'Fehler: Gemeinsames Geheimnis stimmt NICHT überein!' . PHP_EOL;
}
// Wichtig · Fallstricke
Versionshinweis: Die Ristretto255-Funktionen sind erst ab PHP 8.1.0 verfügbar. Stelle sicher, dass libsodium in einer ausreichend aktuellen Version vorliegt (mindestens 1.0.18).
Sicherheit: Der geheime Skalar n sollte niemals direkt aus unsicheren Quellen stammen oder wiederverwendet werden. Nutze ausschließlich sodium_crypto_core_ristretto255_scalar_random() oder sichere Ableitungsfunktionen (z. B. HKDF) zur Skalarerzeugung.
Fehlerbehandlung: Die Funktion wirft eine SodiumException, wenn der übergebene Skalar die falsche Länge hat oder der Ergebnis-Punkt der Einheitspunkt (neutrales Element) der Gruppe ist, da dies auf einen ungültigen Skalar hinweist.
Abgrenzung: Diese Funktion multipliziert immer mit dem festen Basis-Punkt. Für die Multiplikation zweier beliebiger Punkte steht sodium_crypto_scalarmult_ristretto255() zur Verfügung.