王騰飛,張海峰,許 森
1.上海交通大學 電子信息與電氣工程學院,上海 200240
2.北京智芯微電子科技有限公司,北京 100192
3.觀源(上海)科技有限公司,上海 200241
隨著信息技術的發展和對信息安全需求的增長,公鑰密碼的使用變得更加廣泛。在公鑰密碼體制中,與RSA算法相比,橢圓曲線密碼(ECC)[1]算法能夠使用較短的密鑰而達到較高的安全性,因而得到了越來越多的關注。2012年,中國國家密碼管理局公布了基于ECC的公鑰商用密碼標準,簡稱SM2[2],并且在2017年被國際上確立為ISO標準,正在得到越來越廣泛的應用。但由于其中涉及到的數學運算較為復雜,在具體應用中還存在計算效率不高的問題,因此,對SM2軟硬件快速實現技術的研究成為一項重要課題。
SM2標準屬于橢圓曲線密碼體系,它與基于ECC的其他國際標準,如ECDSA之間在數學基礎、算法結構和實現方式等方面具有相同點,橢圓曲線標量乘算法是實現這一類標準的關鍵部分。針對ECC的實現通常有兩種途徑:一是軟件實現,即在通用處理器(general purpose processor,GPP)上通過軟件編程方式實現相應算法;二是硬件實現,硬件平臺主要包括專用集成電路(application specific integrated circuit,ASIC)和現場可編程門陣列(field programmable gate array,FPGA)兩種。前者的優點在于靈活性高,可以很方便地進行各種參數的配置,缺點是GPP缺少對大數運算的支持,計算效率低;后者的優點在于計算速度快,缺點是靈活性差,尤其是基于ASIC的實現,指定參數后就不能隨意修改,而FPGA因為具有可編程特性,在靈活性上比ASIC要強一些。
由于FPGA在計算效率和靈活性上的優勢,目前國內外有許多對ECC(包括SM2)實現的研究選擇FPGA作為實驗平臺。Loi等人[3]提出的橢圓曲線密碼處理器能夠支持美國國家標準技術研究所(NIST)推薦的五種素域橢圓曲線,利用Xilinx Virtex-5 FPGA上的DSP48E達到了較高的性能。Zhang等人[4]針對SM2推薦的橢圓曲線在Altera StratixII FPGA上實現了高性能的標量乘。但是上述文獻所采用的實現方法都是利用狀態機來控制算法流程,這樣會導致控制邏輯占用大量硬件資源,同時也不利于應用流水線技術進行加速。除此之外,還有一類實現方法是設計專用指令集處理器(application specific instruction-set processor,ASIP)[5],即可以針對ECC算法的計算特點設計專用的指令,使處理器能夠以執行指令的形式高效靈活地實現算法。張軍[6]提出面向二元域和素數域上ECC運算的專用指令集,設計了一種可以實現多種ECC算法的專用指令向量協處理器。夏輝等人[7]提出了一套通用的專用指令處理器的設計驗證方案,并將該方案應用于ECC,從而大幅提升其在硬件資源受限的嵌入式環境中的執行效率。但目前還沒有專門針對SM2標準的專用指令協處理器的研究。
本文借鑒利用ASIP高效實現ECC算法的設計思想,在詳細了解SM2算法特點的基礎上,提出一種適用于實現SM2算法的專用指令協處理器。所提出的SM2專用指令協處理器能夠結合軟硬件實現各自具有的優勢,以FPGA為平臺,高效利用其計算資源,同時考慮抵御側信道攻擊的安全性,實現了從底層硬件單元到上層指令序列的整體優化,具有面積小、速度快、靈活性高的特點。
SM2底層的基本運算是定義在有限域上的,具體分為素域和二元擴域兩種,本文主要討論基于素域的實現。
階為素數的有限域稱為素域,素域上的運算可以通過在整數的基本運算后再加一步對素數階P的約減運算完成,以使結果同樣落在素域下面。簡單來說,素域運算包括模加、模減、模乘和模逆運算,而模逆可以由一系列的加法和移位運算實現。
SM2算法在實現的過程中,會不斷調用底層的素域運算,其中模加減運算比較簡單,不會占用太多時間,而模乘運算調用次數多,計算時間長,是提高整體性能的關鍵運算。為了提高計算效率,本文采用Montgomery模乘方法[8]來實現素域上的模乘運算。Montgomery模乘方法避免了使用耗時的除法運算來進行約減,取而代之的是簡單的移位運算,其計算形式如公式(1)所示:

