TWI843313B - 模乘器、安全晶片、電子設備及加密方法 - Google Patents

模乘器、安全晶片、電子設備及加密方法 Download PDF

Info

Publication number
TWI843313B
TWI843313B TW111146219A TW111146219A TWI843313B TW I843313 B TWI843313 B TW I843313B TW 111146219 A TW111146219 A TW 111146219A TW 111146219 A TW111146219 A TW 111146219A TW I843313 B TWI843313 B TW I843313B
Authority
TW
Taiwan
Prior art keywords
result
modular
modulo
input
subtraction
Prior art date
Application number
TW111146219A
Other languages
English (en)
Other versions
TW202401243A (zh
Inventor
萬方成
Original Assignee
大陸商上海途擎微電子有限公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from CN202210729378.XA external-priority patent/CN115202616A/zh
Application filed by 大陸商上海途擎微電子有限公司 filed Critical 大陸商上海途擎微電子有限公司
Publication of TW202401243A publication Critical patent/TW202401243A/zh
Application granted granted Critical
Publication of TWI843313B publication Critical patent/TWI843313B/zh

Links

Images

Abstract

本發明提供一種模乘器,應用於SM9,包括:相乘電路,用於對該SM9中兩個運算元執行乘積操作,以獲得該兩個運算元的乘積,其中,該乘積為二進位數字,且其位數為m,該m為2的整數倍;以及取模器,與該相乘電路連接,用於在n個時鐘週期內完成對該乘積執行n次取模操作,從而得到最終模乘結果,其中,每次該取模操作在一個時鐘週期內執行,以得到一次取模結果,該n為小於m/2的正整數。本發明還提供了相應的安全晶片及加密演算法。本發明的上述方案,避免使用Montgomery模乘演算法,減少不必要的反復模乘,提高SM9中整個模乘運算的速度,從而提高SM9的整體性能。

Description

模乘器、安全晶片、電子設備及加密方法
本發明的所公開實施例涉及資訊安全技術領域,且更具體而言,涉及一種模乘器、安全晶片、電子設備及加密方法。
隨著資訊技術發展,資訊加密的要求也隨之越來越高。其中,SM9(Modular multiplication Encryption algorithm,模乘加密演算法)是國家密碼管理局於2007年發佈的標識密碼演算法,相比於一般公開金鑰加密方式,SM9的公開金鑰來源於身份標識,避免了複雜的交換過程,提高了無線網路輸送量,因此,目前SM9廣泛應用各種設備中,需求越來越大。
SM9基於擴域上的橢圓曲線運算,核心演算法為雙線性對的計算,主要包括基域、二次擴域、四次擴域和十二次擴域上的模加、模乘和模逆運算模組,基域和二次擴域上的點加和多倍點運算模組,Miller演算法模組,十二次擴域上的模冪模組和最終模冪模組,其中,模乘運算為最基礎的運算,其計算頻率非常高,因此,模乘運算的速度對SM9整體的性能至關重要。
目前,模乘運算的實現有如下幾種方式:
方式1):反復用兩個乘數的乘積減去模數,直到得到的差小於模數,但這種方式僅適用於加密演算法中運算元位元數較少 的情況,而對於諸如SM9中運算元位元數較大的情況,使用這種方式來計算模乘會浪費較多的時鐘週期,嚴重影響演算法的性能。
方式2):直接利用兩個乘數的乘積除以模數,並取餘數作為結果,應用於加密演算法中,即先將兩個運算元相乘,然後直接用乘積除以模數取餘。然而,這種方式中,由於除法器綜合後的電路往往過於複雜,且運算時間較長,硬體電路中往往用移位元的方式代替除操作。
方式3):採用double-add演算法,將乘轉化為模加操作。這樣,每次計算1比特,然而,在加密演算法中,模數的位數過多時,採用這種方式過於耗時,從而影響演算法性能。
方式4):採用Montgomery模乘,無需採用除法即可計算模乘。具體過程為:先進行一次蒙哥馬利模乘,以完成進入蒙哥馬利域,然後,在蒙哥馬利域中進行蒙哥馬利模乘,以得到結果,最後,再進行一次蒙哥馬利模乘,以退出蒙哥馬利域。這種方式是目前加密演算法中常用的計算模乘的方法,適合於運算元位數高達2048比特的RSA演算法,或者需進行反復模乘的模冪運算。但對於SM9中的256比特的模乘運算來說,由於每計算一次模乘至少需要經歷三次蒙哥馬利模乘,消耗的時鐘週期過多,從而降低了SM9的性能。
根據本發明的實施例,本發明提出一種模乘器、安全晶片、電子設備及加密方法。
根據本發明的第一方面,公開一種實例性的模乘器,應用於SM9,包括:相乘電路,用於對該SM9中兩個運算元執行乘積操作,以獲得該兩個運算元的乘積,其中,該乘積為二進位數字,且其位數為m,該m為2的整數倍;以及取模器,與該相乘電路連接,用於在n個時鐘週期內完成對該乘積執行n次取模操作,從而得到最終模 乘結果,其中,每次該取模操作在一個時鐘週期內執行,以得到一次取模結果,該n為小於m/2的正整數。
根據本發明的第二方面,公開一種實例性的一種安全晶片,包括如上述第一方面該的模乘器。
根據本發明的第三方面,公開一種實例性的一種電子設備,包括如上述第二方面該的安全晶片。
根據本發明的第四方面,公開一種實例性的一種加密方法,應用於SM9,包括:對該SM9中的兩個運算元執行模乘操作,以得到模乘結果,從而實現加密,其中,該模乘操作由如上述第一方面該的的模乘器實現。
本發明的有益效果有:通過相乘電路對SM9中兩個運算元執行乘積操作,以獲得兩個運算元的乘積,取模器在n個時鐘週期內完成對乘積執行n次取模操作,從而得到最終模乘結果,其中,每次取模操作在一個時鐘週期內執行,以得到一次取模結果,n為小於m/2的正整數,避免使用Montgomery模乘演算法,減少不必要的反復模乘,提高SM9中整個模乘運算的速度,從而提高SM9的整體性能。
在閱讀以下對各圖及圖式中所例示的優選實施例的詳細說明之後,本發明的這些及其它目標無疑將對所屬領域的通常知識者顯而易見。
100,410:模乘器
110:相乘電路
120:取模器
121:狀態機
122:取模電路
400:安全晶片
500:電子設備
510:安全晶片
圖1是例示本發明一實施例的模乘器的結構示意圖。
圖2是例示本發明另一實施例的模乘器的結構示意圖。
圖3是例示本發明實施例的狀態機的狀態轉移圖。
圖4是例示本發明一實施例的安全晶片的結構示意圖。
圖5是例示本發明一實施例的電子設備的結構示意圖。
為使本領域的通常知識者更好地理解本發明的技術方案,下面結合圖式和具體實施方式對本發明的技術方案做進一步詳細描述。
如圖1所示,是本發明一實施例的模乘器的結構示意圖。該模乘器100應用於SM9,如上述,SM9基於擴域上的橢圓曲線運算,核心演算法為雙線性對的計算,本發明對SM9的具體演算法流程或構成並不作具體限定。具體地,該模乘器100包括相乘電路110與取模器120,其中,取模器120與相乘電路110連接。
相乘電路110用於對SM9中的兩個運算元執行乘積操作,以獲得兩個運算元的乘積,其中,乘積為二進位數字,且其位數為m,m為2的整數倍。
取模器120用於在n個時鐘週期內完成對乘積執行n次取模操作,從而得到最終模乘結果,其中,每次取模操作在一個時鐘週期內執行,以得到一次取模結果,n為小於m/2的正整數。
相乘電路110採用Booth演算法來執行乘積操作,SM9中的兩個運算元為二進位數字,相應地,執行乘積操作所得到的乘積也以二進位數字表示。例如,假設SM9中的兩個運算元分別為a_mul、b_mul,均是256比特,也即a_mul與b_mul的位數為256,可以表示為a_mul[255:0]和b_mul[255:0]。採用Booth演算法執行乘積操作後,這兩個運算元a_mul與b_mul的乘積標記為ab_product,其位元數m為512,可以表示為ab_product[511:0]。
取模器120在n個時鐘週期內完成對乘積ab_product執行n次取模操作,一個時鐘週期內執行一次取模操作,從而得到最終取模結果。n為小於m/2的正整數,在上述m為512的情況下,n為小於256(即512/2)的正整數,例如,n可以為64、32等,即,取模器120 可以在64或32個時鐘週期內,執行64或32次取模操作,以完成對乘積ab_product的取模,得到最終取模結果。
本實施例中,通過相乘電路對SM9中兩個運算元執行乘積操作,以獲得兩個運算元的乘積,取模器在n個時鐘週期內完成對乘積執行n次取模操作,從而得到最終模乘結果,其中,每次取模操作在一個時鐘週期內執行,以得到一次取模結果,n為小於m/2的正整數,避免使用Montgomery模乘演算法,減少不必要的反復模乘,提高SM9中整個模乘運算的速度,從而提高SM9的整體性能。
在一些實施例中,兩個運算元的乘積被順序劃分成一個第一部分和n-1個第二部分,其中,第一部分位於n-1個第二部分之前,且第一部分的位元數等於一個第二部分的位元數與一次取模結果的位數之和。
此時,取模器120分別對第一部分和n-1個第二部分進行取模。
第一部分位於n-1個第二部分之前,表示第一部分為乘積的前面高位部分的二進位數字,n-1個第二部分分別為乘積的後面低位元部分的二進位數字,即乘積是從高到低被劃分的。
並且,第一部分的位元數等於一個第二部分的位元數與一次取模結果的位數之和,當一次取模結果的位數已知時,則第一部分和n-1個第二部分被確定。
繼續以上述SM9中的兩個運算元a_mul與b_mul為例進行說明,乘積ab_product被順序劃分成一個第一部分和n-1個第二部分,例如,從高到低,對乘積ab_product進行劃分,得到一個第一部分和n-1個第二部分。
例如,當n為64,即乘積ab_product被順序劃分成一個第一部分和63個第二部分,且一次取模結果的位數為256時,第一部 分的位數為260,每個第二部分的位元數為4,即第一部分表示為ab_product[511:252],63個第二部分依次為ab_product[253:250],ab_product[249:246]...ab_product[3:0]。
又例如,當n為32,即乘積ab_product被順序劃分成一個第一部分和31個第二部分,且一次取模結果的位數為256時,第一部分的位數為264,每個第二部分的位元數為8,即第一部分表示為ab_product[511:248],31個第二部分依次為ab_product[247:240],ab_product[239:232]...ab_product[7:0]。
進一步地,在一些示例中,取模器分別對第一部分和n-1個第二部分進行取模,包括:在n個時鐘週期中第一個時鐘週期內對第一部分執行一次取模操作;在n個時鐘週期中剩餘n-1個時鐘週期內,順序對上一個時鐘週期內所得到的取模結果和相鄰的第二部分的結合執行一次取模操作,從而執行n-1次取模操作。
在n個時鐘週期中第一個時鐘週期內,對第一部分執行一次取模操作,得到第一次取模結果。隨後,下一個時鐘週期,即n個時鐘週期中第二個時鐘週期內,將第一個第二部分與第一次取模結果進行結合,並對結合後的第一個第二部分與第一次取模結果執行一次取模操作。隨後,下一個時鐘週期,即n個時鐘週期中第三個時鐘週期內,將第二個第二部分與第二次取模結果進行結合,並對結合後的第二個第二部分與第二次取模結果執行一次取模操作。以此類推,在n個時鐘週期中第n個時鐘週期內,將第n-1個第二部分與第n-1次取模結果進行結合,並對結合後的第n-1個第二部分與第n-1次取模結果執行一次取模操作。
進一步地,在一些實施例中,在n個時鐘週期中第一個時鐘週期內對第一部分執行一次取模操作,包括:在第一個時鐘週期內, 將第一部分傳輸至取模器120,以自取模器120獲得並寄存第一次取模結果。
在n個時鐘週期中剩餘n-1個時鐘週期內,順序對上一個時鐘週期內所得到的取模結果和相鄰的第二部分的結合執行一次取模操作,包括:在n個時鐘週期中剩餘的每個時鐘週期內,將上一個時鐘週期內所得到的取模結果與相鄰的第二部分拼接並傳輸至取模器,以自取模器120獲得並寄存本次取模結果,其中,最後一次取模結果為最終模乘結果。
第一個第二部分與第一次取模結果拼接,第一次取模結果位於第一個第二部分之前,從而,得到拼接數,其具有與第一部分相同的位數。同樣地,每個第二部分與前一次取模結果拼接,前一次取模結果位於第二部分之前,從而,得到相應的拼接數,其具有與第一部分相同的位數。
在n個時鐘週期中第一個時鐘週期內,將第一部分傳輸至取模器120,以自取模器120獲得並寄存第一次取模結果。隨後,下一個時鐘週期,即n個時鐘週期中第二個時鐘週期內,將第一個第二部分與第一次取模結果拼接並傳輸至取模器120,以自取模器120獲得並寄存第二次取模結果。隨後,下一個時鐘週期,即n個時鐘週期中第三個時鐘週期內,將第二個第二部分與第二次取模結果拼接並傳輸至取模器120,以自取模器120獲得並寄存第三次取模結果。以此類推,在n個時鐘週期中第n個時鐘週期內,將第n-1個第二部分與第n-1次取模結果拼接並傳輸至取模器120,以自取模器120獲得並寄存第n次取模結果,即最終模乘結果。
繼續以上述SM9中的兩個運算元a_mul與b_mul為例進行說明,在n為64的示例中,在64個時鐘週期中第一個時鐘週期內對第一部分ab_product[511:252]進行取模,獲得並寄存第一次取模結 果。隨後,下一個時鐘週期,即在64個時鐘週期中第二個時鐘週期,對第二部分ab_product[253:250]與第一次取模結果拼接並進行取模,獲得並寄存第二次取模結果。隨後,下一個時鐘週期,即64個時鐘週期中第三個時鐘週期,對第二部分ab_product[249:246]與第二次取模結果拼接並進行取模,獲得並寄存第三次取模結果。依次類推,直到64個時鐘週期中第64個時鐘週期內,對第二部分ab_product[3:0]與第63次取模結果拼接並進行取模,獲得並寄存第64次取模結果。這樣,第64次取模結果即為最終模乘結果。
在n為32的示例中,在32個時鐘週期中第一個時鐘週期內對第一部分ab_product[511:248]進行取模,獲得並寄存第一次取模結果。隨後,下一個時鐘週期,即在32個時鐘週期中第二個時鐘週期,對第二部分ab_product[247:240]與第一次取模結果拼接並進行取模,獲得並寄存第二次取模結果。隨後,下一個時鐘週期,即32個時鐘週期中第三個時鐘週期內,對第二部分ab_product[239:232]與第二次取模結果拼接並進行取模,獲得並寄存第三次取模結果。依次類推,直到32個時鐘週期中第32個時鐘週期內,對第二部分ab_product[7:0]與第31次取模結果拼接並進行取模。這樣,第32次取模結果即為最終模乘結果。
如圖2所示,是本發明另一實施例的模乘器的結構示意圖。在上述實施例的基礎上,取模器120包括狀態機121和取模電路122,取模電路122與狀態機121連接,狀態機121用於指示取模電路122在n個時鐘週期內完成對乘積執行n次取模操作,取模電路122用於在n個時鐘週期中每個時鐘週期內執行一次取模操作,以得到一次取模結果。
繼續以上述SM9中的兩個運算元a_mul與b_mul為例進行說明,狀態機121控制取模電路122在n個時鐘週期內完成對乘 積ab_product執行n次取模操作,例如,在64個時鐘週期內,執行64次取模操作,完成對乘積ab_product的取模,取模電路122在一個時鐘週期內執行一次取模操作,以得到一次取模結果。
如圖3所示,為本發明實施例的狀態機的狀態轉移圖。狀態機121用於指示取模電路122在n個時鐘週期內完成對乘積執行n次取模操作,具體地,狀態機121包括第一狀態、第二狀態和第三狀態。
第一狀態用於指示取模電路122在n個時鐘週期中第一個時鐘週期內對第一部分執行一次取模操作。
第二狀態用於指示取模電路122在n個時鐘週期中剩餘n-1個時鐘週期內順序對上一個時鐘週期的取模結果和相鄰的n-1個第二部分執行一次取模操作。
第三狀態用於指示控制取模電路122處於空閒狀態,以等待開始執行n次取模操作,或者結束執行n次取模操作。
狀態機121檢測到起始信號時,進入第一狀態。
當狀態機121處於第一狀態時,其指示取模電路122在n個時鐘週期中第一個時鐘週期內對第一部分執行一次取模操作。隨後,下一個時鐘週期,即n個時鐘週期中第二個時鐘週期內,狀態機121處於第二狀態,其指示取模電路122在該第二個時鐘週期內對第一個時鐘週期內的取模結果結合第一個第二部分執行一次取模操作。隨後,下一個時鐘週期,即n個時鐘週期中第三個時鐘週期內,狀態機121仍處於第二狀態,其指示取模電路122在該第三個時鐘週期內對第二個時鐘週期的取模結果結合第二個第二部分執行一次取模操作,依次類推,直到n個時鐘週期中第n個時鐘週期內,狀態機121處於第二狀態,其指示取模電路122在該第n個時鐘週期內對第n-2個時鐘週期的取模結果結合第n-1個第二部分執行一次取模操作。這樣,狀態機 121處於第二狀態,指示取模電路122在剩餘n-1個時鐘週期內順序對n-1個第二部分執行n-1一次取模操作。
當狀態機121重定時,狀態機121進入第三狀態,指示取模電路122處於空閒狀態,以等待開始執行n次取模操作,或者結束執行n次取模操作,例如,等待開始執行64次取模操作。
需要說明的是,第一個時鐘週期內所取模的結果結合第一個第二部分、對第二個時鐘週期的取模結果結合第二個第二部分等,詳見上述實施例的說明,在此不再說明。
在一些實施例中,一次取模操作包括級聯的x次減法操作,其中每次減法操作中減數為SM9中的模數,x為正整數,且為取模電路122的取模輸入的位數與一次取模結果的位數的差。
一次取模操作包括級聯的x次減法操作,即將一次取模操作分解成減法操作。在硬體實現上,取模電路122可以包括減法器和多路選擇器,但本發明對取模電路122的具體結構並不進行限定,滿足一次取模操作包括級聯的x次減法操作即可。
繼續以上述SM9中的兩個運算元a_mul與b_mul為例進行說明,在n為64的示例中,輸入到取模電路122的是乘積ab_product的第一部分ab_product[511:252]、拼接後的第一次取模結果與乘積ab_product的第二部分ab_product[253:250]、拼接後的第二次取模結果與乘積ab_product的第二部分ab_product[249:246]...拼接後的第n-1次取模結果與乘積ab_product的第二部分ab_product[3:0],即取模電路122的取模輸入的位數為260,且一次取模結果的位數為256,此時,x為4,表示一次取模操作包括級聯的4次減法操作。可以看出,x為4,也是第二部分的位元數或比特數。也就是說,x也為每個第二部分的位元數或比特數,例如第二部分ab_product[253:250]。
在n為32的示例中,輸入到取模電路122的是乘積ab_product的第一部分ab_product[511:248]、拼接後的第一次取模結果與乘積ab_product的第二部分ab_product[247:240]、拼接後的第二次取模結果與乘積ab_product的第二部分ab_product[239:232]...拼接後的第n-1次取模結果與乘積ab_product的第二部分ab_product[7:0],即取模電路122的取模輸入的位數為264,且一次取模結果的位數為256,此時,x為8,表示一次取模操作包括級聯的8次減法操作。可以看出,x為8,也是第二部分的位元數或比特數。也就是說,x也為每個第二部分的位元數或比特數,例如第二部分ab_product[247:240]。
在一些實施例中,取模輸入被順序拆分成一個第一輸入部分和x-1個第二輸入部分,其中,第一輸入部分位於x-1個第二輸入部分之前,且第一輸入部分的位元數等於一個第二輸入部分的位元數與一次取模結果的位數之和。
第一輸入部分位於x-1個第二部分之前,表示第一輸入部分為取模輸入的高位部分位元數的二進位數字,x-1個第二輸入部分分別為取模輸入的低位元部分位元數的二進位數字,即取模輸入是從高到低被劃分的。
並且,第一輸入部分的位元數等於一個第二輸入部分的位元數與一次取模結果的位數之和,當一次取模結果的位數已知時,則第一輸入部分和x-1個第二輸入部分被確定。
繼續以上述SM9中的兩個運算元a_mul與b_mul為例進行說明,假設取模電路122的取模輸入為mod_input,下面對不同取模輸入的一次取模操作進行描述。
在n為64的示例中,取模輸入mod_input的位數為260,也即取模輸入mod_input為260比特,一次取模操作包括級聯的4次減法操作。取模輸入mod_input被順序拆分成一個第一輸入部分和3個 第二輸入部分,其中一次取模結果的位數為256,則第一輸入部分的位元數為257,每個第二輸入部分的位元數為1,即第一輸入部分表示為mod_input[259:3],3個第二輸入部分依次為mod_input[2]、mod_input[1]和mod_input[0]。
在n為32的示例中,取模輸入mod_input的位數為264,也即取模輸入mod_input為264比特,一次取模操作包括級聯的8次減法操作。取模輸入mod_input被順序拆分成一個第一輸入部分和7個第二輸入部分,其中一次取模結果的位數為256,則第一輸入部分的位元數為257,每個第二輸入部分的位元數為1,即第一輸入部分表示為mod_input[263:7],7個第二輸入部分依次為mod_input[6]、mod_input[5]、mod_input[4]、mod_input[3]、mod_input[2]、mod_input[1]和mod_input[0]。
此時,執行一次取模操作包括:將第一輸入部分作為第一被減數,並對第一被減數執行一次減法操作,得到第一個結果;將前一個結果與相鄰的第二輸入部分拼接,以得到相應的第x被減數,並對相應的第x被減數執行一次減法操作,得到相應的第x個結果,其中,最後一個結果為取模結果。
繼續以上述取模電路122的取模輸入為mod_input為例進行說明,在n為64的示例中,執行一次取模操作,首先,將第一輸入部分mod_input[259:3]作為第一被減數,並對第一被減數執行一次減法操作,得到第一個結果。隨後,將第二輸入部分mod_input[2](即第一個第二輸入部分)與第一個結果拼接,以得到第二被減數,並對第二被減數執行一次減法操作,得到第二個結果。隨後,將第二輸入部分mod_input[1](即第二個第二輸入部分)與第二個結果拼接,以得到第三被減數,並對第三被減數執行一次減法操作,得到第三個結果。最後,將第二輸入部分mod_input[0](即第三個第二輸入部分)與第三個結果 拼接,以得到第四被減數,並對第四被減數執行一次減法操作,得到第四個結果,即為一次取模結果,自取模電路122中輸出。
在n為32的示例中,執行一次取模操作,首先,將第一輸入部分mod_input[263:7]作為第一被減數,並對第一被減數執行一次減法操作,得到第一個結果。隨後,將第二輸入部分mod_input[6](即第一個第二輸入部分)與第一個結果拼接,以得到第二被減數,並對第二被減數執行一次減法操作,得到第二個結果。隨後,將第二輸入部分mod_input[5](即第二個第二輸入部分)與第二個結果拼接,以得到第三被減數,並對第三被減數執行一次減法操作,得到第三個結果。隨後,將第二輸入部分mod_input[4](即第三個第二輸入部分)與第三個結果拼接,以得到第四被減數,並對第四被減數執行一次減法操作,得到第四個結果。依次類推,最後,將第二輸入部分mod_input[0](即第七個第二輸入部分)與第七個結果拼接,以得到第八被減數,並對第八被減數執行一次減法操作,得到第八個結果,即為一次取模結果,自取模電路122中輸出。
進一步地,在一些實施例中,對第一被減數執行一次減法操作,得到第一個結果,包括:將第一被減數減去模數,得到第一減結果;其中,當第一減結果為正時,第一個結果為第一減結果;當第一減結果為負時,第一個結果為第一被減數,也即第一輸入部分。
第二被減數為拼接的第一結果的後預設位與第一個第二輸入部分,其中,第一個第二輸入部分位於第一個結果的後預設位之後。
對第二被減數執行一次減法操作,得到第二個結果,包括:將第二被減數減去模數,得到第二減結果;其中,當第二減結果為正時,第二個結果為第二減結果;當第二減結果為負時,第二個結果為第二被減數。
第x被減數為拼接的上一個結果的後預設位與相鄰的第二輸入部分,其中,相鄰的第二輸入部分位於上一個結果的後預設位之後。
對第x被減數執行一次減法操作,得到相應的第x個結果,包括:將第x被減數減去模數,得到相應的第x減結果;其中,當相應的第x減結果為正時,相應的第x個結果為相應的第x減結果;當相應的第x減結果為負時,相應的第x個結果為第x被減數。
繼續以上述取模電路122的取模輸入為mod_input為例,以說明上述不同被減數的一次減法操作,其中,假設SM9中的模數為Q。
在n為64的示例中,首先,第一被減數mod_input[259:3]減去模數Q,得到第一減結果sub1,當第一減結果sub1的最高位為0時,表示第一減結果sub1為正,此時,第一個結果step1_sel為第一減結果sub1;當第一減結果sub1的最高位為1時,表示第一減結果sub1為負,此時,第一個結果step1_sel為第一被減數mod_input[259:3]。
隨後,將第一個結果step1_sel的後預設位,例如,第一個結果step1_sel的後256位,即step1_sel[255:0],與第二輸入部分mod_input[2](即第一個第二輸入部分)進行拼接,得到第二被減數(即step1_sel[255:0]與mod_input[2]),將第二被減數減去模數Q,得到第二減結果sub2,當第二減結果sub2的最高位為0時,表示第二減結果sub2為正,此時,第二個結果step2_sel為第二減結果sub2;當第二減結果sub2的最高位為1時,表示第二減結果sub2為負,此時,第二個結果step2_sel為第二被減數,即step1_sel[255:0]與mod_input[2]。
隨後,將第二個結果step2_sel的後預設位,例如,第二個結果step2_sel的後256位,即step2_sel[255:0],與第二輸入部分mod_input[1](即第二個第二輸入部分)進行拼接,得到第三被減數(即 step2_sel[255:0]與mod_input[1]),將第三被減數減去模數Q,得到第三減結果sub3,當第三減結果sub3的最高位為0時,表示第三減結果sub3為正,此時,第三個結果step3_sel為第三減結果sub3;當第三減結果sub3的最高位為1時,表示第三減結果sub3為負,此時,第三個結果step3_sel為第三被減數,即step2_sel[255:0]與mod_input[1]。
最後,將第三個結果step3_sel的後預設位,例如,第三個結果step3_sel的後256位,即step3_sel[255:0],與第二輸入部分mod_input[0](即第三個第二輸入部分)進行拼接,得到第四被減數(即step3_sel[255:0]與mod_input[0]),將第四被減數減去模數Q,得到第四減結果sub4,當第四減結果sub4的最高位為0時,表示第四減結果sub4為正,此時,第四個結果step4_sel為第四減結果sub4;當第四減結果sub4的最高位為1時,表示第四減結果sub4為負,此時,第四個結果step4_sel為第四被減數,即step3_sel[255:0]與mod_input[0]。這樣,第四個結果step4_sel即為一次取模結果,自取模電路122中輸出。
在n為32的示例中,首先,第一被減數mod_input[263:7]減去模數Q,得到第一減結果sub1,當第一減結果sub1的最高位為0時,表示第一減結果sub1為正,此時,第一個結果step1_sel為第一減結果sub1;當第一減結果sub1的最高位為1時,表示第一減結果sub1為負,此時,第一個結果step1_sel為第一被減數mod_input[263:7]。
隨後,將第一個結果step1_sel的後預設位,例如,第一個結果step1_sel的後256位,即step1_sel[255:0],與第二輸入部分mod_input[6](即第一個第二輸入部分)進行拼接,得到第二被減數(即step1_sel[255:0]與mod_input[6]),將第二被減數減去模數Q,得到第二減結果sub2,當第二減結果sub2的最高位為0時,表示第二減結果sub2為正,此時,第二個結果step2_sel為第二減結果sub2;當第二減 結果sub2的最高位為1時,表示第二減結果sub2為負,此時,第二個結果step2_sel為第二被減數,即step1_sel[255:0]與mod_input[6]。
隨後,將第二個結果step2_sel的後預設位,例如,第二個結果step2_sel的後256位,即step2_sel[255:0],與第二輸入部分mod_input[5](即第二個第二輸入部分)進行拼接,得到第三被減數(即step2_sel[255:0]與mod_input[5]),將第三被減數減去模數Q,得到第三減結果sub3,當第三減結果sub3的最高位為0時,表示第三減結果sub3為正,此時,第三個結果step3_sel為第三減結果sub3;當第三減結果sub3的最高位為1時,表示第三減結果sub3為負,此時,第三個結果step3_sel為第三被減數,即step2_sel[255:0]與mod_input[5]。
依次類推,最後,將第七個結果step7_sel的後預設位,例如,第七個結果step7_sel的後256位,即step7_sel[255:0],與第二輸入部分mod_input[0](即第七個第二輸入部分)進行拼接,得到第八被減數(即step7_sel[255:0]與mod_input[0]),將第八被減數減去模數Q,得到第八減結果sub8,當第八減結果sub8的最高位為0時,表示第八減結果sub8為正,此時,第八個結果step8_sel為第八減結果sub8;當第八減結果sub8的最高位為1時,表示第八減結果sub8為負,此時,第八個結果step8_sel為第八被減數,即step7_sel[255:0]與mod_input[0]。這樣,第八個結果step8_sel即為一次取模結果,自取模電路122中輸出。
本發明還提供一種安全晶片。如圖4所示,為本發明一實施例的安全晶片的結構示意圖。該安全晶片400包括模乘器410,其中,模乘器410可以為如圖1或圖2所示的模乘器100。
本發明還提供一種電子設備。如圖5所示,本發明一實施例的電子設備的結構示意圖。該電子設備500包括安全晶片510,其中安全晶片510可以為如圖4所示的安全晶片400。
本發明還提供一種加密方法。該加密方法應用於SM9,包括如下步驟:對SM9中的兩個運算元執行模乘操作,以得到模乘結果,從而實現加密,其中,模乘操作由如圖1或圖2所示的模乘器100實現。
所屬領域的通常知識者易知,可在保持本發明的教示內容的同時對裝置及方法作出諸多修改及變動。因此,以上公開內容應被視為僅受隨附申請專利範圍的範圍的限制。
100:模乘器
110:相乘電路
120:取模器

