Start · Sprachen · PHP · Referenz · sodium_crypto_core_ristretto255_random

sodium_crypto_core_ristretto255_random

Funktion

Erzeugt einen zufälligen Punkt auf der Ristretto255-Kurve als Byte-String.

seit PHP 7.4.0 Kategorie: crypto

Signatur

sodium_crypto_core_ristretto255_random(): string

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

Typ
string
Beschreibung
Ein binärer String mit einer Länge von 32 Byte (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;
Länge: 32 Byte Punkt (hex): <32-Byte-Hex-String> Gültiger Punkt: Ja

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;
Punkt A: <32-Byte-Hex-String> Punkt B: <32-Byte-Hex-String> A + B : <32-Byte-Hex-String> Gleich A: Ja

// 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.