其中,R=2k,k為P的位數,其核心思想是將對P的取模運算轉化為對R的取模和除法運算,這樣在執行的過程中就只需要簡單的截取和移位操作,非常適合硬件實現。在SM2的計算過程中,可以首先將原始數據與R2做Montgomery模乘運算,使其轉換為“Montgomery形式”,然后在這種形式下就可以用Montgomery模乘代替普通模乘,模加減仍為普通模加減,得到的中間結果保持“Montgomery形式”不變,直到最后一步通過將結果與1做Montgomery模乘運算,使其轉換至普通形式。這樣只需增加開始和結束時的兩步轉換過程,而節省了中間大量模乘運算的耗時,能夠起到良好的加速效果。
相比于模乘運算,素域上的模逆運算更為復雜,對素域上的元素X求模逆,即找到素域上的元素Z,使得Z與X的乘積模P的結果為1,如公式(2)所示:

二進制擴展歐幾里德算法[9]可以將模逆運算轉換為一系列的加減和移位運算,因此在設計模逆的硬件計算單元時,可以通過控制邏輯調用模加減和移位單元執行運算,從而節省硬件資源。另外,將橢圓曲線上的點由仿射坐標轉換為Jacobian坐標可以減少模逆運算的調用次數,從而提高計算速度。
橢圓曲線密碼算法的安全性是基于橢圓曲線上離散對數問題[10],該類型算法是目前公認的單比特安全度最高的公鑰密碼算法。ECC具備密鑰長度短、計算資源需求少等優勢,尤其適用于資源受限設備上的應用,如智能卡等。
橢圓曲線E是一個具有兩變量的三次方程,該方程一般定義在某個數域K上,在本文中K為素域,方程的定義如公式(3)所示:

其中a,b,c,d,e∈K,且其判別式Δ≠0,判別式的定義為:

則,橢圓曲線E上所有點的集合為:

這里O為無窮遠點。
SM2標準給出的定義在素域上的橢圓曲線方程具有如下形式:

設橢圓曲線E上不同的兩點P=(x1,y1)和Q=(x2,y2),兩點相加稱為點加運算,點P和Q的點加運算結果為P+Q=(x3,y3),其計算公式為:

相同的兩點相加稱為倍點運算,點P的倍點運算結果為2P=(x4,y4),其計算公式為:

同一個點的多次重復相加稱為該點的多倍點運算,如P的d倍點:

橢圓密碼算法的安全性來源于橢圓曲線上離散對數的計算復雜性,即Q=[d]P。其中,P和Q為橢圓曲線上的點,而d為標量,由P和d計算得到Q是易于實現的,而由P和Q得到d,在計算上不可行。與RSA算法的模冪運算類似,[d]P是橢圓曲線密碼算法的核心,也稱之為標量乘運算。為了抵御簡單功耗分析(SPA)攻擊,本文采用Montgomery Powering Ladder(MPL)算法[11],如算法1所示。
算法1MPL標量乘算法
輸入:整數d和點P,d的比特長度l


SM2算法呈現層次性特點,自上而下可以分為四層,如圖1所示。在協議層包括數字簽名算法、密鑰交換協議和公鑰加密算法三部分,向下調用橢圓曲線點乘運算和素域GF(n)上的模運算。點乘運算層實現公式(9)所示的橢圓曲線標量乘運算,由算法1可知該運算的實現過程包括一系列的點加和倍點運算,在群運算層完成。而點加和倍點的計算過程如公式(7)和(8)所示,通常為了減少計算量,會將其轉換至Jacobian坐標下進行,但都需要調用素域GF(p)上的模運算。有限域層實現大數的模加、模減、模乘和模逆運算,本文只考慮有限域為素域的情況,包括協議層直接調用的素域GF(n)和群運算層調用的素域GF(p),運算規則如1.1節所述。除此之外,協議層還需調用一些輔助函數,如密碼雜湊函數、密鑰派生函數和隨機數發生器,這類函數可以通過軟硬件方式單獨完成,與本文所設計的協處理器結合即可實現完整的協議。

