Skip to main content

Sicurezza dell'algoritmo e numero nonce [dubbio]

4 posts / 0 new
Ultimo contenuto
picchio
Sicurezza dell'algoritmo e numero nonce [dubbio]
Versione stampabile

Ciao,

  ho un dubbio, il numero nonce è stato inserito per poter permettere la modifica dell'hash sha256 al fine di appesantire il calcolo e rendere possibile un solo blocco ogni 10 minuti in media.

  Però questo fatto fa si che, in teoria, chiunque potrebbe sostituire un qualunque blocco passato con uno che ha lo stesso hash ma con informazioni errate che magari gli fanno caricare il suo portafoglio a danno di altri.

  Non dico che sia facile ma, introducendo il nonce sarà possibile questa alterazione.

  Forse sarebbe stato più sicuro memorizzare nel blocco successivo l'hash del blocco precedente senza nonce e senza l'informazione dell'utente che ha generato l'hash vincitore. Magari si memorizza anche l'hash "vincitore" ma un qualcosa che congeli le transazioni (in formato xml o testo) credo potesse essere piu' sicuro.

  L'evento è sicuramente complicato da riprodurre, 256 bit sono 2^256 combinazioni (~10^77), poi sarà anche difficile far credere all'intera rete il blocco artefatto è quello corretto ma se ci si riesce questo si integra nella catena in modo del tutto anonimo.

Ciao

Dusty
Ritratto di Dusty
Re: Sicurezza dell'algoritmo e numero nonce

Non mi è molto chiaro il tuo dubbio, provo a spiegare meglio la cosa: ogni blocco porta con se diverse informazioni tra cui l'hash del blocco precedente, in modo da formare la "catena".

Per essere valido, ogni blocco deve avere un un hash calcolato con un (doppio) SHA256, che deve essere minore di un certo "target".
Tale target dipende dalla difficoltà: tanto più è alta, tanto più basso è il target, riducendo quindi il numero dei possibili hash che vanno bene.

Siccome, come giustamente calcoli, il numero di possibili hash è assolutamente [i]enorme[/i] in quanto dell'ordine di 2^200, calcolare un hash richiesto, il cui unico modo è il brute force, richiede risorse computazionali impressionanti.
Questo a meno di non "rompere" lo sha256, cosa che però sembra essere ben ben lontano dall'essere possibile.

Quindi non solo l'evento è difficile da riprodurre, ma è talmente difficile che tutta la rete bitcoin nella sua interezza prova costantemente a trovare tale [i]nonce[/i] e ci riesce, mediamente, circa ogni 10 minuti.
Inoltre siccome ogni blocco si porta dietro l'hash precedente, cercare di contraffare tutta la catena diventa esponenzialmente sempre più complesso e quindi sempre meno praticabile.

Non ho capito il discorso di "congelare" le transazioni usando testo o xml (direi che il tipo di rappresentazione è del tutto irrilevante), ma la cosa viene già fatta con la catena dei blocchi in quanto tutto rimane nella storia.
Prima di ritenere confermata una transazione infatti si aspettano 6 blocchi che corrispondono a circa un'ora. Una volta avutoli la potenza di calcolo necessaria a poter avere una catena di 6 blocchi alternativa è talmente elevata che è decisamente improponibile per qualunque attaccante anche di portata enorme come le risorse che può mettere in campo un governo.

I calcoli sono evidenziati nel paper di Satoshi.

Ciao,
Dusty

picchio
Sicurezza dell'algoritmo e numero nonce [dubbio]

Forse il parametro
Merkle root:
risolve il mio problema di sostituzione di un blocco. Ma non ho capito cosa sia esattamente, è un parametro che viene calcolato tenendo in considerazione tutti i blocchi precedenti?

Provo a rispiegare:
se io riuscissi a creare un blocco che ha l'hash corretto
Supponiamo: http://blockexplorer.com/block/0000000000000e683be88e96a15392e5263f11d4b...

che contiene il riferimento corretto al precedente e ben formattato e coerente con i dati che contiene.

Potrebbe passare inosservato e sostituirsi al blocco corretto?

Nel senso, il blocco successivo sa di essere il successivo perche' conosce l'hash del precedente.

