Glossario / Protocollo e aggiornamenti
Verifica per lotti
- Che cos'è la verifica per lotti?
- La verifica per lotti controlla molte firme Schnorr in una sola equazione su curva ellittica invece che una alla volta, restituendo un unico esito positivo o negativo per l'intero insieme.
Specificato nel BIP-340.
Un verificatore raggruppa u firme, pondera tutte tranne la prima con uno scalare casuale e risolve il gruppo con una sola equazione invece di u. BIP-340 è stato costruito per questo, fissando le firme a 64 byte, mentre l'ECDSA standardizzato non può essere verificato per lotti in alcun modo, a meno che non si aggiungano dati di witness supplementari. La verifica per lotti è una scelta di ogni verificatore, quindi cambia la rapidità con cui un nodo controlla la cronologia e nulla dei tuoi bitcoin.
Come funziona
La verifica per lotti è specificata in BIP-340 come BatchVerify: prende u chiavi pubbliche da 32 byte, u messaggi e u firme da 64 byte e risponde una sola volta per tutte.
I pesi vengono per primi. Il verificatore genera u-1 interi nell'intervallo da 1 a n-1, dove n è l'ordine della curva, in modo deterministico a partire da un generatore inizializzato con un hash di tutti gli input del lotto: chiavi, messaggi e firme allo stesso modo. BIP-340 definisce SHA256 un hash sicuro per il seme e ChaCha20 un modo sicuro per espanderlo in interi da 256 bit, saltando quelli che cadono fuori dall'intervallo.
Il lotto si riduce poi a un'unica verifica: la somma ponderata dei valori s, moltiplicata per il punto generatore, deve essere uguale allo stesso peso applicato ai punti R e alla sfida di ogni firma moltiplicata per la propria chiave pubblica. Quei u controlli separati diventano un solo confronto, a cui BIP-340 attribuisce accelerazioni significative.
Quel risparmio si paga con un costo per firma. BatchVerify riporta ogni valore r sulla curva, cosa che la verifica singola non fa mai: Verify ricalcola R da s e dalla sfida, poi controlla solo che la sua coordinata x sia uguale a r.
La garanzia è volutamente asimmetrica. Se tutte le firme del lotto sono valide, BatchVerify riesce sempre; se anche una sola non lo è, riesce al massimo con probabilità trascurabile. Quello che non fa è indicare la colpevole, quindi un verificatore che deve sapere quale firma ha fallito le controlla una alla volta.
Dove lo vedi
La verifica per lotti vive interamente dal lato del verificatore nella rete, ed è per questo che non compare mai nell'interfaccia di un wallet né in una stima delle commissioni.
Dove conviene è in un nodo che elabora in una volta anni di spese Taproot, non in un wallet che invia un pagamento. BIP-340 non rende obbligatoria la verifica per lotti in nessun punto: la verifica di una singola firma è la definizione, e un lotto è qualcosa che un verificatore può scegliere. Il BIP esige un algoritmo specificato a livello di byte, l'esattezza che mancava al parsing DER fino a BIP-66, così che nessuno possa costruire una firma valida per alcuni verificatori e non per altri. Poiché il verificatore sceglie i propri lotti, è questa proprietà a garantire che la verifica per lotti e quella singola possano differire solo con probabilità trascurabile, anche contro un attaccante che cerchi di farle divergere.
La verifica per lotti spiega anche scelte di BIP-340 che, da sole, sembrano arbitrarie. Le firme avrebbero potuto assumere una forma più corta, in cui un hash da 16 byte basta per l'obiettivo di sicurezza di 128 bit, e il BIP l'ha rifiutata: gli hash corti sono fragili quando firmatari che diffidano gli uni degli altri lavorano insieme, e la forma più lunga che porta R è quella che consente la verifica per lotti. Le chiavi pubbliche sono da 32 byte invece dei soliti 33 byte della codifica compressa di bitcoin, scelte per compattezza, e la coordinata y che così resta fuori è fissata a quella pari invece di essere lasciata ambigua, perché sia la verifica efficiente sia la verifica per lotti hanno bisogno che non sia ambigua.
ECDSA non ne ottiene nulla. BIP-340 lo indica come uno dei motivi per cambiare lo schema di firma: la formulazione standardizzata non può essere verificata per lotti in modo più efficiente che singolarmente, a meno che non si aggiungano dati di witness supplementari.
Verifica per lotti vs MuSig2
La verifica per lotti e MuSig2 rendono entrambe più economico un mucchio di firme, ma solo MuSig2 cambia ciò che viene diffuso.
MuSig2 aggrega più firmatari in una sola chiave e una sola firma ordinaria da 64 byte prima che la transazione raggiunga la rete, quindi il suo risparmio è in privacy e spazio nei blocchi, ed è n-of-n: ogni firmatario deve partecipare. La verifica per lotti lascia ogni firma dov'era e riorganizza solo l'aritmetica che esegue un validatore, senza la collaborazione di nessuno e senza che nessuno ne sia nemmeno a conoscenza: un nodo può raggruppare firme fatte da sconosciuti a distanza di anni, in transazioni non correlate.