浅谈无证书公钥密码

Shookin
公钥密码必须解决好一个基本问题,那就是如何保证用户公钥的真实性和有效性。传统公钥密码的解决方法是使用证书。CA为用户签发公钥证书,用以保证系统中用户公钥的真实性和有效性。使用公钥时先验证公钥证书的有效性,再用公钥验证签名或者加密数据。公钥证书较好地解决了公钥的真实性和有效性问题,但公钥证书库的管理和维护需要巨大的计算、通信和存储代价。

01

概述

公钥密码必须解决好一个基本问题,那就是如何保证用户公钥的真实性和有效性。传统公钥密码的解决方法是使用证书。CA为用户签发公钥证书,用以保证系统中用户公钥的真实性和有效性。使用公钥时先验证公钥证书的有效性,再用公钥验证签名或者加密数据。公钥证书较好地解决了公钥的真实性和有效性问题,但公钥证书库的管理和维护需要巨大的计算、通信和存储代价。

1984年,基于身份的公钥密码IBC问世,它以另外一种方式解决公钥的真实性问题,避免了传统公钥密码中对证书的使用和验证过程。国家密码管理局于2016年发布了IBC密码行业标准算法SM9。在IBC公钥密码中,用户的公钥是一些公开的、可以唯一确定用户身份的标识信息。在实际应用中,用户的身份信息可以是姓名+通信地址、手机号码、身份证号码或E-Mail 地址等。在使用IBC进行加密和认证时,由于我们已经知道对方的公开身份信息,所以就不需要在数据库中查找用户的公钥,也不需要对公钥的真实性进行检验。因此,IBC无须公钥证书的存在。IBC中用户的私钥由密钥生成中心KGC产生,因此,这样的密码系统存在私钥托管问题。当前,一些学者对如何解决IBC私钥托管问题做了一些探索性研究。

2003年诞生的无证书公钥密码(certificateless public key cryptography,CL-PKC)克服了IBC中的私钥托管问题。与传统公钥密码相比,CL-PKC和IBC一样不需要证书,同时,CL-PKC消除了IBC的私钥托管问题。在CL-PKC密码体制中, KGC为用户产生一个部分私钥, 用户选取一个秘密值,并与部分私钥结合生成用户私钥,用户私钥由KGC和用户联合产生。KGC 不知道用户的完整私钥,从而避免了密钥托管问题。

近年来,CL-PKC一直是密码学领域突出的研究热点之一,伴随着CL-PKC的不断发展,各式各样的CL-PKC方案也被研究出来,不少学者提出了关于无证书签名、无证书加密、无证书密钥协商、无证书身份认证等诸多方案,其方案实现大体上可分为使用双线性对和不使用双线性对两大类。另外,无证书签密也是研究热点之一,它将签名与加密相结合,形成无证书签密方案以及无证书聚合签密方案。也有学者将盲签名技术和CL-PKC相结合,提出了无证书盲签名方案、无证书盲签密方案等。

CL-PKC是继传统公钥密码、IBC公钥密码之后发展起来的,从目前公钥密码应用来看,似乎仍然是传统公钥密码占据着主导地位,但是随着物联网、5G等新兴技术的发展,无证书公钥密码的应用日益扩大,成为物联网密码应用的潜在解决方案。

02

一种基于SM2的无证书签名方案实例

(1). 系统参数生成

选择SM2系统参数作为该无证书密码系统的一部分参数,此外,KGC产生随机数s作为系统主私钥,作为系统主公钥。设置摘要函数H为SM3。

(2). 用户密钥生成

假设签名用户标识为id,KGC 选取随机数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的签名过程是:选取随机数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

THEEND

最新评论(评论仅代表用户观点)

更多
暂无评论