Hash
Finora abbiamo visto solo funzioni che data una stringa di N caratteri, restituiscono una nuova stringa (criptata) di N caratteri.
Se criptiamo, ad esempio, "ciao" con la funzione elementare (ecco il link) che abbiamo scritto in Python nelle parti precedenti, impostando come chiave, ad esempio, il vettore (1, 2), allora la stringa che la funzione restituirà sarà: "dkbq".
Il messaggio in chiaro "ciao" contiene 4 caratteri (i caratteri 'c', 'i', 'a', 'o') e il messaggio criptato "dkbq" contiene a sua volta 4 caratteri (i caratteri 'd', 'k', 'b', 'q'). Hanno entrambi stesso numero (che abbiamo chiamato N) di caratteri. Inoltre, conoscendo la chiave, che in questo caso è il vettore (1, 2), è facilmente possibile decifrare il messaggio criptato, basta utilizzare la stessa funzione criptando "dkbp" con la chiave inversa, ovvero (-1, -2), in questo modo otteniamo il messaggio in chiaro ovvero "ciao".
La nostra funzione, dunque, ha queste caratteristiche:
Se criptiamo, ad esempio, "ciao" con la funzione elementare (ecco il link) che abbiamo scritto in Python nelle parti precedenti, impostando come chiave, ad esempio, il vettore (1, 2), allora la stringa che la funzione restituirà sarà: "dkbq".
Il messaggio in chiaro "ciao" contiene 4 caratteri (i caratteri 'c', 'i', 'a', 'o') e il messaggio criptato "dkbq" contiene a sua volta 4 caratteri (i caratteri 'd', 'k', 'b', 'q'). Hanno entrambi stesso numero (che abbiamo chiamato N) di caratteri. Inoltre, conoscendo la chiave, che in questo caso è il vettore (1, 2), è facilmente possibile decifrare il messaggio criptato, basta utilizzare la stessa funzione criptando "dkbp" con la chiave inversa, ovvero (-1, -2), in questo modo otteniamo il messaggio in chiaro ovvero "ciao".
La nostra funzione, dunque, ha queste caratteristiche:
- messaggio in chiaro e messaggio criptato hanno stesso numero di caratteri;
- è abbastanza semplice decriptare un messaggio, quindi risalire al messaggio in chiaro che lo ha generato, conoscendo la chiave con cui è stato cifrato.
Una funzione crittografica di hash trasforma dei dati di lunghezza arbitraria (un messaggio) in una stringa di dimensione fissa chiamata valore di hash, impronta del messaggio o somma di controllo, ma spesso anche con il termine inglese message digest.Una funzione di hash, quindi, funziona in questo modo (mi scuso per il gioco di parole):
La funzione crittografica di hash ideale deve avere tre proprietà fondamentali:
- deve essere estremamente semplice calcolare un hash da qualunque tipo di dato;
- deve essere estremamente difficile o quasi impossibile risalire al testo che ha portato ad un dato hash;
- deve essere estremamente improbabile che due messaggi differenti, anche se simili, abbiano lo stesso hash.
Fonte: Wikipedia
Non importa quanto sia lungo il messaggio che vuoi criptare, una funzione di hash ti restituisce sempre un messaggio criptato di dimensione fissa (nell'esempio dell'immagine questa dimensione fissa è di 32 caratteri, contali se vuoi...).
Inoltre, partendo da una stringa criptata generata da una funzione di hash, è estremamente difficile risalire al messaggio in chiaro di partenza. Cioè se io conosco la stringa criptata "0cc175b9c0f1b6a831c399e269772661" (come nell'immagine di sopra) è molto, ma molto, difficile risalire alla stringa che lo ha generato, ovvero "a".
Ricapitolando: è facile criptare una stringa, ma è difficilissimo decriptarla. Ci ricorda qualcosa? Le funzioni non reversibili (articolo precedente).
Una funzione di hash è una funzione di cifratura non reversibile, ed inoltre, restituisce sempre come messaggio criptato una stringa (che ovviamente dipende dal messaggio da criptare) di dimensione fissa.
MD5
Una funzione di hash abbastanza moderna è MD5 (Message Digest 5).Questo tipo di codifica prende in input una stringa di lunghezza arbitraria e ne produce in output un'altra a 128 bit. La codifica avviene molto velocemente e l'output (noto anche come "MD5 Checksum" o "MD5 Hash") restituito è tale per cui è altamente improbabile ottenere con due diverse stringhe in input uno stesso valore hash in output. Ad oggi sono disponibili molte risorse online che hanno buone probabilità di riuscire a decriptare parole comuni codificate.
Fonte: Wikipedia
In poche parole, prende una qualsiasi stringa di qualsiasi lunghezza e la codifica producendo una nuova stringa di 32 caratteri. È una funzione di hash abbastanza moderna e diffusa anche se ha qualche pecca:
A oggi, la disponibilità di algoritmi efficienti capaci di generare stringhe che collidono (ossia che producono in output lo stesso valore di hash) in un tempo ragionevole ha reso MD5 sfavorito rispetto ad altri algoritmi di hashing (vedi WHIRLPOOL, SHA-1 o RIPEMD-160), sebbene la sua diffusione sia a tutt'oggi molto estesa (basti pensare che il controllo di integrità più frequente su file si basa proprio su MD5).
Fonte: Wikipedia
Come codificare una stringa in MD5?
Facciamo qualche prova. Vai al sito MD5 Oline, inserisci una stringa nella textbox e clicca su "Crypter".
La stringa generata sarà quella sotto (di 32 caratteri).
Script In Python
Realizziamo ora una funzione Python che cripta una stringa in MD5.import hashlibInnanzitutto abbiamo importato la libreria hashlib che contiene varie funzioni hash tra cui anche MD5 (quella che ci serve).
def cripta(stringa):
m = hashlib.md5()
m.update(stringa)
return m.hexdigest()
Con il codice:
m = hashlib.md5()abbiamo innanzitutto creato un "oggetto" di tipo MD5 (m = hashlib.md5()) poi gli abbiamo assegnato una stringa da criptare (m.update(stringa)).
m.update(stringa)
Con:
return m.hexdigest()abbiamo criptato la stringa e l'abbiamo ritornata.
Conclusioni
Dopo lo scorso articolo teorico, finalmente è arrivata un po' di pratica. E tieniti pronto, perché il prossimo articolo sarà molto coinvolgente, vedremo com'è possibile decriptare una password (o stringa) criptata in MD5 o in una qualsiasi altra funzione di hash.
< Parte 4 | Parte 6 (non ancora disponibile) >
Ti prego di fare una guida su come fare una irc botnet per attacchi DDoS, sarebbe troppo utile.
RispondiEliminaMi ci vorrà del tempo ma ho in programma di fare una guida a riguardo.
EliminaStay tuned.
E' ancora disponibile la tua guida su come craccare qualsiasi programma, appunto su come creare le crack? cosa mostri nella guida? solamente l'istruzione JMP, o qualcosa di più avanzato? sono principiante nel reverse engineering!
RispondiEliminaNella guida mostro, appunto, in maniera semplice (teoricamente tramite PDF e praticamente con dei video) come crackare un programma. Faccio l'esempio sia per crackare un semplice programmino (creato da me) sia per crackare la versione Trial di un programma commerciale.
EliminaNon viene spiegato niente di avanzato, anche se qualche base di linguaggio Assembly devi averla (anche se comunque qualcosa a riguardo viene spiegato nella guida stessa).
Ecco il link alla guida: http://www.diventarehacker.it/p/come-crackare-qualsiasi-programma_29.html
Potresti anche concludere alcune guide rimaste in sospeso ad esempio " rubare password con i fake login " dove il seguito della guida doveva essere, come mettere online un fake login....
RispondiEliminaEh sì, ne sono perfettamente a conoscenza. Il problema a volte è il poco tempo.
EliminaPer quanto riguarda i fake login non ho continuato perché se spiegavo anche come metterli online, ci sarebbe stata una valanga di ragazzini che rubavano password con i fake login sentendosi fighi (visto che chiunque abbia Internet può leggere queste informazioni). Non sto giudicando, è semplicemente illegale ed anche contro "l'etica" hacking.
Poi ovviamente basta una ricerca su Google per capire come metterli online. Ma non voglio che questa info la sappiano da me, dal mio blog.