Start · Sprachen · PHP · Referenz · sodium_crypto_scalarmult_ristretto255_base

sodium_crypto_scalarmult_ristretto255_base

Funktion

Berechnet den öffentlichen Schlüssel (Ristretto255-Punkt) aus einem geheimen Skalars <code>n</code> durch skalare Multiplikation mit dem Basis-Punkt der Kurve.

seit PHP 8.1.0 Kategorie: crypto

Signatur

sodium_crypto_scalarmult_ristretto255_base(string $n): string

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

Typ
string
Beschreibung
Der berechnete Ristretto255-Punkt (öffentlicher Schlüssel) als binärer String mit 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;
Geheimer Schlüssel (hex): <32 zufällige Bytes als Hex> Öffentlicher Schlüssel (hex): <32 berechnete Bytes als Hex> Länge öffentlicher Schlüssel: 32 Byte

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;
}
Gemeinsames Geheimnis stimmt überein! Shared Secret (hex): <32 Bytes als Hex>

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