使用CMAES算法预测PUF及XOR PUF的响应,附GitHub源码链接!

1 篇文章 0 订阅
1 篇文章 0 订阅

前言

Arbiter-PUF(APUF)是最早提出的一种基于延时的物理不可克隆电路(PUF)。由于其简单的线性结构,APUF很容易被机器学习的算法攻击。CMA-ES算法是PUF的主流攻击算法之一。该算法可以根据PUF结构自定义适应度(fitness)函数,从而达到较高的预测准确率。本篇文章将使用Python的CMA-ES算法库对APUF及改进的XOR PUF的输出进行预测。测试结果表明,只需要2000训练集和7秒的时间就可以以高达97%的准确率预测出Arbiter-PUF的响应。本文旨在相关领域的研究人员交流学习,未经允许,勿作他用。

本文是笔者的公众号 IC设计者笔记 文章的节选。很多优质原创内容都会第一时间发布在公众号,欢迎关注公众号,一起交流学习。

Arbiter-PUF结构

仲裁器PUF(APUF)电路的结构如下图所示,该电路由多组二选一选择器和一个仲裁器组成。仲裁器一般可采用D触发器或RS锁存器。每两个二选一选择器组成一个传输节点,节点内部上下两个二选一数据选择器必须严格对称摆放,相邻两个节点之间的走线也需严格对称。当一个上升沿信号输入到PUF电路后,信号会分成两路并沿着两条完全对称的路径到达仲裁器。理想状态下,由于上下两条路径完全对称,故两路信号应同时到达仲裁器。然而由于芯片的制造过程中存在随机的工艺误差,故两路信号不可能同时到达仲裁器。根据两路信号到达仲裁器的先后顺序,仲裁器输出0或1。

传统 APUF 电路结构

图中所示电路包含128 bit的选择信号(Challenge) X和1 bit的仲裁器输出响应信号(Response) Y。输入信号作为节点内部两个选择器的选择信号,其决定了输入到PUF电路的触发信号的传输路径。从图中可以看到,当选择信号X[0]=0时,输入的上升沿信号平行传至下一级,当X[0]=1时,输入信号交叉传输到下一级。由于每个节点都可以通过选择信号来改变延时路径,因此PUF电路中一共存在 2 128 2^{128} 2128条不同的延时路径。

如下图所示,当改变Challenge导致两路信号到达仲裁器的先后顺序发生反转时,仲裁器便会产生不同输出结果。

XOR PUF则是使用两个完全相同的APUF,然后用异或门将两个APUF的Response进行异或得到最终的输出响应。

数学模型

APUF的数学模型如下图所示(对此部分不感兴趣的读者可以直接跳过)。此模型来自论文

图中 Δ t V \Delta t_V ΔtV即两条路径的最终延时差值。而 δ t i 0 \delta t_i^0 δti0 δ t i 1 \delta t_i^1 δti1则是第 i i i个节点在不同通选择信号时的延时差值。仲裁器的输出Response为0或1取决于 Δ t V \Delta t_V ΔtV为正或负(对于XOR PUF而言,其输出Response则取决于两个APUF的延时差值的乘积的符号)。 Δ t V \Delta t_V ΔtV与输入challenge以及每个节点的延时之间的关系如下:

其中

向量 γ ⃗ \vec{\gamma} γ 可由challenge直接计算得到,而向量 τ ⃗ \vec{\tau} τ 则需要用CMA-ES算法训练得到。

CMA-ES算法预测PUF响应

思路

CMA-ES算法是机器学习算法之一,它采用协方差矩阵自适应进化策略来找到使目标函数(fitness function)达到最小值的解。如果我们想要用CMA-ES预测PUF的响应,就需要建立一个目标函数,该函数的输出值是预测错误率,这样我们就可以用CMA-ES来找到错误率最小时的目标函数的解,即向量 τ ⃗ \vec{\tau} τ 。然后就可以用数学模型和 τ ⃗ \vec{\tau} τ 预测PUF的输出了。