Claims (10)

  1. 一種模乘器,應用於SM9,包括:相乘電路,用於對該SM9中兩個運算元執行乘積操作,以獲得該兩個運算元的乘積,其中,該乘積為二進位數字,且其位數為m,該m為2的整數倍;以及取模器,與該相乘電路連接,用於在n個時鐘週期內完成對該乘積執行n次取模操作,從而得到最終模乘結果,其中,每次該取模操作在一個時鐘週期內執行,以得到一次取模結果,該n為小於m/2的正整數;其中,該乘積被順序劃分成一個第一部分和n-1個第二部分,其中,該第一部分位於該n-1個第二部分之前,且該第一部分的位數等於一個該第二部分的位元數與該一次取模結果的位數之和;該取模器分別對該第一部分和該n-1個第二部分進行取模。
  2. 如請求項1所述之模乘器,其中,該取模器分別對該第一部分和該n-1個第二部分進行取模,包括:在該n個時鐘週期中第一個時鐘週期內對該第一部分執行一次取模操作;在該n個時鐘週期中剩餘n-1個時鐘週期內,順序對上一個時鐘週期內所得到的取模結果和相鄰的該第二部分的結合執行一次取模操作,從而執行n-1次取模操作。
  3. 如請求項2所述之模乘器,其中,該在該n個時鐘週期中第一個時鐘週期內對該第一部分執行一次取模操作,包括:在該第一個時鐘週期內,將該第一部分傳輸至該取模器,以自該取模器獲得並寄存第一次取模結果; 在該n個時鐘週期中剩餘n-1個時鐘週期內,順序對上一個時鐘週期內所得到的取模結果和相鄰的該第二部分的結合執行一次取模操作,包括:在該n個時鐘週期中剩餘的每個時鐘週期內,將上一個時鐘週期內所得到的取模結果與相鄰的該第二部分拼接並傳輸至該取模器,以自該取模器獲得並寄存本次取模結果,其中,最後一次取模結果為該最終模乘結果。
  4. 如請求項1所述之模乘器,其中,該取模器包括狀態機和取模電路,該取模電路與該狀態機連接,該狀態機包括第一狀態和第二狀態,其中,第一狀態,用於指示該取模電路在該n個時鐘週期中第一個時鐘週期內對該第一部分執行一次取模操作;以及第二狀態,用於指示該取模電路在該n個時鐘週期中剩餘n-1個時鐘週期內順序對該n-1個第二部分執行一次取模操作。
  5. 如請求項3所述之模乘器,其中,該一次取模操作包括級聯的x次減法操作,其中每次該減法操作中減數為該SM9中的模數,該x為正整數,且為該取模器的取模輸入的位數與該一次取模結果的位數的差。
  6. 如請求項5所述之模乘器,其中,該取模輸入被順序拆分成一個第一輸入部分和x-1個第二輸入部分,其中,該第一輸入部分位於該x-1個第二輸入部分之前,且該第一輸入部分的位元數等於一個該第二輸入部分的位元數與該一次取模結果的位數之和;以及執行該一次取模操作包括:將該第一輸入部分作為第一被減數,並對該第一被減數執行一次減法操作,得到第一個結果; 將前一個結果與相鄰的該第二輸入部分拼接,以得到相應的第x被減數,並對該相應的第x被減數執行一次減法操作,得到相應的第x個結果,其中,最後一個結果為該一次取模結果。
  7. 如請求項6所述之模乘器,其中,對該第一被減數執行一次減法操作,得到第一個結果,包括:將該第一被減數減去該模數,得到第一減結果;其中,當該第一減結果為正時,該第一個結果為該第一減結果;當該第一減結果為負時,該第一個結果為該第一被減數;該第x被減數為拼接的上一個結果的後預設位與相鄰的該第二輸入部分,其中,相鄰的該第二輸入部分位於該上一個結果的後預設位之後;該對該第x被減數執行一次減法操作,得到相應的第x個結果,包括:將該第x被減數減去該模數,得到相應的第x減結果;其中,當該相應的第x減結果為正時,該相應的第x個結果為該相應的第x減結果;當該相應的第x減結果為負時,該相應的第x個結果為該第x被減數。
  8. 一種安全晶片,包括如請求項1至7項中任一項該的模乘器。
  9. 一種電子設備,包括如請求項8中該的安全晶片。
  10. 一種加密方法,應用於SM9,包括:對該SM9中的兩個運算元執行模乘操作,以得到模乘結果,從而實現加密,其中,該模乘操作由如請求項1至7項中任一項該的模乘器實現。
