本文為看雪論坛精華文章
看雪論坛作者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
﹀
﹀
﹀
↙点擊下方“阅讀原文”,查看原文
文章末尾固定信息

