This is an old revision of the document!


Laboratorul 08 - MAC

Prezentarea PowerPoint pentru acest laborator poate fi găsită aici.

Î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 mesaj-ul 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.1638554705.txt.gz · Last modified: 2021/12/03 20:05 by valentina.iliescu
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