一种基于椭圆曲线的无证书公钥密码体制实现方法与流程

文档序号:16244999发布日期:2018-12-11 23:29阅读:485来源:国知局
一种基于椭圆曲线的无证书公钥密码体制实现方法与流程

本发明属于信息安全技术领域,涉及一种密码体制实现方法,具体涉及一种基于椭圆曲线的无证书公钥密码体制实现方法。

背景技术

随着信息技术的快速发展,传统的基于证书的公钥密码体制(pki)已得到了广泛的应用。但是,随着移动通信网络、无线传感器网络、物联网等新网络环境的出现,pki体制因其资源开销大的缺点难以满足环境需求。为了避免证书管理和使用问题,shamir在1984年提出了基于身份的公钥密码体制(ibc);al-riyami和paterson在2003年提出了无证书公钥密码学(clpkc)。相比而言,ibc体制存在以下几个问题:1)用户完全信任密钥生成中心kgc,用户私钥由kgc独自生成,难以防止kgc伪造用户签名,存在密钥托管问题;2)ibc体制采用了双线性对运算,其计算效率较低;3)用户标识与用户私钥具有唯一绑定关系,难以支持密钥更新和撤销机制。

无证书公钥密码学clpkc是介于传统pki体制与ibc体制之间的一种模型。在一个无证书的密码系统中,用户的私钥不是由kgc独自生成,相反地,它是由kgc的部分私钥和由用户选取的秘密值计算而来。由于kgc无法获取用户的秘密值,从而使得用户私钥不能够被kgc获取,但kgc可控制用户私钥生成,以此方式解决了密钥托管问题。但是,clpkc不完全是基于身份的,因为每一个用户还存在一个额外的公钥(该公钥在使用时与其他数据一起传输或者存储在一个公开的信息列表中),比如要给某用户发送一段加密数据,除了知道该用户的标书外,还需要知道该用户额外的公钥。但相比传统pki体制而言,clpkc方法从结构上确保了公钥无需任何证书支持。因为clpkc不需要管理和使用证书,所需的系统负担和资源负载都很小,更加适合于低带宽需求和低能量消耗的移动安全应用环境和物联网环境。

迄今为止,国内外学者已提出了几十种无证书公钥密码方案,但是大部分方案存在以下三个问题:1)利用双线性对构造,导致运行效率低,算法复杂;2)使用特殊的签名或加密机制,难以兼容标准密码算法,导致方案适用性降低;3)仅具备一部分公钥密码功能,有的方案只支持签名机制,有的方案只支持加密机制,导致使用场景限制较大。因此,无证书密码体制的运行高效性、功能完善性以及算法兼容性的问题,均是亟需解决的问题。



技术实现要素:

为了解决上述技术问题,本发明提供了一种能够基于标准椭圆曲线密码算法构造的无证书公钥密码体制实现方法,即能在不改变标准算法逻辑的前提下实现无证书公钥认证机制,又能够满足无证书体制的安全性高效性需求,可广泛适用于复杂系统、资源受限场景下的公钥认证和使用需求。

本发明所采用的技术方案是:一种基于椭圆曲线的无证书公钥密码体制实现方法,其特征在于,包括以下步骤:

步骤1:系统建立;

建立系统公共参数和系统主私钥;

步骤1的具体实现包括以下子步骤:

步骤1.1:确定无证书密码体制的曲线参数e(fq)={q,aq,bq,g,n},其中q为椭圆曲线的基域参数,aq,bq为椭圆曲线的方程参数,g为椭圆曲线的n阶基点;

步骤1.2:确定无证书密码体制的密码函数{h1(·),h2(·),h3(·),saa(·),sab(·)},其中hi(·)表示一组基于哈希函数和数学运算的安全映射函数,saa(·)和sab(·)为一组基于椭圆曲线运算的秘密协商函数;

所述安全映射函数,能够基于数学运算和哈希函数对输入数据进行变换并映射为一个整数值h,且满足h∈[0,n-1]。

