Talosec硬體錢包的侧信道攻擊测試分析 Part1

本文為看雪論坛精華文章

看雪論坛作者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:將Xx坐标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

2For n-2 downto 0

3: R[0]←2R[0]

4: If k_i=1 then

5: R[0]←R[0]+P

6Return 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)。

1For 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

2Return 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所示。


Talosec硬體錢包的侧信道攻擊测試分析    Part1-图片1
圖1  测試平台實物圖


>>>>

2、初步觀测


我们采用串口调試助手,對芯片循環發送待簽名資料,循環周期為3秒,也就是每3秒鐘执行1次ECDSA簽名運算。


在这一过程中,我们觀察示波器上的波形變化,可以發现每3秒中將会有大約1.2秒的波形較特殊,它与無指令發送时采集到的芯片空閒时刻的能耗波形有顯著差别。


我们以串口的發送訊號為触發,在200KSa/s采样率下采集5s波形,得到如圖2所示波形。


Talosec硬體錢包的侧信道攻擊测試分析    Part1-图片2
圖2  整体波形

已知波形以3秒為一个周期,在起始采样点之后芯片開始處理收到的資料,所以可确定芯片簽名时间大約1.2秒。由于波形起伏并不明顯,我们將波形进行参數為50的平滑濾波。得到圖3所示結果。

在圖中可以明顯看出,在这5秒中进行了2次簽名,第一次大約為第0秒至第1.2秒,第二次大約為第3秒至第4.2秒。

在1.2秒的一次簽名过程中,芯片的資料處理主要可分為5个阶段,第1阶段、第3阶段和第5阶段耗时較短(小于0.1秒),且能量消耗變化較大,第2阶段和第4阶段的时间都大約在0.5秒到0.6秒左右,耗时較长,且能量消耗變化相對較小。

Talosec硬體錢包的侧信道攻擊测試分析    Part1-图片2
圖3  整体波形濾波后的波形

我们在250MS/s的采样率下更清晰地采集第1、3、5部分的波形,并且對他们进行濾波,可以得到圖4中對比圖。

Talosec硬體錢包的侧信道攻擊测試分析    Part1-图片2
  圖4  第1、3、5阶段的波形及其濾波波形

我们對第2阶段和第4阶段同样进行更高精度的波形采集并濾波,得到圖4所示結果。

可以看到它们的波形都十分規律,没有較大的起伏。第2阶段的圖包括了第1阶段和第3阶段作為首尾,第4阶段的圖包括了第3阶段和第5阶段為首尾,方便进行觀察比較。

Talosec硬體錢包的侧信道攻擊测試分析    Part1-图片2
圖5  第2、4阶段的波形及其濾波波形

第2、4阶段放大来看其規律几乎完全相同,且时间基本相等。在ECDSA的簽名的计算过程中,最耗时的為标量乘操作,而且标量乘操作是多次循環,非常有規律。

根据程式的源碼我们可以知道,整个簽名过程共包括了两次标量乘操作,一次是在簽名时计算kP,一次是计算公鑰。由此可以推斷第二阶段和第四阶段都是标量乘操作。


可以看出第1、3阶段的波形是比較相似的,可以猜测第3阶段對应了标量乘運算之后的计算s以及將簽名結果进行資料填充,將轉换為返回資料格式的过程。


我们在500MHz采样率下采集第2、4阶段波形,并进行放大,可以發现波形是由圖6(左)中所示的直角三角形状的波形组合而成的,其频率為32MHz。

我们在相同频率下采集一段空閒阶段(芯片等待上位机訊號的阶段)的波形,进行同比例放大,發现空閒阶段也是由相同形状的三角形组合而成的,但是此时的频率為24MHz。

直角三角形状抖动的形成原因可能是顯示升压造成的,我们后续会繼续分析和做相应降噪處理。

Talosec硬體錢包的侧信道攻擊测試分析    Part1-图片3
圖6  第2、4阶段的波形及其濾波波形



對ECDSA芯片的简单能量分析



>>>>

1、简单能量分析介绍


CRYPTO 1999上,Kocher等人提出的简单能量分析技術[4],这种分析技術基于以下假設:對于不同操作,它的能量消耗的波型一般是不同的,在目前的芯片制造工艺下,我们认為这是成立的。


