本文为看雪论坛精华文章
看雪论坛作者ID:LunaYoung
Talosec核心组 王安,杨晓雅
我们使用侧信道分析的方式对一款开源硬件钱包进行安全性测评。
这款钱包的芯片为ARM-Cortex-M4内核,内部采用椭圆曲线数字签名算法(ECDSA)进行签名。
在已知源码的情况下,我们参考国内外对ECDSA算法进行侧信道攻击的多种方式,对源码进行分析,找出已经进行侧信道防护的位置、以及可能存在侧信道攻击风险的位置,并尝试借助实验来佐证我们的结论。
最后,我们给出了一些侧信道防护的改进建议。我们的第二篇报告Part2会针对改进后的方案做更进一步的攻击测试。
由于本论坛只能通过文本格式输入数学公式,本报告涉及到大量数学公式,我们将分析报告作为pdf附件一并上传。
简介
1、研究背景和意义
与大多数传统货币不同,比特币是一种数字货币。由于比特币不存在任何物理形状或形式,因此技术上无法存储在任何地方。
交易时双方需要类似电子邮箱的“比特币钱包”和类似电子邮箱地址的“比特币地址”。和收发电子邮件一样,汇款方通过电脑或智能手机,按收款方地址将比特币直接付给对方。
比特币地址和私钥是成对出现的,他们的关系就像银行卡号和密码。比特币地址就像银行卡号一样用来记录你在该地址上存有多少比特币。
你可以随意的生成比特币地址来存放比特币。每个比特币地址在生成时,都会有一个相对应的该地址的私钥被生成出来。这个私钥可以证明你对该地址上的比特币具有所有权。
我们可以简单的把比特币地址理解成为银行卡号,该地址的私钥理解成为所对应银行卡号的密码。只有你在知道银行密码的情况下才能使用银行卡号上的钱。
所以,对于比特币钱包来说私钥是尤为重要的。
比特币钱包按照私钥的存储方式,大致可分为热钱包和冷钱包两种。
热钱包指使用时必须要保持联网状态,而冷钱包是再非联网状态下使用的,所以外界一般不能通过网络访问到其存储私钥的位置,遭受黑客攻击的可能性大大降低。
在冷钱包中,硬件钱包是非常受大众青睐的一种使用。私钥保存在硬件内部的微处理器,交易在硬件钱包内部确认,即使电脑感染病毒也不会泄露密钥,安全性极高。
与其他离线钱包,比如纸质冷钱包相比,其便捷性非常突出。硬件钱包可以通过USB口或蓝牙连接到电脑,点击按钮就能确认交易。
加密电子设备在运行过程中,会产生时间消耗、能量消耗或电磁辐射之类的侧信道信息泄露,而利用这些泄露对加密设备进行攻击的方法被称为侧信道攻击。
侧信道攻击技术是国际密码学研究的热点方向,它能够通过物理信道直接获得密码运算的中间信息,也能够分段恢复较长的密钥,因而它比传统密码分析更容易攻击实际密码系统。
所以国际主流的密码产品测评机构均把侧信道攻击的防护能力作为衡量设备或芯片安全性的主要指标,学者、黑客们可以利用侧信道攻击破解密码模块或安全产品,主要方法有能量攻击、电磁辐射攻击、故障攻击、中距离电磁与声音攻击、缓存攻击等。
硬件比特币钱包作为一种硬件设备,其在进行运算时不可避免会泄露一些侧信息,比如在进行签名运算过程中会使用到私钥,如果攻击者采集此时的能量或者电磁等侧信息,就有一定的几率得到钱包内存储的私钥。
获取到私钥也就相当于完全破解了该电子钱包,所以对于比特币钱包的侧信道分析就显得尤为重要。
如果无法证明一款硬件比特币钱包是抗侧信道攻击的,我们完全有理由怀疑这款钱包的安全性。
2、国内外研究现状
当前市面存在多种品牌硬件钱包,虽然有部分声称对侧信道攻击做过防御,但并没有公布细节,所以没有第三方的评估对其安全性不得而知。
在今年的4月30日,Riscure公司公布了对keepKey的电磁脉冲故障注入实验[1],绕过了其对PIN码的认证流程以及重置私钥步骤,可使得攻击者在没有输PIN码的状态下获取钱包私钥的权限。
我们研究侧信道分析通常会针对不同的密码算法进行研究,对于相同的算法,它在不同的硬件设备中的实现都存在着许多共性问题。
由于本文研究的比特币钱包中的签名算法为ECDSA,其是基于ECC实现的,国内外对于ECC的实现已经有多年的侧信道分析积累,主要包含能量分析和故障注入两种手段,以下对这两种侧信道分析方法在ECC中的应用展开介绍。
在能量攻击方面,Coron在[2]指出可以对ECC中标量乘实现部分进行简单能量分析(Simple Power Analysis,SPA)。
对于使用蒙哥马利算法实现的模幂算法,Herbst在[3]指出可以可以对该过程执行模板攻击(Template Attack,TA),攻击者可以先在一个完全可控的设备上进行多次实验,构建模板,然后在待攻击设备上多次采集加密过程中的能量消耗,与之前建立的模板匹配。
在计算标量乘,也就是kP时,如果k固定,攻击者可以自由选择P,那么攻击者可以通过给定多个P的取值,让设备进行加密运算,并采集加密过程中的能量,在这种情况下可以使用相关能量分析(Correlation Power Analysis,CPA)以几个比特为单位来恢复k,这种方法在[4]中提到。
在文献[5]中,作者提出一种介于SPA和CPA之间的方法——比较法,Fouque等人在[6]中指出,对于两次倍点2P和2Q,攻击者可能从能量波形上无法得出P和Q具体的值,但是可以通过比较波形得知P和Q是否相等,攻击者有机会通过比较kP和k(2P)的波形来恢复k的全部比特。
另外,在P为攻击者可选的情况下,如果输入的P中含有零值(如(x,0),或(y,0))时,无论对P进行何种随机,P都有一个坐标值为零,在进行标量乘法时,可以利用这个零值获取密钥信息,这种方法被称之为RPA,是Goubin在[7]中提出的。
零点值攻击(ZPA)[8]是RPA的扩展,RPA利用坐标值中含零的特殊点进行能量攻击,ZPA利用域运算中辅助器寄存器中值为零的点进行能量攻击。
除了能量分析,常用的侧信道分析方法还有故障注入,攻击者可以利用激光或者电磁脉冲、电源/时钟毛刺等对被攻击设备进行故障注入,使得被攻击设备的运算过程发生故障,攻击者可以通过这种方式获取自己感兴趣的输出值,具体方法读者可参考[9]。
在ECC中,主要存在三种故障注入的方法,一种是安全-错误分析(Safe-Erro Analysis),这个概念由Yen和Joy在[10][11]中提出,指出了两种安全-错误分析的攻击方法,其中C安全-错误攻击的方法是指通过诱导临时故障以判断操作是否为冗余操作。
一种是由Biehl等人在[12]中提出的弱曲线为基础的攻击,攻击者通过故障注入改变曲线的参数a_6,得到阶数较小的弱曲线,这样在知道kP的情况下就可以通过遍历的方法恢复k值了。
还有一种是差分故障攻击(Differential Fault Attack,DFA),也是Biehl等人在[12]中提出的,攻击者在非故障注入状态下进行一次加密并得到正确结果,再在注入故障的状态下再次进行加密并获得错误结果,比较两次的结果,可能得到某些敏感信息。
背景知识
1、椭圆曲线加密
本文以素域为例介绍椭圆曲线的一些基本概念。
令p>3是一个素数,a,b∈F_P,满足4a_3+27b_2≠0,由a和b定义F_P 上的椭圆曲线是方程y^2=x^3+ax+b的所有解(x,y),x,y∈F_P,连同无穷远点(记为O)的元素组成的集合。
对所有P(x,y)∈Fp,P+O=P。令P_1 (x_1,y_1)≠O,P_2 (x_2,y_2)≠O为椭圆曲线上两点,P_1≠-P_2,则P_1+P_2=P_3 (x_3,y_3),在仿射坐标下,椭圆曲线的点加和点倍关系为:
x_3=λ^2-x_1-x_2
y_3=λ(x_1-x_3)-y_1
式中当P_1≠P_2 时,λ=(y_2-y_1)/(x_2-x_1);当P_1=P_2 时,λ=(3x^2+a)/(2y_1)。
Q=kP是ECC的基本运算(P和Q都是椭圆曲线上的点,k为整数),称为点乘或者标量乘。其中,k为私钥;Q为公钥;P为椭圆曲线上的一个基点。
已知k和P很容易求出Q;但已知P和Q很难求出k。ECC的安全性正是基于该原则。
2、ECDSA
ECDSA的参数组D=(q,FR,S,a,b,P,n,h)为需要满足一定的条件。
它的密钥对也是根据参数组生成的。随机从[1,n-1]中选取一个数d, 计算Q=dG。其中,d就是私钥,而Q即为公钥。
ECDSA的签名算法如下:
算法1:ECDSA签名
输入:参数组D=(q, FR, S, a, b, P, n, h),私钥d,消息m
输出:签名(r,s)
1:选择k∈_R [1,n-1]
2:计算kP=(x_1,y_1),并将x_1 转换为整数(x_1 ) ̅
3:计算r=(x_1 ) ̅mod n。若r=0,跳至步骤1
4:计算e=H(m)
5:计算s=k^(-1) (e+dr)mod n。若s=0,跳至步骤1
6:Return (r,s)
ECDSA的验证步骤如下:
算法2:ECDSA验证
输入:参数组D=(q, FR, S, a, b, P, n, h),公钥Q,消息m,签名(r,s)
输出:判断签名是否合法
1:检验r和s是否是区间[1,n-1]内的整数,若任何一个验证失败,则返回(“拒绝该签名”)
2:计算e=H(m)
3:计算w=s^(-1) mod n
4:计算u_1=ew mod n和u_2=rw mod n
5:计算X=u_1 P+u_2 Q
6:若X=∞,则返回(“拒绝该签名”)
7:将X的x坐标x_1 转换为整数(x_1 ) ̅;计算v=(x_1 ) ̅ mod n
8:若v=r,则返回(“接受该签名”);否则,返回(“拒绝该签名”)
3、标量乘算法
在ECC中,用到的标量乘kP是最为耗时的,计算一般可以将k转化为二进制形式再进行运算,用到的操作主要有点加和倍点操作,具体算法如下。
算法3:点加倍点操作实现标量乘
输入:点P,一个正整数k=〖(1,k_(n-2),…,k_0)〗_2
输出:[k]P
1: R[0]←P
2:For n-2 downto 0
3: R[0]←2R[0]
4: If k_i=1 then
5: R[0]←R[0]+P
6:Return R[0]
4、Width-w NAF算法
Width-w NAF是使用预先计算的点的NAF的扩展。Width-w NAF表示n比特的整数d,d=∑_(i=0)^(n-1)〖d_w [i]2^i 〗,d_w [i]奇整数并且满足|d_w [i]|<2^(w-1),在连续的w个元素中,最多只有一个非负值。
Width-w NAF由不同的作者在[13][14][15]中独立提出的。Solinas在[16]中提出的生成算法非常简单,我们对此进行简单描述。
算法4:传统的Width-NAF算法
输入:窗口宽度w,一个正整数d。
输出:NAF_W (d)。
1:For i=0to n
2: If d=1mod2 then
3: d_w [i]←dmods2^w andd←d-d_w [i]
4: Else
5: d_w [i]←0
6:d←d/2
2:Return d_w [n],d_w [n-1],…,d_w [0]
步骤3中的“mods2^w”为奇数d选择有符号余数类2^w,即{{〖-2〗^(w-1)+1,…,-3,-1,1,3,…,2^(w-1)-1}。因此,我们必须预先计算点P,3P,...,(2^(w-1)-1)P,以便通过预先计算的点来表示残差数列,其具有2^(w-2) 个点。
如果步骤1.1中的d不是偶数的话,那么d_w [i]是奇数,且有|d_w [i]|<2^(w-1) 。步骤1.1之后的d总是可被2^w 整除的。
因此,一旦d_w [i]=0成立,则接下来的w-1位就全为零,即 d_w [i+1]=d_w [i+2]=⋯d_w [i+1]=0。
5、能量分析攻击与汉明重量模型
汉明重量指的是一串符号中非零符号的个数。在二进制表示的符号串中,它是1的个数。
在芯片上,其所有的运算最终都是由芯片内部半导体逻辑状态0和1规律变化实现的。当芯片进行工作时,逻辑状态0和1的变化将在逻辑门上消耗能量,同时产生电磁辐射。
根据当前半导体工艺技术(主要指CMOS工艺技术)的实现特点,密码芯片在处理逻辑状态0和逻辑状态1时会有不同的能量消耗,并产生不同强度的电磁辐射,分析者通过检测能量消耗或者电磁信号的差异便可获得逻辑0和逻辑1相关的一些侧信道信息。
由于能量消耗和电磁信号通常反应同样的信息,我们以下就以能量消耗展开介绍。
在算法运行的过程中,通常会产生一些攻击者感兴趣的操作的操作数。对于不同的操作数,芯片内部逻辑门上的能量消耗通常不同。人们将这种差异归结为几种模型:汉明重量模型、汉明距离模型、零值模型等。
操作数在芯片内部的存储形式一般是二进制的,对于软件实现的算法,其操作数对应的寄存器的跳变一般是由全0或者全1跳转为该操作数的二进制表示形式,产生的能量消耗通常符合汉明重量模型。
即我们假设算法中某一时刻的能量消耗t与中间值y的汉明重量呈线性关系:t=aHW(y)+b
若a是正数,则操作数的汉明重量越高,其能量消耗越小;操作数的汉明重量越低,其能量消耗越大。若a是负数,则反之。
平台搭建和初步观测
1、平台搭建
我们采用Lecroy WaveRunner 104Xi-A示波器、自主研发的能量信号采集探头、Mini-Circuits 1.9MHz低通滤波器、待测开发板、USB转UART板、计算机等组件搭建了实验平台,如图1所示。
2、初步观测
我们采用串口调试助手,对芯片循环发送待签名数据,循环周期为3秒,也就是每3秒钟执行1次ECDSA签名运算。
在这一过程中,我们观察示波器上的波形变化,可以发现每3秒中将会有大约1.2秒的波形较特殊,它与无指令发送时采集到的芯片空闲时刻的能耗波形有显著差别。
我们以串口的发送信号为触发,在200KSa/s采样率下采集5s波形,得到如图2所示波形。
对ECDSA芯片的简单能量分析
1、简单能量分析介绍
在CRYPTO 1999上,Kocher等人提出的简单能量分析技术[4],这种分析技术基于以下假设:对于不同操作,它的能量消耗的波型一般是不同的,在目前的芯片制造工艺下,我们认为这是成立的。
2、理论分析
2.1. 采用二进制下传统算法实现的标量乘
输入:点P,256 比特的整数k=k_255…k_2 k_1 k_0
输出:kP
步骤:
1:Q=0
2:For j=254 downto 0
3:Q=2Q
4:If k_j=1 then
5: Q=Q+P
6:Return Q
2.2. 采用Width-w NAF算法实现的标量乘
输入:k、P、w
输出:kP
预计算:
1:将k转换为width-w NAF形式,表示NAF_W (k)=∑_(i=0)^(l-1)▒〖k_i 2^i 〗 。
主运算:
1:Q←∞
2:For i=l-1 downto 1
3:Q=2Q
4:If k_i≠0 then
5:Q←Q+P
6:Return Q
2.3. 抗简单能量分析的改进Width-w NAF算法设计
输入:w,d
输出:d_w [n],d_w [n-1],…,d_w [0]。
1:For i = 0 to ⌈n/w⌉
2:u[i] ←d mod 2^w
3:If u[i]= 0…0 then
4:u[i]←1 ̅…1 ̅ and d←d+2^w 。
5:d←d-u[i], d←d/2
6:d_w [iw]=u[i],d_w [iw+1]=…=d_w [iw+w-1]=0。
7:Return d_w [n],d_w [n-1],…,d_w [0]
2.4. 抗简单能量分析的改进Width-w NAF算法实现
3、实验分析
根据分析可以得出在大约0.6秒时结束标量乘算法,我们在10MSa/s采样率下采集1秒波形,得到图7所示波形。
对ECDSA芯片的差分能量分析
1、相关能量分析介绍
相关能量分析是Brier等人在CHES 2004上提出的[18]。通常来讲,相同操作的操作数不同,对应的能量也不同。
攻击者在已知算法的情况下,如果能够多次驱动被攻击设备进行加密,并且和密钥进行运算的操作数每次都不同且已知的情况下,攻击者可以通过对采集到的波形进行统计分析的方法进行密钥恢复。
1.1. 相关能量分析的波形采集
1.2. 已知密钥条件下的中间值泄露分析
1.3. 未知密钥条件下采用相关能量分析进行密钥恢复
2、针对待测芯片的理论分析
在这一节中,我们对ECDSA的整个计算过程中可能存在CPA分析的步骤的代码进行分析,并找到设计漏洞。
2.1. 标量乘步骤的CPA分析
2.2. 计算签名值kP步骤的CPA分析
3、实验分析
根据分析可以得到d×r待分析步骤在整体波形上对应的区间,我们在10MS/s的采样率下采集2万条相应区间的波形,图13为其中一条波形。
ECDSA 芯片的其他侧信道分析方式
ECDSA芯片改进建议
s=k^(-1) (e+dr)modn
=k^(-1) e+k^(-1) (dr)modn
=k^(-1) e+(k^(-1) d)rmodn
总结
- End -
看雪ID:LunaYoung
https://bbs.pediy.com/user-253538.htm
*本文由看雪论坛 lunaYoung 原创,转载请注明来自看雪社区
Talosec项目践行开源精神,希望为区块链世界完善安全基础设施,同时也是一个与看雪论坛紧密联系的项目。得益于论坛内核心组成员的参与和测试,目前Talosec钱包的核心设计开发工作已经阶段性完成,这也将会是论坛核心技术力量的一次充分展示。
作为安全专业人员我们一直在探索安全的边界,这将会是一项具有使命感的事业——就像是看雪论坛建立的初衷一样。因此,我们希望能够有更多的安全人员能够参与到这个项目之中。
作为回报和技术信心的象征,我们会在看雪论坛内部进行产品的优先发售,并提供优惠的销售方案。
发售包括两轮,首轮预留0x100个创世版,独立编号享受终身免费升级更换,次轮预留0x400个特别版,享受1年免费升级更换服务(正式版1年保修)。预售价为256元(正式零售价616)。
此外,我们还提供了其他的福利,您可以在Talosec项目商业白皮书(第三章节)了解这些福利。项目技术白皮书会稍后提供。
官网:https://talosec.io/
扫描二维码
立即去购买
Talosec预售
开奖专区
、
恭喜 极目楚天舒 获奖!!
请尽快将图书名称及收件信息(收件人、电话、收件地址)发送至微信公众号后台
注意:中奖后一周内未发来获奖信息者将视为自动放弃。
推荐文章++++
* 打造自己的PE解释器
* HW行动 rdpscan后门简单分析
* CVE-2018-0802个人浅析
* C++中基本数据类型的表现形式
* Linux Kernel Exploit 内核漏洞学习(3)-Bypass-Smep
﹀
﹀
﹀
↙点击下方“阅读原文”,查看原文
评论