Laboratorul 08 - MAC

Prezentarea PowerPoint pentru acest laborator poate fi găsită aici. Puteți lucra acest laborator folosind și platforma Google Colab, accesând acest link.

În acest laborator vom studia despre Message Authentication Codes (MAC).

Exercițiul 1 - Existential Unforgeability

Î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)) $

Ați putea încerca să spargeți securitatea algoritmului MAC folosind 2 query-uri. Cu toate acestea, puteți găsi o metodă să atacați algoritmul folosind doar un query?

Exercițiul 2 - Birthday attack

În acest exercițiu vom implementa Birthday attack pentru algoritmul SHA-1 folosind OpenSSL.

Scopul acestui atac este să obțină o coliziune pentru algoritmul de hashing SHA-1 folosind 2 mesaje $M_1$ și $M_2$, astfel încât pentru primii 4 bytes cele două hash digest-uri să fie egale ($\mathsf{SHA1}(M_1) = \mathsf{SHA1}(M_2)$).

Coliziunea trebuie să aibă o lungime de $32$ biți, ceea ce înseamnă că sunt necesare $2^{16}$ mesaje random pentru a efectua atacul. De reținut este că atacul nu este garantat să funcționeze din prima iterație; în medie, sunt necesare 2 iterații ale atacului pentru a găsi o coliziune.

Față de laboratoarele anterioare, acest laborator va fi realizat în C folosind următorul schelet de cod arhivă cod sau implementând atacul de la zero.

Pentru a obține digest-ului algoritmul de hashing SHA1 folosind OpenSSL, puteți folosi următorul exemplu:

    SHA_CTX context;
    SHA1_Init(&context);
    SHA1_Update(&context, buffer, length);
    SHA1_Final(md, &context); /* md must point to at least 20 bytes of valid memory */

Puteți consulta SHA man page aici: https://www.openssl.org/docs/manmaster/man3/SHA1.html

Puteți compila și instala OpenSSL folosind codul sursă.

Descărcați biblioteca de la următorul link https://www.openssl.org/source/openssl-1.1.1d.tar.gz și dezarhivați fișierul descărcat.

Deschideți folderul dezarhivat și rulați următoarele comenzi folosind bash:

$ ./config --prefix=your_working_dir --openssldir=your_working_dir/openssl
$ make
$ make install_sw

Pentru a fixa Makefile-ul folosind noile path-uri, modificați variabilele de la începutul Makefile-ului cu următoarele:

LDFLAGS=-Lyour_working_dir/lib -lcrypto
CFLAGS=-Wall -g -Iyour_working_dir/include

ic/labs/08.txt · Last modified: 2022/11/22 01:48 by razvan.smadu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0