Tips: 以下内容包含读者在阅读这篇逆向工程论文过程中写下的一些翻译,其中参杂个人对于这项工作的理解
原文链接:https://www.semanticscholar.org/paper/CSI-NN%3A-Reverse-Engineering-of-Neural-Network-Side-Batina-Bhasin/b12c15503435cffee16bdd156766dcf390eeb8f8
说了一下深度学习应用广泛,然后模型被嵌入到一些低功耗的芯片上,但是不轨分子可能会因此而窃取模型,或者通过训练模型而窃取训练集,这些都会危害知识产权,因此本文进行侧通道分析的研究,希望找到能够妨害的措施。
之后又提了不轨分子获得芯片后可以直接拆解从而获得其中的信息,但是有些公司也有相应的措施来将芯片制成一个黑盒,从而无法从物理层面拆解获得信息,因此,作者提出采用侧通道分析的方法进行还原模型。
侧通道分析主要由三种方法组成:时间延迟(timing delay/reaction time)、功率消耗、电磁辐射
卷积网络包含三种层:卷积层、池化层、全连接层
一层卷积层的权重即为那个卷积核,这一层使用这一个卷积核
池化层分为平均值池化和最大值池化
全连接层就是个全连接
常见的激活函数有:ReLU、sigmoid、tanh、softmax
ReLU的运行速度最快,因为他没有指数操作和除法操作,后面三个都包含指数和除法
Scenario
Attacker’s capability
方法是基于Ateml ATmega328P平台提出的,后续在ARM Cortex-M3进行验证,测量工具为Lecroy WaveRunner 610zi 电子示波器,每一个输入input都能通过示波器得到output
后面inputs和traces都将表示同一个意思,都意味着一连串的输入/示波器的输出,信号的同步依靠传统的握手信号进行开始和停止
所测量的EM信号包含着time delay信息
系统总线都是从0开始初始化,当激活后,处理器会从存储单元加载数据到总线上,这时总线会从全0的序列变为有0有1的序列,换言之就是,消耗了多少功率/产生多少电磁辐射等效于1的比特数。
当模型从内存里加载一个预设的权重的时候,如果这个权重是由8位整形表示的,假设这个权重为x=[x7,x6,…,x0],那么这个权重的汉明重量可以通过下面这个式子计算得到,这将被后续测通道分析中用来推算模型的真实权重(通过计算HW(xw)和HW(xw’)之间的互相关系数)
作者设置了输入x=[-2,2],总共测了2000次EM数据,得出不同输入下,不同的激活函数对应的时间延迟,如下图所示:
作者从测量的EM信息中,分析出不同的激活函数带来的时延情况,如下所示:
作者提出,如果有必要的话,可以做一些模式匹配来确定用的是哪个激活函数
使用correlation power analysis(CPA)来恢复权重,CPA即为上文中DPA的一个变种,对象是乘法操作m = x*w,基于皮尔逊相关系数ρ(t,w)来推测权重,相关系数大的w,可认为是与真实权重更接近,t为计算结果m存储回寄存器的时延
通过内存分析可以知道,模型运行乘法操作后,权重会从4个寄存器加载到总线上,每一个寄存器存放8位浮点数
32位浮点的构成如下,b31为符号位,b30-b23为指数位,b22-b0为位数位:
具体的操作如下:
作者给出了上面这幅图,表示的是在预测权重w’为2.43时,前三位尾数(0、0、1)的相关系数与时间的对应关系,黑色表示的是预测为正确(|m(w’)-m(w)|<0.01)的权重的相关系数,即2.43对应的各个位尾数,而红色表示的是某一个错误预测权重的相关系数,比如w’'=2.83,它对应的尾数的第一位是1,那么看到这儿,我猜是可以画出下面这个表格的:
这个表格第一行全是1,第二行全是0,一共有23列,每一列代表着对某一位的尾数进行预测的情况,一位尾数只存在0和1两种情况,红色表示的是上图中画红线的意思,即相关系数小的那一种情况,灰色表示的是上图中画黑线的意思,即相关系数大的那一种情况,作者会对23位尾数的每一位都画出相关系数图,然后判断每一位是0还是1的可能性大,以此完成对权重的23位尾数的预测,例如在本例中前三位尾数中就是0、0、1的相关系数更大。
同时,作者称这些相关系数在时间上跨度很广的原因有两个,一个是测量的EM信息含有噪声,二是乘法操作不是瞬时的,是占据一个时间段的
然后作者又给出了上面两幅图,代表的是在考虑简单情况下,即权重的尾数仅为7位,而不是上面的23位权重,在这种情况下作者采用上面的方法恢复出来的权重的相关系数的曲线,画了一条正确的和一条其他的错误的权重的相关曲线,从左图可以看到的是,恢复的被认为是正确的权重的相关系数大,这理所当然
但是,右图中,恢复的被认为正确的权重的相关性反而更低,无法从上面作者的理论中:相关函数更大的权重可以被视作是正确权重的估计
但是,作者接下把weight=0.890的恢复数据展示了出来,称恢复出来的权重实际上为0.890625,显然这个权重和0.890相差无几,但是他这样的搞的话,上面那两个图又能说明什么呢,在这个作者的话术中,意思是上图的这个Targeted value是真实权重,那他这个图又代表什么含义?
后来我又仔细看了看,这个段话就是上面这两张图对应的的名称,作者写的显然是黑线就是预测正确的权重对应的相关函数,红线就是其他的、预测错误的权重对应的相关曲线,但是图b是一种特殊情况,特殊在于,错误的预测拥有更高的相关系数,但是这个错误的权重为0.986025,实际上与真实值0.980也相差无几,显然是作者正文中对于这个图的解释给我给整懵了
上图为作者展示的恢复的一个只有两位的权重,Targeted(正确)和其他的权重的相关系数之间从差距还是比较明显的,作者意为不管低精度还是高精度,都能通过此方法恢复权重
每一层的单元数可以从上图直观看出,但是层与层之间的分割则不是那么容易看出,因此作者提出用CPA的方法,计算相关函数,来判断两个层的边界
CPA的方法如下:
上面的理论分析都是基于一个8位的AVR平台进行的,作者另一个32位的ARM平台上进行了一个验证实验,分为3步:确定激活函数、确定模型权重、确定模型结构
上面这幅图是作者理论分析时,在8位的AVR平台上测量的不同激活函数的时延情况,而下图则为本节中32位的ARM平台上测量的不同激活函数的时延情况:
可以看到,除了relu的两次结果一样之外,另外两个激活函数可以说是天差地别,原本在8围殴的AVR平台时sigmoid的最大值和均值都更大,但是实际测量的时候,却变成了Tanh的最大值和均值更大,简单来说就是,sigmoid和tanh两个激活函数的时延特性发生了翻转,作者给出的说明如下:
个人理解为:每一个平台上神经网络的时延,噪声情况都不一样,一个平台测出来的标准不能通用到其他平台上,因此作者在这个32位的ARM上也测了不同的激活函数带来的时延,以此来做新的模式匹配,以确定用的是哪个激活函数
然后作者给出了下面这张图,说是这个是某一个节点的sigmoid激活函数的行为,并称红实线处代表的是乘法运算的开始,可能这是作者从一整个EM信息种截取的一小段,红线左边是上一个节点的激活函数,红线右边是这个节点的乘法操作和激活函数,但是这个不标注出两个节点来,令人看的有点不清楚,不知道这个节点的乘法操作和激活函数具体是哪儿到哪儿
为了应对测量的不准确性,作者将对权重的恢复定在了做完乘法操作得出结果后,将结果m更新至寄存器的过程中,某一权重的相关曲线如下
作者根据前文中的方法区分不同的层,然后以肉眼区分同一层里面的不同单元
被测MLP的结构拥有4个隐藏层,每个隐藏层的大小分别为(50,30,20,50)
下图是作者测量的MLP的EM信号:
可以看到的是,这密密麻麻的,但是在250w-400w之间是有一段缺口的,作者认为这一段便是模型的运行,然后截取了其中的一小段,大概3w个点,估计是作者数过了,说这是第三层的一个单元:
被测MLP的精度为60.9%,作者recover的MLP的精度为60.87%,然后作者提出了实验中出现的几个问题:
然后又测了一个MLP with 4个隐藏层(200,200,200,200),使用minist数据集进行测试,原始网络的精度为98.16%,recover的网络的精度为98.15%
被测的CNN的结构为3层卷积+3层最大池化+1层全连接,输入为32*32,输出为10个类别,使用的是8位的定点数
由于recover需要顺序的执行每一个乘法,所以可以通过随机计算一层里面的乘法操作来抵御此类测通道攻击
采用掩码来计算乘法操作
激活函数可以选择为时延都差不多的那些,防止被攻击者区分出来用了什么激活函数