Sunteți pe pagina 1din 4

Floroiu Miruna

grupa 334

HMAC : Keyed-Hashing for


Message Authnefication

HMAC implementeaza un mecanism de autentificare folosind functii


criptografice de hash, cum ar fi MD5 si SHA-1. Ofera un mod de a verifica
integritatea informatiei transmise prin mesaje. Mecanismele care folosesc conceptul
de integritate in acest mod, bazate pe o cheie secreta, se numesc de obicei
"message authentication codes" - MAC. Asadar, modulul se foloseste pentru a
verifica autentificarea celui care trimite mesajul, integritatea acestuia si “calcula”
valorile de autentificare ale mesajelor.
Fie H functia de hash pe care o foloseste modulul HMAC si cheia secreta de
criptare K. Putem defini doua siruri ipad si opad astfel incat in ipad se repeta de un
numar de ori byte-ul 0x36 si in opad byte-ul 0x5C.
Modulul foloseste formula

H(K XOR opad, H(K XOR ipad, text))

pentru a calcula rezultatul final.


Securitatea autentificarii mesajelor depinde de proprietatile criptografice ale
functiilor hash, cum ar fi rezistenta la coliziuni si proprietatea de autentificare prin
functia de compresie, cand H se aplica pe un singur bloc.
Una dintre aplicatiile acestui modul este verificarea integritatii informatiei care
se distribuie intre aplicatii sau se pastreaza in locatii vulnerabile.HMAC se foloseste
pentru a creste securitatea atat pentru datele stocate, cat si pentru comunicarea prin
servicii din retele publice, in orice moment in care datele trebuie primise sigur cu o
semnatura. Ideea de baza este de a genera un hash peste datele share-uite, care
combina datele cu cheia secreta. Hashul rezultat poate fi folosit pentru a verifica
mesajele transmise sau stocate si astfel sa se determine un nivel de securitate fara
sa se transmita direct si cheia secreta.
Modulul are urmatoarele metode implementate:

1. HMAC.update(msg): updateaza mesajul sau il concateneaza in cazul in care


e apelata repetitiv (deci HMAC.update(a) si HMAC.update(b) <=>
HMAC.update(a+b))
2. HMAC.digest(): returneaza nr. de bytes care se paseaza prin metoda update
() . (are aceeasi lungime ca atributul digest_size)
3. HMAC.hexdigest(): este asemanatoare cu metoda digest(), dar spre
deosebire de aceasta, returneaza un sit de lungime dubla continand doar
caractere hexadecimale
4. HMAC.copy(): returneaza o copie sau o clona a obiectului HMAC

Clasa HMAc contine urmatoarele atribute :

1. HMAC.digest_size: Dimensiunea rezultatului in bytes

1
2. HMAC.block_size: Dimensiunea blocului intern folosit pentru algoritm in
bytes
3. HMAC.name: Numele canonic pentru HMAC, in ffunctie de algoritmul
implementat, de exmplu "hmac-sha1".

De exemplu, folosind MD5, care este si algoritmul default pentru modul, o


implementare simpla a modulului poate fi :

import hmac

digest_maker = hmac.new('secret-shared-key-goes-here')
f = open('lorem.txt', 'rb')

try:
while True:
block = f.read(1024)
if not block:
break
digest_maker.update(block)
finally:
f.close()
digest = digest_maker.hexdigest()
print digest

Dupa rularea algoritmului se poate obtine o cheie simpla de forma :


4bcb287e284f8c21e87e14ba2dc40b16

Chiar daca, by default, HMAC foloseste MD5, nu este cel mai sigur algoritm
deoarece problema majora cu aceste hashuri este legata de coliziuni (adica 2
mesaje diferie pot produce acelasi hash). S-a demonstrat faptul ca SHA-1 este mai
puternic si ar trebui folosit in loc de cel default. O implementare posibila pentru
SHA-1 este:

import hmac
import hashlib

digest_maker = hmac.new('secret-shared-key-goes-here', '',


hashlib.sha1)
f = open('hmac_sha.py', 'rb')

try:
while True:
block = f.read(1024)
if not block:
break
digest_maker.update(block)
finally:
f.close()
digest = digest_maker.hexdigest()
print digest

care poate obtine ca output :

2
69b26d1731a0a5f0fc7a92fc6c540823ec210759

Exista o implementare mai complexa pentru HMAC integrata in githubul :


https://github.com/python/cpython/blob/master/Lib/hmac.py.

Pentru a genera un nou obiect de tip HMAC se foloseste urmatoarea sintaxa :

hmac.new(key, msg = None, digestmod = None)

Cum este HMAC folosit pentru VPN?

O alta aplicatie a acestui modul este verificarea traficului VPN. Rolul principal
este de a verifica daca mesajele sunt transmise sigur, fara a fi alterate, intre
dispozitive si serverele VPN. Un obiect HMAC este o forma de semnatura digitala,
care se bazeaza pe cheia secreta integreata in mesajul dintre sender si receipient,
oricare ar fi acestia.

Pentru a mentine securitatea semnaturii HMAC, cheia secreta ar trebui


schimbata periodic ( de obicei o data pe an ).

Un exemplu de header al unui request care foloseste o signatura HMAC


seamana cu urmatorul bloc :

Authorization: http://www.worldcat.org/wskey/v2/hmac/v1

clientId="tsFsoBXToV1uR8GEMJCcxz9NYpVvutsA5cJAD9cnKUc4FGYEntM
6UkcIVlYp4ZhYFteVLAxOWJDUV85W",

timestamp="1361306811",

nonce="762343395744465450467911322335",

signature="2DwPAIYqlCOH9xCHM7PSnOBoVKk/PHrHPeIGmmEK/AI=",

principalID="8eaa9f92-3951-431c-975a-d7dfkd9rd131",

principalIDNS="urn:oclc:wms:da"

BILBIOGRAFIE:

1. https://pymotw.com/2/hmac/
2. https://pymotw.com/3/hmac/
3. https://bip.weizmann.ac.il/course/python/PyMOTW/PyMOTW/docs/hmac/inde
x.html
4. https://docs.python.org/3/library/hmac.html
5. https://protonvpn.com/blog/hmac-authentication/

3
4

S-ar putea să vă placă și