SA+L: autorizzazione alla spesa e key image
Il protocollo di Schnorr generalizzato che sostituisce la "firma" in FCMP++
SA+L (Spend Authorization + Linkability) è una piccola prova su Ed25519 per ogni input. Mostra: "conosco x e y per la chiave rerandomizzata Õ, e la key image pubblicata L è uguale a x·I per lo stesso output". Tecnicamente è un protocollo di Schnorr generalizzato (GSP): diverse equazioni di Schnorr legate tra loro da segreti condivisi.
Schnorr generalizzato in un minuto
Lo Schnorr semplice dimostra la conoscenza di un solo x in un'unica equazione P = x·G. La versione generalizzata dimostra la conoscenza di un vettore di segreti (w₁, …, wₖ) che soddisfano diverse equazioni lineari sui punti:
Il protocollo è lo stesso che per una sola chiave:
- scegli
α_kcasuali e pubblicaA_j = Σ α_k·X_{j,k}per ogni equazione; - sfida
c = Hs(everything published); - risposte
s_k = α_k + c·w_k; - verifica:
Σ s_k·X_{j,k} = A_j + c·Y_jper ognij.
Il dettaglio chiave: la stessa risposta s_k si usa in ogni equazione in cui compare w_k. Così il verificatore non apprende solo "conosce dei segreti" ma "conosce gli stessi segreti per tutte le equazioni". È così che autorizzazione alla spesa e key image vengono collegate.
Quali equazioni dimostra SA+L
Pubblici: Õ, Ĩ, R, L e i generatori G, T, U, V. I segreti di chi spende: x, y (chiave dell'output) e r_o, r_i, r_r_i (la "vernice" della rerandomizzazione). Semplificando, SA+L dimostra il sistema:
R = r_i·V + r_r_i·T
L = x·Ĩ − (x·r_i)·U l'ultima è L = x·(Ĩ − r_i·U) = x·I; il prodotto x·r_i è introdotto come segreto a sé, e il legame con R impedisce di falsificarlo
Le equazioni esatte della specifica differiscono un po' (gestiscono con cura quali prodotti di segreti servono e come evitare fughe di informazioni), ma l'idea è esattamente questa: un'unica prova in cui x sia "apre" Õ sia "produce" L.
Perché non semplicemente una firma
In RingCT, CLSAG faceva tre cose insieme: nascondeva l'input in un ring, dimostrava l'autorizzazione alla spesa e collegava la key image. In FCMP++ la prova di appartenenza si prende il primo compito. Ne restano due, risolti da un protocollo molto più semplice. Questo offre:
- dimensioni ridotte: pochi punti e scalari per input;
- separazione dei ruoli: il dispositivo che custodisce la chiave (un hardware wallet) può calcolare SA+L, mentre un computer senza la chiave costruisce la pesante prova di appartenenza;
- forward secrecy: grazie a
y·Tnella chiave (vedi la panoramica); - basi per il multisig: la struttura lineare del GSP si divide bene tra più firmatari (schemi simili a FROST).
Cosa viene firmato
La sfida c include un hash dell'intera transazione (prefisso, output, commitment), come in CLSAG. Così SA+L funziona anche da firma: basta cambiare un solo byte della transazione dopo la firma e la prova non è più valida.
Le definizioni formali sono nell'articolo su FCMP++ di Luke Parker e nell'implementazione in Rust (il progetto monero-oxide). Protocollo e implementazione sono stati sottoposti ad audit esterni; i link ai rapporti sono raccolti nelle discussioni del Monero Research Lab su GitHub.