机器学习--pytorch(4)

基于机器学习的物理不可克隆函数(PUF)建模攻击

  • 实验目的
      1. 学习及掌握机器学习的基础算法(线性回归,逻辑回归);
      2. 学习SVM,ANN,CNN,CMA-ES等算法;
      3. 学习Python的基本语法以及掌握其Tensorflow包的使用;
      4. 掌握PUF的相关知识和原理;
      5. 使用机器学习对Arbiter PUF进行建模攻击。
  • 实验原理

2.2、PUF

物理不可克隆函数(Physical Unclonable Function,PUF)是一种新的轻量级硬件安全原语。当输入一个激励时,PUF利用芯片制造过程中难以预测的工艺偏差(Process Variation),输出依赖于芯片的不可克隆的响应,非常适合资源受限环境下的设备认证。然而,攻击者可以收集一定数量的激励响应对将PUF进行建模,因此,PUF易受基于机器学习建模攻击。下图是一种典型的PUF——Arbiter PUF,其中{C1,C2,...,Cn-1,Cn}共同组成激励,r为响应。其原理是:一个脉冲信号T会在Arbiter PUF上下两条路径同时传播,通过激励{C1,C2,...,Cn-1,Cn}改变路径(如C1=1时,在M1阶段交叉传播;C1=0时,在M1阶段平行传播),由于工艺偏差会影响不同路径的传播快慢,最终导致上下两条路径信号传播产生快慢差异,比较传播快慢生成激励响应r(0或1) 

机器学习--pytorch(4)_第1张图片

2.3、建模攻击

线性回归和逻辑回归是入门级的机器学习算法,本实验需自行掌握这两个算法,另外如支持向量机(SVM),人工神经网络(ANN),卷积神经网络(CNN),协方差矩阵自适应进化策略(CMAS-ES)需根据分组情况学习其一,最后使用逻辑回归以及分得的四种算法(SVM,ANN,CNN,CMA-ES)其一对Arbiter PUF进行建模攻击,本实验只需对仿真的Arbiter PUF进行建模即可。

在我们的仿真实验中,建模主要分为三个步骤:

  1. 在仿真的Arbiter PUF上获取一定量的激励响应对作为训练数据,再获取一定量的激励响应对(要求10000对,不能与训练数据的激励相应对相同)作为测试数据。
  2. 使用训练数据的激励响应对构建攻击模型。
  3. 使用测试数据的激励响应对测试攻击模型的准确率。(实验要求准确率达到98%以上,并报告使用了多少对训练数据到达该效果)
  • 实验环境

操作系统:Windows

编程语言:Python并安装Tensorflow包

  • 实验简要介绍

本实验给出一个csv文件“仿真Arbiter_PUF.csv”,可用Excel打开,实验中可用python读入。

实验步骤:

  1. 安装python以及Tensorflow 包;
  2. 使用csv_file =  csv.reader(open('仿真Arbiter_PUF.csv','r'))读入数据;
  3. 编写程序获取训练数据与测试数据,并保存为文件形式;
  4. 读入训练数据以及测试数据,使用Tensorflow对机器学习模型进行训练;
  5. 不断扩大训练数据集,使得训练的模型达到准确率要求

 这次实验我没用tensorflow包,用pytorch

实验准备

我觉得最重要的两个问题是对PUF工作原理的研究,还有如何建模。搞清楚这两个问题后面搭建神经网络会方便很多。

PUF工作原理:

举如下例子:

机器学习--pytorch(4)_第2张图片

​ 如图,这是一个简单 4 阶 Arbiter PUF 对应激励(1011)的路径图,我们产生一位响应,只需要比较蓝红两条路径的信号传播快慢就行了。我们设逻辑回归的参数为{w0,w1,w2,w3,w4},如果以(1011)作为输入,得到的结果为 w0+w1+w3+w4显然没有任何意义。

​ 这时就需要变通了,我们需要在输入或者设参数上做点手脚来遵循 Arbiter-PUF 的工作原理。这里对 Arbiter PUF 的所有延迟段进行设参数。图中的(w11,w12,w13,w14)对应之前图中的(p,s,t,q),这时我们产生响应相当于比较(w12+w24+w33+w42)和(w13+w21+w32+w43)的大小。即判断以下两个矩阵对应位置相乘后求和的正负。

 

​ 可见激励(1011)和矩阵 C 是一一对应的,我们只需要对激励进行扩展就能完成建模。注意这里的矩阵相乘不是线性代数中的矩阵相乘,而是对应位置的数相乘。其实只要把矩阵做一下转置就可以对应线性代数中的矩阵相乘了。最终,我们把C矩阵编程一个1*256的矩阵,即把每行拼接起来,在编程进行计算做最后的一位01输出,我们的数据集收集方式就得以实现了。

理解了以上部分再去做还是一筹莫展的。还需要分析一下如何建模。

如何建模攻击

机器学习--pytorch(4)_第3张图片

这时候要考虑输入是什么,输出是什么:

向上边的C矩阵,一个4行64列的矩阵能确定输出r是0还是1,因为参数矩阵数据是给定的,不会变化了。

也就是说特征值是4*64=256,256个输入才会确定一个输出。

我们通过给定的仿真Arbiter_PUF.csv文件来创造非常多组数据,生成很多像C一样的矩阵,同时生成对应的输出值y,也就是生成很多的激励响应对。对生成的矩阵,一部分组成训练集,一部分组成测试集;对生成的结果,一部份组成训练标签,一部分生成测试标签。

考虑线性回归和逻辑回归的区别,这个问题因为输出值要么是0,要么是1,属于二分类问题。

  1. 使用训练数据的激励响应对构建攻击模型。
  2. 使用测试数据的激励响应对测试攻击模型的准确率。

 前期的实践准备

要做成这件事情需要去学很多知识:

线性回归和逻辑回归的区别:

1

2

3

对csv文件的处理;

1

 

你可能感兴趣的:(机器学习)