Chiavi private
La chiave di spesa b, la chiave di visualizzazione a e le loro metà pubbliche B e A
Un wallet Monero è una coppia di scalari: b (chiave privata di spesa, spend key) e a = Hs(b) (chiave privata di visualizzazione, view key). Le loro versioni pubbliche: B = b·G e A = a·G. Un indirizzo non è altro che B e A scritti insieme.
La chiave di spesa
La chiave privata di spesa b è uno scalare casuale modulo l. Nel formato classico, il seed di 25 parole è b, solo scritto in parole. Generazione:
- prendi 32 byte casuali (o di più, per uniformità);
- leggili come numero little-endian;
- riducili modulo
l(sc_reduce32).
La spend key serve per due cose: calcolare la chiave privata di un output monouso (per firmare una spesa) e calcolare la key image.
La chiave di visualizzazione
La chiave privata di visualizzazione potrebbe essere un numero casuale indipendente, ma i wallet standard la derivano dalla spend key:
Ecco perché basta un solo seed per ripristinare entrambe le chiavi. La view key si usa durante la scansione della blockchain: per ogni transazione il wallet calcola il segreto condiviso 8·a·R e controlla se un output è indirizzato a lui (dettagli in indirizzi monouso).
Chiavi pubbliche
Due punti della curva, da 32 byte ciascuno. Non sono segreti: il tuo indirizzo è fatto di loro.
Chi può fare cosa
| Possiedi | Puoi | Non puoi |
|---|---|---|
A, B (indirizzo) | inviare denaro a questo wallet | vedere alcunché |
a, B (sola visualizzazione) | trovare gli output in entrata e i loro importi | spendere; vedere con certezza le spese |
a, b | tutto | — |
Con Carrot la gerarchia delle chiavi diventa più profonda: chiavi separate per "vedere le entrate", "vedere tutto", "generare key image". Per i wallet esistenti, a e b continuano a funzionare.