Signatur
Beschreibung
sodium_crypto_core_ristretto255_add führt die Gruppenaddition zweier Punkte auf der Ristretto255-Kurve durch. Ristretto255 ist eine Gruppe über Curve25519, die für kryptografische Protokolle wie Zero-Knowledge-Beweise, Passwortauthentifizierungs-Protokolle (z. B. OPAQUE, PAKE) und blinde Signaturen eingesetzt wird.
Beide Eingabepunkte müssen valide, kodierte Ristretto255-Punkte sein — d. h. Byte-Strings der Länge SODIUM_CRYPTO_CORE_RISTRETTO255_BYTES (32 Bytes). Die Funktion prüft intern die Gültigkeit der Punkte und wirft eine SodiumException, falls ein Punkt ungültig ist oder der Neutrale Punkt (Identitätselement) übergeben wird.
Typische Anwendungsfälle sind kryptografische Protokolle, bei denen Punkte auf elliptischen Kurven kombiniert werden müssen, etwa bei der Implementierung von oblivious pseudorandom functions (OPRFs), verteilten Schlüsselprotokollen oder Commitment-Schemata.
Die Funktion ist ein direktes Binding an crypto_core_ristretto255_add aus der libsodium-Bibliothek und stellt sicher, dass Berechnungen auf konstante Zeit optimiert sind, um Seitenkanalangriffe zu vermeiden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $p Pflicht | string | Erster Eingabepunkt als binärer String der Länge SODIUM_CRYPTO_CORE_RISTRETTO255_BYTES (32 Bytes) in Ristretto255-Kodierung. |
|
| $q Pflicht | string | Zweiter Eingabepunkt als binärer String der Länge SODIUM_CRYPTO_CORE_RISTRETTO255_BYTES (32 Bytes) in Ristretto255-Kodierung. |
Rückgabewert
p + q als binären String der Länge SODIUM_CRYPTO_CORE_RISTRETTO255_BYTES (32 Bytes) zurück. Wirft eine SodiumException, wenn einer der Eingabepunkte ungültig ist.Beispiele
Zwei zufällige Ristretto255-Punkte addieren
<?php
// Zwei zufällige, valide Ristretto255-Punkte erzeugen
$p = sodium_crypto_core_ristretto255_random();
$q = sodium_crypto_core_ristretto255_random();
// Punkte addieren
$r = sodium_crypto_core_ristretto255_add($p, $q);
echo 'Punkt p: ' . sodium_bin2hex($p) . PHP_EOL;
echo 'Punkt q: ' . sodium_bin2hex($q) . PHP_EOL;
echo 'p + q: ' . sodium_bin2hex($r) . PHP_EOL;
echo 'Länge: ' . strlen($r) . ' Bytes' . PHP_EOL;
Kommutativität der Punktaddition prüfen (p + q === q + p)
<?php
// Kommutativität: p + q muss gleich q + p sein
$p = sodium_crypto_core_ristretto255_random();
$q = sodium_crypto_core_ristretto255_random();
$pq = sodium_crypto_core_ristretto255_add($p, $q);
$qp = sodium_crypto_core_ristretto255_add($q, $p);
if (sodium_memcmp($pq, $qp) === 0) {
echo 'Kommutativität bestätigt: p + q = q + p' . PHP_EOL;
} else {
echo 'Fehler: Ergebnisse stimmen nicht überein!' . PHP_EOL;
}
Fehlerbehandlung bei ungültigem Punkt
<?php
$p = sodium_crypto_core_ristretto255_random();
$invalid = str_repeat("\xFF", SODIUM_CRYPTO_CORE_RISTRETTO255_BYTES);
try {
$result = sodium_crypto_core_ristretto255_add($p, $invalid);
} catch (SodiumException $e) {
echo 'Fehler: ' . $e->getMessage() . PHP_EOL;
}
// Wichtig · Fallstricke
Sicherheitshinweise:
- Übergeben Sie niemals den Neutralen Punkt (Identitätselement / Null-Punkt) als Argument — libsodium lehnt diesen explizit ab und wirft eine
SodiumException. - Stellen Sie sicher, dass Eingabepunkte immer aus vertrauenswürdigen Quellen stammen oder zuvor mit
sodium_crypto_core_ristretto255_is_valid_pointvalidiert wurden, bevor Sie sie an diese Funktion übergeben. - Die Funktion ist nicht für direkte Verschlüsselungs- oder ECDH-Operationen gedacht — nutzen Sie dafür
sodium_crypto_boxodersodium_crypto_kx. - Erfordert libsodium >= 1.0.18 und PHP >= 7.4.0 mit aktivierter Sodium-Erweiterung.