所述秘密协商函数,当输入数据满足条件a=[a]g且b=[b]g时,saa(a,id,b)与sab(b,id,a)输出一致,其中id为用户标识,秘密协商双方能够基于该函数计算得到一个共享的秘密数据,其计算方式包含以下简化和变形:

(1)计算方式为saa(a,id,b)=id||[a]g||b,sab(b,id,a)=id||a||[b]g;符号||表示数据串联;

(2)取值常量u∈[0,n-1],计算方式为saa(a,id,b)=[u·a]b,sab(b,id,a)=[u·b]a;符号·表示整数模乘;

(3)取值常量u,v∈[0,n-1],计算方式为saa(a,id,b)=[u·a]g+[v]b,sab(b,id,a)=[u]a+[v·b]g。

步骤1.3:密钥生成中心随机产生系统主私钥ppri=s∈[1,n-1],并计算系统主公钥ppub=[s]g,[·]g表示点乘运算;密钥生成中心公布系统公共参数{e(fq),ppub}。

步骤2:用户秘密建立;

用户产生秘密值并向密钥生成中心提交私钥申请;

步骤2的具体实现包括以下子步骤:

步骤2.1:用户选取标识id,并随机选取整数a∈[0,n-1],记用户秘密值为da=a,并计算a=[a]g;

步骤2.2:用户将私钥申请{id,a}发送给密钥生成中心;若a取值为零,则密钥申请不含有a。

步骤3:用户私钥提取;

密钥生成中心根据私钥申请产生部分私钥返回给用户;

步骤3的具体实现包括以下子步骤:

步骤3.1:密钥生成中心接收私钥申请后,随机选取整数b∈[1,n-1],并计算b=[b]g、c=sab(b,id,a)、h1=h1(id,c)、h2=h2(id,c),l=[h1]a+[h2]b,得到用户部分公钥l并公布;再计算h3=h3(id,l)、db=h2b+h3smodn,得到用户部分私钥db;

步骤3.2:密钥生成中心将{b,db}或{b,l,db}发送给用户。

步骤4:用户私钥建立;

用户根据部分私钥和秘密值计算得到实际私钥;

步骤4的具体实现包括以下子步骤:

步骤4.1:用户接收{b,db}后,计算c=saa(a,id,b)、h1=h1(id,c);若用户未接收到l,则计算h2=h2(id,c),l=[h1]a+[h2]b;

步骤4.2:用户计算用户私钥d=h1sa+sbmodn,存储(l,d),其中l为部分公钥和d为实际私钥。

步骤5:用户公钥还原;

其他用户能根据用户标识、部分公钥以及系统主公钥还原得到用户的实际公钥,具体计算公式为先计算h3=h3(id,l),再计算q=l+[h3]ppub,其中q为用户实际公钥。

相对于现有技术,本发明具有以下有益效果:适用于各类常规椭圆曲线密码算法(如ecdsa、sm2算法等),不使用数字证书,有效避免了证书管理和使用问题,可在各种基于常规椭圆曲线密码体制建立的安全系统中使用。在系统管理方面,kgc只需要存储系统参数、系统主私钥以及用户标识的密钥分发状态,其存储负担非常小,非常适合于用户数量庞大的应用场景。在计算效率方面,本发明所述的实现方法仅需在标准的密码算法基础上增加一次用户公钥还原操作,该操作仅需一次椭圆曲线点倍和一次椭圆曲线点乘运算,相比一般采用双线性的无正式体制而言,其计算效率几乎快10倍。

附图说明

图1是本发明的方法原理示意图;

图2是本发明实施例一的方法原理示意图;

图3是本发明实施例二的方法原理示意图;

图4是本发明实施例三的方法原理示意图。

具体实施方式

为了便于本领域普通技术人员理解和实施本发明,下面结合附图详细描述本发明的具体实施方式及其简化和变形。应理解,此处所描述的实施示例仅用于说明和解释本发明,并不用于限定本发明的保护范围。

本发明所述的无证书密码体制组成与一般的无证书密码体制一致,分为密钥生成中心(keygenerationcenter,kgc)和用户,但在密钥申请与提取阶段与一般无证书密码体制模型有所区别,其区别在于:本发明所述的密钥提取在用户设置秘密值之后,而一般模型中用户秘密值设置在密钥提取之后;其优势是用户可以在接收到密钥提取数据后验证信息来源的真实性。

