This shows you the differences between two versions of the page.
ic:labs:07 [2021/11/14 09:03] valentina.iliescu |
ic:labs:07 [2023/10/09 23:22] (current) razvan.smadu |
||
---|---|---|---|
Line 1: | Line 1: | ||
===== Laboratorul 07 - Correlation Power Analysis ===== | ===== Laboratorul 07 - Correlation Power Analysis ===== | ||
- | Prezentarea PowerPoint pentru acest laborator poate fi găsită [[https://drive.google.com/file/d/1GqRveIHLY6MxtXjedKS-X4m3RbXQypDD/view?usp=sharing|aici]]. | + | Prezentarea PowerPoint pentru acest laborator poate fi găsită [[https://drive.google.com/file/d/1GqRveIHLY6MxtXjedKS-X4m3RbXQypDD/view?usp=sharing|aici]]. Puteți lucra acest laborator folosind platforma Google Colab, accesând [[https://colab.research.google.com/github/ACS-IC-labs/IC-labs/blob/main/labs/lab07/lab7.ipynb|acest]] link. |
+ | <hidden> | ||
În acest laborator vom implementa un atac de tip side-channel denumit **Correlation Power Analysis**. | În acest laborator vom implementa un atac de tip side-channel denumit **Correlation Power Analysis**. | ||
Line 11: | Line 12: | ||
- Pentru fiecare cheie posibilă (ex. toate valorile de la 0 la 255), se calculează [[http://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient | Pearson's correlation coefficient]] dintre modelul estimat de leakage pentru cheia curentă și trace-urile de leakage | - Pentru fiecare cheie posibilă (ex. toate valorile de la 0 la 255), se calculează [[http://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient | Pearson's correlation coefficient]] dintre modelul estimat de leakage pentru cheia curentă și trace-urile de leakage | ||
- Se păstrează cheia pentru care se obține corelația maximă | - Se păstrează cheia pentru care se obține corelația maximă | ||
- | |||
Mai multe detalii vor fi prezentate la laborator. | Mai multe detalii vor fi prezentate la laborator. | ||
+ | |||
+ | Vom folosi biblioteca [[https://numpy.org/doc/stable/|NumPy]] pentru realizarea de operații pe matrice în mod eficient și mult mai rapid decât cu funcțiile built-in din Python. Pentru realizarea graficelor, vom folosi [[https://matplotlib.org/stable/index.html|matplotlib]] care are un API foarte asemanator cu cel din MATLAB/Octave. | ||
+ | |||
+ | Pentru acest laborator puteți folosi ca punct de pornire următorul schelet de cod: | ||
+ | {{:ic:laboratoare:lab7.zip|}} | ||
+ | |||
+ | ==== Exercițiul 1 (2p) ==== | ||
+ | |||
+ | Analizați fișierul lab7_cpa.py (sau lab7_cpa.ipynb) și plotați datele de leakage din fișierul simdata.npy, precum și corelația pentru prima cheie posibilă. | ||
+ | |||
+ | ==== Exercițiul 2 (4p) ==== | ||
+ | |||
+ | Calculați corelația pentru toate valorile posibile din cheie și plotați rezultatul corelației pentru fiecare cheie posibilă. | ||
+ | Mai exact, folosiți comanda plt.plot(x, y) din Matplotlib, unde x este un vector ce reprezintă toate valorile posibile pentru cheie [0:255] și y este un vector ce conține corelația pentru fiecare cheie. | ||
+ | |||
+ | <note tip> | ||
+ | În NumPy, puteți inițializa un vector astfel: | ||
+ | <code Python> | ||
+ | v = np.zeros(N) # vector with N elements, initializing the elements with 0 | ||
+ | v = np.empty(N) # vector with N elements, without initializing the entries | ||
+ | </code> | ||
+ | </note> | ||
+ | |||
+ | <note> | ||
+ | Corelația poate fi obținută folosind [[https://numpy.org/doc/stable/reference/generated/numpy.corrcoef.html|np.corrcoef]], care va returna o matrice de dimensiune 2×2 pentru cazul nostru. În acest caz, poate fi selectat elementul de la indexul (0, 1) pentru restul calculelor. Valorile de la indexul (0, 0) și indexul (1, 1) reprezintă varianța pentru fiecare variabilă (hamming weight și datele de leakage). Puteți deduce cine este elementul de la indicele (1, 0). | ||
+ | </note> | ||
+ | |||
+ | ==== Exercițiul 3 (4p) ==== | ||
+ | |||
+ | Pentru evaluarea securității unui device împotriva atacurilor de tip side-channel, una dintre metodele cele mai folosite este success rate (SR), care măsoară cât de eficient este un atac. Pentru implementarea acestei metode folosiți următorii pași: | ||
+ | - Rulați atacul pe diferite seturi de trace-uri (ex. R=50 de subseturi cu N trace-uri fiecare) și pentru fiecare atac determinați dacă cheia corectă (K) conduce la cea mai mare corelație. | ||
+ | - Calculați success rate ca numărul de experimente în care cheia corectă conduce la corelație maxima împărțit la numărul total de experimente. $$SR = \frac{\#cheia\ corectă\ prima}{\#experimente}$$ | ||
+ | |||
+ | <note tip> | ||
+ | Testați metoda de evaluare success rate folosind diferite valori pentru numărul de trace-uri din fiecare subset (ex. $N \in \{10, 20, 50, 100, 200, 500, 1000\}$) și plotați SR în funcție de N. | ||
+ | </note> | ||
+ | |||
+ | |||
+ | <hidden> | ||
Pentru implementarea acestui laborator se va folosi Octave/MATLAB (MATLAB este preferat din considerente de performanță): | Pentru implementarea acestui laborator se va folosi Octave/MATLAB (MATLAB este preferat din considerente de performanță): | ||
Line 48: | Line 87: | ||
Testați metoda de evaluare success rate folosind diferite valori pentru numărul de trace-uri din fiecare subset (ex. $N \in \{10, 20, 50, 100, 200, 500, 1000\}$) și plotați SR în funcție de N. | Testați metoda de evaluare success rate folosind diferite valori pentru numărul de trace-uri din fiecare subset (ex. $N \in \{10, 20, 50, 100, 200, 500, 1000\}$) și plotați SR în funcție de N. | ||
+ | </hidden> | ||