圖1 SM2算法的層次結構Fig.1 Layer of SM2 algorithm
與其他基于ECC的國際密碼體制相比,SM2采用了獨特的素數域,256位橢圓曲線,GM/T 0003規定了SM2算法的曲線參數[2]。依據標準所選取的參數,圖1中的有限域層所需處理的操作數據均為256位無符號整數,因此在本文所設計的SM2協處理器中,使用256位無符號整數計算單元執行有限域層的基本運算,專用指令與存儲單元也同樣與此相適應。
針對SM2算法的特點,借鑒通用處理器執行計算任務的方式,本文提出的硬件協處理器整體架構如圖2所示。

圖2 SM2硬件協處理器整體架構Fig.2 Architecture of SM2 hardware co-processor
整體架構包含五個部分:接口邏輯、取指單元、譯碼單元、執行單元、程序存儲單元和數據存儲單元,其中的指令是根據SM2算法的特點而專門設計的,具有控制256位整數的模加減、模乘、模逆和移位運算、數據讀寫、指令跳轉等功能。接口邏輯從外部接收數據和控制信號,根據控制信號決定協處理器的工作狀態:存取數據、執行算法或者空閑;執行算法時取指單元會根據程序計數器所記錄的當前指令地址從程序存儲單元中取出指令,并更新程序計數器;取出的指令傳到譯碼單元,譯碼單元按照一定規則對指令進行譯碼,確定當前指令所要完成的功能;執行單元負責實現具體的計算任務,包括256位整數的模加減、模乘、模逆和移位運算;程序存儲單元負責存儲實現SM2算法的指令序列,加密、解密、簽名、驗簽分別對應不同的地址范圍;數據存儲單元負責存儲曲線參數以及中間數據,能夠根據需要快速地進行讀寫。
作為一個能夠獨立執行SM2算法的硬件模塊,所設計的協處理器具有類似主處理器的簡單工作過程,所有專用指令和中間數據的處理都在模塊內部進行,并具有四級流水線結構。在執行SM2算法之前,協處理器需要首先通過對外接口從主處理器獲取的輸入數據,如待簽名消息的哈希值、公私鑰對等,將輸入數據存入數據存儲單元的特定位置,然后才能執行相應算法,算法執行結束后同樣會將結果保存至數據存儲單元的特定位置,主處理器可以通過接口進行讀取,這一過程均在接口邏輯的控制下完成。
根據SM2算法的實際計算需求,本文設計了協處理器可執行的專用指令集,包含17條專用指令,每條指令具有30位固定長度,指令格式為:6位操作碼opr+8位源操作數1地址rs+8位源操作數2地址rt+8位目的操作數地址rd,操作碼決定了指令的功能,均為SM2算法在實現過程中涉及到的基本操作,包括素域GF(p)和GF(n)上的模加、模減、模乘和模逆運算,移位運算,指令跳轉等,具體如表1所示。

