一種實(shí)現(xiàn)數(shù)字簽名和驗(yàn)簽的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息安全領(lǐng)域,尤其涉及一種實(shí)現(xiàn)數(shù)字簽名和驗(yàn)簽的方法。
【背景技術(shù)】
[0002]數(shù)字簽名是附加在數(shù)據(jù)單元上的一些數(shù)據(jù)或者是對(duì)數(shù)據(jù)單元所作的密碼變化,這種數(shù)據(jù)或變化只允許數(shù)據(jù)單元的接收者用以確認(rèn)數(shù)據(jù)單元的來(lái)源和數(shù)據(jù)單元的完整性,保護(hù)數(shù)據(jù)防止被他人偽造。數(shù)字簽名是基于公鑰密碼體制和私鑰密碼體制實(shí)現(xiàn)的。
【發(fā)明內(nèi)容】
[0003]本發(fā)明提供了一種實(shí)現(xiàn)數(shù)字簽名和驗(yàn)簽的方法,采用的技術(shù)方案是:一種實(shí)現(xiàn)數(shù)字簽名的方法,包括:
[0004]步驟SI:CPU讀取哈希結(jié)果,并讀取第一預(yù)設(shè)存儲(chǔ)器中的數(shù)據(jù),將所述哈希結(jié)果與所述第一預(yù)設(shè)存儲(chǔ)器中的數(shù)據(jù)進(jìn)行模運(yùn)算,將結(jié)果保存至第二寄存器中;
[0005]步驟S2:CPU讀取第一隨機(jī)數(shù)存儲(chǔ)器、第二預(yù)設(shè)存儲(chǔ)器和第三預(yù)設(shè)存儲(chǔ)器中的數(shù)據(jù),將所述第一隨機(jī)存儲(chǔ)器中的數(shù)據(jù)與所述第二預(yù)設(shè)存儲(chǔ)器和所述第三預(yù)設(shè)存儲(chǔ)器中的數(shù)據(jù)進(jìn)行點(diǎn)乘運(yùn)算,將運(yùn)算結(jié)果保存至第三寄存器中;
[0006]步驟S3:CPU將所述第三寄存器中的數(shù)據(jù)與所述第一預(yù)設(shè)存儲(chǔ)器中的數(shù)據(jù)進(jìn)行模運(yùn)算,將結(jié)果保存至第四寄存器中;
[0007]步驟S4:CPU讀取簽名私鑰,對(duì)所述簽名私鑰、所述第二寄存器中的數(shù)據(jù)、所述第四寄存器中的數(shù)據(jù)和所述第一隨機(jī)存儲(chǔ)器中的數(shù)據(jù)進(jìn)行預(yù)設(shè)運(yùn)算,將結(jié)果保存至第五寄存器中;
[0008]步驟S5:CPU將所述第四寄存器中的數(shù)據(jù)和所述第五寄存器中的數(shù)據(jù)作為簽名結(jié)果輸出。
[0009]所述步驟SI之前還包括:CPU接收外部傳入的待簽名數(shù)據(jù),對(duì)所述待簽名數(shù)據(jù)進(jìn)行預(yù)設(shè)哈希運(yùn)算,將運(yùn)算得到的哈希結(jié)果保存。
[0010]所述步驟SI之前還包括:CPU將模運(yùn)算參數(shù)設(shè)置為第一預(yù)設(shè)值,并保存至所述第一預(yù)設(shè)存儲(chǔ)器中,將橢圓曲線參數(shù)設(shè)置為第二預(yù)設(shè)值和第三預(yù)設(shè)值,將第二預(yù)設(shè)值保存至所述第二預(yù)設(shè)存儲(chǔ)器中,將第三預(yù)設(shè)值保存至所述第三預(yù)設(shè)存儲(chǔ)器中。
[0011]所述步驟SI與所述步驟S2之間還包括:CPU判斷所述第二寄存器中的數(shù)據(jù)是否為第四預(yù)設(shè)值,如果是,則將所述第二寄存器中的數(shù)據(jù)設(shè)置為第五預(yù)設(shè)值,執(zhí)行步驟S2,否則直接執(zhí)行步驟S2。
[0012]所述步驟S2之前還包括:
[0013]步驟a:CPU生成隨機(jī)數(shù),判斷所述隨機(jī)數(shù)是否大于第四預(yù)設(shè)值且小于第一預(yù)設(shè)值,如果是,則將所述隨機(jī)數(shù)保存至所述第一隨機(jī)數(shù)存儲(chǔ)器中,執(zhí)行步驟S2,否則繼續(xù)執(zhí)行步驟a。
[0014]所述步驟S3與所述步驟S4之間,還包括:判斷所述第四寄存器中的數(shù)據(jù)是否為第四預(yù)設(shè)值,如果是,則執(zhí)行步驟S4,否則返回步驟a。
[0015]所述步驟S4中,所述對(duì)所述簽名私鑰、所述第二寄存器中的數(shù)據(jù)、所述第四寄存器中的數(shù)據(jù)和所述第一隨機(jī)存儲(chǔ)器中的數(shù)據(jù)進(jìn)行預(yù)設(shè)運(yùn)算,將結(jié)果保存至第五寄存器中,具體為:
[0016]步驟al:CPU將所述第四寄存器中的數(shù)據(jù)與所述簽名私鑰做乘法,將結(jié)果保存至第一中間值存儲(chǔ)器中,將所述第一隨機(jī)存儲(chǔ)器中的數(shù)據(jù)與所述第二寄存器中的數(shù)據(jù)做乘法,將結(jié)果保存至第二中間值存儲(chǔ)器中;
[0017]步驟a2:CPU將所述第一中間值存儲(chǔ)器中的數(shù)據(jù)與所述第二中間值存儲(chǔ)器中的數(shù)據(jù)相加,將結(jié)果保存至第三中間值存儲(chǔ)器中;
[0018]步驟a3:CPU將所述第三中間值存儲(chǔ)器中的數(shù)據(jù)與所述第一預(yù)設(shè)存儲(chǔ)器中的數(shù)據(jù)做模運(yùn)算,將結(jié)果保存至所述第五寄存器中。
[0019]所述步驟S4和所述步驟S5之間,還包括:CPU判斷所述第五寄存器中的數(shù)據(jù)是否為第四預(yù)設(shè)值,如果是,則返回執(zhí)行步驟a,否則執(zhí)行步驟S5。
[0020]所述步驟S5,具體為:CPU將所述第四寄存器中的數(shù)據(jù)和所述第五寄存器中的數(shù)據(jù)進(jìn)行組合,并輸出。
[0021]所述將所述第四寄存器中的數(shù)據(jù)和所述第五寄存器中的數(shù)據(jù)進(jìn)行組合,得到簽名結(jié)果,具體為:將所述第四寄存器中的數(shù)據(jù)與所述第五寄存器中的數(shù)據(jù)進(jìn)行拼接,得到簽名結(jié)果。
[0022]一種實(shí)現(xiàn)數(shù)字驗(yàn)簽的方法,包括:
[0023]步驟Tl:CPU讀取簽名結(jié)果,對(duì)所述簽名結(jié)果進(jìn)行處理,將得到的兩個(gè)結(jié)果分別保存至第八寄存器和第九寄存器中,讀取待簽名數(shù)據(jù),對(duì)所述待簽名數(shù)據(jù)進(jìn)行哈希計(jì)算,將結(jié)果保存至第十寄存器中;
[0024]步驟T2:CPU讀取第一預(yù)設(shè)存儲(chǔ)器中的數(shù)據(jù),將所述第十寄存器中的數(shù)據(jù)與第一預(yù)設(shè)存儲(chǔ)器中的數(shù)據(jù)進(jìn)行模運(yùn)算,將結(jié)果保存至第十一寄存器中;
[0025]步驟T3:CPU計(jì)算所述第十一寄存器中的數(shù)據(jù)與所述第一預(yù)設(shè)存儲(chǔ)器中的數(shù)據(jù)取模的逆元,將結(jié)果保存至第十二寄存器中;
[0026]步驟T4:CPU對(duì)所述第九寄存器中的數(shù)據(jù)、所述第十二寄存器中的數(shù)據(jù)和所述第一預(yù)設(shè)存儲(chǔ)器中的數(shù)據(jù)進(jìn)行處理,將結(jié)果保存至第十三寄存器中,對(duì)所述第八寄存器中的數(shù)據(jù)、所述第十二寄存器中的數(shù)據(jù)和所述第一預(yù)設(shè)存儲(chǔ)器中的數(shù)據(jù)進(jìn)行處理,將結(jié)果保存至第十四寄存器中;
[0027]步驟T5:CPU讀取簽名公鑰,對(duì)所述第十三寄存器中的數(shù)據(jù)、所述第十四寄存器中的數(shù)據(jù)和所述簽名公鑰進(jìn)行預(yù)設(shè)運(yùn)算,將結(jié)果保存至第十五寄存器中;
[0028]步驟T6:CPU將所述第十五寄存器中的數(shù)據(jù)與所述第一預(yù)設(shè)存儲(chǔ)器中的數(shù)據(jù)進(jìn)行模運(yùn)算,將結(jié)果保存至第十六寄存器中;
[0029]步驟T7:CPU判斷所述第十六寄存器中的數(shù)據(jù)與所述第八寄存器中的數(shù)據(jù)是否相等,如果是,則輸出驗(yàn)簽成功信息,否則輸出驗(yàn)簽失敗信息。
[0030]所述步驟T2之前還包括:CPU將模運(yùn)算參數(shù)設(shè)置為第一預(yù)設(shè)值,并保存至所述第一預(yù)設(shè)存儲(chǔ)器中;CPU將橢圓曲線參數(shù)設(shè)置為第二預(yù)設(shè)值和第三預(yù)設(shè)值,將所述第二預(yù)設(shè)值保存至所述第二預(yù)設(shè)存儲(chǔ)器中,將所述第三預(yù)設(shè)值保存至所述第三預(yù)設(shè)存儲(chǔ)器中。
[0031]所述步驟Tl與所述步驟T2之間,還包括:CPU判斷所述第八寄存器中的數(shù)據(jù)與所述第九寄存器中的數(shù)據(jù)是否均大于第四預(yù)設(shè)值且小于第一預(yù)設(shè)值,如果是,則執(zhí)行步驟T2,否則報(bào)錯(cuò),結(jié)束。
[0032]所述步驟T2與所述步驟T3之間,還包括:CPU判斷所述第十一寄存器中的數(shù)據(jù)是否為第四預(yù)設(shè)值,如果是,則將所述第十一寄存器中的數(shù)據(jù)設(shè)置為第五預(yù)設(shè)值,執(zhí)行步驟T3,否則直接執(zhí)行步驟T3。
[0033]所述步驟T4中,所述對(duì)所述第九寄存器中的數(shù)據(jù)、所述第十二寄存器中的數(shù)據(jù)和所述第一預(yù)設(shè)存儲(chǔ)器中的數(shù)據(jù)進(jìn)行處理,將結(jié)果保存至第十三寄存器中,具體為:CPU計(jì)算所述第九寄存器中的數(shù)據(jù)與所述第十二寄存器中的數(shù)據(jù)的乘積,將乘積結(jié)果與所述第一預(yù)設(shè)存儲(chǔ)器中的數(shù)據(jù)進(jìn)行模運(yùn)算,將模運(yùn)算結(jié)果保存至所述第十三寄存器中。
[0034]所述步驟T4中,所述對(duì)所述第八寄存器中的數(shù)據(jù)、所述第十二寄存器中的數(shù)據(jù)和所述第一預(yù)設(shè)存儲(chǔ)器中的數(shù)據(jù)進(jìn)行處理,將結(jié)果保存至第十四寄存器中,具體為:CPU計(jì)算所述第八寄存器中的數(shù)據(jù)與所述第十二寄存器中的數(shù)據(jù)的乘積,將乘積結(jié)果與所述第一預(yù)設(shè)存儲(chǔ)器中的數(shù)據(jù)進(jìn)行模運(yùn)算,將模運(yùn)算結(jié)果保存至所述第十四寄存器中。
[0035]所述步驟T5,具體包括:
[0036]步驟bl:CPU讀取第二預(yù)設(shè)存儲(chǔ)器和第三預(yù)設(shè)存儲(chǔ)器中的數(shù)據(jù),并讀取簽名公鑰;
[0037]步驟b2:CPU將所述第十三寄存器中的數(shù)據(jù)與所述第二預(yù)設(shè)存儲(chǔ)器中的數(shù)據(jù)和所述第三預(yù)設(shè)存儲(chǔ)器中的數(shù)據(jù)進(jìn)行點(diǎn)乘運(yùn)算,將運(yùn)算得到的兩個(gè)結(jié)果分別保存至第四中間值存儲(chǔ)器和第五中間值存儲(chǔ)器中;
[0038]步驟b3:CPU將所述第十四寄存器中的數(shù)據(jù)與所述簽名公鑰做乘法,將運(yùn)算得到的兩個(gè)結(jié)果分別保存至第六中間值存儲(chǔ)器和第七中間值存儲(chǔ)器中;
[0039]步驟b4:CPU對(duì)所述第四中間值存儲(chǔ)器、所述第五中間值存儲(chǔ)器、所述第六中間值存儲(chǔ)器和所述第七中間值存儲(chǔ)器中的數(shù)據(jù)進(jìn)行計(jì)算,將計(jì)算結(jié)果保存至所述第十五寄存器中。
[0040]本發(fā)明取得的有益效果是:采用本發(fā)明的技術(shù)方案,能夠?qū)崿F(xiàn)身份認(rèn)證,保證數(shù)據(jù)的完整性和不可抵賴性,而且對(duì)模運(yùn)算參數(shù)和橢圓曲線參數(shù)進(jìn)行初始化,提高了運(yùn)算效率,驗(yàn)簽的過(guò)程中對(duì)公鑰的驗(yàn)證,更加提高了簽名的安全性。
【附圖說(shuō)明】
[0041]為了更清楚的說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單的介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0042]圖1是本發(fā)明實(shí)施例1提供的一種實(shí)現(xiàn)數(shù)字簽名的方法流程圖;
[0043]圖2是本發(fā)明實(shí)施例2提供的一種實(shí)現(xiàn)數(shù)字簽名的方法流程圖;
[0044]圖3是本發(fā)明實(shí)施例3提供的一種實(shí)現(xiàn)數(shù)字驗(yàn)簽的方法流程圖
[0045]圖4是本發(fā)明實(shí)施例4提供的一種實(shí)現(xiàn)數(shù)字驗(yàn)簽的方法流程圖。
【具體實(shí)施方式】
[0046]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0047]實(shí)施例1
[0048]本發(fā)明實(shí)施例1提供了一種實(shí)現(xiàn)數(shù)字簽名的方法,如圖1所示,包括:
[0049]步驟S1:CPU讀取哈希結(jié)果,并讀取第一預(yù)設(shè)存儲(chǔ)器中的數(shù)據(jù),將哈希結(jié)果與第一預(yù)設(shè)存儲(chǔ)器中的數(shù)據(jù)進(jìn)行模運(yùn)算,將結(jié)果保存至第二寄存器中