This is an old revision of the document!
Prezentarea PowerPoint pentru acest laborator poate fi găsită aici.
OpenSSL este o suita de funcții criptografice, care oferă atât o facilitate de unelte în linie de comandă cât și o librărie folosită pentru aplicații (e.g. C/Python). Aici vom face câteva exerciții cu OpenSSL în linie de comandă ca să pridenți ceva experiență cu aceste funcții foarte populare și utile.
Acum: ati primit niste fisiere top secret in arhiva top secret. Aceasta contine un fisier binar (data_enc_mac.bin) cu un mesaj criptat + un MAC, i.e.
file = enc(ke,m) + mac-cbc(km,m)
Vreti sa aflati mesajul secret si sa verificati ca este corect (mac corect). Pentru asta va trebuie cheile de criptare (ke) si de MAC (km). Stim ca criptarea s-a facut cu aes-128-cbc cu iv=000.00 (16 octeti) iar mac-ul este CMAC cu AES-128-CBC.
Din fericire mai avem in arhiva un fisier (tot binar, data_kek.bin.pass_hellokitty) care contine un master key (k0), dar care este criptat si el cu aes-128-cbc si pbkdf2, cu passphrase din numele fisierului.
Mai stim ca putem folosi acest master key (k0) pentru a deriva cheile de criptare si MAC de mai sus (ke, km) prin aplicarea functiei SHA256, i.e. (ke, km) = SHA256(k0)
Acum stim cam tot ce avem nevoie pentru a afla si a verifica mesajul secret. Care este acest mesaj?
Vedeti aici informatii ajutatoare pentru criptare si criptare cu pbkdf, aici informatii pentru SHA256 si aici pentru MAC.
#openssl version
#openssl enc -d -aes128 -pbkdf2 -in...
#echo $k0 | openssl -dgst sha256
unde k0 contine cheia aflata la punctul precedent (hint: ar trebui sa fie gustoasa…).
#cat data_enc_mac.bin | head -c80
apoi folositi iarasi openssl enc -aes128 -d -K… -iv… -nopad (cu parametru in fisier sau cu pipe ca mai sus) ca sa decriptati mesajul.
openssl mac -cipher AES-128-CBC -binary
cu parametrul -macopt hexkey:… (aici km in hexa)
Pentru al doilea exercitiu puteti folosi platforma Google Colab, accesând acest link.
În acest laborator vom studia despre Message Authentication Codes (MAC).
În acest exercițiu vom ataca un algoritm nesigur din categoria MAC prin a arăta că un adversar poate falsifica o pereche de tipul (mesaj, tag), fără a avea acces la un oracol $\mathsf{Tag}$ care returnează tag pentru mesajul dorit.
Fie $F$ un $\mathsf{PRF}$. Arătați că următorul MAC este nesigur prin a construi un adversar eficient ce prezintă un avantaj ne-neglijabil împotriva algoritmului MAC. Cheia este $k \in \{0, 1\}^n$, iar pentru fiecare mesaj $m = m1 \| m2$ cu $\left|m_1\right| = \left|m_2\right| = n$, MAC-ul este calculat folosind următoarea formulă:
$\mathsf{Tag}(k, m_1 \| m_2) = F_k(m_1) \| F_k(F_k(m_2)) $