Author

Topic: [guida] crearsi un vanity address tutto in casa (Read 2033 times)

legendary
Activity: 1910
Merit: 2065
December 14, 2016, 03:22:43 PM
#2
come fare
- scaricare il sorgente di https://github.com/samr7/vanitygen
- scompattare e entrare nella dir
- installare questo pacchetto -> pcre versione dev sulla vostra distribuzione (banalmente su debian-like apt-cache search pcre per cercarlo)
- avviare il comando 'make'

Per chi volesse usare vanitygen (versione per CPU) e non oclvanitygen (versione per GPU), segnalo che è anche possibile scaricare una versione ottimizzata con la libreria secp256k1 usata anche da Core.

I comandi su Ubuntu sono:

sudo apt-get install automake autoconf git
sudo apt-get install libgmp3-dev
git clone https://github.com/klynastor/supervanitygen.git
cd supervanitygen
make

e infine:   ./vanitygen $PATTERN

Si dovrebbe osservare (a me è successo) un incremento di velocità di circa il 200%/250%.

esistono dei servizi del genere http://bitcoinvanitygen.com/ e simili

ma, come si fa a fidarsi?

Assolutamente non bisogna fidarsi di siti come quello, invece è possibile affidarsi tranquillamente a servizi come vante.me  (vedi anche il relativo post su reddit) o come vanity.coin.dance (con l'opzione "split key" selezionata).

Come distinguere i servizi affidabili da quelli che non lo sono?

Semplice: se il sito utilizza il metodo "split-key address generation" cioè in pratica se vi richiede anche di inviare una vostra chiave pubblica, allora non c'è problema, poiché la chiave privata che vi restituiranno andrà ricombinata con la vostra prima chiave privata per poter ottenere l'effettiva chiave privata relativa all'indirizzo vanity generato (in pratica il sito non può in nessun modo ricavare la chiave privata effettiva dell'indirizzo che genera! Di fatto esso prende come nuovo punto base della curva la vostra chiave pubblica e partendo da lì ottiene quanti passi bisogna fare per raggiungere la chiave pubblica relativa a un indirizzo vanity; ma per ottenere il percorso totale rispetto al punto base G bisogna anche conoscere la posizione relativa della chiave pubblica iniziale rispetto a G, cioè la chiave privata che voi avete generato e avete conservato).
Riassumendo si ha la stessa sicurezza che si avrebbe generando un indirizzo in locale.

Per ulteriori dettagli su metodo "split-key address generation":  https://bitcointalksearch.org/topic/m.901491

EDIT: ho ricevuto richieste via PM riguardo il metodo "spli-key address". I passi da fare sono:

1) leggersi almeno una volta questo post :  https://bitcointalksearch.org/topic/curve-ellittiche-e-algoritmo-ecdsa-1339031
potrà sembrarvi inutile, ma vi assicuro che se non sapete a cosa corrispondono una chiave pubblica e una chiave privata nella curva secp256k1 e qual è l'operazione non invertibile che collega chiave privata a chiave pubblica, non riuscirete a fidarvi del tutto del metodo perché non lo capirete; una chiave privata è sempre un "collegamento" tra due chiavi pubbliche note, di cui la prima è il punto base G della curva secp256k1 usata per il bitcoin, mentre la seconda è la cosiddetta chiave pubblica corrispondente alla chiave privata

2) adesso che sapete che cosa sono, generate in locale una coppia: chiave privata 'a' -  chiave pubblica 'a*G' (dove G è il punto base della curva secp256k1) utilizzando il tool keyconv che si trova nella stessa directory di vanitygen  (non si trova però in supervanitygen che non supporta questo metodo)

Code:
./keyconv -G

Pubkey (hex): 0420ec63d02da16c5f1a368be87969eaa611148e78f926c44a599ced25d376ed26e0412af50e1e6b6be6e6903e0b0bf85c6c6f80ae905012fcd3405606074769da
Privkey (hex): 3A49649658A57BA9B18C6B2F583629E8B06D96BC229D1C8D9138253066554BA4
Address: 1LCD7PoC86dkJNSZU1TAar1x1iGeVynSBU
Privkey: 5JFxSHfPFAGCD6Fp3RvSN3s6RXrv8vX7kDpJiZVNYyoLHDJs2Wk

NB: non fatevi ingannare dall'ordine dell'output: il software prima genera in modo random a (Privkey), da cui calcola facilmente a*G = P (Pubkey corrispondente). L'operazione inversa è impossibile ( da a*G non si può ricavare a, pur conoscendo G! ). L'indirizzo che si ricava dalla chiave pubblica in questo caso non serve a nulla.

Riassumendo:  

a     = 3A49649658A57BA9B18C6B2F583629E8B06D96BC229D1C8D9138253066554BA4 (formato hex)
a     =  5JFxSHfPFAGCD6Fp3RvSN3s6RXrv8vX7kDpJiZVNYyoLHDJs2Wk (formato WIF)

a*G =  0420ec63d02da16c5f1a368be87969eaa611148e78f926c44a599ced25d376ed26e0412........ ....05606074769da


3) questo è l'unico passo che dovrebbe fare un sito per voi; in questo caso però provate voi stessi ad eseguire vanitygen fornendogli la vostra chiave pubblica come base di partenza: vanitygen troverà una chiave privata b a partire dalla chiave pubblica a*G che voi gli fornirete (NB: vanitygen non conosce assolutamente la chiave privata a da cui avete ricavato a*G con il tool keyconv)
Code:
./vanitygen 1Pippo -P 0420ec63d02da16c5f1a368be87969eaa611148e78f926c44a599ced25d376ed26e0412af50e1e6b6be6e6903e0b0bf85c6c6f80ae905012fcd3405606074769da

