词嵌入与LSTM融合:破解FPGA并行加密的侧信道攻击新范式

发布时间:2026/5/26 17:37:57

词嵌入与LSTM融合:破解FPGA并行加密的侧信道攻击新范式 1. 项目概述与核心挑战在硬件安全领域侧信道攻击Side-Channel Attack, SCA一直是一个既令人着迷又充满挑战的研究方向。它不像传统的密码分析那样正面攻击算法本身而是像一个精明的侦探通过观察和分析加密设备在运行过程中泄露的“蛛丝马迹”——比如功耗、电磁辐射、执行时间等物理信息——来间接推导出密钥。我从事硬件安全研究多年亲眼见证了SCA从最初依赖专家经验的简单功耗分析SPA发展到需要复杂统计模型的差分功耗分析DPA再到如今与机器学习深度融合的智能化演进。每一次技术迭代都意味着攻击与防御的博弈进入了一个新的维度。近年来现场可编程门阵列FPGA因其高度的并行处理能力和可重构性在高速加密、通信协议加速等领域得到了广泛应用。然而FPGA的并行加密实现也给传统的SCA方法带来了前所未有的挑战。传统的攻击流程严重依赖专家手动选择兴趣点Points of Interest, POIs和进行降维预处理如主成分分析PCA这不仅费时费力而且在面对FPGA并行执行带来的复杂、平滑的功耗轨迹时其效果往往大打折扣。这就好比试图在一条嘈杂的、多条声音交织的音频中仅凭耳朵去分辨并定位一个特定的音符难度极大。因此我们开始思考能否将自然语言处理NLP中用于理解词语上下文关系的强大工具——词嵌入Word Embedding与擅长处理时序数据的深度学习模型——长短期记忆网络LSTM结合起来构建一个能够自动、智能地从FPGA并行加密功耗轨迹中提取特征并实施攻击的框架这正是我们本次探索的核心。我们的目标不是取代安全工程师而是为他们提供一件更强大、更自动化的“分析显微镜”以更高效地评估硬件设备的抗侧信道攻击能力。2. 技术背景与核心原理拆解2.1 侧信道攻击的演进从手工到智能要理解我们工作的价值首先得回顾一下侧信道攻击的发展脉络。早期的简单功耗分析SPA就像看心电图直接观察功耗曲线的形状寻找与特定操作如平方-乘算法中的平方和乘法对应的明显模式。这种方法直观但极易被噪声干扰且对操作序列有严格要求。差分功耗分析DPA则引入了统计学它通过收集大量功耗轨迹并基于一个假设的功耗模型如汉明重量模型计算每个可能密钥对应的预测功耗与实际功耗之间的相关性。相关性最高的那个密钥就是最可能的正确密钥。DPA的强大之处在于它能够从噪声中提取出微弱的信号但其效果严重依赖于功耗模型的准确性。模板攻击TA被认为是理论上最强的分析攻击。它分为两个阶段剖析阶段和攻击阶段。在剖析阶段攻击者使用一个已知密钥的设备为每一个可能的子密钥值例如0-255构建一个“模板”这个模板本质上是一个多元高斯分布描述了当设备处理该特定子密钥值时其功耗轨迹在多个采样点上的联合概率分布。在攻击阶段攻击者用未知密钥设备的功耗轨迹去匹配所有这些模板匹配度最高的模板所对应的子密钥值即为猜测值。TA的瓶颈在于构建精确的模板需要海量的剖析数据且对功耗轨迹的对齐Alignment要求极高任何微小的时序抖动都可能导致模板失效。随着机器学习特别是深度学习的兴起研究者的思路发生了转变我们能否让模型自己从数据中学习“模板”卷积神经网络CNN因其强大的局部特征提取能力被率先引入。Cagli等人在2017年的工作表明CNN可以自动学习对平移不变的特征从而在一定程度上克服了轨迹对齐的难题。然而CNN更擅长捕捉空间局部特征对于功耗轨迹这种强时序依赖的信号其长期依赖关系的建模能力有限。2.2 FPGA并行加密带来的独特挑战FPGA上的AES-128并行实现是本次研究的“硬骨头”。与串行实现一次只处理一个字节不同并行实现可以在一个时钟周期内同时处理16个字节即一个完整的AES状态矩阵。这带来了几个核心难点功耗轨迹平滑且复杂16个S盒同时运算它们的功耗会叠加在一起。这使得功耗曲线变得异常平滑失去了串行实现中那种清晰的、与单个S盒操作一一对应的“尖峰”特征。传统的基于寻找局部极值点的POI选择方法在这里几乎失效。噪声源剧增在攻击一个目标S盒时其余15个并行S盒的运算都成为了强大的噪声源。这极大地稀释了目标信号的信噪比SNR。随机化与对齐许多FPGA设计会加入随机延迟等抗侧信道攻击措施进一步增加了轨迹对齐和特征提取的难度。幸运的是我们使用的DPAv2数据集是官方采集的已经过对齐和基础滤波为我们省去了最繁琐的预处理步骤让我们能更专注于特征学习和模型本身。2.3 核心武器词嵌入与LSTM面对上述挑战我们引入了两件“跨界”武器。词嵌入Word Embedding在NLP中词嵌入技术如Word2Vec能将离散的词语映射到一个连续的向量空间中使得语义相近的词语在空间中的位置也接近。我们从中获得了灵感功耗轨迹上的每一个采样点的数值是否可以看作一个“词”一整条功耗轨迹就是由这些“词”按照时间顺序组成的一个“句子”基于这个类比我们使用词袋模型Bag of Words结合分布式表示的思想将每条长度为3253的功耗轨迹转换成一个固定维度的密集向量。这个过程的关键在于它不再是简单的数值归一化或滤波而是试图挖掘采样点数值之间的深层关联和模式为后续的深度学习模型提供富含语义信息的输入。注意这里“语义”是一个类比。在SCA上下文中它指的是能反映密钥与功耗之间相关性的、深层次的统计特征模式而非真正的语言含义。长短期记忆网络LSTM这是循环神经网络RNN的一个变体专门为解决长序列训练中的梯度消失和梯度爆炸问题而设计。LSTM通过引入“细胞状态”和“门控机制”输入门、遗忘门、输出门能够有选择地记住或忘记长期信息。功耗轨迹是典型的时间序列数据当前时刻的功耗不仅与当前处理的数据有关还可能受到之前数个甚至数十个时钟周期内电路状态如寄存器值、总线活动的影响。LSTM正是捕捉这种长期时序依赖关系的理想工具。我们的核心思路是用词嵌入技术替代传统的手动POI选择和降维如PCA将原始的、高维的、看似平滑的功耗轨迹转化为低维的、富含特征的向量序列。然后将这个向量序列输入LSTM网络让LSTM自动学习从功耗序列到密钥汉明重量或直接到密钥值的复杂映射关系。3. 方案设计与实现细节3.1 数据准备与词嵌入向量化我们实验的基础是DPAv2公开数据集。该数据集针对的是FPGA上并行实现的AES-128算法。数据集分为两部分模板数据集包含100万条功耗轨迹每条轨迹有3253个采样点以及对应的明文、第一轮密钥、最后一轮密钥和密文。用于模型的训练剖析。公开数据集包含2万条功耗轨迹同样有3253个采样点及对应数据。用于模拟攻击阶段评估模型性能。词嵌入处理流程如下构建“词汇表”我们将所有训练集功耗轨迹中所有采样点可能出现的整数值范围视为一个“词汇表”。例如如果功耗值在-20000到20000之间我们可以通过分桶binning将其离散化为有限个“词”。更精细的做法是直接使用浮点数的量化表示。轨迹转“句子”一条功耗轨迹[p1, p2, ..., p3253]就被看作一个由3253个“词”组成的句子。训练词向量我们采用类似Word2Vec中CBOW连续词袋模型的思想。但目标不是预测中心词而是让模型学习每个采样点数值词的上下文表示。具体来说我们设定一个滑动窗口用窗口内的上下文数值来预测窗口中心的数值自监督学习。通过训练每个离散化的功耗值都会获得一个固定维度如50维或100维的向量表示。生成向量序列处理完所有训练数据后我们得到了一个嵌入矩阵。对于任何一条新的功耗轨迹我们将其每个采样点的数值通过查找嵌入矩阵转换为对应的词向量。最终一条轨迹就从[3253]的标量序列变成了[3253, embedding_dim]的向量序列。这个序列就是LSTM的输入。实操心得embedding_dim词向量维度是一个关键超参数。维度太低信息损失严重维度太高不仅增加计算量还可能引入噪声和过拟合。我们通过实验发现对于DPAv2数据集50-128维是一个较好的范围。可以通过在验证集上观察模型收敛速度和最终攻击效果来调整。3.2 LSTM模型架构与训练策略我们的LSTM模型接收上述生成的向量序列目标是分类出最后一轮S盒输出的汉明重量0-8共9类。模型架构大致如下输入层接收形状为(batch_size, 3253, embedding_dim)的输入。LSTM层我们使用了2-3层堆叠的LSTM。第一层LSTM可以设置return_sequencesTrue将每个时间步的输出都传递给下一层以便捕捉更复杂的时序模式。最后一层LSTM通常只返回最后一个时间步的输出作为整个序列的概括。Dropout层在LSTM层之间和之后插入Dropout层至关重要。FPGA并行功耗轨迹中大量采样点是与攻击目标无关的噪声例如其他15个S盒的运算、密钥扩展逻辑等。Dropout通过随机“关闭”一部分神经元强迫网络不过度依赖某些特定的、可能是噪声的输入特征从而有效防止过拟合并提升模型的泛化能力。全连接层将LSTM输出的特征向量展平并通过一个或多个全连接层进行非线性变换。输出层使用Softmax激活函数的全连接层输出9个类别的概率分布。训练关键点损失函数分类任务通常使用分类交叉熵损失。优化器Adam优化器因其自适应学习率而表现良好初始学习率可以设置在1e-3到1e-2之间。批处理由于数据量庞大100万条需要使用较大的批处理大小如512或1024以加速训练和稳定梯度。早停法监控验证集损失当其在连续多个周期内不再下降时停止训练避免过拟合。踩坑记录在早期实验中我们曾尝试使用SELU激活函数理论上它具有自归一化特性。但在某些深度学习框架如TensorFlow的特定版本下这会导致模型无法使用CUDA进行GPU加速训练速度急剧下降。对于SCA这种数据密集型的任务训练速度是必须考虑的因素。因此我们最终选择了更通用、GPU支持更好的ReLU或其变体如Leaky ReLU作为隐藏层的激活函数。3.3 评估指标猜测熵在侧信道攻击中我们不仅关心模型分类的准确率更关心它恢复密钥的效率。常用的评估指标是猜测熵。猜测熵衡量的是在攻击阶段正确密钥在所有可能密钥猜测中的平均排序位置。具体计算过程如下使用训练好的模型对攻击集的一条轨迹进行处理输出对9种汉明重量对应256种可能子密钥中的一部分的概率预测。根据汉明重量概率结合泄漏模型如汉明重量模型可以计算出256个可能子密钥中每一个的后验概率。将这些子密钥按后验概率从高到低排序。记录正确子密钥在这个排序列表中的位置排名。排名为1表示攻击一次就猜中了密钥这是最理想的情况。用大量如1000条攻击轨迹重复此过程计算正确子密钥排名的平均值即为猜测熵。猜测熵的意义猜测熵越低说明正确密钥的平均排名越靠前攻击效率越高。当猜测熵下降到1时意味着平均只需尝试1次就能找到正确密钥攻击完全成功。我们的实验目标就是观察随着所用攻击轨迹数量的增加猜测熵的下降曲线。下降越快、最终值越低证明我们的“词嵌入LSTM”模型越有效。4. 实验对比与结果分析为了验证“词嵌入LSTM”方案的有效性我们设计了一系列对比实验。所有实验均基于相同的DPAv2数据集攻击目标均为最后一轮S盒输出的汉明重量。4.1 对比模型设置我们选取了三种具有代表性的模型作为基线进行对比多层感知机一个经典的深度前馈神经网络。作为非时序模型的代表用于对比验证时序建模的必要性。卷积神经网络使用一维卷积层来捕捉功耗轨迹中的局部模式。这是当前基于深度学习的SCA中较为主流的方法。传统预处理LSTM为了剥离词嵌入的贡献我们测试了仅对原始功耗轨迹进行常规预处理如归一化、巴特沃斯滤波、傅里叶变换后再输入相同结构的LSTM模型的效果。对于每种模型我们都测试了其在不同预处理方法下的表现并记录了训练10轮和更多轮次后的准确率、损失以及最重要的——猜测熵。4.2 实验结果数据解读实验数据以表格形式呈现了各模型在10轮攻击中猜测熵的变化。这里我们聚焦核心发现表格数据摘要分析MLP模型无论采用何种预处理其猜测熵的下降都相对缓慢。在第10轮时最佳情况巴特沃斯滤波下猜测熵为33.1。这表明对于FPGA并行加密这种强时序、高噪声的场景简单的全连接网络难以捕捉有效特征。CNN模型表现优于MLP最佳情况下CNN with RE第10轮猜测熵降至28.2。CNN能够提取局部特征对噪声有一定的鲁棒性证实了其在SCA中的有效性。基础LSTM模型仅使用归一化数据LSTM在第10轮就将猜测熵降至27.4已经略优于最佳CNN。这初步证明了LSTM处理此类时序数据的潜力。词嵌入LSTM模型这是我们的核心方案。结果显示其攻击效率提升显著。在第10轮攻击时猜测熵降至12.0远低于其他所有模型和预处理组合。这意味着平均只需要在排名前12位的猜测中寻找就能定位到正确密钥攻击所需的轨迹数量或猜测次数大大减少。4.3 关键发现与讨论词嵌入的有效性对比“基础LSTM”和“词嵌入LSTM”的数据可以清晰看到词嵌入带来的提升。词嵌入过程不是一个简单的变换它通过无监督学习将功耗数值映射到了一个更能体现其“上下文关系”即与泄露的相关性的语义空间中为LSTM提供了质量高得多的输入特征。这相当于在将数据喂给LSTM之前已经进行了一次智能的、自动化的特征工程。Dropout的不可或缺性实验中发现在LSTM中应用Dropout表中DP0.1 DP0.2能稳定提升模型性能尤其是在中后期降低猜测熵。这印证了我们的判断Dropout强制模型学习更鲁棒、更通用的特征而不是记住训练集中的噪声这对于泛化到攻击集至关重要。传统预处理方法的局限性巴特沃斯滤波和傅里叶变换FFT在某些情况下对MLP和CNN有轻微改善但对LSTM的增益有限有时甚至不如简单的归一化。FFT将信号转到频域牺牲了时域信息而密钥泄露恰恰与特定的时钟周期紧密相关。这提示我们对于基于深度学习的SCA尤其是使用时序模型时过于激进的传统信号处理手段可能会丢失关键信息。效率与效果的权衡“词嵌入LSTM”模型在攻击效果上优势明显但其训练时间确实长于其他模型。这主要源于两部分开销一是词嵌入层的训练本身需要额外时间二是高维向量序列输入给LSTM带来了更大的计算量。这是追求更高自动化程度和攻击性能所必须付出的代价。5. 常见问题与实战排查指南在实际复现或应用此类方法时你可能会遇到以下典型问题。以下是我在实验中总结的排查思路和解决方案。5.1 模型训练不收敛或准确率极低可能原因1数据未正确对齐或标准化。即使DPAv2数据集已预对齐在自行采集数据时时序抖动是首要敌人。排查可视化多条轨迹检查起始点、明显的时钟周期特征是否对齐。使用动态时间规整等算法进行对齐。解决对所有功耗轨迹进行z-score标准化减去均值除以标准差使每个采样点维度上的数据分布接近均值为0、方差为1。这对于神经网络的稳定训练至关重要。可能原因2标签定义错误。我们的攻击目标是汉明重量这是一个0-8的整数。需要确保标签编码正确如one-hot编码并且与功耗轨迹的对应关系无误。排查检查数据加载代码确认明文、密钥、轨迹的索引对应关系。计算几条样本的汉明重量进行手动验证。可能原因3学习率设置不当或梯度爆炸/消失。排查监控训练初期几个批次的损失值如果损失变成NaN或急剧增大可能是梯度爆炸。解决使用梯度裁剪尝试更小的学习率如1e-4对于LSTM确保其初始化正确并可以尝试使用tanh替代ReLU作为循环体内的激活函数。5.2 猜测熵下降缓慢攻击效果不佳可能原因1词嵌入维度或训练不充分。词嵌入层没有学到有效的表示。排查可以尝试将训练好的词向量进行可视化如t-SNE降维观察不同数值范围的“词”是否在空间中有区分度。解决增加词嵌入的预训练轮次调整embedding_dim尝试不同的词嵌入模型如Skip-gram。可能原因2LSTM结构或超参数不佳。排查模型是否过拟合或欠拟合观察训练集和验证集的损失/准确率曲线。解决过拟合增加Dropout率添加L2正则化使用更多的训练数据简化模型减少LSTM层数或单元数。欠拟合增加LSTM的层数或隐藏单元数延长训练时间减少Dropout率尝试更复杂的模型如双向LSTM、GRU。可能原因3泄露点不在所选区间。我们假设泄露发生在最后一轮但如果实际泄露发生在其他轮次如第一轮或第九轮模型自然学不到东西。排查这是SCA的经典问题。可以计算所有采样点与目标汉明重量之间的皮尔逊相关系数绘制成曲线。峰值所在的采样点区间就是泄露最集中的区域。用这个区间的数据重新训练和攻击。5.3 训练过程耗时过长可能原因1未启用GPU加速或框架配置问题。解决确保CUDA和cuDNN已正确安装。在代码中显式指定使用GPU设备。避免在循环中使用低效的操作。可能原因2批次大小太小。解决在GPU内存允许的范围内尽可能增大批处理大小。这能提高GPU利用率加速训练。可能原因3输入序列过长。我们的轨迹有3253个点全部输入LSTM计算量很大。解决可以尝试截断或池化。例如只选取相关系数分析显示的高泄露区间可能只有几百个点。或者在词嵌入后先经过一维卷积层进行下采样再输入LSTM。5.4 复现实验结果不一致核心要点随机种子。深度学习训练涉及大量随机初始化权重、Dropout、数据打乱。为了确保结果可复现必须在代码开头固定所有随机种子如Python的random,numpy,tensorflow等。数据划分确保训练集、验证集、攻击集的划分方式与原文一致。超参数仔细核对所有超参数包括学习率、优化器参数、层数、单元数、Dropout率、词嵌入维度等。微小的差异可能导致结果波动。经过一系列实验和调优我个人最大的体会是将NLP领域的词嵌入技术与时序深度学习模型结合为侧信道分析打开了一扇新的大门。它不仅仅是一种技术替换更是一种思路的转变从“人工设计特征浅层模型”转向“自动学习表示深层模型”。这种方法降低了对领域专家经验的依赖使得自动化、智能化的侧信道评估工具成为可能。当然其计算成本较高如何进一步优化模型效率或者探索像Transformer这样的新架构将是接下来有趣的研究方向。对于硬件安全工程师而言理解并善用这些新工具意味着能在攻防对抗中占据更主动的位置。

相关新闻