|
1 | 1 | { |
2 | 2 | "cells": [ |
| 3 | + { |
| 4 | + "cell_type": "markdown", |
| 5 | + "metadata": {}, |
| 6 | + "source": [ |
| 7 | + "# Basic HW AES CPA attack.\n", |
| 8 | + "\n", |
| 9 | + "**IMPORTANT NOTES!**\n", |
| 10 | + "- **VCCIOB jumper (JP9)** must be in **top position (3.3V)**, which is different from the other test notebook;\n", |
| 11 | + "- **nPOR jumper (JP5)** must be in **bottom position (1-3)**." |
| 12 | + ] |
| 13 | + }, |
3 | 14 | { |
4 | 15 | "cell_type": "code", |
5 | 16 | "execution_count": null, |
|
15 | 26 | "metadata": {}, |
16 | 27 | "outputs": [], |
17 | 28 | "source": [ |
18 | | - "#bsfile = '../fpga/vivado/cw341.runs/impl_1/cw341_top.bit'\n", |
19 | 29 | "bsfile = '../fpga/vivado/cw341.runs/impl_20pin/cw341_top.bit'" |
20 | 30 | ] |
21 | 31 | }, |
|
72 | 82 | ] |
73 | 83 | }, |
74 | 84 | { |
75 | | - "cell_type": "code", |
76 | | - "execution_count": null, |
| 85 | + "attachments": {}, |
| 86 | + "cell_type": "markdown", |
77 | 87 | "metadata": {}, |
78 | | - "outputs": [], |
79 | 88 | "source": [ |
80 | | - "scope.clock.adc_mul = 4\n", |
81 | | - "scope.clock.clkgen_freq = 40e6\n", |
82 | | - "scope.clock.clkgen_src = 'extclk'" |
| 89 | + "**Once the `husky_clock_fix` branch is merged** (i.e. issues [490](https://github.com/newaetech/chipwhisperer/issues/490), [499](https://github.com/newaetech/chipwhisperer/issues/501) and [501](https://github.com/newaetech/chipwhisperer/issues/501) are closed), 4x sampling works well, and `CLOCKS_FIXED` can be set to `True`.\n", |
| 90 | + "\n", |
| 91 | + "Otherwise, we crank up to 20x sampling (`CLOCKS_FIXED = False`) to better catch the leakage." |
83 | 92 | ] |
84 | 93 | }, |
85 | 94 | { |
|
88 | 97 | "metadata": {}, |
89 | 98 | "outputs": [], |
90 | 99 | "source": [ |
| 100 | + "CLOCKS_FIXED = False\n", |
| 101 | + "\n", |
| 102 | + "if CLOCKS_FIXED:\n", |
| 103 | + " scope.clock.adc_mul = 4\n", |
| 104 | + " scope.clock.clkgen_freq = 10e6\n", |
| 105 | + " scope.clock.clkgen_src = 'extclk'\n", |
| 106 | + " scope.clock.adc_phase = 15\n", |
| 107 | + " scope.adc.samples = 60\n", |
| 108 | + "else:\n", |
| 109 | + " scope.clock.adc_mul = 20\n", |
| 110 | + " scope.clock.clkgen_freq = 10e6\n", |
| 111 | + " scope.clock.clkgen_src = 'extclk'\n", |
| 112 | + " scope.clock.adc_phase = 0\n", |
| 113 | + " scope.adc.samples = 300\n", |
| 114 | + "\n", |
| 115 | + "scope.adc.presamples = 0\n", |
| 116 | + "scope.gain.db = 32\n", |
| 117 | + "\n", |
91 | 118 | "assert scope.clock.adc_locked" |
92 | 119 | ] |
93 | 120 | }, |
94 | | - { |
95 | | - "cell_type": "code", |
96 | | - "execution_count": null, |
97 | | - "metadata": {}, |
98 | | - "outputs": [], |
99 | | - "source": [ |
100 | | - "scope.adc.samples = 60\n", |
101 | | - "scope.adc.presamples = 0" |
102 | | - ] |
103 | | - }, |
104 | | - { |
105 | | - "cell_type": "code", |
106 | | - "execution_count": null, |
107 | | - "metadata": {}, |
108 | | - "outputs": [], |
109 | | - "source": [ |
110 | | - "# set gain accordingly:\n", |
111 | | - "scope.gain.db = 40" |
112 | | - ] |
113 | | - }, |
114 | 121 | { |
115 | 122 | "cell_type": "code", |
116 | 123 | "execution_count": null, |
|
137 | 144 | "traces = []\n", |
138 | 145 | "textin = []\n", |
139 | 146 | "keys = []\n", |
140 | | - "N = 5000 # Number of traces\n", |
| 147 | + "N = 10000 # Number of traces\n", |
141 | 148 | "\n", |
142 | 149 | "# initialize cipher to verify DUT result:\n", |
143 | 150 | "key, text = ktp.next()\n", |
|
223 | 230 | "metadata": {}, |
224 | 231 | "outputs": [], |
225 | 232 | "source": [ |
226 | | - "np.average(attack_results.pge)" |
| 233 | + "avg_pge = np.average(attack_results.pge)\n", |
| 234 | + "if CLOCKS_FIXED:\n", |
| 235 | + " MAX_PGE = 10\n", |
| 236 | + "else:\n", |
| 237 | + " MAX_PGE = 50\n", |
| 238 | + "assert avg_pge < MAX_PGE, 'Average PGE is %d' % avg_pge" |
227 | 239 | ] |
228 | 240 | }, |
229 | 241 | { |
|
243 | 255 | ], |
244 | 256 | "metadata": { |
245 | 257 | "kernelspec": { |
246 | | - "display_name": "Python 3 (ipykernel)", |
| 258 | + "display_name": "Python (venv39)", |
247 | 259 | "language": "python", |
248 | | - "name": "python3" |
| 260 | + "name": "venv39" |
249 | 261 | }, |
250 | 262 | "language_info": { |
251 | 263 | "codemirror_mode": { |
|
0 commit comments