如果操作序列与攻擊者感興趣的参數或者密鑰相關,攻擊者完全可以透過采集一条曲线,透過分析波形的變化恢复加密过程中的操作,从而透過操作反推密鑰或者相關参數。


>>>>

2、理論分析


2.1. 采用二进制下传統算法實现的标量乘


算法5:采用二进制下传統算法實现的标量乘

输入:点P,256 比特的整數k=k_255…k_2 k_1 k_0

输出:kP

步驟:

1:Q=0

2For j=254 downto 0

3:Q=2Q

4If k_j=1 then

5: Q=Q+P

6Return Q


可以看出当k_j=1时,對应倍点和点加操作,当k_j=0时對应倍点操作。

由于通常情况下整數k_j 等于0或者等于1的概率都是1/2,所以倍点操作和点加操作的比例大約是2:1,并且每个点加操作之前必定有一个倍点操作,点加操作和点加操作肯定是不相鄰的。

攻擊者可以以此為根据区分点加和倍点,并由此反推出k的值。


2.2. 采用Width-w NAF算法實现的标量乘


在传統的Width-w NAF算法中,w為窗口长度,在计算标量乘之前將窗口值(P,2P,…,(2^w-1)P)预先保存在存儲器中,执行时直接从存儲器中讀取这些点的值。

算法先將k的二进制序列轉化為Width-w NAF形式,再进行标量乘法。 


算法6:采用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←∞

2For i=l-1 downto 1

3:Q=2Q

4If k_i≠0 then

5:Q←Q+P

6Return Q


Width-w NAF算法中,当存在連续4个0以上的情况时,NAF_W (k)表示中存在超过w个連续的0。在这种情况下,攻擊者透過波形可以恢复出k的一部分數值。


2.3. 抗简单能量分析的改进Width-w NAF算法設计


在Talosec錢包的設计中,根据文献[17]提出的方案對Width-w NAF算法进行改进。

以窗口為4為单位,對k进行分组,每组資料组成的一个4比特二进制數作為數组u的一个元素,若u[i]為0,则將u[i]賦值為1 ̅…1 ̅(此處數值表示有誤。

如想了解请查看附件中的正确表示,详細解釋可参考文献[17]),且在u[i+1]減去相应數值。

这种方法可以保證在使用根据这种方法构造出的NAF數制表示的k在计算标量乘时為固定操作,即每计算4个倍点,计算一个点加操作。以此避免简单能量分析的攻擊。

算法7:抗SPA的width-NAF算法

输入:w,d

输出:d_w [n],d_w [n-1],…,d_w [0]。

1For i = 0 to ⌈n/w⌉

2:u[i] ←d mod 2^w

3If u[i]= 00 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

7Return d_w [n],d_w [n-1],…,d_w [0]


然后我们使用Width-w NAF计算标量乘法,该算法与采用传統Width-w NAF算法的标量乘算法完全相同。


2.4. 抗简单能量分析的改进Width-w NAF算法實现


Talosec錢包的标量乘算法模块采用4.2.3節介绍的改进的Width-w NAF算法實现,其中w為4,對于一个256比特的k,理論上采用64層循環,每个循環内在雅可比坐标系下實现4次倍点操作和1次点加操作,處理4比特的資料。

由于该流程的每一步均為固定操作,并未泄露任何和操作數有關的信息,所以即使攻擊者可从波形上区分出点加、倍点操作,该标量乘算法理論上能够抵抗简单能量分析。


查看在雅可比坐标系下的倍点操作和点加操作的實现,可以對比發现它们的不同,点加操作明顯要比倍点操作要复雜。


体现到波形上,如果能透過分析觀察得到标量乘部分的波形,应该能够透過資料處理分析区分出倍点和点加两种不同的操作,理論上来講倍点操作应该消耗的能量較少,点加操作消耗的能量較多,并且每隔4个倍点应该有一个点加。


 

>>>>

3、實验分析


据分析可以得出在大約0.6秒时結束标量乘算法,我们在10MSa/s采样率下采集1秒波形,得到圖7所示波形。


Talosec硬體錢包的侧信道攻擊测試分析    Part1-图片4
圖7  包含标量乘部分的波形

我们對波形分别进行参數為2000、5000、10000的平滑濾波,并进行波形的部分放大,分别得到圖8、圖9、圖10所示結果。

Talosec硬體錢包的侧信道攻擊测試分析    Part1-图片4
圖8  濾波参數為2000的标量乘部分的波形