本发明的实现方法主要内容包括系统建立、用户秘密建立、用户私钥提取、用户私钥建立、用户公钥还原的方法,所述方法均可基于现有的椭圆曲线标准公钥密码算法进行数字签名、公钥加密、密钥交换等。

请见图1,本发明提供的一种基于椭圆曲线的无证书公钥密码体制实现方法,包括以下步骤:

步骤1:系统建立;

建立系统公共参数和系统主私钥;

步骤2:用户秘密建立;

用户产生秘密值并向密钥生成中心提交私钥申请;

步骤3:用户私钥提取;

密钥生成中心根据私钥申请产生部分私钥返回给用户;

步骤4:用户私钥建立;

用户根据部分私钥和秘密值计算得到实际私钥;

步骤5:用户公钥还原。

本发明的实际公私钥对(d,q)适用于各类常规椭圆曲线公钥密码算法,用户直接使用实际私钥d进行密码运算,而其他用户先通过用户标识和部分公钥还原得到实际公钥,然后使用实际公钥q进行密码运算。

下面结合符合及具体实施例对本发明做进一步的阐述;

(1)实施例一;

请见图2,本发明实施例一的实现原理分为三个阶段:系统建立阶段、用户密钥生成阶段和用户密钥使用阶段。

在本实施例的系统建立阶段中,系统建立由密钥生成中心kgc完成。kgc选取有限域fq上的安全常规椭圆曲线e(fq):y2=x3+aq·x+bq,取e(fq)上的一个n阶点g作为基点。一般来说,可选取标准规定的椭圆曲线参数,例如国密sm2算法曲线参数、国际ecdsa曲线参数。安全杂凑函数可选取标准的杂凑算法,例如国密sm3算法和国际sha系列算法。

之后,kgc确定密码函数的具体逻辑运算方式为:

1)秘密协商函数选取为saa(a,id,b)=[a]g+b和sab(b,id,a)=a+[b]g,即椭圆曲线的点加运算;

2)安全映射函数选取为h3(id,l)=hash(0x03||id||l)且h1(·)=0、h2(·)=1,其中hash(·)为杂凑算法。

最后,kgc随机产生系统主私钥并计算得到系统主公钥。同时,规定用户不设置私密值(即da=a=0),密钥生成控制权完全有kgc控制。

在本实施例的用户密钥生成阶段中,用户密钥生成由用户和kgc共同交互完成。具体步骤如下:

步骤1:用户将用户标识id发送给kgc,请求签名私钥;或者由kgc直接分配用户标识。

步骤2:kgc收到私钥请求后,首先利用已有的身份认证方法确认id与user身份一致;随后,kgc随机选取整数b∈[1,n-1]并通过公式计算用户临时公钥b=[b]g。

步骤3:kgc根据l计算用户部分私钥db=b+h3·smodn,其中h3=h3(id,b)。

步骤4:kgc将临时公钥b和部分私钥db,通过安全信道发送给用户。

步骤5:用户user接收并秘密保存kgc发送的私钥(l,d),其中l=b、d=db。

在用户密钥使用阶段,用户需要使用私钥时,可直接使用d作为实际私钥进行运算;其他用户需要使用公钥时,可根据用户公钥还原方法计算得到用户实际公钥q,再进行相关运算。用户实际公钥的计算方式为:

h3=h3(id,l)

q=l+[h3]ppub

其中l为用户部分公钥,ppub为系统主公钥,均可通过公开方式获取。

本实施例的特性为:kgc完全控制用户私钥生成,能够获取用户私钥数据;支持单标识多密钥模式,即单一用户标识可匹配生成不同的用户公私钥对,解决标识密码体制下的密钥撤销和密钥更新问题;可支持私钥单向分发机制,运算效率高,非常适合于于批量化用户私钥生成场景。

(2)实施例二;

请见图3,本发明实施例一的实现原理分为三个阶段:系统建立阶段、用户密钥生成阶段和用户密钥使用阶段。

