Start · Sprachen · PHP · Referenz · sodium_crypto_core_ristretto255_add

sodium_crypto_core_ristretto255_add

Funktion

Addiert zwei Punkte auf der Ristretto255-Kurve und gibt den resultierenden Punkt zurück.

seit PHP 7.4.0 Kategorie: crypto

Signatur

sodium_crypto_core_ristretto255_add(string $p, string $q): string

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

Typ
string
Beschreibung
Gibt den resultierenden Punkt der Gruppenaddition 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;
Punkt p: <32-Byte-Hex> Punkt q: <32-Byte-Hex> p + q: <32-Byte-Hex> Länge: 32 Bytes

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;
}
Kommutativität bestätigt: p + q = q + p

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;
}
Fehler: sodium_crypto_core_ristretto255_add(): invalid point

// 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_point validiert 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_box oder sodium_crypto_kx.
  • Erfordert libsodium >= 1.0.18 und PHP >= 7.4.0 mit aktivierter Sodium-Erweiterung.