Talosec硬體錢包的侧信道攻擊测試分析    Part1-图片4
圖9  濾波参數為5000的标量乘部分的波形

Talosec硬體錢包的侧信道攻擊测試分析    Part1-图片4
圖10  濾波参數為10000的标量乘部分的波形

觀察圖8和圖9的濾波結果,對濾波后的波形进行放大,可以透過觀察得到每四个起伏較小的波形后面跟随一个起伏更大的波形。

根据統计,在濾波之后两个較大尖峰之间,共有252个起伏更小尖峰,63个起伏更大尖峰,估计起伏較大的尖峰為点加操作,这与之前我们分析代碼得到的4个倍点跟随1个点加的結論完全相符。


根据分析,我们可以得到以下結論:


(1)攻擊者可以透過放大、濾波等手段从波形上区分出点加和倍点。


(2)由于该錢包中标量乘kP的實现采用了固定窗口的标量乘算法,即使攻擊者能够区分出点加和倍点,它天然可有效抵抗SPA分析。



對ECDSA芯片的差分能量分析



>>>>

1、相關能量分析介绍


相關能量分析是Brier等人在CHES 2004上提出的[18]。通常来講,相同操作的操作數不同,對应的能量也不同。


攻擊者在已知算法的情况下,如果能够多次驱动被攻擊設備进行加密,并且和密鑰进行運算的操作數每次都不同且已知的情况下,攻擊者可以透過對采集到的波形进行統计分析的方法进行密鑰恢复。


人们將波形的歸結為几种模型:汉明重量模型、汉明距离模型、零值模型等。在軟體實现的情况下,波形通常符合汉明重量模型,有關汉明重量模型的介绍我们已經在2.5中给出介绍。

我们下面以汉明重量為例简单介绍一下相關能量分析的方法。


在相關能量分析中,攻擊者会對波形点t和中间值汉明重量HW(y)进行相關性检测,所用公式如下:


ρ=(cov(t, HW(y)))/(σ_t σ_(HW(y)) )=(E[(t-t ̅)(HW(y)-(HW(y)) ̅)])/(σ_t σ_(HW(y)) ).


该公式的數学意義為:若两个向量之间趋向于完全正相關,则ρ趋向于1;若负相關,则ρ趋向于-1;若不相關,则ρ趋向于0。


在做相關能量分析时,通常有两个步驟,第一步采集對应敏感中间值不同的多条波形,第二步透過猜测密鑰的方式进行密鑰恢复。


對于我们采集到的加密过程中的波形来說,只有一部分是真正和我们需要的敏感中间值有相關性的,對于测評者来說,在密鑰已知的情况下,可以透過中间值泄露分析的方法快速定位泄露位置。

對于攻擊者来說,如果能有一台可寫密鑰的与待攻擊設備完全相同的設備,也可以透過中间值泄露分析的方法定位泄露位置,在已知泄露已知的情况下可以大幅減少进行密鑰恢复阶段的计算量。


1.1. 相關能量分析的波形采集


攻擊者随机選取N个明文{P_1,P_2,…,P_N},加密M次,同时采集到M条波形。將采集到的包含进行敏感中间值運算的波形段記錄下来。

我们將M条波形記作{T_1,T_2,…,T_M},其中每个条波上有N个点,可以將其即做一个M行N列的波形矩阵,矩阵的第i行第j列的点t_ij 就表示第i条波形在第j时刻的能耗為t_ij 。


1.2. 已知密鑰条件下的中间值泄露分析


我们知道必定存在一个时刻j,它對应的第j列波形{t_1j,t_2j,…,t_Mj}与M个明文加密过程中敏感中间值y的汉明重量{〖HW(y〗_1),HW(y_2),…,HW(y_M)}之间存在顯著的相關性。透過遍歷j(1<j<N),计算{t_1j,t_2j,…,t_Mj}和{〖HW(y〗_1),HW(y_2),…,HW(y_M)}的相關系數。

可以得到N个相關系數,在这N个相關系中,应该有一个时刻的相關系數,明顯高于其他时刻。这个时刻应该是在做和敏感中间值相關的運算。


1.3. 未知密鑰条件下采用相關能量分析进行密鑰恢复


(1)敏感中间值位置已知的情况