在本实施例的系统建立阶段中,系统建立由密钥生成中心kgc完成。椭圆曲线参数、安全杂凑函数选取方式与实施例一类同。密码函数的具体逻辑运算方式为:

1)秘密协商函数选取为saa(a,id,b)=[a]g||b和sab(b,id,a)=a||[b]g,即数据串联;

2)安全映射函数选取为h1(id,c)=hash(0x01||id||c)、h2(id,c)=hash(0x02||id11c)和h3(id,l)=hash(0x03||id||l),其中hash(·)为杂凑算法。

最后,kgc随机产生系统主私钥并计算得到系统主公钥。同时,规定用户的私密值不能为零(即da≠0),用户具备密钥控制权。

在本实施例的用户密钥生成阶段中,用户密钥生成由用户和kgc共同交互完成。具体步骤如下:

步骤1:用户随机选取整数a∈[1,n-1]作为用户秘密值da=a,并计算临时公钥a=[a]g=(xa,ya);随后,将身份标识id和临时公钥a发送给kgc,请求私钥;

步骤2:kgc收到私钥请求后,首先利用已有的身份认证方法确认id与用户身份一致。随后,kgc随机选取整数b∈[1,n-1],并通过公式计算临时公钥b=[b]g=(xb,yb)。

步骤3.3:kgc先根据b计算秘密协商值c=a||b,再通过公式h1=h1(id,c)、h2=h2(id,c)、l=[h1]a+[h2]b、h3=h3(id,l)计算得到用户部分私钥db=h2b+h3smodn,其中符号||表示连接,modn表示模n运算。

步骤4:kgc将临时公钥b和部分私钥dh,通过安全信道发送给用户。

步骤5:用户接收请求响应后,先计算秘密协商值c=a||b,再计算h1=h1(id,c)、h2=h2(id,c),得到部分公钥l=[h1]a+[h2]b,实际私钥d=h2da+sb,秘密存储(l,d)。

在用户密钥使用阶段,私钥和公钥的使用方法与实施例一类同。

本实施例的特性为:kgc可通过系统主私钥控制用户私钥生成,但无法获取用户私钥数据;用户通过设置秘密值保护自身用户私钥的机密性,防止恶意的kgc攻击;支持单标识多密钥模式,即单一用户标识可匹配生成不同的用户公私钥对,解决标识密码体制下的密钥撤销和密钥更新问题。

(3)实施例三;

请见图4,本发明实施例一的实现原理分为三个阶段:系统建立阶段、用户密钥生成阶段和用户密钥使用阶段。

在本实施例的系统建立阶段中,系统建立由密钥生成中心kgc完成。椭圆曲线参数、安全杂凑函数选取方式与实施例一类同。密码函数的具体逻辑运算方式为:

1)秘密协商函数选取为saa(a,id,b)=[a]b和sab(b,id,a)=[b]a,即基于椭圆曲线点乘运算的ecdh密钥协商;

2)安全映射函数选取为h1(id,c)=hash(0x01||id||c)、h2(id,c)=1和h3(id,l)=hash(0x03||id||l),其中hash(·)为杂凑算法。

最后,kgc随机产生系统主私钥并计算得到系统主公钥。同时,规定用户的私密值不能为零(即da≠0),用户具备密钥控制权。

在本实施例的用户密钥生成阶段中,用户密钥生成由用户和kgc共同交互完成。具体步骤如下:

步骤1:用户随机选取整数a∈[1,n-1]作为用户秘密值da=a,并计算临时公钥a=[a]g=(xa,ya);随后,将身份标识id和临时公钥a发送给kgc,请求私钥;

步骤2:kgc收到私钥请求后,首先利用已有的身份认证方法确认id与用户身份一致。随后,kgc随机选取整数b∈[1,n-1],并通过公式计算临时公钥b=[b]g=(xb,yb)。

步骤3:kgc先根据b计算秘密协商值c=[b]a,再通过公式h1=h1(id,c)、l=[h1]a+b、h3=h3(id,l)计算得到用户部分私钥db=b+h3smodn,其中符号||表示连接,modn表示模n运算。

