Signatur
Beschreibung
sodium_crypto_core_ristretto255_random() erzeugt einen kryptografisch sicheren, gleichmäßig verteilten zufälligen Punkt auf der Ristretto255-Elliptischen-Kurve. Das Ristretto255-Format ist eine Abstraktionsschicht über Curve25519/Ed25519, die kanonische Punkte garantiert und somit bestimmte Klassen von Angriffsvektoren (z. B. Small-Subgroup-Angriffe) vermeidet.
Der zurückgegebene Wert ist ein binärer String mit einer Länge von SODIUM_CRYPTO_CORE_RISTRETTO255_BYTES (32 Byte), der einen gültigen Gruppenelementpunkt darstellt. Dieser Punkt kann direkt für kryptografische Protokolle wie OPAQUE, PAKEs oder Zero-Knowledge-Proofs verwendet werden.
Die Funktion ist besonders nützlich, wenn man zufällige Basispunkte für Schlüsselerzeugung, blinde Signaturen oder kryptografische Commitments benötigt. Im Gegensatz zu einem einfachen zufälligen Skalar ist ein Ristretto255-Punkt ein vollwertiges Gruppenelement, mit dem direkt Punktoperationen (Addition, Skalarmultiplikation) durchgeführt werden können.
Voraussetzung ist die libsodium-Bibliothek in Version ≥ 1.0.18 sowie die PHP-Erweiterung sodium.
Rückgabewert
SODIUM_CRYPTO_CORE_RISTRETTO255_BYTES), der einen zufälligen, gültigen Punkt auf der Ristretto255-Kurve repräsentiert.Beispiele
Zufälligen Ristretto255-Punkt erzeugen
<?php
// Zufälligen Punkt auf der Ristretto255-Kurve generieren
$randomPoint = sodium_crypto_core_ristretto255_random();
// Länge prüfen (sollte 32 Byte sein)
echo 'Länge: ' . strlen($randomPoint) . ' Byte' . PHP_EOL;
// Zur Anzeige als Hex kodieren
echo 'Punkt (hex): ' . bin2hex($randomPoint) . PHP_EOL;
// Prüfen, ob der Punkt gültig ist
$isValid = sodium_crypto_core_ristretto255_is_valid_point($randomPoint);
echo 'Gültiger Punkt: ' . ($isValid ? 'Ja' : 'Nein') . PHP_EOL;
Punktaddition zweier zufälliger Ristretto255-Punkte
<?php
// Zwei zufällige Punkte erzeugen
$pointA = sodium_crypto_core_ristretto255_random();
$pointB = sodium_crypto_core_ristretto255_random();
// Die beiden Punkte addieren
$sum = sodium_crypto_core_ristretto255_add($pointA, $pointB);
echo 'Punkt A: ' . bin2hex($pointA) . PHP_EOL;
echo 'Punkt B: ' . bin2hex($pointB) . PHP_EOL;
echo 'A + B : ' . bin2hex($sum) . PHP_EOL;
// Komplementärtest: (A + B) - B sollte wieder A ergeben
$result = sodium_crypto_core_ristretto255_sub($sum, $pointB);
echo 'Gleich A: ' . (sodium_compare($result, $pointA) === 0 ? 'Ja' : 'Nein') . PHP_EOL;
// Wichtig · Fallstricke
Sicherheitshinweis: Der zurückgegebene Punkt ist kryptografisch sicher zufällig; verwende ihn jedoch niemals direkt als symmetrischen Schlüssel oder Passwort-Ersatz, da er ein Gruppenelement und kein generischer Zufallswert ist.
Versionsanforderung: Diese Funktion erfordert libsodium ≥ 1.0.18. Ältere Versionen unterstützen Ristretto255 nicht. Prüfe die Verfügbarkeit mit defined('SODIUM_CRYPTO_CORE_RISTRETTO255_BYTES') bevor du die Funktion verwendest.
Binärer Output: Der Rückgabewert ist ein roher Binär-String. Für Datenbankablage oder Übertragung sollte er mit bin2hex() oder base64_encode() kodiert werden.