Difficulty: 259627881
Pattern: 1Pippo                                                                
Address: 1Pippos3rYCrso1yQ79ACqaDW2gmurwPeP
PrivkeyPart: 5JdQf3z7eMswHxJKFCnRUeDqBcYNiaJRmxLbECGPUvemPP4vLX4

Osservate che vanitygen vi fornisce in output soltanto una chiave privata b 'parziale':

b = 6aff09a31962bec0c7e8bb740f0ff357066feb1ca6cdd065007f6c3f47bfe79a (formato hex)
b = 5JdQf3z7eMswHxJKFCnRUeDqBcYNiaJRmxLbECGPUvemPP4vLX4 (formato WIF)

Come ha ottenuto quella chiave privata? E' partito da a*G e ha iniziato ad aggiungere + G + G + G + ...   b volte:

a*G + G + G + G + ...  = a*G + b*G

finché ha ottenuto la chiave pubblica finale a*G + b*G da cui si ottiene l'indirizzo che contiene la stringa da voi impostata. Questo è l'unico dato che conosce chi ha materialmente effettuato il passo 3) per voi, la chiave pubblica relativa all'indirizzo 1Pippos3rYCrso1yQ79ACqaDW2gmurwPeP, non la sua chiave privata.

4) Per ottenere infine la chiave privata relativa alla chiave pubblica a*G + b*G, si fa una semplice somma:
chiave pubblica finale = a*G + b*G = (a+b)*G  --> quindi la chiave privata finale sarà la somma  a + b

Per calcolare la somma riutilizzate un'ultima volta il tool keycon:

Code:
./keyconv -c 5JFxSHfPFAGCD6Fp3RvSN3s6RXrv8vX7kDpJiZVNYyoLHDJs2Wk 5JdQf3z7eMswHxJKFCnRUeDqBcYNiaJRmxLbECGPUvemPP4vLX4

Address: 1Pippos3rYCrso1yQ79ACqaDW2gmurwPeP
Privkey: 5K55WfCQp4a9F3ArFSFxkeLoPYaNeMxToN67iai1o2bTVywy

Chiave finale a+b = 5K55WfCQp4a9F3ArFSFxkeLoPYaNeMxToN67iai1o2bTVywy  (formato WIF)
Address corrispondente = 1Pippos3rYCrso1yQ79ACqaDW2gmurwPeP

Osservazioni conclusive:

1) vi faccio osservare che nel passo finale bisogna dare in pasto a keycon le due chiavi private a e b in formato WIF, non in formato esadecimale;

nel nostro caso, usando il formato hex, facciamo un controllo con python per verificare che si tratti effettivamente di una somma:
Code:
python
Python 2.7.8 (default, Oct 20 2014, 15:05:19)
[GCC 4.9.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.

>>> a=0x3A49649658A57BA9B18C6B2F583629E8B06D96BC229D1C8D9138253066554BA4
>>> b=0x6aff09a31962bec0c7e8bb740f0ff357066feb1ca6cdd065007f6c3f47bfe79a
>>> n=115792089237316195423570985008687907852837564279074904382605163141518161494337 #ordine della curva
>>> print hex((a+b) % n)  #la somma va fatta modulo 'n'
0xa5486e3972083a6a797526a367461d3fb6dd81d8c96aecf291b7916fae15333e

Ora, se inserite quest'ultima chiave privata in formato hex (senza il prefisso 0x) qui o meglio ancora qui vedrete che tutto torna, si tratta di una "banale" somma di due chiavi private, una vostra personale e l'altra generata con vanitygen! Ovviamente NON inserite la chiave privata finale che intendete utilizzare sul serio in un sito online per controllare che funzioni ...

2) se ancora non vi fidate, provate a inserire la seconda chiave privata
b = 6aff09a31962bec0c7e8bb740f0ff357066feb1ca6cdd065007f6c3f47bfe79a qui e verificate che si ottiene l'indirizzo 179RvzLmR3pyb9U9qHyz2D4jaLJ8NmLEYi che nulla ha a che fare con quello vanity 1Pippos3rYCrso1yQ79ACqaDW2gmurwPeP
 
3) il punto delicato di tutta la faccenda è il punto 2) del procedimento, ovvero la generazione della chiave privata a. Se non vi fidate di keyconv, potete utilizzare il tool che preferite o direttamente il vostro wallet, purché esso vi fornisca la chiave privata in formato WIF e la relativa chiave pubblica in formato hex non compressa (deve iniziare con 04). Sul resto del procedimento non ci sono problemi legati alla sicurezza.
legendary
Activity: 3528
Merit: 4042
esistono dei servizi del genere http://bitcoinvanitygen.com/ e simili

ma, come si fa a fidarsi?
oggi vi propongo una guida, semplicissimi passi, per ottenere il vostro vanity address fatto in casa

requisiti
- macchina unixlike: linux,macosx,bsd,etc
- windows [$]

come fare
- scaricare il sorgente di https://github.com/samr7/vanitygen
- scompattare e entrare nella dir
- installare questo pacchetto -> pcre versione dev sulla vostra distribuzione (banalmente su debian-like apt-cache search pcre per cercarlo)
- avviare il comando 'make'

come usarlo
- dalla directory del vostro compilato digitare
./vanitygen $PATTERN

$PATTER pué essere tipo 1Love per esempio.. nella shell vi dice quanto tempo ci mette e la probabilitá di trovarlo

[$] per i sistemi windows, sticazzi.. non ho intenzione di aiutarvi, arrangiatevi
Jump to: