在TCHES2020(第4期)上发表的论文《Strength in Numbers: Improving Generalization with Ensembles in Machine Learning-based Profiled Side-channel Analysis》中,Guilherme Perin、Łukasz Chmielewski和Stjepan Picek提出了一种基于深度学习的侧信道攻击的集成方法。这一方法通过构建模型集合,显著提高了在侧信道分析中的泛化能力,从而更有效地攻克不同数据集的挑战。
采用深度神经网络进行侧面通道攻击为安全产品的泄漏检测和密钥检索提供了强大的选择。当训练用于侧通道分析的神经网络时,期望训练的模型能够实现近似函数,该近似函数能够检测泄漏的侧通道样本,同时对噪声(或非泄漏)样本不敏感。这概述了一种泛化情况,其中模型可以在单独的测试集中识别从训练集中学习的主要表示。
本文讨论了在进行侧信道分析时,输出类概率如何表示强度量。此外,我们观察到这些输出概率对微小的变化很敏感,比如选择特定的测试轨迹或神经网络的权重初始化。接下来,我们讨论超参数调整,其中通常只使用几十个训练模型中的一个,其中每个模型将导致不同的输出概率。我们展示了基于平均类概率的机器学习模型集合如何提高泛化能力。我们的结果强调,无论选择的数据集或泄漏模型如何,集合都会提高侧信道攻击的性能,并减少不同超参数产生的结果的方差。
论文的详细内容可以在以下链接找到:Strength in Numbers: Improving Generalization with Ensembles in Machine Learning-based Profiled Side-channel Analysis
本项目的作者来自荷兰代尔夫特理工大学(Delft University of Technology)和尼耶梅亨拉德大学(Radboud University Nijmegen)以及Riscure BV,分别是Guilherme Perin、Łukasz Chmielewski和Stjepan Picek。
该项目使用了三个数据集:CHES CTF、ASCAD FIXED KEYS和ASCAD RANDOM KEYS。
CHES CTF数据集包含45,000个基准迹线(profiling traces)和5,000个攻击迹线(attacking traces)。这些基准迹线采用相同且固定的密钥,而攻击迹线则采用不同但固定的密钥。每个迹线包含2,200个样本,代表了第一个AES加密轮中s-box操作的处理过程。这些迹线已经过z-score标准化处理。你可以从以下链接下载CHES CTF数据集:CHES CTF dataset
关于ASCAD FIXED KEY数据集的详细信息可在原始GitHub页面找到:ASCAD FIXED KEY dataset
关于ASCAD RANDOM KEY数据集的详细信息可在原始GitHub页面找到:ASCAD RANDOM KEY dataset
以下是如何在上述数据集上运行集成SCA代码的详细说明。
集成代码应该从run_ensemble.py
文件中执行。该文件包含以下结构:
ensemble_aes = EnsembleAES()
ensemble_aes.set_dataset("ches_ctf") # "ascad_fixed_key", "ascad_random_key" or "ches_ctf"
ensemble_aes.set_leakage_model("HW")
ensemble_aes.set_target_byte(0)
ensemble_aes.set_mini_batch(400)
ensemble_aes.set_epochs(10)
ensemble_aes.run_ensemble(
number_of_models=50,
number_of_best_models=10
)
在上述示例中,该分析将生成50个模型,并从这50个模型和10个最佳模型中创建集合。在run_ensemble
方法完成后,用户可以绘制所有模型的猜测熵和成功率、最佳模型的猜测熵和成功率以及最佳攻击模型的图表。以下是生成图表的示例代码:
import matplotlib.pyplot as plt
plt.subplot(1, 2, 1)
plt.plot(ensemble_aes.get_ge_best_model_validation(), label="GE best validation")
plt.plot(ensemble_aes.get_ge_best_model_attack(), label="GE best attack")
plt.plot(ensemble_aes.get_ge_ensemble(), label="GE Ensemble All Models")
plt.plot(ensemble_aes.get_ge_ensemble_best_models(), label="GE Ensemble Best Models")
plt.xlabel("Traces")
plt.ylabel("Guessing Entropy")
plt.legend()
plt.subplot(1, 2, 2)
plt.plot(ensemble_aes.get_sr_best_model_validation(), label="SR best validation")
plt.plot(ensemble_aes.get_sr_best_model_attack(), label="SR best attack")
plt.plot(ensemble_aes.get_sr_ensemble(), label="SR Ensemble All Models")
plt.plot(ensemble_aes.get_sr_ensemble_best_models(), label="SR Ensemble Best Models")
plt.xlabel("Traces")
plt.ylabel("Success Rate")
plt.legend()
plt.show()
提供的代码可以根据用户定义的范围生成具有随机超参数的MLP或CNN。在commons/ensemble_aes.py
中,用户可以找到run_mlp()
和run_cnn()
方法,用于生成随机MLPs和随机CNNs。在commons/neural_networks.py
中,我们提供了神经网络的结构。
通过这些说明,您将能够轻松运行集成SCA代码,并根据需要调整参数以适应不同的数据集。这一集成方法为深度学习侧信道攻击的发展提供了有力支持,希望能够在侧信道分析领域取得更进一步的突破。