Signatur
Beschreibung
sodium_crypto_core_ristretto255_scalar_negate() berechnet die additive Negation eines skalaren Wertes auf der Ristretto255-Gruppe. Das Ergebnis ist der Skalar r mit der Eigenschaft s + r ≡ 0 (mod L), wobei L die Primzahlordnung der Ristretto255-Gruppe ist.
Die Funktion arbeitet auf 32-Byte-Strings, die einen reduzierten Skalar repräsentieren. Sie ist Teil der libsodium-Abstraktion für kryptografische Operationen auf der Ristretto255-Kurve, die eine sichere, cofaktorfreie Implementierung über Curve25519 bietet.
Typische Einsatzgebiete sind kryptografische Protokolle, die eine additive Invertierung von Skalaren benötigen, z. B. beim Aufbau von Zero-Knowledge-Proofs, Blind-Signaturen oder ähnlichen kryptografischen Konstruktionen.
Es ist wichtig sicherzustellen, dass der übergebene Skalar ein gültig reduzierter 32-Byte-String ist (also kleiner als L). Ungültige Eingaben führen zu einer SodiumException.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $s Pflicht | string | Ein 32-Byte-String, der einen reduzierten Ristretto255-Skalar repräsentiert. Der Wert muss kleiner als die Gruppenordnung L sein. |
Rückgabewert
-s mod L darstellt. Bei ungültiger Eingabe (falscher Länge oder nicht reduziertem Skalar) wird eine SodiumException geworfen.Beispiele
Einfache Negation eines Zufallsskalars
<?php
// Einen zufälligen, gültigen Ristretto255-Skalar erzeugen
$scalar = sodium_crypto_core_ristretto255_scalar_random();
// Skalar negieren
$negated = sodium_crypto_core_ristretto255_scalar_negate($scalar);
// Prüfen: s + (-s) muss 0 ergeben (alle Bytes null)
$sum = sodium_crypto_core_ristretto255_scalar_add($scalar, $negated);
$isZero = ($sum === str_repeat("\0", SODIUM_CRYPTO_CORE_RISTRETTO255_SCALARBYTES));
var_dump($isZero); // bool(true)
?>
Negation in einem kryptografischen Protokoll
<?php
// Erzeuge einen Basispunkt und einen Skalar
$point = sodium_crypto_core_ristretto255_random();
$scalar = sodium_crypto_core_ristretto255_scalar_random();
// Skaliere den Punkt: P2 = scalar * P
$p2 = sodium_crypto_core_ristretto255_scalar_mul($scalar, $point);
// Negiere den Skalar
$negScalar = sodium_crypto_core_ristretto255_scalar_negate($scalar);
// Skaliere mit dem negativen Skalar: P3 = (-scalar) * P
$p3 = sodium_crypto_core_ristretto255_scalar_mul($negScalar, $point);
// P2 + P3 muss der neutrale Punkt sein
$neutral = sodium_crypto_core_ristretto255_add($p2, $p3);
// Der Ergebnispunkt hat alle Bytes 0 (neutrales Element)
$allZero = ($neutral === str_repeat("\0", SODIUM_CRYPTO_CORE_RISTRETTO255_BYTES));
var_dump($allZero); // bool(true)
?>
// Wichtig · Fallstricke
Sicherheitshinweis: Skalarwerte dürfen niemals außerhalb des gültigen Bereichs [0, L) liegen. Stellen Sie sicher, dass Skalare entweder über sodium_crypto_core_ristretto255_scalar_random() erzeugt oder mit sodium_crypto_core_ristretto255_scalar_reduce() reduziert wurden, bevor sie an diese Funktion übergeben werden.
Die Funktion ist erst ab PHP 8.1 mit libsodium ≥ 1.0.18 verfügbar. Prüfen Sie mit defined('SODIUM_CRYPTO_CORE_RISTRETTO255_BYTES'), ob die Ristretto255-Unterstützung verfügbar ist.
Rohe Ristretto255-Skalare und Punkte sollten niemals direkt als Geheimnisse verwendet werden, ohne ein vollständiges, geprüftes kryptografisches Protokoll zu implementieren.