Signatur
Beschreibung
sodium_crypto_core_ristretto255_scalar_complement berechnet das Komplement eines Skalars s in der Gruppe Ristretto255. Das Ergebnis ist L - s mod L, wobei L die Ordnung der zugrundeliegenden elliptischen Kurve (Curve25519) ist. Das Komplement ist nicht dasselbe wie das negative Inverse (-s mod L), sondern ergibt zusammen mit s die Gruppenordnung L.
Die Funktion wird in kryptografischen Protokollen benötigt, bei denen Skalaroperationen auf der Ristretto255-Kurve durchgeführt werden, z. B. bei der Implementierung von Zero-Knowledge-Beweisen, Threshold-Signaturen oder bei der Konstruktion sicherer Multi-Party-Computation-Protokolle.
Alle Eingaben und Ausgaben sind rohe Binär-Strings der Länge SODIUM_CRYPTO_CORE_RISTRETTO255_SCALARBYTES (32 Byte). Die Funktion setzt voraus, dass die Eingabe ein gültiger, reduzierter Skalar der Ristretto255-Gruppe ist. Ungültige Eingaben führen zu einer SodiumException.
Ristretto255 ist eine kryptografische Primitivgruppe, die auf Curve25519 aufbaut und eine sichere, cofaktorfreie Gruppenoperation bereitstellt. Sie eignet sich besonders für Protokolle, die eine konsistente und sichere Skalararithmetik erfordern.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $s Pflicht | string | Ein gültiger Ristretto255-Skalar als roher Binär-String mit einer Länge von genau SODIUM_CRYPTO_CORE_RISTRETTO255_SCALARBYTES (32 Byte). Der Wert muss ein reduzierter Skalar modulo der Gruppenordnung L sein. |
Rückgabewert
SODIUM_CRYPTO_CORE_RISTRETTO255_SCALARBYTES (32 Byte) zurück. Das Ergebnis entspricht L - s mod L. Bei ungültiger Eingabe wird eine SodiumException geworfen.Beispiele
Komplement eines zufälligen Skalars berechnen
<?php
// Einen zufälligen, gültigen Ristretto255-Skalar erzeugen
$scalar = sodium_crypto_core_ristretto255_scalar_random();
// Das Komplement berechnen
$complement = sodium_crypto_core_ristretto255_scalar_complement($scalar);
// Beide Werte als Hex ausgeben
echo 'Skalar: ' . bin2hex($scalar) . PHP_EOL;
echo 'Komplement: ' . bin2hex($complement) . PHP_EOL;
// Prüfen: s + complement mod L sollte 0 ergeben (da complement = L - s)
$sum = sodium_crypto_core_ristretto255_scalar_add($scalar, $complement);
echo 'Summe (hex): ' . bin2hex($sum) . PHP_EOL;
// Erwartet: 0000...0000 (Null-Skalar), da s + (L - s) = L ≡ 0 mod L
Doppeltes Komplement ergibt den Originalwert
<?php
// Zufälligen Skalar erzeugen
$original = sodium_crypto_core_ristretto255_scalar_random();
// Komplement berechnen
$complement = sodium_crypto_core_ristretto255_scalar_complement($original);
// Komplement des Komplements berechnen (sollte wieder original ergeben)
$double_complement = sodium_crypto_core_ristretto255_scalar_complement($complement);
if (hash_equals($original, $double_complement)) {
echo 'Doppeltes Komplement ergibt wieder den Originalwert.' . PHP_EOL;
} else {
echo 'Fehler: Werte stimmen nicht überein.' . PHP_EOL;
}
// Wichtig · Fallstricke
Vorsicht: Das Komplement (L - s mod L) ist nicht dasselbe wie das negative Inverse (-s mod L bzw. L - s ist identisch, aber konzeptionell unterschiedlich gegenüber dem negativ-inversen Skalar). Für das negative Inverse steht sodium_crypto_core_ristretto255_scalar_negate zur Verfügung.
Die Funktion ist erst ab PHP 8.1.0 verfügbar, da die entsprechenden libsodium-Bindungen (scalar_complement) erst mit dieser PHP-Version eingeführt wurden. Stellen Sie sicher, dass die installierte libsodium-Bibliothek Version 1.0.18 oder höher ist.
Eingaben, die kein gültiger reduzierter Skalar sind (falsche Länge oder Wert außerhalb des gültigen Bereichs), führen zu einer SodiumException. Fangen Sie diese in produktivem Code immer ab.