diff --git a/.gitignore b/.gitignore index a8396379..6dae5f80 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,7 @@ scald/datasets/ scald/archive/ scald/deprecated/ scald/tmp/ - +*.zip .vscode/ # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/scaaml/intro/generator.py b/scaaml/intro/generator.py index a591184b..fdcc0a71 100644 --- a/scaaml/intro/generator.py +++ b/scaaml/intro/generator.py @@ -68,13 +68,13 @@ def create_dataset(filepattern, cprint('|-x:%s' % str(x.shape), 'green') # make it a tf dataset - cprint("building tf dataset", 'magenta') - dataset = tf.data.Dataset.from_tensor_slices((x, y)) - dataset.cache() - if is_training: - dataset = dataset.shuffle(shuffle_size, reshuffle_each_iteration=True) - dataset = dataset.batch(batch_size).prefetch(tf.data.experimental.AUTOTUNE) - return dataset + # cprint("building tf dataset", 'magenta') + # dataset = tf.data.Dataset.from_tensor_slices((x, y)) + # dataset.cache() + # if is_training: + # dataset = dataset.shuffle(shuffle_size, reshuffle_each_iteration=True) + # dataset = dataset.batch(batch_size).prefetch(tf.data.experimental.AUTOTUNE) + return (x, y) def list_shards(filepattern, num_shards): diff --git a/scaaml_intro/README.md b/scaaml_intro/README.md index 83dfbb37..fd3988f8 100644 --- a/scaaml_intro/README.md +++ b/scaaml_intro/README.md @@ -47,7 +47,7 @@ In order to run the notebooks/train models you need to download the following da | Filename | What it is | Download size | Expected Location | SHAS256 | | -------------------------------------------------------------------------------------- | --------------------------------------------------------- | :-----------: | ----------------- | ---------------------------------------------------------------- | -| [datasets.zip](https://storage.googleapis.com/scaaml-public/scaaml_intro/datasets.zip) | TinyAES train & test datasets | 7GB | `datasets/` | 4bf2c6defb79b40b30f01f488e83762396b56daad14a694f64916be2b665b2f8 | +| [datasets.zip](https://storage.googleapis.com/scaaml-public/scaaml_intro/datasets.zip) | TinyAES train & test datasets | 8.2GB | `datasets/` | 4bf2c6defb79b40b30f01f488e83762396b56daad14a694f64916be2b665b2f8 | | [models.zip](https://storage.googleapis.com/scaaml-public/scaaml_intro/models.zip) | TinyAES 48 pretrained models - 3 attack points * 16 bytes | 312MB | `models/` | 17d7d32cca0ac0db157ae1f5696f6c64bba6d753a8f33802d0d9614bb07d3d9b | | [logs.zip](https://storage.googleapis.com/scaaml-public/scaaml_intro/logs.zip) | Tensorboard training logs (optional) | 616MB | `logs` | 5b2f43f89990653d64820cca61f15fc6818ee674ae4cc2b4f235cfd9a48f3b28 | diff --git a/scaaml_intro/key_recovery_demo.ipynb b/scaaml_intro/key_recovery_demo.ipynb index a79f2d7e..f31dbb89 100644 --- a/scaaml_intro/key_recovery_demo.ipynb +++ b/scaaml_intro/key_recovery_demo.ipynb @@ -64,8 +64,8 @@ "metadata": {}, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "Attack point status Num available models\n", "-------------- -------- ----------------------\n", @@ -88,7 +88,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": { "scrolled": false }, @@ -111,9 +111,17 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:SavedModel saved prior to TF 2.5 detected when loading Keras model. Please ensure that you are saving the model with model.save() or tf.keras.models.save_model(), *NOT* tf.saved_model.save(). To confirm, there should be a file named \"keras_metadata.pb\" in the SavedModel directory.\n" + ] + } + ], "source": [ "# let's select an attack point that have all the needed models -- Key is not a good target: it doesn't work\n", "ATTACK_POINT = 'sub_bytes_out'\n", @@ -134,28 +142,16 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "metadata": { "scrolled": true }, "outputs": [ { - "output_type": "display_data", - "data": { - "text/plain": "HBox(children=(IntProgress(value=0, description='Recovering bytes', max=256, style=ProgressStyle(description_w…", - "application/vnd.jupyter.widget-view+json": { - "version_major": 2, - "version_minor": 0, - "model_id": "9347afbf3217469596b1165820e2fc2d" - } - }, - "metadata": {} - }, - { + "name": "stderr", "output_type": "stream", - "name": "stdout", "text": [ - "\n" + "Recovering bytes: 100%|██████████| 256/256 [00:55<00:00, 4.59shards/s]\n" ] } ], @@ -210,12 +206,12 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "metadata": {}, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "Accuracy: 0.45\n" ] @@ -227,21 +223,22 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "metadata": { "scrolled": false }, "outputs": [ { - "output_type": "display_data", "data": { - "text/plain": "
", - "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", - "image/png": "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\n" + "image/png": "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", + "text/plain": [ + "
" + ] }, "metadata": { "needs_background": "light" - } + }, + "output_type": "display_data" } ], "source": [ @@ -257,21 +254,22 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 12, "metadata": { "scrolled": false }, "outputs": [ { - "output_type": "display_data", "data": { - "text/plain": "
", - "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", - "image/png": "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\n" + "image/png": "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", + "text/plain": [ + "
" + ] }, "metadata": { "needs_background": "light" - } + }, + "output_type": "display_data" } ], "source": [ @@ -287,24 +285,24 @@ ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ "## metric computations\n", "\n", "Let's look at some of the various performances metrics that are used to evaluate attack efficency.\n", "- In the worst case for the implementation the attacker can recover ~40% of the key with a single trace.\n", "- The best case is not really better: 4 traces is all you need." - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 13, "metadata": {}, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "metric num traces % of keys\n", "---------------- ------------ -----------\n", @@ -345,7 +343,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -356,39 +354,240 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 15, "metadata": {}, "outputs": [ { - "output_type": "display_data", - "data": { - "text/plain": "HBox(children=(IntProgress(value=0, description='guessing key', max=16, style=ProgressStyle(description_width=…", - "application/vnd.jupyter.widget-view+json": { - "version_major": 2, - "version_minor": 0, - "model_id": "fc20af66c7d64233afd5dd539206aa73" - } - }, - "metadata": {} + "name": "stderr", + "output_type": "stream", + "text": [ + "guessing key: 0%| | 0/16 [00:00.predict_function at 0x000001F5006150D0> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", - "WARNING:tensorflow:6 out of the last 261 calls to .predict_function at 0x000001F549CB10D0> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", - "WARNING:tensorflow:7 out of the last 262 calls to .predict_function at 0x000001F46FB7FC80> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", - "WARNING:tensorflow:8 out of the last 263 calls to .predict_function at 0x000001F481C54048> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", - "WARNING:tensorflow:9 out of the last 264 calls to .predict_function at 0x000001F52DF76048> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", - "WARNING:tensorflow:10 out of the last 265 calls to .predict_function at 0x000001F47D572048> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", - "WARNING:tensorflow:11 out of the last 266 calls to .predict_function at 0x000001F43131C950> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", - "WARNING:tensorflow:11 out of the last 11 calls to .predict_function at 0x000001F542DBBD08> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", - "WARNING:tensorflow:11 out of the last 11 calls to .predict_function at 0x000001F548AFA730> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", - "WARNING:tensorflow:11 out of the last 11 calls to .predict_function at 0x000001F542BE70D0> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", - "WARNING:tensorflow:11 out of the last 11 calls to .predict_function at 0x000001F543DDE730> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", - "WARNING:tensorflow:11 out of the last 11 calls to .predict_function at 0x000001F52DFA8D08> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", - "WARNING:tensorflow:11 out of the last 11 calls to .predict_function at 0x000001F478E249D8> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", - "\n" + "WARNING:tensorflow:SavedModel saved prior to TF 2.5 detected when loading Keras model. Please ensure that you are saving the model with model.save() or tf.keras.models.save_model(), *NOT* tf.saved_model.save(). To confirm, there should be a file named \"keras_metadata.pb\" in the SavedModel directory.\n", + "WARNING:tensorflow:5 out of the last 260 calls to .predict_function at 0x00000245176AF040> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "guessing key: 25%|██▌ | 4/16 [00:33<01:41, 8.50s/guesses, Recovered key=2A D3 5D CA, Real key=2A D3 5D CA]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:SavedModel saved prior to TF 2.5 detected when loading Keras model. Please ensure that you are saving the model with model.save() or tf.keras.models.save_model(), *NOT* tf.saved_model.save(). To confirm, there should be a file named \"keras_metadata.pb\" in the SavedModel directory.\n", + "WARNING:tensorflow:6 out of the last 261 calls to .predict_function at 0x000002446BE531F0> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "guessing key: 31%|███▏ | 5/16 [00:41<01:31, 8.34s/guesses, Recovered key=2A D3 5D CA BE, Real key=2A D3 5D CA BE]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:SavedModel saved prior to TF 2.5 detected when loading Keras model. Please ensure that you are saving the model with model.save() or tf.keras.models.save_model(), *NOT* tf.saved_model.save(). To confirm, there should be a file named \"keras_metadata.pb\" in the SavedModel directory.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "guessing key: 38%|███▊ | 6/16 [00:50<01:23, 8.37s/guesses, Recovered key=2A D3 5D CA BE 64, Real key=2A D3 5D CA BE 64]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:SavedModel saved prior to TF 2.5 detected when loading Keras model. Please ensure that you are saving the model with model.save() or tf.keras.models.save_model(), *NOT* tf.saved_model.save(). To confirm, there should be a file named \"keras_metadata.pb\" in the SavedModel directory.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "guessing key: 44%|████▍ | 7/16 [00:58<01:15, 8.42s/guesses, Recovered key=2A D3 5D CA BE 64 56, Real key=2A D3 5D CA BE 64 56]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:SavedModel saved prior to TF 2.5 detected when loading Keras model. Please ensure that you are saving the model with model.save() or tf.keras.models.save_model(), *NOT* tf.saved_model.save(). To confirm, there should be a file named \"keras_metadata.pb\" in the SavedModel directory.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "guessing key: 50%|█████ | 8/16 [01:06<01:07, 8.39s/guesses, Recovered key=2A D3 5D CA BE 64 56 F3, Real key=2A D3 5D CA BE 64 56 F3]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:SavedModel saved prior to TF 2.5 detected when loading Keras model. Please ensure that you are saving the model with model.save() or tf.keras.models.save_model(), *NOT* tf.saved_model.save(). To confirm, there should be a file named \"keras_metadata.pb\" in the SavedModel directory.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "guessing key: 56%|█████▋ | 9/16 [01:15<00:58, 8.39s/guesses, Recovered key=2A D3 5D CA BE 64 56 F3 73, Real key=2A D3 5D CA BE 64 56 F3 73]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:SavedModel saved prior to TF 2.5 detected when loading Keras model. Please ensure that you are saving the model with model.save() or tf.keras.models.save_model(), *NOT* tf.saved_model.save(). To confirm, there should be a file named \"keras_metadata.pb\" in the SavedModel directory.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "guessing key: 62%|██████▎ | 10/16 [01:23<00:50, 8.39s/guesses, Recovered key=2A D3 5D CA BE 64 56 F3 73 94, Real key=2A D3 5D CA BE 64 56 F3 73 94]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:SavedModel saved prior to TF 2.5 detected when loading Keras model. Please ensure that you are saving the model with model.save() or tf.keras.models.save_model(), *NOT* tf.saved_model.save(). To confirm, there should be a file named \"keras_metadata.pb\" in the SavedModel directory.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "guessing key: 69%|██████▉ | 11/16 [01:32<00:42, 8.51s/guesses, Recovered key=2A D3 5D CA BE 64 56 F3 73 94 AA, Real key=2A D3 5D CA BE 64 56 F3 73 94 AA]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:SavedModel saved prior to TF 2.5 detected when loading Keras model. Please ensure that you are saving the model with model.save() or tf.keras.models.save_model(), *NOT* tf.saved_model.save(). To confirm, there should be a file named \"keras_metadata.pb\" in the SavedModel directory.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "guessing key: 75%|███████▌ | 12/16 [01:41<00:34, 8.60s/guesses, Recovered key=2A D3 5D CA BE 64 56 F3 73 94 AA C7, Real key=2A D3 5D CA BE 64 56 F3 73 94 AA C7]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:SavedModel saved prior to TF 2.5 detected when loading Keras model. Please ensure that you are saving the model with model.save() or tf.keras.models.save_model(), *NOT* tf.saved_model.save(). To confirm, there should be a file named \"keras_metadata.pb\" in the SavedModel directory.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "guessing key: 81%|████████▏ | 13/16 [01:49<00:25, 8.59s/guesses, Recovered key=2A D3 5D CA BE 64 56 F3 73 94 AA C7 EB, Real key=2A D3 5D CA BE 64 56 F3 73 94 AA C7 EB]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:SavedModel saved prior to TF 2.5 detected when loading Keras model. Please ensure that you are saving the model with model.save() or tf.keras.models.save_model(), *NOT* tf.saved_model.save(). To confirm, there should be a file named \"keras_metadata.pb\" in the SavedModel directory.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "guessing key: 88%|████████▊ | 14/16 [01:58<00:17, 8.58s/guesses, Recovered key=2A D3 5D CA BE 64 56 F3 73 94 AA C7 EB 0C, Real key=2A D3 5D CA BE 64 56 F3 73 94 AA C7 EB 0C]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:SavedModel saved prior to TF 2.5 detected when loading Keras model. Please ensure that you are saving the model with model.save() or tf.keras.models.save_model(), *NOT* tf.saved_model.save(). To confirm, there should be a file named \"keras_metadata.pb\" in the SavedModel directory.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "guessing key: 94%|█████████▍| 15/16 [02:06<00:08, 8.53s/guesses, Recovered key=2A D3 5D CA BE 64 56 F3 73 94 AA C7 EB 0C 74, Real key=2A D3 5D CA BE 64 56 F3 73 94 AA C7 EB 0C 74]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:SavedModel saved prior to TF 2.5 detected when loading Keras model. Please ensure that you are saving the model with model.save() or tf.keras.models.save_model(), *NOT* tf.saved_model.save(). To confirm, there should be a file named \"keras_metadata.pb\" in the SavedModel directory.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "guessing key: 100%|██████████| 16/16 [02:15<00:00, 8.47s/guesses, Recovered key=2A D3 5D CA BE 64 56 F3 73 94 AA C7 EB 0C 74 E7, Real key=2A D3 5D CA BE 64 56 F3 73 94 AA C7 EB 0C 74 E7]\n" ] } ], @@ -432,15 +631,15 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 16, "metadata": {}, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ - "real key\t2A D3 5D CA BE 64 56 F3 73 94 AA C7 EB 0C 74 E7\n", - "recovered key\t12 D3 5D CA BE 64 56 F3 73 94 AA C7 EB 0C 74 E7\n" + "\u001b[32mreal key\t2A D3 5D CA BE 64 56 F3 73 94 AA C7 EB 0C 74 E7\u001b[0m\n", + "\u001b[32mrecovered key\t2A D3 5D CA BE 64 56 F3 73 94 AA C7 EB 0C 74 E7\u001b[0m\n" ] } ], @@ -461,10 +660,12 @@ } ], "metadata": { + "interpreter": { + "hash": "01a8bb8dc2a583f66dddeb9cbfb4066f628ca6435d0966f49dcad258cbbf42e8" + }, "kernelspec": { - "display_name": "Python 3.6.7 64-bit", - "language": "python", - "name": "python36764bit1164f64651f442398f7288c44aeadef0" + "display_name": "Python 3.8.10 64-bit ('venv': venv)", + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -476,9 +677,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.7-candidate" + "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 2 -} \ No newline at end of file +} diff --git a/scaaml_intro/train.py b/scaaml_intro/train.py index ac018ffe..96477400 100644 --- a/scaaml_intro/train.py +++ b/scaaml_intro/train.py @@ -36,7 +36,7 @@ def train_model(config): for attack_byte in config['attack_bytes']: for attack_point in config['attack_points']: - g_train = create_dataset( + x_train, y_train = create_dataset( TRAIN_GLOB, batch_size=BATCH_SIZE, attack_point=attack_point, @@ -46,7 +46,7 @@ def train_model(config): max_trace_length=config['max_trace_len'], is_training=True) - g_test = create_dataset( + x_test, y_test = create_dataset( TEST_GLOB, batch_size=BATCH_SIZE, attack_point=attack_point, @@ -57,9 +57,7 @@ def train_model(config): is_training=False) # infers shape - for data in g_test.take(1): - x, y = data - input_shape = x.shape[1:] + input_shape = x_train.shape[1:] # reset graph and load a new model K.clear_session() @@ -85,8 +83,8 @@ def train_model(config): TensorBoard(log_dir='logs/' + stub, update_freq='batch') ] - model.fit(g_train, - validation_data=g_test, + model.fit(x_train, y_train, + validation_data=(x_test, y_test), verbose=1, epochs=config['epochs'], callbacks=cb) diff --git a/setup.py b/setup.py index a9a46f39..ad8dd776 100644 --- a/setup.py +++ b/setup.py @@ -40,6 +40,8 @@ "tensorflow>=2.2.0", "future-fstrings", "pygments", + "chipwhisperer", + "scipy" ], package_data={"": ["*.pickle"]}, classifiers=[