Signatur
Beschreibung
sodium_crypto_core_ristretto255_scalar_mul berechnet das Produkt zweier Skalare x und y modulo der Primzahl l, die die Ordnung der Ristretto255-Gruppe definiert. Das Ergebnis liegt ebenfalls im gültigen Skalarraum dieser Gruppe. Diese Operation ist ein grundlegender Baustein für kryptografische Protokolle, die auf elliptischer Kurvenkryptografie basieren.
Die Funktion wird typischerweise in Zero-Knowledge-Protokollen, Schlüsselableitungsverfahren und anonymen Credential-Systemen eingesetzt, bei denen skalare Arithmetik auf der Ristretto255-Kurve erforderlich ist. Ristretto255 ist eine kryptografisch sichere Gruppe, die auf Curve25519 aufbaut und Probleme mit cofactor-Komplikationen vermeidet.
Beide Eingabeparameter müssen rohe Binärstrings der Länge SODIUM_CRYPTO_CORE_RISTRETTO255_SCALARBYTES (32 Bytes) sein. Eine falsche Länge oder ein ungültiger Skalarwert führt zu einer SodiumException.
Diese Funktion ist Teil der libsodium-Erweiterung und steht nur zur Verfügung, wenn PHP mit libsodium >= 1.0.18 kompiliert wurde.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $x Pflicht | string | Erster Skalar als roher Binärstring mit genau SODIUM_CRYPTO_CORE_RISTRETTO255_SCALARBYTES (32) Bytes. |
|
| $y Pflicht | string | Zweiter Skalar als roher Binärstring mit genau SODIUM_CRYPTO_CORE_RISTRETTO255_SCALARBYTES (32) Bytes. |
Rückgabewert
x * y mod l darstellt, wobei l die Gruppenordnung von Ristretto255 ist. Bei ungültigen Eingaben wird eine SodiumException ausgelöst.Beispiele
Grundlegende skalare Multiplikation auf Ristretto255
<?php
// Zwei zufällige gültige Skalare erzeugen
$scalar_x = sodium_crypto_core_ristretto255_scalar_random();
$scalar_y = sodium_crypto_core_ristretto255_scalar_random();
// Produkt der beiden Skalare berechnen
$product = sodium_crypto_core_ristretto255_scalar_mul($scalar_x, $scalar_y);
echo 'Länge des Ergebnisses: ' . strlen($product) . ' Bytes' . PHP_EOL;
echo 'Produkt (hex): ' . sodium_bin2hex($product) . PHP_EOL;
Kommutativität der skalaren Multiplikation prüfen
<?php
// Zwei zufällige Skalare
$a = sodium_crypto_core_ristretto255_scalar_random();
$b = sodium_crypto_core_ristretto255_scalar_random();
// a * b und b * a berechnen
$ab = sodium_crypto_core_ristretto255_scalar_mul($a, $b);
$ba = sodium_crypto_core_ristretto255_scalar_mul($b, $a);
// Die Multiplikation ist kommutativ: a*b == b*a
if (sodium_memcmp($ab, $ba) === 0) {
echo 'Kommutativität bestätigt: a*b === b*a' . PHP_EOL;
} else {
echo 'Fehler: Ergebnisse unterscheiden sich!' . PHP_EOL;
}
Verwendung im Kontext eines einfachen DLEQ-Schritts
<?php
// Geheimschlüssel als Skalar
$secret_key = sodium_crypto_core_ristretto255_scalar_random();
// Erzeuge einen Nonce-Skalar
$nonce = sodium_crypto_core_ristretto255_scalar_random();
// Berechne k = nonce * secret_key (Teil eines Signaturschritts)
$k = sodium_crypto_core_ristretto255_scalar_mul($nonce, $secret_key);
echo 'Skalares Produkt (hex): ' . sodium_bin2hex($k) . PHP_EOL;
// Wichtig · Fallstricke
Sicherheitshinweis: Diese Funktion führt nur skalare Arithmetik durch — sie arbeitet nicht auf Kurvenpunkten. Für die Multiplikation eines Skalars mit einem Kurvenpunkt muss sodium_crypto_scalarmult_ristretto255 verwendet werden.
Eingabevalidierung: Beide Parameter müssen exakt 32 Bytes lang sein. Übergabe von Strings falscher Länge löst eine SodiumException aus. Gültige Skalare können mit sodium_crypto_core_ristretto255_scalar_random() oder sodium_crypto_core_ristretto255_scalar_reduce() erzeugt werden.
Verfügbarkeit: Die Funktion ist nur verfügbar, wenn PHP gegen libsodium >= 1.0.18 kompiliert wurde. Prüfe die Verfügbarkeit mit function_exists('sodium_crypto_core_ristretto255_scalar_mul').