我们記泄露位置為j。首先猜测k=0,用猜测的k与已知的M个明文计算出猜测的中间值y,以及它们的汉明重量,命名為{HW(〖y^'〗_1 ),HW(〖y^'〗_2 ),…,HW(〖y^'〗_M )}

随后计算{HW(〖y^'〗_1 ),HW(〖y^'〗_2 ),…,HW(〖y^'〗_M )}{t_1j,t_2j,…,t_Mj,}之间的相關系數ρ_0,作為正确密鑰与错誤密鑰之间的区分器。

随后,猜测k=1,计算得到ρ_1;猜测k=2,计算得到ρ_2;以此类推,直到计算出ρ_255 。

若某个k猜错了,则由它计算出来的{HW(〖y^'〗_1 ),HW(〖y^'〗_2 ),…,HW(〖y^'〗_1000 )}必為雜乱無章的随机數,故ρ_k 必接近于0。

反之,若某个k猜對了,则由它计算出来的{HW(〖y^'〗_1 ),HW(〖y^'〗_2 ),…,HW(〖y^'〗_1000 )}必等于{HW(y_1 ),HW(y_2 ),…,HW(y_1000)},故ρ_k 必定顯著遠离于0。

因此,最為凸顯、或者說离0最遠的ρ_k 所對应的k即為正确密鑰。


(2)敏感中间值位置未知的情况


對于敏感中间值位置未知的情况,對于每种密鑰猜测k,分析者需要對j个点分别计算一个ρ_k,从而形成一条相關系數曲线,我们記作rho_k 。

若某条相關系數曲线rho_k 在某處較其它曲线有非常明顯的凸顯,则意味着它對应的密鑰k為正确密鑰。



>>>>

2、针對待测芯片的理論分析


在这一節中,我们對ECDSA的整个计算过程中可能存在CPA分析的步驟的代碼进行分析,并找到設计漏洞。


2.1. 标量乘步驟的CPA分析


在针對标量乘運算kP開展攻擊的过程中,若攻擊者可以恢复k,那么在计算s=k^(-1) (e+dr)modq一步时,k^(-1) 相当于已知,在s、k^(-1) 、e、q均已知的情况下,攻擊者很容易恢复得到私鑰d的值。

查看标量乘部分的代碼,可以看到在代碼中k的生成有两种标准的,透過分析我们得到,在该芯片中标量乘步驟可抗CPA分析,主要有以下原因:


對于k為完全随机的情况:k的生成采用硬體随机數發生器實现,每条波形采用的k不同,且攻擊者無法自由選定P的值,这也就决定了攻擊者不能透過采集不同P對应的曲线来恢复k。


對于采用RFC6979标准生成确定性k的情况:查看代碼可以發现使用雅可比坐标计算点加和倍点,攻擊者透過固定密鑰和訊息来固定k,如果雅可比坐标系采用固定的z,若理論上可能会泄露本次簽名中k的信息。

在實现代碼中我们看到坐标轴z的生成是完全随机的,且采用硬體随机數發生器實现,这相当于運算过程中所有与坐标值x和y有關的中间值完全被掩碼了,因此攻擊者無法在这种情况下透過侧信道的方式得到任何有效信息。

2.2. 计算簽名值kP步驟的CPA分析


使用ECDSA算法进行簽名的过程中,需要计算簽名s,在这一步中用到了私鑰d,是计算其与簽名結果的一个元素r的乘积,在这一步驟中,参与计算的是固定不變的私鑰d,和每次變化且已知的簽名值r。

一个已知可變數与一个固定未知數做運算,这在理論上做CPA分析是可行的。


我们可以看到代碼對256比特大數的定義如圖11所示,两个256比特大數的乘法定義如圖12所示。

可發现代碼中并未對两个256位大數的乘法进行防護。我们可以驱动錢包做多次簽名并采集能量波形,對采集到的波形做相關能量分析。

Talosec硬體錢包的侧信道攻擊测試分析    Part1-图片5
圖11  256比特大數的存儲格式

Talosec硬體錢包的侧信道攻擊测試分析    Part1-图片5
圖12  256比特大數乘法的计算方法

在密鑰已知的情况下,我们對其进行中间值泄露分析。根据算法的具体實现方法以及待测設備處理器的位數,我们确定敏感中间值位數為32比特,共17个,即以res數组的元素為单位进行分析。


對于参与運算的數值,我们可以根据錢包簽名返回值得到簽名值r,同时在厂商處獲取私鑰d,并根据程式中提供的資料轉换方式將十六进制表示形式轉换為實際運算时采用的大數表示形式。



>>>>

3、實验分析


根据分析可以得到d×r待分析步驟在整体波形上對应的区间,我们在10MS/s的采样率下采集2万条相应区间的波形,圖13為其中一条波形。


Talosec硬體錢包的侧信道攻擊测試分析    Part1-图片6
圖13  d×r步驟對应的波形

我们可以如圖14所示列出多条波形,可以看出波形的基本形状是對齊的。

Talosec硬體錢包的侧信道攻擊测試分析    Part1-图片6
圖14  多条波形對比

選中波形的一个小区间进行放大,可以得到圖15所示的對比圖。

Talosec硬體錢包的侧信道攻擊测試分析    Part1-图片6
圖15  多条波形對比的放大圖

可以看出在波形上具有如圖所示类似于三角形(大)形状的噪声,并且该噪声并未對齊,且上下浮动較大,会對波形產生較大影响。

對于SPA来說,可以透過濾波的方式對去掉该噪声的影响,但是由于CPA分析的操作數耗时极短,且訊號大小和三角状噪声相比是比較小的,所以如果濾波过度將直接濾掉我们需要的訊號。


如果想要消除该噪声的影响,可以考慮先將噪声进行低通濾波,然后使用原始波形減去濾波后的波形,以尽量消除影响。

在圖16中,上圖為原始波形,中圖為多層小参數低通濾波的結果,下圖為上圖減去中圖的到的波形。

圖16  消除三角状噪声的影响

我们對圖16中的三条波形进行横向放大,得到圖17所示結果。可以看出我们可以基本消除掉規律的三角形噪声的影响,得到去噪后的波形。

圖17  消除三角状噪声的影响的放大圖

利用前面分析的中间值,我们對d×r进行泄露分析,可以得到圖18所示的分析結果。

圖18  d×r最低字節的中间值泄露分析結果

可以看到从始至終做中间值泄露分析得到的相關性的絕對值没有較大的波动,我们對此给出以下結論和猜测:


(1)采用CPA方法對d×r運算进行攻擊實验,未恢复出有效信息。


(2)CPA無法恢复有效信息,并不意味着安全,因為此處理論上存在一阶信息泄露,即d×r中,d為固定未知密鑰,r為可變已知簽名值,二者相乘的过程未加入有效的抗侧信道攻擊防護机制。

因而理論上不抵抗一阶CPA攻擊。我们猜测恢复不出有效信息可能是由于噪声过大。


關于噪声过大問题,要在此處进行一阶CPA攻擊的實验验證,需要在此處进行下列修改:
(1)提高加密速度,使得测評过程所需时间更短,可采集更多波形进行分析。
(2)去掉三角形的噪声干扰。
(3)修改電路板,只采集芯片的能量消耗。
以上几点討論主要聚焦于能量波形信噪比太低的問题,这是因為我们已經將波形經过了訊號放大和1.9MHz低通濾波,但效果仍然不理想。

如果上述3条难以實现,我们可以考慮换一个思路来討論:我们建議在后面的工作中直接采集100万条波形并进行分析,如果100万条波形仍然無法得到明顯信息泄露的话,我们就可以认為该產品是安全的。但是由于簽名速度过慢,这个實验需要一定的时间。


 

ECDSA 芯片的其他侧信道分析方式


除了简单能量分析和相關能量分析之外,其它侧信道分析方式對本錢包进行攻擊的可能性给出理論分析:


1、参考在[3]中作者提到的针對蒙哥馬利阶梯算法的模板攻擊,攻擊者理論上也可對在k固定的情况下對标量乘步驟进行模板攻擊。但錢包程式在使用雅可比坐标进行運算时用了随机化z坐标的對策,故可避免这种攻擊。


2、在使用改进的Width-w NAF算法實现标量乘时,由于錢包程式對分组值為0的情况进行了優化,故可以抵抗安全错誤(safe-error)攻擊。


3、理論上,kP運算不能抵抗一类將点kP打到别的曲线上的故障攻擊,这类故障攻擊包括前面介绍的ZPA、RPA、弱曲线攻擊等。当攻擊者利用这些攻擊方法恢复k后,即可透過推導计算出密鑰d。


 

ECDSA芯片改进建議


1、在不考慮電路設计的情况下,我们對d×r步驟的實现过程理論分析,是存在CPA分析的可能的。我们在此给出改进方案:


由于

s=k^(-1) (e+dr)modn

=k^(-1) e+k^(-1) (dr)modn

=k^(-1) e+(k^(-1) d)rmodn

                                 
在代碼實现中,该錢包已經對k进行随机化,即在原始值上乘了一个完全随机的數值randk。

所以我们可以先將完全随机且未知的k^(-1) 与私鑰d相乘,再將其結果(这个結果也是随机且未知的)与簽名值r相乘,由此避免计算d×r这一步驟,以消除CPA分析的理論可能性。


2、對kP进行運算結束后,需要验證点kP是否还在当前的椭圆曲线上,以避免攻擊者采用ZPA、RPA、弱曲线攻擊等故障攻擊来恢复k值。

在不考慮效率的情况下,我们强烈建議采用蒙哥馬利阶梯算法,或计算2遍kP的方法,来验證kP计算过程中是否發生了故障。



总結


国際上现有理論研究表明,采用改进的Width-w NAF算法實现的标量乘算法可以抗SPA攻擊。

同时專案也采用了随机化策略對模版和安全错誤攻擊进行防御,但仍然存在CPA和故障攻擊的可能。

在我们的建議下Talosec專案组已經對这些可能受攻擊的算法点进行了改进,同时也在协議級别對整个安全流程做了加固,我们会在Part2對这些改进后的算法和协議进行进一步的测試和分析。尽请期待。


Talosec硬體錢包的侧信道攻擊测試分析    Part1-图片7

- End -




看雪ID:LunaYoung  

https://bbs.pediy.com/user-253538.htm  


*本文由看雪論坛 lunaYoung 原創,轉载请注明来自看雪社区




Talosec專案践行開源精神,希望為区块链世界完善安全基礎設施,同时也是一个与看雪論坛紧密联系的專案。得益于論坛内核心组成员的参与和测試,目前Talosec錢包的核心設计開發工作已經阶段性完成,这也將会是論坛核心技術力量的一次充分展示。

作為安全專業人员我们一直在探索安全的邊界,这將会是一项具有使命感的事業——就像是看雪論坛建立的初衷一样。因此,我们希望能够有更多的安全人员能够参与到这个專案之中。

作為回報和技術信心的象征,我们会在看雪論坛内部进行產品的優先發售,并提供優惠的销售方案。

發售包括两輪,首輪预留0x100个創世版,独立编号享受終身免費升級更换,次輪预留0x400个特别版,享受1年免費升級更换服務(正式版1年保修)。预售价為256元(正式零售价616)

此外,我们还提供了其他的福利,您可以在Talosec專案商業白皮書(第三章節)了解这些福利。專案技術白皮書会稍后提供。

官网:https://talosec.io/


掃描二维碼

立即去購买

Talosec预售

Talosec硬體錢包的侧信道攻擊测試分析    Part1-图片8



開奖專区



活动回顧:Linux Kernel Exploit 内核漏洞学習(3)-Bypass-Smep

恭喜 极目楚天舒 獲奖!!

请尽快將圖書名称及收件信息(收件人、電话、收件地址)發送至微信公眾号后台

注意:中奖后一周内未發来獲奖信息者將視為自动放弃。




推荐文章++++

* 打造自己的PE解釋器

HW行动 rdpscan后門简单分析

CVE-2018-0802个人淺析

C++中基本資料类型的表现形式

Linux Kernel Exploit 内核漏洞学習(3)-Bypass-Smep








      点擊下方“阅讀原文”,查看原文

文章末尾固定信息

我的微信
这是我的微信掃一掃
weinxin
我的微信
微訊號已复制
我的微信公眾号
我的微信公眾号掃一掃
weinxin
我的公眾号
公眾号已复制
 
admin2
  • 本文由 admin2 发表于2024 年 11 月 7 日 11:37:10
  • 轉载请務必保留本文链接:https://zuizhiyou.com/talosec%e7%a1%ac%e4%bb%b6%e9%92%b1%e5%8c%85%e7%9a%84%e4%be%a7%e4%bf%a1%e9%81%93%e6%94%bb%e5%87%bb%e6%b5%8b%e8%af%95%e5%88%86%e6%9e%90-part1.html
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定

拖动滑块以完成验证