L'algoritmo di hashing è un'arma importante in qualsiasi sistema crittografico .
Queste chiavi sono ovunque su internet, per lo più utilizzate per proteggere le password, ma anche come struttura della maggior parte delle valute crittografiche, come Bitcoin e litecoin .
La caratteristica principale di un algoritmo di hashing è che funziona in un solo verso - in altre parole gira dall'uscita versol' ingresso, ma non è possibile ottenere il viceversa ,l'ingresso verso l'uscita viene negato.
Proprio come una crittografia a curva ellittica in cui non si può ottenere la chiave privata dalla chiave pubblica.
L'altra proprietà è che lo stesso input crea la stessa uscita.
La maggior parte degli algoritmi di hashing, tra cui il CSA ei RIPEMD tutti discendono dalla famiglia MD4.
L'algoritmo di hashing MD4 è stato sviluppato da Ronald Rivest specificamente per consentire facile implementazione del software.
L'algoritmo MD4 e i successivi algoritmi SHA utilizzano variabili a 32 bit con funzioni booleane bit per bit, come la logica AND, OR e gli operatori XOR per lavorare attraverso dall'ingresso al cancelletto di uscita.
Così come fa un lavoro l'algoritmo di hashing - in questo caso uno sguardo a SHA1:
1 - Creazione di cinque variabili
H0 - 011001110100010100100011000000012- Poi scegliere una parola di hash. In questo caso si sceglierà la parola "CRYPTO"
H1 - 11101111110011011010101110001001
H2 - 10011000101110101101110011111110
H3 - 00010000001100100101010001110110
H4 - 11000011110100101110000111110000
3- Convertire la parola in ASCII - "American Standard Code for Information Interchange". Ogni lettera ha un numero assegnato.
CRYPTO - 67-82-89-80-84-79
4- convertire il codice ASCII a binario -
CRYPTO - 01000011-01010010-01011001-01010000-01010100-010011115- unire caratteri e aggiungere 1 fino alla fine.
CRYPTO - 01000011010100100101100101010000010101000100111116- Aggiungere zeri per rendere il messaggio pari a 448 mod 512 - (aritmetica modulare, proprio come un orologio se non con 512 ore). Quindi un messaggio a 48 bit con l'aggiunta dovrà avere 399 zeri aggiunti alla fine, e se il messaggio era di 64 caratteri (o 512 bit) di lunghezza che si avrebbe bisogno di 447 zeri.
01000011010100100101100101010000010101000100111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007- Aggiungere la lunghezza del messaggio originale nel campo a 64 bit che rimane dopo l'aritmetica modulare 448. Il messaggio è lungo 48 caratteri che esprimevano in binario è di 110000 Così il sottostante viene aggiunto alla fine del messaggio, in parte a sei.
0000000000000000000000000000000000000000000000000000000000110000
8- Rompere il messaggio fino in sedici sezioni di 32 caratteri / bit.
010000110101001001011001010100009- Trasforma i 16 x 32 parole bit di caratteri in 80 parole utilizzando una funzione di passo loop. Per prima cosa selezionare quattro parole per la prima esecuzione attraverso il ciclo che sono stringhe di 1,3,9 e 14 dal punto 8.
01010100010011111000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000110000
La prossima volta attraverso il ciclo useremo parole 2,4,10,15 dalla fase 8.
Il processo successivo è quello di XOR le parole insieme. XOR è solo una funzione di calcolo di base che fornisce l'uscita q solo se i due ingressi entrambi hanno un 1 in quella posizione - se non lo fanno l'uscita è zero.
La funzione è ((14 XOR 9) XOR 3) XOR 1) che è:
00000000000000000000000000000000
XOR
01000011010100100101100101010000
È
01000011010100100101100101010000
10- eseguire un fianco ruotare sui numeri - cioè spostare la cifra più a sinistra a destra.
Così
01000011010100100101100101010000
diventa
10000110101001001011001010100000Questo processo viene ripetuto finché ci sono 80 parole o stringhe di 32 bit.
10- Il passo successivo è quello di eseguire una serie di funzioni oltre le parole in un ordine specifico che opera al largo delle cinque variabili che sono stati fissati al punto 1. Le funzioni combinano AND, OR e NOT operatori combinati con turni di sinistra.
Il risultato finale è che si sono lasciati con cinque variabili di:
H0 - 01000100101010010111000100110011
H1- 01010000111001010011100001011000
H2-11110000010110000100011000111101
H3-01001011111101111111000111100101
H4-0100001011011001110010100100101111- Convertire le variabili H in esadecimale:
H0- 44a97133
H1- 50e53858
f058463d H2
H3 - 4bf7f1e5
H4 - 42d9ca4b12- Unire le variabili insieme per dare l'hash digest:
44a9713350e53858f058463d4bf7f1e542d9ca4bQuesto è il processo di base dietro hashing - semplicemente convertire un numero in binario quindi eseguire una serie di semplici funzioni che operano attraverso processi transistor di serie e degli autobus di base come AND, XOR, NOT, Ruota & O.
Questa è una delle ragioni che ASIC, o applicazioni specifiche chip possono essere progettati in grado di ottimizzare l'hashing. Nel caso di SHA-256 chip sono stati specificamente progettato per ottimizzare le interazioni durante le fasi dell' aumento della velocità di creazione un hash da un input.
Nel caso delle miniere questo significa che è possibile calcolare più hash al secondo scorrendo i parametri nonce e nonce in più e hanno una maggiore probabilità di vincere il premio di blocco.
Nessun commento:
Posta un commento