前置文章: 文献阅读笔记

数据集

第一次处理侧信道攻击的数据集,过程比较坎坷,记录较为详细一点。

ASCAD fixed key

数据集介绍:6w条能量迹,700个特征,算法:AES128,采集设备:ATMega8515

作者选择使用5w条能量迹作为训练集,1w条作为测试集。能量迹下载地址,解压后的目录如图1所示。

图1 数据集目录

红色框中的文件是后来自己添加的

环境需求:本机Python 3.8.16 , pip h5py, numpy, matplotlib, tensorflow 2, keras

Mac电脑配置tf2环境另开一章。

数据集生成

原始数据集并没有一阶掩码AES128的数据,需要执行对应文件去生成。阅读源码可知输入参数个数为1时将读取params文件内的参数。

1
python ASCAD_generate.py "ATMEGA_AES_v1/ATM_AES_v1_fixed_key/example_generate_params"

这里ATMEGA_AES_v1/ATM_AES_v1_fixed_key/example_generate_params是配置参数的文件,内容如下,在生成数据时目前只需要修改labeled_traces_file的值,即指定输出能量迹文件地址。

1
2
3
4
5
6
7
8
9
10
11
12
example_generate_params

{
"traces_file" : "ATMEGA_AES_v1/ATM_AES_v1_fixed_key/ASCAD_data/ASCAD_databases/ATMega8515_raw_traces.h5",
"labeled_traces_file" : "ASCAD_fixed.h5",
"profiling_index" : [n for n in range(0,50000)],
"attack_index" : [n for n in range(50000,60000)],
"target_points" : [n for n in range(45400,46100)],
"profiling_desync" : 0,
"attack_desync" : 0
}

图2 成功生成能量迹并写入文件

报错

	
1
2
3
4
Error: provided file path '' does not exist!

注释掉ASCAD_generate.py的第154行
#check_file_exists(os.path.dirname(labeled_traces_file))

以此类推,此数据集中生成其他能量迹只需要修改对应param文件中的参数,后续会在基于深度学习的侧信道攻击入门中补充。

ASCAD fixed key with desynchronization

在之前的命令python ASCAD_generate.py直接回车即可生成

序号 文件名
1 ASCAD_desync50.h5
2 ASCAD_desync100.h5

ASCAD variable key

CHESCTF

DPAcV42

自编码器

作者这里采用的是Vanilla AutoEncoder(结构较简单的自编码器), 文章中将自编码器的Hidden Layer(隐藏层)设置为1层,即无论输入多少维数据,经过Encoder后都降为500层,超参数如表1所示。

Hyperparameters Training values
Optimizer Adamax
Epochs 500,700,1000
Learning_rate 0.01, 0.001, 0.0025
Batch_size 200, 400
Shuffle True
表1 AE超参数

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
import keras
import numpy as np
import matplotlib.pyplot as plt
from keras.datasets import mnist
from keras.models import Model
from keras.layers import Input, add
from keras.layers.core import Dense, Dropout, Activation, Flatten, Reshape
from keras import regularizers
from keras.regularizers import l2
from keras.layers.convolutional import Conv2D, MaxPooling2D, UpSampling2D, ZeroPadding2D
from keras.utils import np_utils
import h5py
1
2
3
4
5
f = h5py.File("../../datasets/ASCAD/ASCAD_fixed.h5", 'r')
print(f.keys())
X_train = np.array(f.get('Profiling_traces/traces'))
X_test = np.array(f.get('Attack_traces/traces'))
print(X_train.shape)
1
2
3
4
5
6
7
8
9
10
11
# 构建VAE模型
input_size = 700
hidden_size = 500
output_size = 700

x = Input(shape=(input_size,))
h = Dense(hidden_size, activation="relu")(x)
r = Dense(output_size, activation="sigmoid")(h)

autoencoder = Model(inputs=x, outputs=r)
autoencoder.compile(optimizer="adam", loss="mse")
1
2
3
4
5
6
7
8
9
# 训练
epochs = 500
batch_size = 200

history = autoencoder.fit(X_train, X_train,
batch_size=batch_size,
epochs=epochs, verbose=1,
validation_data=(X_test, X_test)
)
1
2
3
4
5
6
7
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'validation'], loc='upper right')
plt.show()

笑嘻了

这loss???