TW111146219A 2022-06-24 2022-12-01 模乘器、安全晶片、電子設備及加密方法 TWI843313B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202210729378.X 2022-06-24
CN202210729378.XA CN115202616A (zh) 2022-06-24 2022-06-24 模乘器、安全芯片、电子设备及加密方法

Publications (2)

Publication Number Publication Date
TW202401243A TW202401243A (zh) 2024-01-01
TWI843313B true TWI843313B (zh) 2024-05-21

Family

ID=

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9111122B2 (en) 2007-07-02 2015-08-18 Freescale Semiconductor, Inc. Asymmetric cryptographic device with local private key generation and method therefor

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9111122B2 (en) 2007-07-02 2015-08-18 Freescale Semiconductor, Inc. Asymmetric cryptographic device with local private key generation and method therefor

Similar Documents

Publication Publication Date Title
US5742530A (en) Compact microelectronic device for performing modular multiplication and exponentiation over large numbers
JP3939658B2 (ja) モジュラー乗算を行うための装置、および、モジュラー乗算を行うための算術演算装置
Ding et al. A low-latency and low-cost Montgomery modular multiplier based on NLP multiplication
US7024560B2 (en) Power-residue calculating unit using Montgomery algorithm
WO2023246063A1 (zh) 模乘器、安全芯片、电子设备及加密方法
Tian et al. Ultra-fast modular multiplication implementation for isogeny-based post-quantum cryptography
EP1600852B1 (en) Method and apparatus for calculating a modular inverse
KR100508092B1 (ko) 저전력 모듈로 곱셈을 수행하는 연산장치
TWI843313B (zh) 模乘器、安全晶片、電子設備及加密方法
JPH05324277A (ja) 暗号通信方法
US20040091105A1 (en) Apparatus for hyperelliptic-curve cryptography processing
US7607165B2 (en) Method and apparatus for multiplication and/or modular reduction processing
Mahapatra et al. RSA cryptosystem with modified Montgomery modular multiplier
CN113467752B (zh) 用于隐私计算的除法运算装置、数据处理系统及方法
US20020172355A1 (en) High-performance booth-encoded montgomery module
CN115270155A (zh) 一种获取大数拓展最大公约数的方法及硬件架构
CN115268839A (zh) 一种以2为基的蒙哥马利模乘方法及装置
EP1455270A2 (en) Method and apparatus for basis conversion in finite field and a multiplier
JP2000207387A (ja) 演算装置及び暗号処理装置
US20020114449A1 (en) Modular multiplier and an encryption/decryption processor using the modular multiplier
Arazi et al. On calculating multiplicative inverses modulo $2^{m} $
KR100946256B1 (ko) 다정도 캐리 세이브 가산기를 이용한 듀얼필드상의확장성있는 몽고매리 곱셈기
EP1504338A1 (en) "emod" a fast modulus calculation for computer systems
JP3129525B2 (ja) 整数上の乗算回路
Dan et al. Design of highly efficient elliptic curve crypto-processor with two multiplications over GF (2163)