Vai al contenuto
buybitcoinsmart

Glossario / Riferimento per sviluppatori

Funzione di punto

Che cos'è la funzione di punto?
La funzione di punto trasforma una chiave privata in una chiave pubblica moltiplicando il punto generatore di secp256k1 per quel numero, ed è il passo unidirezionale su cui si costruisce ogni indirizzo bitcoin.

Specificato nel BIP-32.

Il BIP32 dà un nome all'operazione, point(p), perché la derivazione gerarchica delle chiavi la richiama quasi a ogni riga. Moltiplica il generatore fisso della curva per un segreto di 256 bit e il risultato è una coppia di coordinate che puoi pubblicare senza rischi; risalire al segreto da quella coppia significa risolvere un logaritmo discreto in uno spazio di 78 cifre. Il tuo wallet esegue la funzione una volta per indirizzo e non deve mai eseguirla al contrario.

Come funziona

La funzione di punto è una moltiplicazione su curva ellittica con uno dei due input fissato per sempre.

Bitcoin usa la curva secp256k1, definita dall'equazione y al quadrato uguale a x al cubo più 7 su un grande campo primo, e standardizzata nel documento SEC 2 e non dal NIST. La curva arriva con un punto generatore G che ogni implementazione incorpora nel codice, e con un ordine del gruppo n il cui valore sta appena sotto 2 elevato alla 256. Una chiave privata è un qualsiasi intero da 1 fino a n meno 1. La funzione somma G a se stesso quel numero di volte con una scala di raddoppi e addizioni, che termina in molto meno di un millisecondo e non nell'età dell'universo.

Il senso inverso è l'intera ipotesi di sicurezza. Dato il punto risultante, nessun metodo pubblicato recupera il moltiplicatore più velocemente di circa la radice quadrata della dimensione del gruppo, il che porta il lavoro a circa 2 elevato alla 128 operazioni. Nulla di questo cambia se un indirizzo viene riutilizzato, pubblicato o conservato per decenni.

Una proprietà rende possibili i wallet gerarchici. La moltiplicazione per un punto è distributiva rispetto all'addizione, quindi il punto di a più b è uguale al punto di a sommato al punto di b. Aggiungi un tweak a una chiave privata e la chiave pubblica corrispondente si sposta del punto di quel tweak, una quantità che chiunque può calcolare senza disporre della chiave. La derivazione BIP32 non hardened si basa su questa identità, e così la chiave di output di Taproot, che è una chiave interna spostata di un commitment a un albero di script.

Dove lo vedi

La funzione di punto viene eseguita ogni volta che un wallet ti mostra un nuovo indirizzo di ricezione.

È anche il motivo per cui una chiave pubblica estesa è utile da sola. Affida una xpub a un negozio online o a uno smartphone di sola lettura e quella macchina può generare un nuovo indirizzo per ogni pagamento applicando un tweak a una chiave pubblica, senza alcuna chiave privata presente. I wallet hardware sfruttano la stessa asimmetria dall'altro lato: il segreto non lascia mai il chip e solo il punto risultante torna indietro lungo il cavo.

La proprietà ha un aspetto insidioso. Poiché la relazione è additiva e pubblica, una chiave pubblica estesa combinata con una sola chiave privata figlia non hardened divulgata consente a chiunque di recuperare la chiave privata genitore e con essa l'intero ramo. È per questo che la derivazione a livello di conto è hardened, e che una xpub divulgata è un disastro per la privacy e non un furto immediato.

Funzione di punto vs chiave pubblica compressa

La funzione di punto produce un oggetto matematico; una chiave pubblica compressa è un modo di scrivere quell'oggetto. Un punto è una coppia di coordinate, ciascuna di 32 byte. La forma compressa scarta la coordinata y e conserva un prefisso di un byte che registra se era pari o dispari, per 33 byte in totale. La forma non compressa esplicita entrambe le coordinate su 65 byte. La forma x-only di Taproot conserva 32 byte e nessun prefisso. Ognuna di esse descrive lo stesso punto, eppure ogni codifica produce l'hash di un indirizzo diverso, ed è per questo che importare una vecchia chiave con il flag di compressione sbagliato mostra un saldo di zero mentre i bitcoin restano intatti all'altro indirizzo.

Da non confondere con

Domande frequenti

Si può riconvertire una chiave pubblica in una chiave privata?

Non con alcun metodo noto. Recuperare il moltiplicatore da un punto della curva è il problema del logaritmo discreto, e i migliori attacchi pubblicati richiedono circa 2 elevato alla 128 operazioni, che nessun hardware attuale o prevedibile può eseguire.

Perché una xpub può generare indirizzi senza una chiave privata?

Perché la moltiplicazione per un punto è distributiva rispetto all'addizione. Un passo di derivazione aggiunge un tweak alla chiave privata, e lo stesso tweak può essere applicato direttamente alla chiave pubblica, così un server che detiene solo una xpub può produrre nuovi indirizzi.

Leggi anche

Termini correlati

Altro in Riferimento per sviluppatori

Leggi questa pagina in inglese