Start · Sprachen · PHP · Referenz · sodium_crypto_core_ristretto255_scalar_random

sodium_crypto_core_ristretto255_scalar_random

Funktion

Erzeugt einen kryptografisch sicheren, zufälligen Skalarwert für die Ristretto255-Kurve.

seit PHP 7.4.0 Kategorie: crypto

Signatur

sodium_crypto_core_ristretto255_scalar_random(): string

Beschreibung

sodium_crypto_core_ristretto255_scalar_random() erzeugt einen zufälligen Skalarwert, der für Berechnungen auf der Ristretto255-Gruppe verwendet werden kann. Der zurückgegebene Skalar ist ein Binärstring mit einer Länge von SODIUM_CRYPTO_CORE_RISTRETTO255_SCALARBYTES Bytes (32 Bytes) und ist gleichmäßig im Skalarfeld der Gruppe verteilt.

Ristretto255 ist eine kryptografische Primitivgruppe, die auf Curve25519 basiert und eine sichere, prime-Ordnung-Gruppe mit kohärenter Punktkomprimierung bietet. Skalare werden als Elemente des Skalarfeldes dieser Gruppe verwendet – etwa als private Schlüssel, Nonces oder Blinding-Faktoren in Zero-Knowledge-Protokollen und anderen fortgeschrittenen kryptografischen Anwendungen.

Diese Funktion ist besonders nützlich in Protokollen wie OPAQUE, VOPRF oder anderen Passwortauthentifizierungsverfahren, bei denen zufällige Skalare für Blind-Operationen benötigt werden. Die Zufälligkeit wird von der Betriebssystemquelle für kryptografisch sichere Zufallszahlen bezogen und ist damit für sicherheitskritische Anwendungen geeignet.

Die zurückgegebenen Bytes können anschließend mit anderen Skalar-Funktionen wie sodium_crypto_core_ristretto255_scalar_add(), sodium_crypto_core_ristretto255_scalar_mul() oder zur Skalarmultiplikation mit Punkten auf der Kurve über sodium_crypto_core_ristretto255_scalar_negate() weiterverwendet werden.

Rückgabewert

Typ
string
Beschreibung
Gibt einen Binärstring der Länge SODIUM_CRYPTO_CORE_RISTRETTO255_SCALARBYTES (32 Bytes) zurück, der einen zufälligen, gültigen Skalar im Skalarfeld der Ristretto255-Gruppe darstellt.

Beispiele

Zufälligen Skalar erzeugen und hexadezimal ausgeben

<?php
// Zufälligen Ristretto255-Skalar erzeugen
$scalar = sodium_crypto_core_ristretto255_scalar_random();

echo 'Länge: ' . strlen($scalar) . ' Bytes' . PHP_EOL;
echo 'Hex:   ' . sodium_bin2hex($scalar) . PHP_EOL;
?>
Länge: 32 Bytes Hex: (32-Byte-Zufallswert in hexadezimaler Darstellung, z. B. 3d8a1f...)

Blinding-Faktor für ein OPRF-Protokoll

<?php
// Blinding-Faktor (zufälliger Skalar) erzeugen
$blindingFactor = sodium_crypto_core_ristretto255_scalar_random();

// Invertierung des Blinding-Faktors berechnen (zum späteren Unblinden)
$blindingFactorInv = sodium_crypto_core_ristretto255_scalar_invert($blindingFactor);

// Eingabepunkt auf die Kurve hashen (z. B. Passwort)
$input = 'geheimes_passwort';
$point = sodium_crypto_core_ristretto255_from_hash(
    hash('sha512', $input, true)
);

// Punkt mit Blinding-Faktor maskieren (Blinding)
$blindedPoint = sodium_crypto_core_ristretto255_scalar_mul(
    $blindingFactor,
    $point
);

echo 'Blinded Point (hex): ' . sodium_bin2hex($blindedPoint) . PHP_EOL;

// Später: Blinded Point mit invertiertem Faktor wieder entblenden
// $unblindedPoint = sodium_crypto_core_ristretto255_scalar_mul($blindingFactorInv, $evaluatedPoint);
?>
Blinded Point (hex): (32-Byte-Zufallspunkt in hexadezimaler Darstellung)

// Wichtig · Fallstricke

Sicherheitshinweis: Der erzeugte Skalar sollte niemals direkt an unsichere Speicherorte oder Protokolle weitergegeben werden, ohne ihn zu schützen. Er ist vergleichbar mit einem privaten Schlüssel und muss entsprechend vertraulich behandelt werden.

Diese Funktion steht nur zur Verfügung, wenn die PHP-Installation mit libsodium 1.0.18 oder neuer kompiliert wurde und die Ristretto255-Unterstützung aktiviert ist. Vor der Verwendung sollte geprüft werden, ob die Konstante SODIUM_CRYPTO_CORE_RISTRETTO255_SCALARBYTES definiert ist.

Der zurückgegebene Skalar ist bereits reduziert (d. h. kleiner als die Gruppenordnung) und muss nicht weiter normalisiert werden.