01
概述
公鑰密碼必須解決好一個基本問題,那就是如何保證用戶公鑰的真實性和有效性。傳統(tǒng)公鑰密碼的解決方法是使用證書。CA為用戶簽發(fā)公鑰證書,用以保證系統(tǒng)中用戶公鑰的真實性和有效性。使用公鑰時先驗證公鑰證書的有效性,再用公鑰驗證簽名或者加密數(shù)據(jù)。公鑰證書較好地解決了公鑰的真實性和有效性問題,但公鑰證書庫的管理和維護需要巨大的計算、通信和存儲代價。
1984年,基于身份的公鑰密碼IBC問世,它以另外一種方式解決公鑰的真實性問題,避免了傳統(tǒng)公鑰密碼中對證書的使用和驗證過程。國家密碼管理局于2016年發(fā)布了IBC密碼行業(yè)標準算法SM9。在IBC公鑰密碼中,用戶的公鑰是一些公開的、可以唯一確定用戶身份的標識信息。在實際應(yīng)用中,用戶的身份信息可以是姓名+通信地址、手機號碼、身份證號碼或E-Mail 地址等。在使用IBC進行加密和認證時,由于我們已經(jīng)知道對方的公開身份信息,所以就不需要在數(shù)據(jù)庫中查找用戶的公鑰,也不需要對公鑰的真實性進行檢驗。因此,IBC無須公鑰證書的存在。IBC中用戶的私鑰由密鑰生成中心KGC產(chǎn)生,因此,這樣的密碼系統(tǒng)存在私鑰托管問題。當前,一些學者對如何解決IBC私鑰托管問題做了一些探索性研究。
2003年誕生的無證書公鑰密碼(certificateless public key cryptography,CL-PKC)克服了IBC中的私鑰托管問題。與傳統(tǒng)公鑰密碼相比,CL-PKC和IBC一樣不需要證書,同時,CL-PKC消除了IBC的私鑰托管問題。在CL-PKC密碼體制中, KGC為用戶產(chǎn)生一個部分私鑰, 用戶選取一個秘密值,并與部分私鑰結(jié)合生成用戶私鑰,用戶私鑰由KGC和用戶聯(lián)合產(chǎn)生。KGC 不知道用戶的完整私鑰,從而避免了密鑰托管問題。
近年來,CL-PKC一直是密碼學領(lǐng)域突出的研究熱點之一,伴隨著CL-PKC的不斷發(fā)展,各式各樣的CL-PKC方案也被研究出來,不少學者提出了關(guān)于無證書簽名、無證書加密、無證書密鑰協(xié)商、無證書身份認證等諸多方案,其方案實現(xiàn)大體上可分為使用雙線性對和不使用雙線性對兩大類。另外,無證書簽密也是研究熱點之一,它將簽名與加密相結(jié)合,形成無證書簽密方案以及無證書聚合簽密方案。也有學者將盲簽名技術(shù)和CL-PKC相結(jié)合,提出了無證書盲簽名方案、無證書盲簽密方案等。
CL-PKC是繼傳統(tǒng)公鑰密碼、IBC公鑰密碼之后發(fā)展起來的,從目前公鑰密碼應(yīng)用來看,似乎仍然是傳統(tǒng)公鑰密碼占據(jù)著主導地位,但是隨著物聯(lián)網(wǎng)、5G等新興技術(shù)的發(fā)展,無證書公鑰密碼的應(yīng)用日益擴大,成為物聯(lián)網(wǎng)密碼應(yīng)用的潛在解決方案。
02
一種基于SM2的無證書簽名方案實例
(1). 系統(tǒng)參數(shù)生成
選擇SM2系統(tǒng)參數(shù)作為該無證書密碼系統(tǒng)的一部分參數(shù),此外,KGC產(chǎn)生隨機數(shù)s作為系統(tǒng)主私鑰,作為系統(tǒng)主公鑰。設(shè)置摘要函數(shù)H為SM3。
(2). 用戶密鑰生成
假設(shè)簽名用戶標識為id,KGC 選取隨機數(shù)rid,計算Rid = ridG 和部分私鑰Did = rid + s*H( id,Rid) ,KGC 將Did和Rid安全地傳送給用戶。用戶驗證Did G = Rid + Ppub*H( id,Rid) 是否成立,若成立,則判定Did是有效的部分私鑰,否則,判定Did無效。用戶隨機選擇秘密值xid,并計算Xid = xidG,用戶私鑰SKid = ( Did,xid) ,用戶公鑰為PKid = (Rid,Xid)并予以公布。
(3). 簽名
對消息m的簽名過程是:選取隨機數(shù)t,計算T=tG;計算 h=H(id,Rid),v=H(m,T,Rid,Xid);計算u=t+xid*(h+v)+Did,生成簽名值σ=(u,v)。
(4). 驗證簽名
計算h=H(id,Rid),T’=uG-Xid*(h+v)-Rid-Ppub*h,v’=H(m,T’,Rid,Xid)。若v=v’,則簽名有效,否則簽名無效。
本文作者:北京海泰方圓科技股份有限公司總工辦 Shookin