FIT_hardware_security/lab08_DPA/dpa_student_v2/dpa_student.ipynb

465 lines
98 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Break AES using DPA with correlations\n",
"\n",
"You need:\n",
"* `plaintext.txt`: all PT blocks, (one block per line, in hex, bytes separated by spaces)\n",
"* `ciphertext.txt`: all CT blocks, (one block per line, in hex, bytes separated by spaces)\n",
"* `traceLength.txt`: how many samples per trace (one decimal number)\n",
"* `traces.bin`: raw measured traces, one byte per sample (uint8), all traces together continuously\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"id": "GEwwR12Gupsi"
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"id": "8fW8nPQ5uyEO"
},
"outputs": [],
"source": [
"# AES SBOX\n",
"sbox = np.array([\n",
" 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,\n",
" 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,\n",
" 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,\n",
" 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,\n",
" 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,\n",
" 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,\n",
" 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,\n",
" 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,\n",
" 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,\n",
" 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,\n",
" 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,\n",
" 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,\n",
" 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,\n",
" 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,\n",
" 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,\n",
" 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16\n",
" ], dtype='uint8')\n",
"\n",
"# Hamming weight lookup table\n",
"hw_table = []\n",
"for i in range(256):\n",
" s = '{0:08b}'.format(i)\n",
" hw_table.append(s.count('1'))\n",
"hw_table = np.array(hw_table, 'uint8')\n",
"\n",
"# Correlation of two matrices\n",
"def correlate(x, y):\n",
" \"\"\"\n",
" Correlate all columns from matrix x of shape (a,b)\n",
" with all columns from matrix y of shape (a,c),\n",
" creating correlation matrix C of shape (b,c).\n",
" \n",
" Originally matlab script by Jiri Bucek in NI-HWB.\n",
" \"\"\"\n",
" x = x - np.average(x, 0) # remove vertical averages\n",
" y = y - np.average(y, 0) # remove vertical averages\n",
" C = x.T @ y # (n-1) Cov(x,y)\n",
" C = C / (np.sum(x**2, 0)**(1/2))[:,np.newaxis] # divide by (n-1) Var(x)\n",
" C = C / (np.sum(y**2, 0)**(1/2)) # divide by (n-1) Var(y)\n",
" return C\n",
"\n",
"# Load PT of CT from file\n",
"def load_text(file_name):\n",
" \"\"\"\n",
" Load any text PT/CT from file containing hex strings with bytes \n",
" separated by spaces, one block per line\n",
" Output is a matrix of bytes (np.array)\n",
" \"\"\"\n",
" txt_str = open(file_name).readlines()\n",
" del txt_str[-1] #discard last empty line\n",
" #split each line into bytes and convert from hex\n",
" txt_bytes_list = list(\n",
" map(lambda line: \n",
" list(\n",
" map(lambda s: int(s, 16),\n",
" line.rstrip().split(\" \"))\n",
" ),\n",
" txt_str)\n",
" )\n",
" return np.array(txt_bytes_list, 'uint8')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"id": "--PH16eNuz_H"
},
"outputs": [],
"source": [
"# read plaintext inputs\n",
"inputs = load_text(\"plaintext.txt\")\n",
"\n",
"# read length of one complete trace (number of samples per trace)\n",
"with open(\"traceLength.txt\", \"r\") as fin:\n",
" trace_length = int(fin.readline())\n",
"\n",
"# trim each trace - select interesting part\n",
"start = 0\n",
"round_len = 22000\n",
"\n",
"# read traces from binary file\n",
"traces = np.fromfile(\"traces.bin\", dtype='uint8') # read as linear array\n",
"traces = np.reshape(traces, (traces.size // trace_length, trace_length)) # reshape into matrix\n",
"traces = traces[:, start:round_len] # select only the interesting part of each trace"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"id": "wDAUVmNOu3BP"
},
"outputs": [
{
"data": {
"image/png": "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RLZs2eI7ZlkWW7ZsoaCgwMHKIkt9fT0HDx4kMzPT6VIiRl5eHm632++1X1dXx44dO/Ta72NHjhzhs88+0+u/h2zbZunSpbz88su8+eab5OXl+d0/ceJEoqOj/V7z+/bto7y8XK/5Hvii5/18du/eDdCl17yGh9qtWLGCu+++m0mTJnH11Vezdu1aGhoa+Pu//3unSwtb3/3ud5k3bx65ubkcO3aMoqIioqKiuP32250uLazU19f7/SVTWlrK7t27SU1NJScnh2XLlvHwww8zcuRI8vLyWLVqFVlZWdxyyy3OFR0GLva8p6amUlxczK233orb7ebgwYN873vfY8SIEcyePdvBqkPfkiVLeP755/nv//5vBgwY4Jun4nK5iI+Px+VysWjRIlasWEFqaipJSUnce++9FBQU8KUvfcnh6kPXFz3vBw8e5Pnnn+fGG29k4MCBfPDBByxfvpzp06dz+eWXX/o/1KNrj8LMunXr7JycHDsmJsa++uqr7e3btztdUlibP3++nZmZacfExNiDBw+258+fbx84cMDpssLOW2+9ZQOfu9199922bbdd9rxq1So7IyPDjo2NtWfOnGnv27fP2aLDwMWe91OnTtk33HCDPWjQIDs6OtrOzc2177nnHtvj8Thddsg733MO2L/5zW98j2lsbLS/853v2CkpKXb//v3tr33ta3ZlZaVzRYeBL3rey8vL7enTp9upqal2bGysPWLECPuBBx6wvV5vl/4do/0fExEREQlqmtMiIiIiIUGhRUREREKCQouIiIiEBIUWERERCQkKLSIiIhISFFpEREQkJCi0iIiISEhQaBEREZGQoNAiIiIiIUGhRUREREKCQouIiIiEBIUWERERCQn/P+8Jzj0PcmmTAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plot one trace\n",
"fig = plt.figure()\n",
"plt.plot(traces[:5, :25].T,'.') # z 5 prubehu 25 prvnich samplu\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "w6boaqAQvF1G"
},
"source": [
"## **Attack the first key byte**\n",
"![Intermediate value](dpa-aes-v.png)\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"id": "WaKiOUmbvbQR"
},
"outputs": [],
"source": [
"keys = np.arange(start=0, stop=256, step=1, dtype='uint8') # Generate possible keys\n",
"inp = inputs[:, 0] # Select the first byte of each input block\n",
"xmat = inp[:, np.newaxis] ^ keys # XOR each data byte with each key"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"id": "VrBZd18VwBOH"
},
"outputs": [],
"source": [
"# Substitute with SBOX all XORed values -- matrix of intermediate values\n",
"smat = sbox[xmat]\n",
"#plt.imshow(xmat)\n",
"#plt.imshow(smat)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"id": "4GfR9BU-wT4G"
},
"outputs": [],
"source": [
"# Compute Hamming Weights -- the matrix of hypothetical power consumption\n",
"hmat = hw_table[smat]"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"id": "J8TTPk-WwjQH"
},
"outputs": [],
"source": [
"# Compute the correlation matrix -- correlate the hypotheses with measured traces\n",
"corr = correlate(hmat, traces)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"id": "iOqbuNAKxCvP"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"key: 222 time: 3348\n",
"key: Þ, de\n"
]
}
],
"source": [
"# Find the absolute maximum correlation\n",
"acorr = abs(corr)\n",
"max_acorr = acorr.max()\n",
"(k, j) = np.where(acorr == max_acorr) # find idices of maximum\n",
"print(\"key: %d time: %d\" % (k[0], j[0]))\n",
"print(\"key: %1c, %02x\" % (k[0], k[0]))"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plot the correlation traces for the right key byte guess and one wrong key byte guess\n",
"# Do you see the correlation peaks?\n",
"fig = plt.figure()\n",
"plt.plot(corr[220:224].T, label=[\"220\",\"221\",\"222\",\"223\"])\n",
"plt.figlegend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Z62RVYJYzncZ"
},
"source": [
"## **Break all key bytes!**"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"id": "T7HhwO-ezpoQ"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"key: 222 time: 3348\n",
"Þ, de @ 3348\n",
"key: 173 time: 15779\n",
"­, ad @ 15779\n",
"key: 190 time: 3829\n",
"¾, be @ 3829\n",
"key: 239 time: 4045\n",
"ï, ef @ 4045\n",
"key: 32 time: 4280\n",
" , 20 @ 4280\n",
"key: 116 time: 9180\n",
"t, 74 @ 9180\n",
"key: 111 time: 4744\n",
"o, 6f @ 4744\n",
"key: 112 time: 9064\n",
"p, 70 @ 9064\n",
"key: 32 time: 5209\n",
" , 20 @ 5209\n",
"key: 115 time: 5441\n",
"s, 73 @ 5441\n",
"key: 101 time: 5678\n",
"e, 65 @ 5678\n",
"key: 99 time: 17859\n",
"c, 63 @ 17859\n",
"key: 114 time: 17175\n",
"r, 72 @ 17175\n",
"key: 101 time: 13170\n",
"e, 65 @ 13170\n",
"key: 116 time: 6605\n",
"t, 74 @ 6605\n",
"key: 33 time: 6837\n",
"!, 21 @ 6837\n",
"key: [222 173 190 239 32 116 111 112 32 115 101 99 114 101 116 33]\n"
]
}
],
"source": [
"keys = np.array(range(0, 256))\n",
"kk = np.zeros(16, dtype='uint8')\n",
"for i in range(0, 16): # for each input byte\n",
" # Select the i byte of each input block\n",
" inp = inputs[:, i]\n",
"\n",
" # XOR each data byte with each key\n",
" xmat = inp[:, np.newaxis] ^ keys \n",
"\n",
" # Substitute with SBOX all XORed values -- matrix of intermediate values\n",
" smat = sbox[xmat]\n",
"\n",
" # Compute Hamming Weights -- the matrix of hypothetical power consumption\n",
" hmat = hw_table[smat]\n",
"\n",
" corr = correlate(hmat, traces)\n",
" acorr = abs(corr)\n",
" max_acorr = acorr.max()\n",
" (k, j) = np.where(acorr == max_acorr) # find idices of maximum\n",
" print(\"key: %d time: %d\" % (k[0], j[0]))\n",
" #print(\"key: %1c, %02x\" % (k[0], k[0]))\n",
"\n",
" kk[i] = k[0]\n",
" print(\"%1c, %02x @ %d\" % (k[0], k[0], j[0]))\n",
"print(\"key: \", kk)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## **Verify the key on a PT, CT pair!**"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Collecting pycryptodome\n",
" Downloading pycryptodome-3.21.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.4 kB)\n",
"Downloading pycryptodome-3.21.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB)\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.3/2.3 MB\u001b[0m \u001b[31m60.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25hInstalling collected packages: pycryptodome\n",
"Successfully installed pycryptodome-3.21.0\n",
"\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable.It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.\u001b[0m\u001b[33m\n",
"\u001b[0m\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.3.1\u001b[0m\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n"
]
}
],
"source": [
"!pip install pycryptodome"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"from Crypto.Cipher import AES"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"key_bytes = bytes(kk)\n",
"ciphertext_file = \"ciphertext.txt\"\n",
"plaintext_file = \"plaintext.txt\"\n",
"with open(ciphertext_file, 'r') as f:\n",
" ciphertext_hex = f.read().replace('\\n', ' ').strip()\n",
" ciphertext_bytes = bytes.fromhex(ciphertext_hex)\n",
" \n",
" # Load and decode the hexadecimal plaintext\n",
"with open(plaintext_file, 'r') as f:\n",
" plaintext_hex = f.read().replace('\\n', ' ').strip()\n",
" plaintext_bytes = bytes.fromhex(plaintext_hex)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"key_bytes = bytes(kk)\n",
"cipher = AES.new(key_bytes, AES.MODE_ECB)\n",
"decrypted_plaintext = cipher.decrypt(ciphertext_bytes)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Attack successful, key is: \n",
"deadbeef20746f702073656372657421\n"
]
}
],
"source": [
"if decrypted_plaintext == plaintext_bytes:\n",
" print(\"Attack successful, key is: \")\n",
" print(key_bytes.hex())"
]
}
],
"metadata": {
"colab": {
"collapsed_sections": [],
"name": "dpa_student.ipynb",
"provenance": []
},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.15"
}
},
"nbformat": 4,
"nbformat_minor": 4
}