Start · Sprachen · PHP · Referenz · sodium_crypto_core_ristretto255_scalar_negate

sodium_crypto_core_ristretto255_scalar_negate

Funktion

Negiert einen Ristretto255-Skalarwert im Primkörper, d. h. berechnet <code>-s mod L</code>, wobei <code>L</code> die Gruppenordnung ist.

seit PHP 8.1.0 Kategorie: crypto

Signatur

sodium_crypto_core_ristretto255_scalar_negate(string $s): string

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

Typ
string
Beschreibung
Gibt einen 32-Byte-String zurück, der den negierten Skalar -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)
?>
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)
?>
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.