Pentru a intelege aplicatiile problemei coliziunilor (zilei de nastere) din Cursul 8, la atacul asupra functiilor hash criptografice, ilustram in acest notebook valorile acestor functii pe diferite blocuri de date.
Python
pune la dispozitie modulul hashlib
care contine functiile ce genereaza valorile hash ale unor blocuri de date
prin functiile hash criptografice MD5
, SHA1
, SHA2
.
MD5
este o functie hash cu valori in multimea stringurilor de 128 de biti, $\{0,1\}^{128}$.
SHA1
ia valori in $\{0,1\}^{160}$.
SHA2
consta din mai multe functii hash, cu valori pe $224, 256, 384, 512$ biti.
Pentru a ilustra ca blocuri de date de lungimi diferite sunt aplicate de o functie hash intr-un string avand acelasi numar fixat de biti, calculam mai intai valoarea hash prin MD5 a blocului de date 'anul1CTI@yahoogroups.com' si apoi a blocului mai lung, 'anul1CTI@yahoo.com grupul anului 1':
In [7]:
import hashlib
mes = hashlib.md5()#declara mes ca un obiect hash vid
mes.update('anul1CTI@yahoogroups.com')# se updateaza obiectul hash prin concatenarea unui string
s=mes.hexdigest()
print 'valoarea hash in hexa prin MD5 a adresei email este', s
print 'lungimea in biti a valorii hash este:', len(s)*4
Concatenam acum la adresa email, stringul ' grupul anului 1' si afisam valoarea hash corespunzatoare si lungimea ei in biti:
In [8]:
mes.update(' grupul anului 1')
sn=mes.hexdigest()
print 'valoarea hash in hexa prin MD5 a adresei email la care s-a concatenat un string este', sn
print 'lungimea in biti a noii valorii hash este:', len(sn)*4
Sa experimentam acum in acelasi mod functia hash SHA1
:
In [9]:
m1=hashlib.sha1('anul1CTI@yahoogroups.com')
s1=m1.hexdigest()
print 'valoarea hash in hexa prin SHA1 a adresei email este', s1
print 'lungimea in biti a valorii hash este:', len(s1)*4
In [10]:
m1.update(' grupul anului 1')
s1n=m1.hexdigest()
print 'valoarea hash in hexa prin SHA1 a adresei email la care s-a concatenat un string este', s1n
print 'lungimea in biti a noii valorii hash este:', len(s1n)*4
Exemplu folosind SHA2
:
In [11]:
mesaj=hashlib.sha256('Contul meu secret dintr-un paradis financiar este 6421 1345 2974 6852')
valh=mesaj.hexdigest()
print 'Valoarea hash prin SHA2 pe 256 biti este:', valh
print 'lungimea in biti a valorii hash:', len(valh)*4
In [12]:
from IPython.core.display import HTML
def css_styling():
styles = open("./styles/custom.css", "r").read()
return HTML(styles)
css_styling()
Out[12]: