Laboratorul 08 - MAC

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

Exercițiul 1 - OpenSSL în linia de comanda (3p)

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.

  • Incepeti prin verificarea versiunii de OpenSSL (eu am folosit 3.0.2):
    #openssl version
  • Apoi decriptati fisierul binar kek cu passphrase-ul din numele fisierului pentru a obtine k0 (vedeti openssl enc … -pbkdf2…).
  #openssl enc -d -aes128 -pbkdf2 -in...
  • Acum folositi SHA256 pentru a obtine (ke|km) = SHA256(k0). Vedeti openssl -dgst. Puteti face pipe ca sa trimiteti date de intrare catre SHA256 sau alte functii openssl, e.g.:
   #echo -n $k0 | openssl dgst -sha256

unde k0 contine cheia aflata la punctul precedent (hint: ar trebui sa fie gustoasa…).

  • Cu ke (primii 16 octeti din rezultatul de mai sus) putem decripta mesajul (folositi -nopad, nu e nevoie de padding). Vedeti openssl enc -d …. Aici trebuie sa folositi primii N-16 octeti din fisier (ultimii 16 sunt MAC-ul). Puteti trunchia cu cat sau alta metoda la alegere, e.g.:
   #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.

  • In sfarsit, puteti verifica ca mesajul primit este corect (desi ar trebui sa para un text inteligibil) prin aplicarea MAC-ului CMAC cu AES-128-CBC peste ultimii 16 octeti din fisierul binar data_enc_mac.bin. Vedeti functia
  openssl mac -cipher AES-128-CBC -binary

cu parametrul -macopt hexkey:… (aici km in hexa)

Exercițiul 2+

Pentru al doilea exercitiu puteti folosi platforma Google Colab, accesând acest link.

ic/labs/08.txt · Last modified: 2023/11/22 01:03 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