步骤4:kgc将临时公钥b和部分私钥sh,通过安全信道发送给用户。

步骤5:用户接收请求响应后,先计算秘密协商值c=[a]b,再计算得到h1=h1(id,c),部分公钥l=[h1]a+[h2]b,实际私钥d=h2da+sb,秘密存储(l,d)。

在用户密钥使用阶段,私钥和公钥的使用方法与实施例一类同。

本实施例的特性为:kgc可通过系统主私钥控制用户私钥生成,但无法获取用户私钥数据;用户通过设置秘密值保护自身用户私钥的机密性,防止恶意的kgc攻击;密钥生成过程中的密钥协商值具备前向安全性,安全性更高;支持单标识多密钥模式,即单一用户标识可匹配生成不同的用户公私钥对,解决标识密码体制下的密钥撤销和密钥更新问题。

相对于现有技术,本发明具有以下优点:

(1)运算高效性;

本发明所述的实现方法只使用了椭圆曲线点倍和点加运算以及大整数模运算,具备运算效率高、资源消耗小的特点。相比双线性对而言,椭圆曲线的点倍运算量不足双线性对运算量的1/8,且运算所需存储量不足双线性对运算存储量的1/10。而且,本发明可支持不同程度的简化和变形,可在安全强度与计算效率之间进行平衡,调整方法所需的点倍次数和点加次数。

(2)算法兼容性;

本发明的实际公私钥对(d,q)可适用于各类常规椭圆曲线公钥密码算法,即用户直接使用实际私钥d进行密码运算,而其他用户可先通过用户标识和部分公钥还原得到实际公钥,然后使用实际公钥q进行密码运算。

下面以标准的数字签名和公钥加密算法为例说明本发明的适用性(密钥协商算法、签密算法可使用类似的方法处理):

1)数字签名示例;

记用户a为签名者,用户b为验签者。用户a的标识为ida,部分公钥为la,实际私钥为da。

当用户a进行数字签名时,用户a使用标准的私钥签名算法和实际私钥,对消息m进行签名,得到实际签名值本发明在实际签名值的基础上,附加用户a的部分公钥,得到签名值

当用户b进行签名验证时,用户b使用本发明的用户公钥还原方法得到用户的实际公钥qa=pk_restore(ida,la,ppub),再使用标准的公钥验签算法和实际公钥,验证签名合法性

该示例中,用户b需要获取用户a的部分公钥la,la可如示例中描述的方式附带在签名值中传递给用户b,此方式便于用户b独立完成签名值的验证,支持离线验签;也可以由用户b向第三方可信发布平台查询获取用户a的部分公钥。

2)公钥加密示例;

记用户b为加密者,用户a为解密者。用户a的数据符号记录与数字签名示例一致。

当用户b进行公钥加密时,用户b先获取用户a的部分公钥la,再使用本发明的用户公钥还原方法计算用户的实际公钥qa=pk_restore(ida,la,ppub);之后,使用标准的公钥加密算法和实际公钥对消息m进行加密,得到密文c。

当用户a进行私钥解密时,用户a直接使用实际私钥da解密密文c,得到明文消息m。

上述示例中,用户b需要先用户a的部分公钥la,部分公钥可由用户a直接传递给用户b,也可以由用户b向第三方可信发布平台查询;由于算法安全特性,即使部分公钥在传输过程中被篡改,也不会导致影响明文的机密性。

(3)功能完善性;

根据本发明的算法兼容性方面的描述,用户的实际公私钥对(d,q)可支持任何常规椭圆曲线密码算法,只需算法支持签名/加密/协商/签密等功能,本发明所述的无证书体制也能够支持。

应当理解的是,本说明书未详细阐述的部分均属于现有技术。

应当理解的是,上述针对较佳实施例的描述较为详细,并不能因此而认为是对本发明专利保护范围的限制,本领域的普通技术人员在本发明的启示下,在不脱离本发明权利要求所保护的范围情况下,还可以做出替换或变形,均落入本发明的保护范围之内,本发明的请求保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1