

邮件订阅
量子计算的飞速发展威胁了传统密码系统的安全性,进而推动了后量子密码算法的研究与标准化。同时,对Dilithium的侧信道分析,特别是能量分析,也成为当前的研究热点。鉴于当前dilithium等新型算法的数据集缺失,本文采集并公开一个名为DTDS的Dilithium算法能量分析数据集。该数据集基于Dilithium的开源参考实现,在Cortex M4处理器上运行,并通过专用设备采集,包含60000条Dilithium签名过程中采集的能量迹,以及与每条能量迹对应的签名源数据和敏感中间值。最后,使用模板分析和深度学习分析方法对数据集进行建模和测试,验证了该数据集的有效性和实用性。
数据集下载:
https://doi.org/10.57760/sciencedb.j00173.00001
数据集引用:
若在论文、学术报告中使用该数据集,请标注数据集引用方式:
袁庆军, 张浩金, 樊昊鹏, 高杨, 王永娟. DTDS:用于侧信道能量分析的Dilithium数据集[J]. 电子与信息学报, 2025, 预出版. doi: 10.11999/JEIT250048
一 数据集采集设备
本文数据集基于ChipWhisperer UFO平台采集,如图1所示,实验参数如表1所示,选择STM32 F405 RGTx微处理器运行Dilithium算法,该芯片运行频率设置为25 MHZ,使用外接10 MHZ的无源晶振作为外部高速时钟源。
为了捕获能量迹,本文使用Pico 3206D示波器进行采集,示波器采用 8bit 模式,示波器的 timebase 设置为3,即采样频率为125 Mhz (即芯片运行频率的5倍),外接一个BLP-48+ 50 M低通滤波器,未使用放大器。芯片运行的算法是提交给NIST的Dilithium的开源参考实现,算法参数为NIST Security Level 2,在编译时使用gcc-arm交叉编译器arm-none-eabi-gcc 10.2.1编译,使用− O 1参数进行算法优化。采集的能量迹主要是Dilithium 生成多项式向量y的过程,即polyz_unpack(a, buf)函数。由于该算法采用拒绝采样机制,能量迹采集位置为最后一次拒绝采样时,L=0 (L为系数y的维度)条件下的polyz_unpack(a, buf)函数。
图1 采集环境
表1 采集参数表
目标芯片 | 型号 | STM32 F405 RGTx |
平台 | ChipWhisperer UFO | |
运行频率 | 25 MHZ | |
外部高速时钟源 | 10 MHZ | |
示波器 | 型号 | Pico 3206D |
模式 | 8 bit | |
timebase | 3 | |
采样频率 | 125 Mhz | |
其他 | 滤波器 | BLP-48+ 50 M |
放大器 | 无 | |
算法 | 算法参数 | Dilithium 2 |
编译器 | arm-none-eabi-gcc 10.2.1 | |
编译参数 | − O 0 | |
上位机 | 处理器 | i7-12500 |
内存 | 64 GB DDR4 |
二 数据集采集流程
如图2所示,采集过程使用目标芯片、示波器和上位机进行采集,其中,上位机负责与示波器和目标芯片进行通讯。在采集前将对Dilithium算法c实现代码进行编译,并烧录进入目标芯片。采集时,上位机先发送scope.arm()将示波器设置为高电平待触发模式(当示波器处于待触发模式时,如果触发引脚变为高电平,则开始采集设置数量的能量迹点,采集完成返回能量迹并恢复非触发模式),然后发送待加密信息(如公钥,明文等)给目标芯片,当芯片接收完成待加密信息,开始加密,当加密到采集函数前设置触发引脚为高电平,使示波器采集能量迹,并返回加密信息。循环上述步骤,进行60000次采集。
图2 采集流程
三 数据集格式
数据集由60000条能量迹、对应的元数据组成及由元数据提取的敏感中间值构成,其中50000条能量迹为随机私钥加密随机明文时产生的能量迹(建模数据集),10000条能量迹为固定私钥加密随机明文时产生的能量迹(恢复数据集)。 本数据集共有36个文件,大小为3 GB,分别置放在12个子文件夹内。子文件夹命名为000-011,其中子文件夹000-009用于存放建模数据集(即使用随机私钥),010-011用于存放恢复数据集(即使用固定私钥)。如表2所示,每个子文件夹中包含 3 个文件,分别为能量迹文件(命名polyz_unpack_traces.npy,每行为1条能量迹,共5000条)、元数据文件(命名mate.req,共5000个)及敏感中间值文件(polyz_unpack_y.npy,共5000个)。
表2 数据集文件描述
文件名 | 描述 |
polyz_unpack_traces.npy | 能量迹文件,该文件为元数据加密过程中,polyz_unpack函数泄露能量数据,每个文件存储5000条能量迹,每条能量迹包含20000采样值。 |
polyz_unpack_y.npy | 敏感中间值文件,该文件为元数据加密过程,polyvecl_uniform_gamma1加密后的y值,包含5000个随机系数y,每个y为4x256个值。 |
mate.req | 元数据文件,该文件与训练集曲线文件一一对应,包含5000个签名数据,每个签名包含序号(counter)、种子(seed)、公钥(pk)、 私钥(sk)、消息(msg)、消息长度(mlen)、签名后消息(sm)、 签名后消息长度(smlen)。 |
四 数据集示例及使用
数据集还提供了数据集读取、可视化等示例代码,存放于test.py文件。以Python为例,读入数据可执行下列代码。
采集到该函数的能量迹如图3所示,每条能量迹包含ployz_unpack函数中64次循环执行过程,本文利用相关系数检验,测试能量迹中是否泄漏了多项式的系数信息。前3次循环的相关系数如图3所示。
图3 能量迹时域图与相关系数图
本数据集为Dilithium算法的侧信道分析研究提供了标准化实验数据,可支持研究方向:
模板攻击:利用建模数据集(随机私钥)构建能量迹与敏感中间值y的统计模型,通过恢复数据集中间值进而恢复私钥。
深度学习攻击:使用能量迹与时序特征训练CNN、RNN等模型,预测中间值y,评估模型在侧信道分析中的有效性。
相关性分析:通过CPA/DPA等分析方法,猜测私钥进行中间值y的计算,并与能量迹进行分析,进而恢复正确私钥。
以马氏模板攻击为例子恢复中间值y的低5 bit的准确率与兴趣点数量关系代码如下。
结果如图4所示,随着兴趣点的增加,兴趣点数量从8增加到32时,准确率增加,但在128个兴趣点时准确率下降。这是因为过多的兴趣点引入了噪声或冗余信息,从而影响了建模的准确性,而过少的兴趣点丢失信息量,从而无法充分利用能量迹。
图4 恢复中间值y的低5bit的准确率与兴趣点数量关系图
请关注公众号,获取验证码后下载