亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種Java卡SM2數(shù)字簽名驗(yàn)證或信息加密的方法及裝置與流程

文檔序號:12375535閱讀:319來源:國知局
一種Java卡SM2數(shù)字簽名驗(yàn)證或信息加密的方法及裝置與流程
本發(fā)明涉及Java卡
技術(shù)領(lǐng)域
,尤其涉及一種Java卡SM2數(shù)字簽名驗(yàn)證或信息加密的方法及裝置。
背景技術(shù)
:在Java卡的國密SM2數(shù)字簽名驗(yàn)證或信息加密算法中,需要用到一次對公鑰的標(biāo)量乘法。公鑰的標(biāo)量乘法,是非定點(diǎn)標(biāo)量乘法,一般采用滑動窗口計(jì)算,該算法計(jì)算量大,非常耗時(shí)。例如在SM2數(shù)字簽名驗(yàn)證過程中有一次定點(diǎn)標(biāo)量乘法和一個(gè)公鑰標(biāo)量乘法,非定點(diǎn)標(biāo)量乘法大概占用了80%的時(shí)間,在Java卡的30MHz系統(tǒng)時(shí)鐘、30MHz加解密時(shí)鐘的芯片卡上驗(yàn)簽一次大概需要65ms,不能滿足Java卡每秒驗(yàn)證數(shù)字簽名20次的要求。技術(shù)實(shí)現(xiàn)要素:本發(fā)明的主要目的在于提出一種Java卡SM2數(shù)字簽名驗(yàn)證或信息加密的方法及裝置,旨在解決現(xiàn)有技術(shù)的Java卡SM2數(shù)字簽名驗(yàn)證或信息加密耗時(shí)太長問題。為實(shí)現(xiàn)上述目的,本發(fā)明提供的一種Java卡SM2數(shù)字簽名驗(yàn)證或信息加密的方法,包括:在Java卡SM2應(yīng)用初始化設(shè)置時(shí),對SM2公鑰參數(shù)進(jìn)行標(biāo)量固定窗口寬度Comb算法的預(yù)計(jì)算,得到多個(gè)預(yù)計(jì)算數(shù)據(jù),保存所述多個(gè)預(yù)計(jì)算數(shù)據(jù);在所述Java卡進(jìn)行數(shù)字簽名驗(yàn)證或信息加密運(yùn)算時(shí),從所述多個(gè)預(yù)計(jì)算數(shù)據(jù)中讀取相應(yīng)數(shù)據(jù),完成所述標(biāo)量固定窗口寬度Comb算法運(yùn)算,實(shí)現(xiàn)所述SM2數(shù)字簽名驗(yàn)證或信息加密操作??蛇x地,其中,所述對SM2公鑰參數(shù)進(jìn)行標(biāo)量固定窗口寬度Comb算法的預(yù)計(jì)算得到多個(gè)預(yù)計(jì)算數(shù)據(jù),保存所述多個(gè)預(yù)計(jì)算數(shù)據(jù),包括:創(chuàng)建一個(gè)SM2的公鑰對象,申請保存所述多個(gè)預(yù)計(jì)算數(shù)據(jù)所需的存儲空間;設(shè)置所述公鑰對象的公鑰參數(shù);調(diào)用native函數(shù),按所述標(biāo)量固定窗口寬度進(jìn)行Comb算法的預(yù)計(jì)算,得到所述多個(gè)預(yù)計(jì)算數(shù)據(jù);將所述多個(gè)預(yù)計(jì)算數(shù)據(jù)保存到所述存儲空間??蛇x地,其中,在所述Java卡SM2應(yīng)用進(jìn)行SM2數(shù)字簽名驗(yàn)證或信息加密運(yùn)算時(shí),從所述多個(gè)預(yù)計(jì)算數(shù)據(jù)中讀取相應(yīng)數(shù)據(jù),完成所述標(biāo)量固定窗口寬度Comb算法運(yùn)算,實(shí)現(xiàn)所述SM2數(shù)字簽名驗(yàn)證或信息加密操作,包括:在所述Java卡SM2應(yīng)用進(jìn)行數(shù)字SM2簽名驗(yàn)證或信息加密運(yùn)算時(shí),從所述多個(gè)預(yù)計(jì)算數(shù)據(jù)中讀取相應(yīng)數(shù)據(jù),替換所述標(biāo)量固定窗口寬度Comb算法中SM2公鑰的標(biāo)量乘法運(yùn)算項(xiàng),完成所述標(biāo)量固定窗口寬度Comb算法運(yùn)算,實(shí)現(xiàn)所述SM2數(shù)字簽名驗(yàn)證或信息加密操作。可選地,其中,所述固定窗口寬度為w=4,所述保存預(yù)計(jì)算數(shù)據(jù)所需的存儲空間為960字節(jié);或者,所述固定窗口寬度為w=3,所述保存預(yù)計(jì)算數(shù)據(jù)所需的存儲空間為448字節(jié);或者,所述固定窗口寬度為w=2,所述保存預(yù)計(jì)算數(shù)據(jù)所需的存儲空間為192字節(jié)。本發(fā)明還提供了一種Java卡SM2數(shù)字簽名驗(yàn)證或信息加密的裝置,包括:預(yù)計(jì)算模塊,用于在Java卡SM2應(yīng)用初始化設(shè)置時(shí),對SM2公鑰參數(shù)進(jìn)行標(biāo)量固定窗口寬度Comb算法的預(yù)計(jì)算,得到多個(gè)預(yù)計(jì)算數(shù)據(jù);存儲模塊,用于保存所述多個(gè)預(yù)計(jì)算數(shù)據(jù);運(yùn)算模塊,用于在所述Java卡SM2應(yīng)用進(jìn)行SM2數(shù)字簽名驗(yàn)證或信息加密運(yùn)算時(shí),從所述多個(gè)預(yù)計(jì)算數(shù)據(jù)中讀取相應(yīng)數(shù)據(jù),完成所述標(biāo)量固定窗口寬度Comb算法運(yùn)算,實(shí)現(xiàn)所述SM2數(shù)字簽名驗(yàn)證或信息加密操作。可選地,其中,所述對SM2公鑰參數(shù)進(jìn)行標(biāo)量固定窗口寬度Comb算法的預(yù)計(jì)算得到多個(gè)預(yù)計(jì)算數(shù)據(jù),包括:創(chuàng)建一個(gè)SM2的公鑰對象,向所述存儲模塊申請保存多個(gè)預(yù)計(jì)算數(shù)據(jù)所需的存儲空間;設(shè)置所述公鑰對象的公鑰參數(shù);調(diào)用native函數(shù),按所述標(biāo)量固定窗口寬度進(jìn)行Comb算法的預(yù)計(jì)算,得到多個(gè)預(yù)計(jì)算數(shù)據(jù);所述保存所述多個(gè)預(yù)計(jì)算數(shù)據(jù),包括將所述多個(gè)預(yù)計(jì)算數(shù)據(jù)保存到所述存儲空間??蛇x地,其中,在所述Java卡SM2應(yīng)用進(jìn)行SM2數(shù)字簽名驗(yàn)證或信息加密運(yùn)算時(shí),從所述多個(gè)預(yù)計(jì)算數(shù)據(jù)中讀取相應(yīng)數(shù)據(jù),完成所述標(biāo)量固定窗口寬度Comb算法運(yùn)算,實(shí)現(xiàn)所述SM2數(shù)字簽名驗(yàn)證或信息加密操作,包括:在所述Java卡SM2應(yīng)用進(jìn)行SM2數(shù)字簽名驗(yàn)證或信息加密運(yùn)算時(shí),從所述多個(gè)預(yù)計(jì)算數(shù)據(jù)中讀取相應(yīng)數(shù)據(jù),替換所述標(biāo)量固定窗口寬度Comb算法中SM2公鑰的標(biāo)量乘法運(yùn)算項(xiàng),完成所述標(biāo)量固定窗口寬度Comb算法運(yùn)算,實(shí)現(xiàn)所述SM2數(shù)字簽名驗(yàn)證或信息加密操作??蛇x地,其中,所述固定窗口寬度為w=4,所述保存預(yù)計(jì)算數(shù)據(jù)所需的存儲空間為960字節(jié);或者,所述固定窗口寬度為w=3,所述保存預(yù)計(jì)算數(shù)據(jù)所需的存儲空間為448字節(jié);或者,所述固定窗口寬度為w=2,所述保存預(yù)計(jì)算數(shù)據(jù)所需的存儲空間為192字節(jié)。本發(fā)明還提供了一種包括上述任一項(xiàng)所述數(shù)字簽名驗(yàn)證或信息加密裝置的Java卡。本發(fā)明提供的Java卡SM2數(shù)字簽名驗(yàn)證或信息加密的方法及裝置,采用固定窗口寬度的Comb算法實(shí)現(xiàn)公鑰的標(biāo)量乘法,并將Comb算法分為兩部分執(zhí)行,其中的預(yù)計(jì)算部分在Java卡的發(fā)卡SM2應(yīng)用初始化或升級操作過程的SM2應(yīng)用初始化時(shí)一次性完成并保存預(yù)計(jì)算數(shù)據(jù),在每次進(jìn)行SM2數(shù)字簽名驗(yàn)證或信息加密執(zhí)行時(shí),從所述預(yù)計(jì)算數(shù)據(jù)中讀取相應(yīng)數(shù)據(jù),完成所述標(biāo)量固定窗口寬度Comb算法的運(yùn)算,可以顯著縮短SM2數(shù)字簽名驗(yàn)證或信息加密的時(shí)間,滿足Java卡對每秒驗(yàn)證SM2數(shù)字簽名的次數(shù)要求。附圖說明圖1為本發(fā)明實(shí)施例的一種Java卡SM2數(shù)字簽名驗(yàn)證或信息加密的方法流程示意圖;圖2為本發(fā)明實(shí)施例的一種Java卡SM2數(shù)字簽名驗(yàn)證或信息加密的裝置框圖;圖3為本發(fā)明實(shí)施例的一種包含SM2數(shù)字簽名驗(yàn)證或信息加密的裝置的Java卡示意圖;圖4為本發(fā)明的一種示范性實(shí)施例的方法流程示意圖;圖5為本發(fā)明的另一種示范性實(shí)施例的方法流程示意圖。本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說明。具體實(shí)施方式應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。下面將結(jié)合附圖及實(shí)施例對本發(fā)明的技術(shù)方案進(jìn)行更詳細(xì)的說明。需要說明的是,如果不沖突,本發(fā)明實(shí)施例以及實(shí)施例中的各個(gè)特征可以相互結(jié)合,均在本發(fā)明的保護(hù)范圍之內(nèi)。另外,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟?,F(xiàn)在將參考附圖描述實(shí)現(xiàn)本發(fā)明各個(gè)實(shí)施例的移動終端。在后續(xù)的描述中,使用用于表示元件的諸如“模塊”、“部件”或“單元”的后綴僅為了有利于本發(fā)明的說明,其本身并沒有特定的意義。因此,"模塊"與"部件"可以混合地使用。國密SM2算法的曲線方程是橢圓曲線方程,國密SM2算法中,提供了一組參數(shù)p、a、b、n、G,寬度為256bits,其中G=(Gx,Gy)稱為定點(diǎn),對定點(diǎn)的標(biāo)量乘法稱為固定點(diǎn)標(biāo)量乘法,其它點(diǎn)的標(biāo)量乘法稱為非定點(diǎn)標(biāo)量乘法。SM2算法中,將倍數(shù)dA稱為私鑰,將PA=dAG稱為公鑰,(dA,PA)為一組密鑰對,私鑰為用戶保留,公鑰對外公開。在標(biāo)量乘法過程中,兩個(gè)相同點(diǎn)的相加為倍點(diǎn)算法,用D表示;兩個(gè)不同點(diǎn)的相加稱為點(diǎn)加,用A表示。按照國密SM2推薦的參數(shù)寬度256bits橢圓曲線下Comb算法和滑動窗口算法性能比較,如下表一:算法W(窗口寬度)預(yù)存儲點(diǎn)個(gè)數(shù)算法運(yùn)算量滑動窗口5750A+255DComb41559A+63DComb3775A+85DComb2395A+127D表一從表一可以發(fā)現(xiàn),固定點(diǎn)標(biāo)量乘法的Comb算法比非定點(diǎn)標(biāo)量乘法(滑動窗口)可以顯著減少倍點(diǎn)算法D的運(yùn)算量,從而可以加快標(biāo)量乘法的運(yùn)算速度。Comb算法如下:記t為k的二進(jìn)制的位數(shù),在k的最左邊添加dw-t個(gè)比特0,k的比特?cái)?shù)變?yōu)閐w。將k平分為w組,記為:k=Kw-1||...||K1||K0;Kj是一個(gè)行向量,其在如下的矩陣中定義:K0···Ki···Kw-1=Kd-10...K00······Kd-1i...K0i······Kd-1w-1...K0w-1=kd-1...k0······k(i+1)d-1...kid······kwd-1...k(w-1)d]]>記矩陣的列向量為a,其中ai為0或1,[aw-1,…,a2,a1,a0]P=aw-12(w-1)dP+…+a222dP+a12dP+a0P對所有可能的(aw-1,…,a1,a0)的列向量進(jìn)行預(yù)計(jì)算。如窗口寬度w=4,k的比特位數(shù)為256,則d=64,則預(yù)計(jì)算[a3,a2,a1,a0]P=a32192P+a22128P+a1264P+a0P一共有16個(gè)值。0(∞)值不保存,一般保存15個(gè)。標(biāo)量固定窗口comb算法流程:輸入:固定窗口w,k=(kt-1,…,k2,k1,k0)2,P∈E(Fq)。輸出:kP1.預(yù)計(jì)算。對所有的(aw-1,…,a1,a0)預(yù)計(jì)算[aw-1,…,a2,a1,a0]P=aw-12(w-1)dP+…+a222dP+a12dP+a0P。2.在k的最左邊添加dw-t個(gè)比特0,記k=Kw-1||…||K1||K0,Kj是一d比特寬度的行向量。表示Kj的第i個(gè)比特。3.Q←0(∞);4.i從d-1到0,4.1)Q←2Q4.2)5.返回Q。本申請的發(fā)明人發(fā)現(xiàn)雖然在SM2體系中公鑰是變化的,但是對一個(gè)Java卡SM2應(yīng)用而言,它又是固定的,在Java卡發(fā)行商發(fā)行Java卡或更新Java的SM2應(yīng)用時(shí),該公鑰就確定了。固定窗口寬度的Comb算法中,比較費(fèi)時(shí)的是其中的預(yù)計(jì)算過程,因此,如果在Java卡的SM2應(yīng)用初始化或升級過程中,進(jìn)行相關(guān)公鑰的固定窗口Comb算法的預(yù)計(jì)算,得到預(yù)計(jì)算數(shù)據(jù),并保存這些預(yù)計(jì)算數(shù)據(jù),例如對于w=4,保存15個(gè)預(yù)計(jì)算數(shù)據(jù);在Java卡進(jìn)行SM2數(shù)字簽名驗(yàn)證或信息加密運(yùn)算時(shí),僅需執(zhí)行Comb運(yùn)算的后續(xù)操作步驟,即上述步驟4.2中的從存儲的預(yù)計(jì)算數(shù)據(jù)中檢索讀取相應(yīng)數(shù)據(jù)即可,無需進(jìn)行復(fù)雜的預(yù)計(jì)算過程,從而可以大大縮小Java卡進(jìn)行SM2數(shù)字簽名驗(yàn)證或信息加密運(yùn)算的時(shí)間。為此,本發(fā)明提供了一種Java卡SM2數(shù)字簽名驗(yàn)證或信息加密的方法,如圖1所示,包括:步驟10:在Java卡SM2應(yīng)用初始化設(shè)置時(shí),對SM2公鑰參數(shù)進(jìn)行標(biāo)量固定窗口寬度Comb算法的預(yù)計(jì)算,得到多個(gè)預(yù)計(jì)算數(shù)據(jù),保存所述多個(gè)預(yù)計(jì)算數(shù)據(jù);步驟12:在所述Java卡SM2應(yīng)用進(jìn)行SM2數(shù)字簽名驗(yàn)證或信息加密運(yùn)算時(shí),從所述多個(gè)預(yù)計(jì)算數(shù)據(jù)中讀取相應(yīng)數(shù)據(jù),完成所述標(biāo)量固定窗口寬度Comb算法的運(yùn)算,實(shí)現(xiàn)所述SM2數(shù)字簽名驗(yàn)證或信息加密操作。本發(fā)明實(shí)施例中,由于Java卡SM2應(yīng)用在發(fā)行或升級過程中,公鑰就確定了,即PA=dAG不再變化,針對固定窗口寬度的Comb算法而言,相當(dāng)于其kP的P值已確定。步驟10可以在Java卡發(fā)行時(shí)的SM2應(yīng)用初始化過程中進(jìn)行或者的Java卡SM2應(yīng)用的數(shù)字證書升級時(shí)重新進(jìn)行SM2應(yīng)用初始化的過程中進(jìn)行,雖然比較費(fèi)時(shí),但僅需執(zhí)行一次,存儲相應(yīng)的預(yù)計(jì)算數(shù)據(jù)即可;在Java卡SM2應(yīng)用每次進(jìn)行SM2數(shù)字簽名驗(yàn)證或信息加密運(yùn)算時(shí),由于參數(shù)k已經(jīng)是一個(gè)確定的256bits的數(shù)字,因此項(xiàng)在存儲的預(yù)計(jì)算數(shù)據(jù)中檢索讀取即可,從而省去了繁復(fù)的預(yù)計(jì)算過程,例如對于所述公鑰參數(shù)而言,當(dāng)窗口寬度w=4時(shí),這個(gè)就是某個(gè)[a3,a2,a1,a0]PA,即存儲的15個(gè)預(yù)計(jì)算數(shù)據(jù)之一。因此,步驟12在Java卡SM2應(yīng)用每次進(jìn)行SM2數(shù)字簽名驗(yàn)證或信息加密運(yùn)算時(shí)執(zhí)行,從所述多個(gè)預(yù)計(jì)算數(shù)據(jù)中讀取相應(yīng)數(shù)據(jù)(即每次運(yùn)算涉及到均可以在存儲的預(yù)計(jì)算數(shù)據(jù)中檢索讀取,無需進(jìn)行該標(biāo)量乘法運(yùn)算),完成所述標(biāo)量固定窗口寬度Comb算法的運(yùn)算后,即可實(shí)現(xiàn)所述SM2數(shù)字簽名驗(yàn)證或信息加密操作。本發(fā)明提供的Java卡SM2數(shù)字簽名驗(yàn)證或信息加密的方法,采用固定窗口寬度的Comb算法實(shí)現(xiàn)公鑰的標(biāo)量乘法,并將Comb算法分為兩部分執(zhí)行,其中的預(yù)計(jì)算部分在Java卡的發(fā)卡SM2應(yīng)用初始化或升級操作過程的SM2應(yīng)用初始化時(shí)一次性完成并保存預(yù)計(jì)算數(shù)據(jù),在每次進(jìn)行SM2數(shù)字簽名驗(yàn)證或信息加密執(zhí)行時(shí),從所述預(yù)計(jì)算數(shù)據(jù)中讀取相應(yīng)數(shù)據(jù),完成所述標(biāo)量固定窗口寬度Comb算法的運(yùn)算,可以顯著縮短SM2數(shù)字簽名驗(yàn)證或信息加密的時(shí)間,滿足Java卡SM2應(yīng)用對每秒驗(yàn)證SM2數(shù)字簽名的次數(shù)要求。可選地,其中,所述對所述SM2公鑰參數(shù)進(jìn)行標(biāo)量固定窗口寬度Comb算法的預(yù)計(jì)算得到多個(gè)預(yù)計(jì)算數(shù)據(jù),保存所述多個(gè)預(yù)計(jì)算數(shù)據(jù),包括:創(chuàng)建一個(gè)SM2的公鑰對象,申請保存所述多個(gè)預(yù)計(jì)算數(shù)據(jù)所需的存儲空間;設(shè)置所述公鑰對象的公鑰參數(shù);調(diào)用native函數(shù),按所述標(biāo)量固定窗口寬度進(jìn)行Comb算法的預(yù)計(jì)算,得到所述多個(gè)預(yù)計(jì)算數(shù)據(jù);將所述多個(gè)預(yù)計(jì)算數(shù)據(jù)保存到所述存儲空間。本實(shí)施例中,針對Java卡SM2應(yīng)用的固定窗口寬度Comb算法的預(yù)計(jì)算,可以在創(chuàng)建SM2的公鑰對象時(shí),同時(shí)申請保存所述多個(gè)預(yù)計(jì)算數(shù)據(jù)所需的存儲空間;然后設(shè)置所述公鑰對象的公鑰參數(shù)(即PA參數(shù),是兩個(gè)256bit位的數(shù));調(diào)用native函數(shù),按所述標(biāo)量固定窗口寬度進(jìn)行Comb算法的預(yù)計(jì)算,得到所述多個(gè)預(yù)計(jì)算數(shù)據(jù);將所述多個(gè)預(yù)計(jì)算數(shù)據(jù)保存到所述存儲空間。根據(jù)固定窗口寬度的不同,需要存儲的預(yù)計(jì)算數(shù)據(jù)個(gè)數(shù)不同,因此申請保存的存儲空間也不同,可以根據(jù)Java卡的非易失性存儲器,例如EEPROM的容量而定??蛇x地,其中,在所述Java卡SM2應(yīng)用進(jìn)行SM2數(shù)字簽名驗(yàn)證或信息加密運(yùn)算時(shí),完成所述標(biāo)量固定窗口寬度Comb算法的運(yùn)算,實(shí)現(xiàn)所述SM2數(shù)字簽名驗(yàn)證或信息加密操作,包括:在所述Java卡SM2應(yīng)該進(jìn)行SM2數(shù)字簽名驗(yàn)證或信息加密運(yùn)算時(shí),從所述多個(gè)預(yù)計(jì)算數(shù)據(jù)中讀取相應(yīng)數(shù)據(jù),替換所述標(biāo)量固定窗口寬度Comb算法中SM2公鑰的標(biāo)量乘法運(yùn)算項(xiàng),完成所述標(biāo)量固定窗口寬度Comb算法的運(yùn)算,實(shí)現(xiàn)所述SM2數(shù)字簽名驗(yàn)證或信息加密操作。本實(shí)施例中,針對SM2標(biāo)量固定窗口的Comb算法的循環(huán)迭代部分(參見上述步驟2~5),尤其是其中的步驟4.2,在循環(huán)迭代中,根據(jù)從存儲的預(yù)計(jì)算數(shù)據(jù)檢索讀取數(shù)據(jù),參與運(yùn)算即可(即利用檢索讀取的相應(yīng)預(yù)計(jì)算數(shù)據(jù)替換該標(biāo)量乘法運(yùn)算,此處對于公鑰而言,P=PA),從而可以加快每次Comb算法的執(zhí)行時(shí)間??蛇x地,其中,所述固定窗口寬度為w=4,所述保存預(yù)計(jì)算數(shù)據(jù)所需的存儲空間為960字節(jié);或者,所述固定窗口寬度為w=3,所述保存預(yù)計(jì)算數(shù)據(jù)所需的存儲空間為448字節(jié);或者,所述固定窗口寬度為w=2,所述保存預(yù)計(jì)算數(shù)據(jù)所需的存儲空間為192字節(jié)。本實(shí)施例中,由于各種Java卡的存儲資源不同,可以根據(jù)實(shí)際可用存儲資源的大小,例如EEPROM的可用空間大小,選擇不同的窗口寬度w,例如,對于固定窗口寬度為w=4,保存預(yù)計(jì)算數(shù)據(jù)所需的存儲空間為960字節(jié);對于固定窗口寬度為w=3,保存預(yù)計(jì)算數(shù)據(jù)所需的存儲空間為448字節(jié);對于固定窗口寬度為w=2,保存預(yù)計(jì)算數(shù)據(jù)所需的存儲空間為192字節(jié)。即使存儲空間比較緊張而采用w=3或2時(shí),本發(fā)明采用固定窗口Combs算法的速度也比滑動窗口算法要快。本發(fā)明提供的Java卡SM2數(shù)字簽名驗(yàn)證或信息加密的方法,采用固定窗口寬度Comb算法實(shí)現(xiàn)SM2公鑰的標(biāo)量乘法,并將Comb算法分為兩部分執(zhí)行,其中的預(yù)計(jì)算部分在Java卡的發(fā)卡SM2應(yīng)用初始化或升級過程的SM2應(yīng)用初始化操作時(shí)一次性完成并保存預(yù)計(jì)算數(shù)據(jù),在每次進(jìn)行SM2數(shù)字簽名驗(yàn)證或信息加密執(zhí)行時(shí),從所述預(yù)計(jì)算數(shù)據(jù)中讀取相應(yīng)數(shù)據(jù),完成所述標(biāo)量固定窗口寬度Comb算法的運(yùn)算,可以顯著縮短SM2數(shù)字簽名驗(yàn)證或信息加密的時(shí)間,例如,對于固定窗口寬度w=4,在系統(tǒng)時(shí)鐘為30MHZ,加解密芯片時(shí)鐘為30MHz的Java卡,SM2的數(shù)字簽名驗(yàn)證一次僅需要36毫秒,滿足Java卡每秒驗(yàn)證數(shù)字簽名20次的要求。相應(yīng)地、本發(fā)明提供了一種Java卡SM2數(shù)字簽名驗(yàn)證或信息加密的裝置,如圖2所示,包括:預(yù)計(jì)算模塊20,用于在Java卡SM2應(yīng)用初始化設(shè)置時(shí),對SM2公鑰參數(shù)進(jìn)行標(biāo)量固定窗口寬度Comb算法的預(yù)計(jì)算,得到多個(gè)預(yù)計(jì)算數(shù)據(jù);存儲模塊22,用于保存所述多個(gè)預(yù)計(jì)算數(shù)據(jù);運(yùn)算模塊24,用于在所述Java卡SM2應(yīng)用進(jìn)行SM2數(shù)字簽名驗(yàn)證或信息加密運(yùn)算時(shí),從所述多個(gè)預(yù)計(jì)算數(shù)據(jù)中讀取相應(yīng)數(shù)據(jù),完成所述標(biāo)量固定窗口寬度Comb算法的運(yùn)算,實(shí)現(xiàn)所述數(shù)字簽名驗(yàn)證或信息加密操作。上述數(shù)字簽名驗(yàn)證或信息加密的裝置可以設(shè)置在Java卡的虛擬機(jī)上運(yùn)行??蛇x地,其中,所述對所述SM2公鑰參數(shù)進(jìn)行標(biāo)量固定窗口寬度Comb算法的預(yù)計(jì)算得到多個(gè)預(yù)計(jì)算數(shù)據(jù),包括:創(chuàng)建一個(gè)SM2的公鑰對象,向所述存儲模塊申請保存多個(gè)預(yù)計(jì)算數(shù)據(jù)所需的存儲空間;設(shè)置所述公鑰對象的公鑰參數(shù);調(diào)用native函數(shù),按所述標(biāo)量固定窗口寬度進(jìn)行Comb算法的預(yù)計(jì)算,得到多個(gè)預(yù)計(jì)算數(shù)據(jù);所述保存所述多個(gè)預(yù)計(jì)算數(shù)據(jù),包括將所述多個(gè)預(yù)計(jì)算數(shù)據(jù)保存到所述存儲空間??蛇x地,其中,在所述Java卡SM2應(yīng)用進(jìn)行SM2數(shù)字簽名驗(yàn)證或信息加密運(yùn)算時(shí),從所述多個(gè)預(yù)計(jì)算數(shù)據(jù)中讀取相應(yīng)數(shù)據(jù),完成所述標(biāo)量固定窗口寬度Comb算法的運(yùn)算,實(shí)現(xiàn)所述SM2數(shù)字簽名驗(yàn)證或信息加密操作,包括:在所述Java卡SM2應(yīng)用進(jìn)行SM2數(shù)字簽名驗(yàn)證或信息加密運(yùn)算時(shí),從所述多個(gè)預(yù)計(jì)算數(shù)據(jù)中讀取相應(yīng)數(shù)據(jù),替換所述標(biāo)量固定窗口寬度Comb算法中SM2公鑰的標(biāo)量乘法運(yùn)算項(xiàng),完成所述標(biāo)量固定窗口寬度Comb算法的運(yùn)算,實(shí)現(xiàn)所述SM2數(shù)字簽名驗(yàn)證或信息加密操作??蛇x地,所述裝置中,所述固定窗口寬度為w=4,所述保存預(yù)計(jì)算數(shù)據(jù)所需的存儲空間為960字節(jié);或者,所述固定窗口寬度為w=3,所述保存預(yù)計(jì)算數(shù)據(jù)所需的存儲空間為448字節(jié);或者,所述固定窗口寬度為w=2,所述保存預(yù)計(jì)算數(shù)據(jù)所需的存儲空間為192字節(jié)。如圖3所示,本發(fā)明實(shí)施例還提供了一種包括上述任一項(xiàng)所述SM2數(shù)字簽名驗(yàn)證或信息加密裝置的Java卡,所述Java卡包括CPU/虛擬機(jī)和存儲器,所述存儲區(qū)存儲上述SM2數(shù)字簽名驗(yàn)證或信息加密裝置,所述CPU/虛擬機(jī)實(shí)施所述SM2數(shù)字簽名驗(yàn)證或信息加密裝置的功能。下面通過一個(gè)示范性實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明,如圖4所示:假設(shè)Java卡上運(yùn)行一個(gè)應(yīng)用,采用SM2密鑰體系,該Java卡由銀行發(fā)放,具備充足的EEPROM空間。在銀行發(fā)放該Java卡應(yīng)用時(shí),對該卡進(jìn)行初始化,設(shè)置相應(yīng)的公鑰PA,私鑰dA由銀行保存,PA=dAG,其中G=(Gx,Gy),雖然公鑰PA對各個(gè)應(yīng)用是不同的,但對該卡而言則是固定的,G是一個(gè)固定的512bits的數(shù)。因此可以分為以下兩部分:(一)Java卡SM2應(yīng)用初始化操作,步驟30:由于該卡EEPROM存儲空間充足,可以采用固定窗口寬度w=4,在初始化過程中創(chuàng)建一個(gè)SM2的公鑰對象,同時(shí)多申請960個(gè)字節(jié)用于保存預(yù)計(jì)算數(shù)據(jù);設(shè)置所述公鑰對象的公鑰參數(shù)PA;調(diào)用native函數(shù),按所述標(biāo)量固定窗口寬w=4進(jìn)行Comb算法的預(yù)計(jì)算,得到15個(gè)預(yù)計(jì)算數(shù)據(jù),每個(gè)數(shù)據(jù)64個(gè)字節(jié)(無窮遠(yuǎn)點(diǎn)0不保存);保存所述15個(gè)點(diǎn)的預(yù)計(jì)算數(shù)據(jù),占用960字節(jié)。完成對該Java卡的初始化操作后,將該Java卡發(fā)放給用戶。上述初始化過程中,按照一般的Comb標(biāo)量固定窗口w=4的算法流程,執(zhí)行以下Comb算法的預(yù)計(jì)算操作:輸入:固定窗口w=4,k=(kt-1,…,k2,k1,k0)2(k為數(shù)字簽名256bits的數(shù)),PA∈E(Fq)。輸出:kPA1.預(yù)計(jì)算。對所有的(aw-1,…,a1,a0)預(yù)計(jì)算[aw-1,...,a2,a1,a0]PA=aw-12(w-1)dPA+…+a222dPA+a12dPA+a0PA此處,具體地,選擇窗口為w=4,k的bits數(shù)為256位,則d=64,上述預(yù)計(jì)算公式簡化為:[a3,a2,a1,a0]PA=a32192PA+a22128PA+a1264PA+a0PA,一共有16個(gè)值,0(∞)值不保存,僅需保存15個(gè)預(yù)計(jì)算數(shù)據(jù),即1PA,2PA,…,15PA,每個(gè)數(shù)據(jù)為64字節(jié)。這個(gè)預(yù)計(jì)算過程在Java卡的初始化時(shí)完成,并在EEPROM中保存上述15個(gè)預(yù)計(jì)算數(shù)據(jù),每個(gè)數(shù)據(jù)64bit位。(二)Java卡SM2應(yīng)用進(jìn)行SM2數(shù)字簽名驗(yàn)證,步驟31a在用戶使用該Java卡的SM2應(yīng)用收到數(shù)字簽名信息時(shí),需要進(jìn)行SM2數(shù)字簽名認(rèn)證,對于SM2數(shù)字簽名的某個(gè)256bits,執(zhí)行kPA操作;在執(zhí)行Comb標(biāo)量固定窗口w=4的算法時(shí),涉及步驟1預(yù)計(jì)算的內(nèi)容,即對所有的[a3,a2,a1,a0]PA=a32192PA+a22128PA+a1264PA+a0PA的預(yù)計(jì)算操作,已經(jīng)在Java卡的SM2應(yīng)用初始化時(shí)完成,并在EEPROM中保留了15個(gè)預(yù)計(jì)算數(shù)據(jù),即1PA,2PA,…,15PA,每個(gè)數(shù)據(jù)為64字節(jié)。因此,進(jìn)行SM2數(shù)字簽名驗(yàn)證時(shí),Java卡SM2應(yīng)用實(shí)際需要進(jìn)行的Comb運(yùn)算步驟為以下步驟2~5:2.在k的最左邊添加dw-t個(gè)比特0,記k=K3||…||K1||K0,Kj是一d比特寬度的行向量(對于w=4,k為256bits數(shù),d=64)。表示Kj的第i個(gè)比特。3.Q←0(∞);4.i從d-1到0,4.1)Q←2Q4.2)5.返回Q。在步驟4.2的運(yùn)算中,其中的此時(shí)即為:(a3,a2,a1,a0)PA(其中ai為0或1,i=0,1,2,3),即1PA,2PA,…,15PA這15個(gè)預(yù)計(jì)算數(shù)據(jù)中的某一個(gè),按照相應(yīng)的kPA(k=1,2,…15)檢索存儲的15個(gè)預(yù)計(jì)算數(shù)據(jù)(即1PA,2PA,…,15PA),將相應(yīng)的數(shù)據(jù)讀出,替換步驟4.2中的標(biāo)量乘法項(xiàng)(即:通式中的)進(jìn)行運(yùn)算即可。(三)Java卡SM2應(yīng)用信息加密,步驟31b:當(dāng)Java卡SM2應(yīng)用對信息進(jìn)行SM2加密運(yùn)算操作時(shí),涉及公鑰標(biāo)量乘法運(yùn)算的過程與上述(二)Java卡SM2應(yīng)用進(jìn)行SM2數(shù)字簽名驗(yàn)證的Comb算法類似。作為另一個(gè)示范性實(shí)施例,如圖5所示,用戶使用Java卡過程中,銀行可能需要修改Java卡的SM2應(yīng)用或更新SM2數(shù)字證書,如果涉及公鑰參數(shù)變更,參照圖4,對Java重新進(jìn)行一次SM2應(yīng)用初始化設(shè)置即可,參見如步驟41。用戶后續(xù)使用Java卡時(shí),涉及SM2數(shù)字簽名驗(yàn)證或信息加密時(shí),步驟41a/41b與步驟31a/31b類似。上述示范性實(shí)施例,針對系統(tǒng)時(shí)鐘為30MHZ,加解密芯片時(shí)鐘為30MHz的Java卡,采用本發(fā)明提供的方法,SM2數(shù)字簽名驗(yàn)證一次僅需要36毫秒,相比于非定點(diǎn)標(biāo)量算法的數(shù)字簽名驗(yàn)證時(shí)間65ms時(shí)間,大為縮短。需要說明的是,在本文中,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者裝置不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者裝置所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括該要素的過程、方法、物品或者裝置中還存在另外的相同要素。上述本發(fā)明實(shí)施例序號僅僅為了描述,不代表實(shí)施例的優(yōu)劣。通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到上述實(shí)施例方法可借助軟件加必需的通用硬件平臺的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲在一個(gè)非易失性存儲介質(zhì)(如ROM、EPROM、EEPROM等)中,執(zhí)行本發(fā)明各個(gè)實(shí)施例所述的方法。以上僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的
技術(shù)領(lǐng)域
,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。當(dāng)前第1頁1 2 3 
當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1