Upload
others
View
16
Download
0
Embed Size (px)
Citation preview
Hash funkcije, autentikacija poruka i MAC
Hash Funkcije• Primenom hash funkcije na poruku M proizvoljne
dužine dobija se hash fiksne dužine h=H(M)• Najčešće se podrazumeva da je hash funkcija
javna i ne sadrži ključ za razliku od MAC(Message Authentication Code) koji sadrže
• Može se koristiti na različite načine u poruci– za otkrivanje promena u poruci– da se napravi digitalni potpis
• Postoje:– Kriptografske hash funkcije (npr. SHA, MD5)– Nekriptografske hash funkcije (npr. Jenkins hash)
Osobine Hash funkcija
• Proizvodi otisak prsta neke poruke/datoteke h = H(M)
– Kondenzuje poruku M promenljive dužine– Otisak prsta je fiksne dužine
• Podrazumeva se da je javna
Trivijalna provera integriteta poruke hash funkcijom
Napad na trivijalnu proveru integriteta poruke
Provera integriteta
Digitalno potpisivanje
Ostale primene
• One-way password• Hashcash anti-spam zaštita• Proof of work u blockchain-u („rudarenje“
bitcoina)• Detekcija virusa i upada u sistem• Generisanje pseudoslučajnih brojeva
Primeri Hash funkcija (1)• XOR svih blokova poruke
(blokovi fiksne dužine)– i-ti bit:– Problem ASCII kod teksta – sva
slova počinju nulom, pa je broj efektivnih bita 12.5% manji
– Lako je naći drugu poruku koja ima isti hash
• RXOR - XOR sa rotacijom – da se izbegne problem patterna u ulaznom nizu
Primeri Hash funkcija (2)
• Slabe hash funkcije – jednostavno se generišu poruke koje daju istu hash funkciju ako se šalje poruka u cleartextu
• Moguće rešenje – kriptovanje poruke (neki CBC algoritam) i hash funkcije, međutim, ovakav algoritam nije otporan na promenu redosleda blokova, jer je XOR komutativna operacija
XOR + CBC
• MAC = XN+1 = X1 ⊕ X2 ⊕ ... ⊕ XN
• Y=Ecbc(K,X)• X1 = IV⊕D(K, Y1)• Xi = Yi-1⊕D(K, Yi)• XN+1=YN⊕D(K, YN+1)• XN+1=X1⊕X2⊕... ⊕ XN = [IV ⊕ D(K, Y1)]⊕⊕[Y1⊕ D(K, Y2)] ⊕ ... ⊕ [YN-1⊕ D(K, YN)]
• Nije otporno na promenu redosleda
Zahtevi za Hash funkcije1. Mogu se primeniti na poruke M bilo koje
dužine2. Proizvodi izlaz fiksne dužine h3. Lako je izračunati h=H(M) za svako M4. Za dato h teško je naći x takvo da je H(x)=h
- one-way osobina5. Za dato x teško je naći y da je H(y)=H(x)-
weak collision resistance6. Teško je naći bilo koje x,y da je H(y)=H(x)-
strong collision resistance
Sigurnost hash funkcija• Blok veličine b bita, hash veličine n bita• Ako je b>n, ima 2b blokova i 2n hash-eva• za svaki hash ima 2b-n blokova• Teži se da hash funkcija ima uniformnu
raspodelu, tj. da svaki hash ima 2b-n
ulaznih blokova• Ako su poruke proizvoljne dužine onda
ima proizvoljno mnogo poruka koje daju isti hash
• Pseudoslučajnost izlaza
Napadi na hash funkcije
• Napadač koji želi da podmetne lažnu poruku želi da kreira y koje takvo da je H(y)=H(x) za neku originalnu poruku x.
• Na dobru hash funkciju je moguć samo brute force napad– Za hash dužine m ima 2m hasheva – Napadaču treba u proseku 2m-1 pokušaja da
se pronađe y
Colision resistant attack• Treba pronaći dve poruke x i y koje daju isti
hash• Birthday paradox: Ako se posmatra slučajna
promenljiva koja je dobijena po uniformnoj raspodeli u [0,N-1], verovatnoća da će u skupu od sqrt(N) elemenata biti istih je ≈0,5
• ako napadač generiše 2k/2 parova poruka, verovatnoća da će jedan od njih dati isti hash kod je veća od 0.5
• Posledica – ako je hash dužine 160 bita, smatra se da je potrebno 280 operacija da se pronađe druga poruka istog hasha
Tipična struktura hash funkcije
SHA algoritam
• Secure Hash Algorithm (SHA) razvijen od strane National Institute of Standards and Technology (NIST) 1993, poslednja revizija 2009.
• Dokument: Secure Hash Standard • SHA-1 ima hash vrednost od160 bita.
2002, NIST je napravio revizije SHA-256, SHA-384 i SHA-512 sa hash-om označenog broja bita
SHA-512 algoritam• Maksimalna veličina poruke 2128
• Sigurnost 256 bita• Veličina bloka 1024 bita
SHA jedan blok F
• 80 iteracija• Inicijalizacioni baferi• a = 6A09E667F3BCC908
b = BB67AE8584CAA73Bc = 3C6EF372FE94F82Bc = A54FF53A5F1D36F1e = 510E527FADE682D1f = 9B05688C2B3E6C1Fg = 1F83D9ABFB41BD6Bh = 5BE0CDI9137E2179
• Koreni prvih 8 prostih brojeva• K – konstante – treći koreni
prvih 80 prostih brojeva
K konstante
SHA jedna iteracija• T1=h+Ch(e,f,g)+∑e+Wt+Kt
• T2=∑a+Maj(a,b,c)• a=T1+T2
• b=a• c=b• d=c• e=d+T1• f=e• g=f• h=g• Ch(e,f,g) – If e, then f else g• Maj(a,b,c) –• ∑a=RR28(a) RR34(a) RR39(a)• ∑e=RR14(e) RR18(e) RR41(e)• + sabiranje po modulu 264
W vrednosti
• Svaki bit hasha je funkcija svakog bita originalne poruke!
SHA primer - abc
• Poruka ABC: 01100001 01100010 01100011 (616263 HEX)
6162638000000000 0000000000000000 0000000000000000 00000000000000000000000000000000 0000000000000000 0000000000000000 00000000000000000000000000000000 0000000000000000 0000000000000000 00000000000000000000000000000000 0000000000000000 0000000000000000 0000000000000018
Izračunati hash(abc)
• ddaf35a193617aba cc417349ae204131 12e6fa4e89a97ea2 0a9eeee64b55d39a
2192992a274fc1a8 36ba3c23a3feebbd 454d4423643ce80e 2a9ac94fa54ca49f
SHA primer - cbc
• Poruka CBC: 01100011 01100010 01100011 (636263 HEX)
6362638000000000 0000000000000000 0000000000000000 00000000000000000000000000000000 0000000000000000 0000000000000000 00000000000000000000000000000000 0000000000000000 0000000000000000 00000000000000000000000000000000 0000000000000000 0000000000000000 0000000000000018
Izračunati hash(cbc)
• 531668966ee79b70 0b8e593261101354 4273f7ef7b31f279 2a7ef68d53f93264
319c165ad96d9187 55e6a204c2607e27 6e05cdf993a64c85 ef9e1e125c0f925f• Promenom jednog ulaznog bita 253 bita
se promenilo – efekat lavine
Primene hash funkcija
Čuvanje lozinki - linux
• U fajlu /etc/shadow se čuvaju heševi:– Hash(password||salt)– Salt – slučajna vrednost koja sprečava
rainbow napad (unapred izračunati heševi lozinki)
Username: pera
6: SHA-512
r8tyYuD1: salt
Borba protiv spama - hashcash
• Proof-of-work sistem (iz 90-ih godina)• Uz mejl se dodaje vrednost X-Hashcash
koja se dobija tako da:– hash(email_header||X-Hashcash)<n– Npr za SHA-160, n=2140 – 20 vodećih nula– Prilikom slanja mejla se iterira kroz Hashcash
vrednosti dok se ne dobije odgovarajući hash– Provera – brza – samo jedno hash računanje– Za spamera – previše trošenja procesorskog
vremena.
Merkleovo stablo
T1 T2 T3 T4 T5 T6 T7 T8
Hash
(T1)
Hash
(T2)
Hash
(T3)
Hash
(T4)
Hash
(T5)
Hash
(T6)
Hash
(T7)
Hash
(T8)
Hash
(T12)
Hash
(T34)
Hash
(T56)
Hash
(T78)
Hash
(T1234)
Hash
(T5678)
Hash
(T12345678)
Merkle root
Jednostavna provera dela poruke/transakcije
T1 T2 T3 T4 T5 T5 T6 T7
Hash
(T1)
Hash
(T2)
Hash
(T3)
Hash
(T4)
Hash
(T5)
Hash
(T6)
Hash
(T7)
Hash
(T8)
Hash
(T12)
Hash
(T34)
Hash
(T56)
Hash
(T78)
Hash
(T1234)
Hash
(T5678)
Hash
(T12345678)
Merkle root
Kodovi za autentikaciju porukaMAC
Sigurnosni zahtevi - napadi
1. Otkrivanje sadržaja poruka *2. Analiza komunikacije (saobraćaja) *3. Lažno predstavljanje4. Izmena sadržaja5. Izmena sekvence (redosleda)6. Promena vremena7. Poricanje slanja8. Poricanje prijema
Autentikacija poruka
• Autentikacija poruka se bavi: – Zaštitom integriteta i redosleda poruka– Proverom identiteta pošiljaoca– Neporicanjem porekla (razrešavanje sporova)
• Razmatra sigurnosne zahteve• Podrazumeva kreiranje autentikatora
• Koriste se tri bazične funkcije:– Hash funkcije– Kriptovanjem poruke– Kod za autentikaciju poruke (MAC)
Autentikacija kriptovanjem
Šifrovanje poruke
• Šifrovanje samo po sebi obezbeđuje i autentikaciju u određenoj meri u slučaju simetričnog šifrovanja:– Primalac zna da je morao da bude kreiran od strane
pošiljaoca, jer samo pošiljalac i primalac znaju tajni ključ
– Tada se sadržaj ne može promeniti
• Problem 1: kako automatski odrediti da je došlo do promene poruke?– Ako poruka ima određenu strukturu, redundansu ili
kontrolne sume mogu automatski da se otkriju bilo kakve promene
• Problem 2: poricanje
Frame Check Sequence
• a) vrši garanciju zadržavanja autentičnosti• b) napadač iako ne zna originalnu poruku
može da izvrši DoS napad na primaoca
Asimetrično šifrovanje poruke
• Ako je javni ključ upotrebljen:– Šifrovanje ne potvrđuje identitet pošiljaoca,
jer potencijalno svi znaju javni ključ– Ako pak
• Pošiljalac potpiše poruku korišćenjem svog privatnog ključa
• Tek tada šifruje javnim ključem primaoca• Istovremeno tajnost i autentikacija
– Potrebno prepoznati izmenjene poruke– Cena su dva ključa upotrebljena za poruku
Kod za autentikaciju poruke (MAC)
• Generiše se algoritmom koji stvara mali blok fiksne veličine– Zavisi od poruke i nekog ključa– Kao enkripcija koja ne mora da bude reverzibilna
• Priključuje se uz poruku kao potpis poruke
• Primalac sprovodi isto izračunavanje nad porukom i proverava da li se slaže MAC
• Osigurava da poruka nije menjana i dolazi od pošiljaoca
Message Authentication Code
Autentikacioni kodovi poruka• Pokazano je da MAC obezbeđuje sigurnost• Može se šifrovati zbog tajnosti
– Generalno se koriste različiti ključevi za svaku stvar– MAC se može izračunati pre ili posle šifrovanja– Preporučuje se da se uradi pre šifrovanja
• Zašto MAC?– Broadcast– Performanse– Nekada se zahteva samo autentikacija– Nekada je neophodno da autentikacija perzistira duže
od tajnosti (npr. Arhive)
• MAC nije digitalni potpis (više entiteta ima ključ)
Zahtevi za MAC
• Predvideti sve tipove napada• Zadovoljiti zahteve:
1. Poznajući poruku i MAC, nije računarski ostvarljivo u razumnom vremenu naći drugu poruku sa istim MAC
2. MAC treba da budu uniformno distribuirani3. MAC treba da podjednako zavisi od svih bita
poruke
Osobine MAC
• MAC je kriptografska kontrolna sumaMAC = CK(M)
– Kondenzuje poruke M promenljive dužine– Koristi tajni ključ K– Konvertuje u autentikator fiksne dužine
• Funkcija preslikavanja je više na jedan– Potencijalno mnoge poruke imaju isti MAC– Nalaženje takvih poruka sa identičnim MAC
mora da bude veoma teško
Sigurnost - primer• Ako je algoritam siguran• Ključ – k bita, MAC – n bita, k>n, poruka M1
• Brute force:– Prvi krug. Poznato M1 i MAC1. 2k puta
MACi=C(Ki,M1) – biće 2(k-n) potencijalnih ključeva– Drugi krug. Poznato M2 i MAC2. 2k-n puta
MACi=C(Ki,M2) - biće 2(k-2n) potencijalnih ključeva– Posle k/n krugova dobiće se ključ
• Ako je k<n posle 2k dobiće se ključ• Sigurnost je min(2k, 2n)
Ali ako algoritam nije siguran...
• MAC algoritam je XOR• M=M1||M2||... ||Mn
• MAC=E(K,M1⊕M2⊕...⊕Mn)• Svaka poruka Y=Y1||Y2||... ||Yn gde je
Yn=Y1⊕Y2⊕...⊕Yn-1⊕M1⊕M2⊕...⊕Mn će dati isti MAC kod, tako da napadač može da kreira proizvoljnu poruku i da ne zna ključ, ako poznaje algoritam i osnovnu poruku.
HMAC• RFC 2104• Razvijene iz poznatih hash
funkcija SHA i MD5• b – broj bita u bloku• K – ključ dužine k bita• K+ - ključ dopunjen do b bita
nulama, a ako je k>b, onda H(K)+dopuna
• ipad - 36h b/8 puta• opad - 5Ch b/8 puta
Upotreba simetričnih šifara za MAC
• Može se upotrebiti bilo koji algoritam šifrovanja sa blokovima u nizu i iskoristiti poslednji blok kao MAC
• Data Authentication Algorithm (DAA) je široko rasprostranjen MAC zasnovan na DES-CBC
• Krajnji MAC je suviše mali za sigurnost
DAA
• Smatra se da nije dovoljno siguran
Whirlpool algoritam
• Zasnovan na AES• Veličina bloka 512• Veličina ključa 512
CMAC• Cipher based MAC, CBC-MAC• Problem – ako se zna
T=MAC(K,X), onda se zna i MAC za svaku poruku X||(X⊕T)
• Poboljšanje – CMAC – više ključeva (izvedeni iz osnovnih ključeva)
• L = E(K, 0n)• K1 = L · x• K2 = L · x2 = (L · x) · x• Cn - koeficijenti prvog polinoma
nerazloživog u GF(2n)• C128= x128 + x7 + x2 + x + 1
If msb(L)=0 then k1=k0≪1 else k1=(L≪1)⊕C
If msb(k1)=0 then k2=k1≪1 else k2=(k1≪1)⊕C