Un minatore Bitcoin può generare hash SHA2 su dati arbitrari?

1

Non sto chiedendo del design di bitcoin ... ma mi interessa la capacità di hashing di un bitcoin miner.

Per essere brevi : i bitcoin miners (o alcuni di essi) accettano input personalizzabili e li cancellano in blocco (invece di accettare alcune istruzioni di alto livello e fanno automaticamente il mining)?

La vera domanda è che ho letto alcuni articoli su uno schema di firma della crittografia post-quantica, il Merkle Signature Scheme (MSS):

Questo nuovo modo di eseguire la firma digitale richiede una grande quantità di hash calcolati, ad esempio:

  1. un singolo One-Time-Signature (OTS) richiede almeno 512 volte di hash se utilizziamo SHA-256 con una dimensione di output di 512*256/8=16kBytes .

    Se si desidera un output più piccolo, che richiede un compromesso tra memoria temporale, ad es. per ridurre la dimensione di quasi 8, richiede% hash di2^8 * (256 / 8) = 8192 con una dimensione di output circa 256 * 256 / 8 / 8 = 1024 Bytes ; per ridurre di 16, richiede% hash di2^16 * (256 / 16) = 1048576 con una dimensione di output di circa 512 byte.

  2. ogni firma di MSS è composta da varie OTS, autenticate da alberi binari concatenati (l'OTS su una foglia è usato per autenticare la chiave pubblica radice dell'albero sottostante), il che significa, per n alberi esiste n OTS da fare.

  3. per calcolare la chiave pubblica della radice dell'albero, potrebbe essere necessario eseguire l'hash dell'intero albero: con i livelli m , occorrono circa 2 ^ m di hash.

E infine, in questo modo si può raggiungere una durata di n*m (il limite di fare la firma). Ad esempio: se 2^80 firme sono state progettate, con n=4, m=20 e un tradeoff con 16, nel caso peggiore ci vogliono 4*1048576 + 4*2^20=8388608 hash (ma con una dimensione di output allettante circa (256*256/16*4+80*256)/8=4608Bytes rispetto agli algoritmi popolari).

Questo requisito sembra troppo alto per il software (OpenSSL potrebbe farlo in 3 secondi, ma se una firma impiega 3 secondi, perché dovremmo progettare una vita di 2^80 segni?), ma per hardware come i minatori bitcoin, sembra ancora troppo facile (non sono sicuro, non ho mai giocato con quello). Quindi ho considerato la possibilità di adattare un bitcoin miner a un'accelerazione hardware per tale algoritmo di firma. Per fare ciò, è necessario alimentare il minatore con gli input che vogliamo che calcoli. È possibile? (Penso che dovrebbe, dal momento che dovrebbero almeno consentire la personalizzazione di alcuni parametri relativi all'utente nei test hashcash ...)

    
posta Lucifer Orichalcum 20.02.2015 - 02:46
fonte

1 risposta

1

Do bitcoin miners(or some of them) accept customizable inputs and hash them in bulk(instead of accepting some more high-level instruction and do mining works automatically)?

I minatori di Bitcoin generalmente prendono un parametro chiamato "target" e "header" e restituiscono un overflow nonce +. Non penso sia possibile eseguire hash X volte, risultando in un output prevedibile (ad esempio, si desidera confrontare gli hash). Il gioco Bitcoin è uno di "trovare un numero inferiore" e "un hash il più veloce possibile finché non lo fai".

Sì, Bitcoin sta letteralmente confrontando l'output SHA2 di due valori come BigInteger e dovrebbe tornare solo quando viene trovato. (forse ciò di cui hai bisogno è possibile, ma penserei che questa funzione introdurrebbe delle inefficienze per il gioco Bitcoin e sarebbe indesiderabile)

Ecco cosa succede all'interno dei minatori bitcoin:

Nota: i passaggi 3 e 4 sono Bitcoin Hardware, il resto è il software del driver personalizzato

Passaggio 1

Ad un livello elevato, il software miner prende un elenco di transazioni attive e quindi le raggruppa in qualcosa chiamato "blocco".

O più precisamente affermato: Il software miner racchiude tutte le transazioni in una vista di riepilogo chiamata "radice di merkle" e la blocca, che è rappresentativa delle transazioni.

Passaggio 2

Quindi il software di mining lo converte in un formato binario chiamato Block Header , che fa riferimento anche ai blocchi precedenti (anche chiamato catena).

Field           Purpose                          Updated when...               Size (Bytes)
Version         Block version number             You upgrade the software and   4
                                                 it specifies a new version 

hashPrevBlock   256-bit hash of the previous     A new block comes in          32
                block header    
hashMerkleRoot  256-bit hash based on all        A transaction is accepted     32
                the transactions in the block       

Time            Current timestamp as seconds     Every few seconds              4
                since 1970-01-01T00:00 UTC  

Bits            Current target in compact format   The difficulty is adjusted   4

Nonce           32-bit number (starts at 0)       A hash is tried (increments)  4

Passaggio 3:

L'hardware minatore cambia una piccola parte di questo blocco chiamato "nonce".

Passaggio 4:

L'intestazione del blocco è hash e rispetto all'obiettivo come se fosse semplicemente un numero elevato come 10.000.000 > 7.000.000 (i numeri reali sono molto più grandi e in esadecimale). La destinazione viene compressa e memorizzata in ogni blocco in un campo chiamato bit.

Un target espanso ha il seguente aspetto:

  Target   0000000000000083ef00000000000000000000000000000000000000000000000

E l'obiettivo è assicurarsi che l'hash SHA256 del blocco sia inferiore a questo valore. Nell'esempio seguente " 83ee " è minore di " 83ef "

Per semplificare questo concetto, puoi schierare il bersaglio contando gli zeri iniziali (come spiega l'altra risposta qui). Ecco un esempio:

Ecco un esempio di blocco con transazioni che puoi visualizzare su BlockChain.info. Guarda in alto a destra angolo della pagina web per questo hash:

   Hash 0000000000000083ee9371ddff055eed7f02348e4eda36c741a2fc62c85bc5cf

Quel precedente hash era di oggi e ha 14 zeri principali. Paragoniamolo a ciò che era necessario 3 anni fa con blocco 100 che ha 8 zeri iniziali.

   Hash 00000000a8ed5e960dccdf309f2ee2132badcc9247755c32a4b7081422d51899

Riepilogo

Quindi alla fine della giornata, tutto ciò che fa un minatore è:

  1. Prendi un'intestazione di blocco come input
  2. Cambia il Nonce
  3. Verifica se l'hash dell'intestazione del blocco è inferiore alla destinazione. Se lo è, vinci.
  4. Vai al passaggio 2 (o vai al passaggio 1 se qualcun altro ha vinto il blocco)
risposta data 20.02.2015 - 04:37
fonte

Leggi altre domande sui tag