SA+L: Ausgabeberechtigung und Key Image
Das verallgemeinerte Schnorr-Protokoll, das in FCMP++ die "Signatur" ersetzt
SA+L (Spend Authorization + Linkability) ist ein kleiner Beweis auf Ed25519 für jeden Input. Er zeigt: „Ich kenne x und y für den rerandomisierten Schlüssel Õ, und das veröffentlichte Key Image L ist gleich x·I für denselben Output.“ Technisch ist es ein verallgemeinertes Schnorr-Protokoll (GSP) – mehrere Schnorr-Gleichungen, die durch gemeinsame Geheimnisse verbunden sind.
Verallgemeinertes Schnorr in einer Minute
Gewöhnliches Schnorr beweist die Kenntnis eines x in einer Gleichung P = x·G. Die verallgemeinerte Version beweist die Kenntnis eines Vektors von Geheimnissen (w₁, …, wₖ), der mehrere lineare Gleichungen über Punkten erfüllt:
Das Protokoll ist dasselbe wie für einen Schlüssel:
- wähle zufällige
α_kund veröffentlicheA_j = Σ α_k·X_{j,k}für jede Gleichung; - Challenge
c = Hs(alles Veröffentlichte); - Antworten
s_k = α_k + c·w_k; - Prüfung:
Σ s_k·X_{j,k} = A_j + c·Y_jfür jedesj.
Das entscheidende Detail: Dieselbe Antwort s_k wird in jeder Gleichung verwendet, in der w_k vorkommt. Der Prüfer erfährt also nicht nur „kennt irgendwelche Geheimnisse“, sondern „kennt dieselben Geheimnisse für alle Gleichungen“. So werden Ausgabeberechtigung und Key Image verknüpft.
Welche Gleichungen SA+L beweist
Öffentlich: Õ, Ĩ, R, L und die Generatoren G, T, U, V. Die Geheimnisse des Ausgebenden: x, y (Output-Schlüssel) und r_o, r_i, r_r_i (die „Farbe“ der Rerandomisierung). Vereinfacht beweist SA+L das System:
R = r_i·V + r_r_i·T
L = x·Ĩ − (x·r_i)·U die letzte lautet L = x·(Ĩ − r_i·U) = x·I; das Produkt x·r_i wird als eigenes Geheimnis eingeführt, und die Verbindung zu R verhindert, dass man es fälscht
Die genauen Gleichungen in der Spezifikation weichen etwas ab (sie behandeln sorgfältig, welche Produkte von Geheimnissen nötig sind und wie man Lecks vermeidet), aber die Idee ist genau diese: ein Beweis, in dem x sowohl Õ „öffnet“ als auch L „erzeugt“.
Warum nicht einfach eine Signatur
In RingCT erledigte CLSAG drei Dinge auf einmal: den Input in einem Ring verstecken, die Ausgabeberechtigung beweisen und das Key Image verknüpfen. In FCMP++ übernimmt der Mitgliedschaftsbeweis die erste Aufgabe. Zwei bleiben – gelöst durch ein viel einfacheres Protokoll. Das bringt:
- geringe Größe – ein paar Punkte und Skalare pro Input;
- Rollentrennung – das Gerät mit dem Schlüssel (eine Hardware-Wallet) kann SA+L berechnen, während ein Computer ohne den Schlüssel den schweren Mitgliedschaftsbeweis baut;
- Forward Secrecy – dank
y·Tim Schlüssel (siehe den Überblick); - Grundlage für Multisig – die lineare Struktur von GSP lässt sich gut auf mehrere Unterzeichner aufteilen (FROST-ähnliche Schemata).
Was signiert wird
Die Challenge c enthält einen Hash der gesamten Transaktion (Präfix, Outputs, Commitments), wie bei CLSAG. Deshalb wirkt SA+L auch als Signatur: Ändert man nach dem Signieren auch nur ein Byte der Transaktion, ist der Beweis nicht mehr gültig.
Formale Definitionen stehen in Luke Parkers FCMP++-Paper und in der Rust-Implementierung (das Projekt monero-oxide). Protokoll und Implementierung wurden extern auditiert; Links zu den Berichten sind in Diskussionen des Monero Research Lab auf GitHub gesammelt.