表1 專用指令操作碼功能Table 1 Functions of specific instructions’opcode
在表1中,[rs]、[rt]表示按照地址rs、rt從數據存儲單元中取出的數據,[rd]表示按照地址rd待寫入數據存儲單元的數據,pc為程序計數器,用于存放當前欲執行指令在指令存儲單元中的地址。指令1為空指令,不執行任何操作,用于算法執行結束;指令2~9控制素域上的運算,調用同一個計算模塊執行256位模加、模減、模乘和模逆操作,然后依據具體指令選擇模數是p還是n,需要注意的是,由于執行單元采用Montgomery模乘的實現方法,所以指令中的模乘同樣是指Montgomery模乘;指令10可以讀取[rs],用于算法執行結束后對外輸出結果;指令11可以將當前指令地址加2后存入[rd],用于保存調用標量乘函數之后的返回地址;指令12是將[rs]左移一位后存入[rd],用于標量乘算法每次循環后對標量的處理;指令13~17為跳轉指令,可以改變指令序列的執行順序,用于算法中的循環控制,條件轉移和函數調用,包括直接跳轉、根據[rs]是否為0進行跳轉、根據[rs]最高位是否為1進行跳轉以及根據[rs]和[rt]的大小關系進行跳轉。以上指令可以覆蓋SM2中除輔助函數之外的所有基本操作,通過編寫指令序列的方式即可實現相應的算法流程。
在定義了指令的格式和功能的基礎上,SM2加密、解密、簽名、驗簽算法中除輔助函數之外的計算過程可以通過手工編寫指令序列完成。指令序列存儲在程序存儲單元中,程序存儲單元在FPGA上以寄存器數組的形式實現,地址位寬是7位,數據位寬是30位,通過給寄存器賦初值的方式將指令序列寫入。為了節省寄存器資源,程序存儲單元可以根據算法類型被動態賦值,比如同一段地址對應的寄存器就可以依據輸入的算法選擇信號而被賦予加密或簽名的指令序列。由于協議層會多次調用標量乘算法,所以依據算法1編寫的標量乘算法指令序列會被寫入特定的地址范圍0x01~0x43,協議層在調用這段指令序列時只需將輸入的標量值d和點P寫入特定位置,并保存返回地址,然后指令跳轉至0x01位置即可。協議層加密、解密、簽名、驗簽算法的起始地址均為0x44,因為算法長度不同,所以有不同的結束地址,通過將pc的值初始化為起始地址并在wen信號的控制下使算法開始執行,當pc指向所選擇算法的結束地址時終止執行。指令序列可以根據具體需求重新編寫,可以實現更快速或更安全的優化算法。
程序存儲單元中的指令序列通過取值單元逐條取出。取指單元包含一個程序計數器pc和一個指令寄存器inst,可以按照順序或者轉移的方式從程序存儲單元中取出待執行的指令。程序計數器pc存放當前指令在程序存儲單元中的地址,其初始值是SM2算法指令的起始地址0x44。當接收到接口邏輯發送的執行算法的命令時,取指單元將pc的值發送至程序存儲單元的地址端口,經過一個時鐘周期后取出指令,并將其存放在inst中發送至譯碼單元。之后需要對pc的值進行更新,以便去取下一條指令,對pc的更新要考慮當前指令是否為轉移指令,如果是轉移指令,則將pc賦值為指令中要轉移的目的地址(條件轉移指令還需要判斷是否滿足轉移條件),否則令pc=pc+1。當pc增加至算法指令的結束地址時,停止取指操作并不再更新pc,同時給出執行結束的信號。
譯碼單元從取指單元獲得inst指令并對其執行譯碼操作,工作時首先將30位指令分解成6位操作碼opr+8位源操作數1地址rs+8位源操作數2地址rt+8位目的操作數地址rd的形式,然后對操作碼opr進行判斷,如果是表1所述的17種情況之一,則按照對應關系將操作碼轉換為具體的行為,完成對相關寄存器的賦值過程,向執行單元發送使能信號和運算類型的選擇信號,向數據存儲單元發送地址信息。由于不同類型的指令需要耗費不同的時鐘周期數,所以譯碼單元同時還會根據操作碼類型設定延時周期。
執行單元是整個協處理器的核心運算模塊,完成SM2算法中的底層計算任務,即素域上的大數模運算和移位運算,其硬件架構如圖3所示。
在圖3中,執行單元以256位無符號整數a、b為輸入,執行以p和n為模數的模加減、模乘和模逆的運算,以及對a的移位運算。模逆單元實現的是二進制擴展Euclidean算法,其中需要用到模加減和移位操作,為了節省硬件資源,直接將執行上層指令的模加減和移位單元加入模逆單元中,通過控制命令來選擇執行的運算類型,如果是模逆運算,則在模逆控制器的控制下完成計算任務,大約耗時1 300個時鐘周期;如果是模加減或移位運算,則直接將數據輸入模加/減或移位單元,只需1個時鐘周期即可完成計算。