我们的核心任务就是编写目标函数,该函数能够利用PUF的数学模型和CMA-ES得到的解来计算PUF的Response,然后将其与训练集中正确的response对比,从而计算预测结果的错误率。接着,我们将错误率反馈给CMA-ES进一步优化,以获得更低的错误率。该步骤不断重复,直到获得一个符合预期的解为止。

接着我们用测试集检验最终得到的解的正确性,如果测试集的错误率比训练集高很多,说明出现了过拟合。这时,我们就需要增加训练集和测试集。

CMA-ES 类介绍

我们需要使用Python CMA库中的 CMAEvolutionStrategy 类来完成本次实验。该类的使用方法如下:

from cma import CMAEvolutionStrategy

# 创建类
es = CMAEvolutionStrategy(x0, sigma0, opts)

# 开始训练
es.optimize(objective_fct, iterations = 500, args=() )

# 获得训练结果
res = es.result

x0:初始解;

sigma0:进行参数优化时所用的初始标准差;

opts:一个字典类型数据,可设置CMA-ES算法的一些参数。例如:最大迭代次数、目标函数最大调用次数等;

objective_fct:目标函数,也称作适应度函数或损失函数,该函数的返回值是预测错误率;

iterations:最大迭代次数;

args:传递给objective_fct函数的参数。
注意:objective_fct 函数的第一个参数必须是CMA-ES所训练得到的解。且该解由optimize函数自动传给objective_fct,不需要通过 args 传递

训练结果是一个元组类型(tuple),其中每一项内容描述如下:

  • 0 xbest best solution evaluated
  • 1 fbest objective function value of best solution
  • 2 evals_best evaluation count when xbest was evaluated
  • 3 evaluations evaluations overall done
  • 4 iterations
  • 5 xfavorite distribution mean in “phenotype” space, to be
    considered as current best estimate of the optimum
  • 6 stds effective standard deviations, can be used to
    compute a lower bound on the expected coordinate-wise distance
    to the true optimum.

测试结果

CMA-ES对于APUF的预测结果如下:

APUF 训练结果

可以看到,只需7秒的时间就达到了97%的准确率。

现在,我们再测试一下CMA-ES对 XOR PUF 的预测结果。将xor_num改为2,同时训练集增加至4000,测试结果如下:

XOR PUF 训练结果

XOR PUF 的预测准确率为 93.75%。如果我们将训练集增加至10000,准确率也可以达到97%左右。

即使是3-XOR PUF, 我们用50000的CRP迭代500次也能达到98.9%的准确率:

3-XOR PUF 训练结果

结束语

如果本文对你有帮助,请多多点赞支持,让作者有动力创作更多优质内容。本文是作者微信公众号IC设计者笔记 文章的转载。很多技术干货内容也会第一时间在公众号发布,欢迎关注。本文的完整源码请到这里下载: https://github.com/yg99992/CMAES_PUFattack

本文所阐述的CMA-ES攻击方法已被应用在了我们最新的研究工作中。欢迎在您的工作中引用我们的研究成果:

C. Xu, L. Zhang, M. -K. Law, X. Zhao, P. -I. Mak and R. P. Martins, "Modeling Attack Resistant Strong PUF Exploiting Stagewise Obfuscated Interconnections With Improved Reliability," in IEEE Internet of Things Journal, doi: 10.1109/JIOT.2023.3267657.

BIBTEX file:

@ARTICLE{Xu2022_OIPUF,
  author={Xu, Chongyao and Zhang, Litao and Law, Man-Kay and Zhao, Xiaojin and Mak, Pui-In and Martins, Rui P.},
  journal={IEEE Internet of Things Journal}, 
  title={Modeling Attack Resistant Strong PUF Exploiting Stagewise Obfuscated Interconnections With Improved Reliability}, 
  year={2023},
  volume={},
  number={},
  pages={1-1},
  doi={10.1109/JIOT.2023.3267657}
  }

参考资料
[1] Side Channel Modeling Attacks on 65nm Arbiter PUFs Exploiting CMOS Device Noise: https://ieeexplore.ieee.org/document/6581579
[2] CMA-ES的Python源代码: https://github.com/CMA-ES/pycma

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

求学者羽光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值