A questo punto io metto nel blocco taroccato un 100.000 BTC su un mio indirizzo prelevandoli da un indirizzo che abbia i fondi necessari o mi genero un premio .... o sostituisco un indirizzo destinazione con uno mio. ...

In sostanza: l'algoritmo ha modo di scovare la mia truffa o digerirebbe il blocco considerandolo buono e corretto?

L'anonimato poi impedirebbe di essere scoperto. In sostanza: puo' essere un buco?

Non voglio sostituire tutta la catena ma solo un blocco. Magari tra 100 anni il blocco di cui sopra (che caso vuole non ha nessuna transazione se non il premio).

Se ho ragione, basterebbe sostituire (o aggiungere) il riferimento all'hash precedente con l'hash dei soli dati che contiene senza i dati
Nonce:
Chi l'ha generato

Allora sarebbe molto piu' difficile generare un hash e rispettare la grammatica del messaggio. Il nonce elimina questo vantaggio.

Dusty
Ritratto di Dusty
Re: Sicurezza dell'algoritmo e numero nonce

picchio ha scritto:
Forse il parametro
Merkle root:
risolve il mio problema di sostituzione di un blocco. Ma non ho capito cosa sia esattamente, è un parametro che viene calcolato tenendo in considerazione tutti i blocchi precedenti?

Esattamente, il Merkle Tree è una struttura dati ad albero che tiene gli hash dei sotto alberi, i dettagli sono su wikipedia:
http://en.wikipedia.org/wiki/Merkle_tree

Citazione:
Provo a rispiegare:
se io riuscissi a creare un blocco che ha l'hash corretto
Supponiamo: http://blockexplorer.com/block/0000000000000e683be88e96a15392e5263f11d4b...
che contiene il riferimento corretto al precedente e ben formattato e coerente con i dati che contiene.
Potrebbe passare inosservato e sostituirsi al blocco corretto?

Per poter far accettare il tuo blocco dovresti riuscire a calcolarlo più velocemente di tutto il resto della rete, e quindi vuol dire che (mediamente) dovresti avere il 50%+1 della potenza di calcolo complessiva.
Se ci riesci, e tutte le volte che ci riesci, tanto meglio, perchè ti prenderai il bonus dei 50 BTC che ogni blocco in questo periodo porta con se.

Citazione:
Nel senso, il blocco successivo sa di essere il successivo perche' conosce l'hash del precedente.

Si.

Citazione:
A questo punto io metto nel blocco taroccato un 100.000 BTC su un mio indirizzo prelevandoli da un indirizzo che abbia i fondi necessari o mi genero un premio .... o sostituisco un indirizzo destinazione con uno mio. ...

Ovviamente no, altrimenti questa operazione la potrebbe fare chiunque risolve un blocco, cioè continuamente qualcuno nella rete.

Una transazione è definita come un cambio di proprietà dei bitcoin associati ad un certo indirizzo.

Cosa è un indirizzo?
E' la chiave pubblica di una corrispondente coppia di chiavi pubblica-privata che possiede l'utente che le ha generate.

Come avviene il cambio di proprietà?
Il proprietario dell'indirizzo usa la sua chiave privata per firmare la transazione e definire i due nuovi indirizzi a cui vengono inviati i BTC.
Sono due perchè uno è il destinatario dell'importo designato e l'altro è il destinatario del "resto" della transazione.
Supponiamo cioè che ci siano 100 BTC su di un certo indirizzo A e che bisogni spedirne 10 all'indirizzo X: la transazione effettuerà un passaggio di 10BTC ad X e di 90 a B, essendo B un indirizzo dello stesso utente che possiede A.

In altre parole: solo chi è proprietario dei suoi fondi può creare una transazione, e solo per i suoi fondi. Come è ovvio e normale che sia.

Chi risolve i blocchi può solo decidere se mettere la sua transazione nel blocco o meno.

Citazione:
In sostanza: l'algoritmo ha modo di scovare la mia truffa o digerirebbe il blocco considerandolo buono e corretto?

Se l'hash è minore del target il blocco è potenzialmente buono, ma ovviamente tutte le transazioni che contiene devono essere firmate dai legittimi proprietari altrimenti... non sarebbero transazioni ma solo numeri a caso.

Spero che questo abbia chiarito i tuoi dubbi.

Ciao,
Dusty