圖3 執行單元硬件架構Fig.3 Hardware architecture of execute unit
相比于普通模乘,Montgomery模乘因避免了取模過程當中的除法操作而更加高效,因此執行單元采用了實現Montgomery模乘算法的模乘單元。在可并行的高階Montgomery模乘算法[12](算法2)實現方案的基礎上,本文增加了對模數p和n的選擇,以及針對“Montgomery友好”[13]的模數p作了優化,進一步提高了計算速度。另外,硬件實現過程中的最后一步約減操作具有固定時長的特點,避免了算法最后一步的條件約減可能存在側信道信息泄露的風險。
模乘單元包含模乘控制器、乘加模塊、寄存器堆和減法器四個主要部分,其硬件架構如圖4所示。其中模乘控制器通過狀態轉換的方式控制算法的執行順序,在接收到外部傳來的start信號之后,其狀態由空閑轉為開始運行,之后每個時鐘周期狀態轉換一次,同時向乘加模塊和寄存器堆發送當前狀態下的執行命令;乘加模塊包含兩個并行執行(c,z)=a+xy+b的乘加器,不同狀態下會有不同的數據給到輸入端口a、x、y、b,當狀態對應于算法2中的第5步和第6步,第8步和第9步,以及第12步與下次循環中的第3步時,兩個乘加器同時工作,經過一個時鐘周期得到計算結果;寄存器堆存放計算過程中產生的中間結果,并根據當前狀態將相應的值傳入乘加模塊,當算法2中的外層循環部分執行結束后,將所得結果傳給減法器;減法器執行最后一步減法運算,根據減法是否產生借位決定最終的輸出結果。模乘單元可以根據輸入的sel信號選擇模數為p還是n,對應的w會通過預計算得到,寫入乘加模塊中。因為p是“Montgomery友好”模數,通過p計算得到的w值為1,所以當模數為p時可以省略算法2中的第4步運算,得到更快的計算速度。

圖4 模乘單元硬件架構Fig.4 Hardware architecture of modular multiplication unit
算法2可并行的高階Montgomery模乘算法
輸入:A,B,P,w,wherew=-P-1modr,r=2n
輸出:Z=A×B×R-1modP,whereR=rm

模乘單元計算一次Montgomery模乘所耗費的周期數與算法2中m的取值有關,m取值越大周期數越少,但同時會導致乘加模塊的計算延時增加,降低時鐘頻率,所以需要平衡時鐘頻率和周期數之間的關系。通過實驗發現,對256位Montgomery模乘,當m=4時可以在計算速度上達到最優,此時n=64,即乘加模塊的輸入輸出數據為64位。如果算法2中的每一步運算耗時一個時鐘周期,那么對模數n的Montgomery模乘需耗時26個時鐘周期,而對模數p的Montgomery模乘需耗時22個時鐘周期。為了盡可能降低關鍵路徑上乘加模塊的計算延時,以提高整體時鐘頻率,本文對其中包含的乘加器作了優化設計,如圖5所示。
乘加器包含16個16×16的乘法計算單元和8個不同位數的加法計算單元,計算(c,z)=a+xy+b的過程分為四級:第一級是將輸入的64位乘數x、y以16位為單位從高到低分解成{x3,x2,x1,x0}和{y3,y2,y1,y0},然后按照圖5所示的傳輸路徑同時給到16個乘法計算單元實現兩兩互乘,得到16個32位部分積,與此同時,右上方的64位加法計算單元完成了a+b的計算;第二級是將16個部分積在移位、合并之后進行兩兩相加,移位操作按照部分積乘數的位置,如x0y1需左移16位,移位之后相差32位的數據可以直接合并,如左移16位的x0y1和左移48位的x0y3,再使用四個加法計算單元將合并之后的數據相加,包括a+b的和;第三級是將第二級得到的四個結果再進行兩兩相加;第四級執行最后一步加法運算,輸出128位計算結果{c,z}。整個計算過程在一個時鐘周期內完成,最長延時路徑包括1個乘法計算單元和3個加法計算單元,在FPGA上此路徑延時小于10 ns,有效地提高了乘法器的最高工作頻率。

圖5 乘加器硬件架構Fig.5 Hardware architecture of multiply-add unit
類似于通用處理器的指令處理方式,SM2專用指令協處理器同樣采用了流水線技術,將指令的處理過程分為取指、譯碼、執行、寫回四級流水,譯碼階段同時包含了取操作數,流水線結構如圖6所示。

圖6 指令流水線結構Fig.6 Pipeline architecture of instructions
為了使SM2協處理器的各功能單元能夠按照圖6所示的流水方式運行,需要合理安排時序。在指令流水中,取指、譯碼和寫回都只需要一個時鐘周期,而執行階段所需耗費的時鐘周期數取決于指令類型,所以在譯碼階段需要給出指令的延時周期數。另外還需設置一個延時計數器來記錄運行周期,在每條指令的執行階段開始時刻將其置零,然后每個時鐘周期加1。由計數器的值與當前指令的延時周期數的關系可以確定后續指令的譯碼、取指時刻以及當前指令的寫回和下條指令的執行時刻。需要注意的是,由于相鄰指令之間往往具有數據相關性,而下條指令的執行與當前指令的寫回是發生在同一時刻的,這就要求數據存儲單元能夠及時為下條指令提供更新后的操作數,實現方法是當讀寫地址相同且寫使能的情況下,數據存儲單元直接提供即將寫入的數據作為輸出,并在下個周期將數據寫入。由此,SM2協處理器實現了具有流水線結構的指令處理過程。
本文采用硬件描述語言Verilog實現了所設計的SM2專用指令協處理器,在Xilinx ZYNQ-7 ZC706評估板上運行,驗證了功能的正確性。在性能方面,協處理器的最高時鐘頻率為110 MHz,可以在2 480 210個時鐘周期內完成一次SM2中的標量乘運算,時間約為2.25 ms,在此基礎上執行不包含輔助函數的加密、解密、簽名、驗簽算法所需耗費的時間分別為4.53 ms、2.27 ms、2.28 ms、4.51 ms。在資源使用方面,協處理器共占用7 146個Slice,其中LUT的使用量為14 658個,Register的使用量為17 420個,另外執行單元還占用了32個DSP資源。安全性方面,協處理器執行常時的MPL算法(算法1)實現標量乘運算,內部的執行單元能夠在固定時鐘周期數內完成底層運算,因而可以抵御簡單功耗攻擊。作為對比,如果使用最簡單的二進制展開算法實現標量乘,則所需耗費的時間會減少為1.79 ms,資源使用量基本相同,但其功耗曲線會泄露標量值信息,不具備抵御側信道攻擊的安全性。與同樣基于FPGA實現256位素域上橢圓曲線標量乘的硬件協處理器對比情況如表2所示。
從表2中與相關工作的對比可以發現,本文實現的SM2硬件協處理器在速度和面積上均達到了不錯的效果。相比于較早的工作,如文獻[14]和文獻[15],本文的設計在速度和面積上均有優勢,盡管使用了更先進的FPGA平臺,但這種優勢依然可以從設計方法中體現出來,其采用的乘完之后再約減的方法使模乘單元的數據通路中包含512位的數據,這樣的數據位寬限制了其頻率的提高,另外有限狀態機(FSM)的使用也增加了控制邏輯所占用的資源。文獻[3]提出的設計可以占用較少的資源,達到較高的頻率,但在計算耗時上較本文稍差,說明本文提出的設計可以在較低功耗的條件下實現比其更快的計算速度。文獻[4]實現了高性能低功耗的標量乘計算,其加速方法主要來自于針對SM2素數域GF(p)的快速約減,但沒有考慮SM2協議層上除標量乘之外的其他運算,而本文的協處理器同時考慮了GF(p)和GF(n)上的模運算,更適用于協議層的實現。需要說明的是,本文提出的協處理器所占用的資源中,有很大一部分是用于標量乘之外的其他運算,如簽名算法的指令和數據的存儲需要使用額外的Slice,如果與其他文獻一樣只考慮標量乘運算所需的資源,則Slice的使用量將會減少20%左右。

表2 相關工作對比Table 2 Comparison between related works
本文提出一種具有SM2專用指令的硬件協處理器,可以通過類似通用處理器的工作方式執行專用指令序列,從而實現了SM2簽名、驗簽、加密、解密中除輔助函數之外的所有運算。其中,適用于SM2算法的專用指令集、高效的執行單元和四級流水線結構是所提出的SM2硬件協處理器的主要特點。與通過有限狀態機控制算法流程的實現方法相比,設計專用指令可以結合軟硬件實現各自的優勢,更加靈活高效地利用資源,達到軟硬件協同優化的效果。執行單元的設計采用可并行的高階Montgomery模乘算法,減少執行模乘運算所需的時鐘周期,同時對關鍵路徑上的核心計算單元進行了優化,提高了工作頻率。流水線結構將指令的實現過程分為取指、譯碼、執行和寫回四個階段,通過四級流水使協處理器的工作更加高效。
實驗結果表明,本文所提出的協處理器可以以較快的速度實現安全的橢圓曲線標量乘算法,同時占用較少的硬件資源。與之前的工作相比,本文同時考慮了標量乘算法和SM2協議層的其他運算,更加適用于完整協議的實現。另外,通過修改指令序列,本文提出的協處理器可以實現更加安全或快速的標量乘算法,也能夠很容易地修改為支持基于ECC的其他公鑰密碼協議,具有軟件實現的靈活性優勢。