一种基于25519椭圆曲线的无证书公钥密码签名方法与流程

文档序号:19483707发布日期:2019-12-21 03:36阅读:601来源:国知局
一种基于25519椭圆曲线的无证书公钥密码签名方法与流程

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



背景技术:

随着信息安全技术的快速发展,传统的基于证书的公钥密码体制(pki)已得到了广泛的应用。由于移动通信网络、无线传感器网络、物联网等新型网络环境的出现,证书用户数量剧增,使得pki体制管理开销较大的缺点被充分暴露。为了简化密钥管理,shamir于1984年首次提出了基于身份的公钥密码体制(ibc);al-riyami和paterson在2003年提出了无证书公钥密码体制(clpkc)。

clpkc体制是介于传统pki体制与ibc体制之间的一种体制模型,它不完全基于用户身份标识进行密码运算,每一位用户都分配有与其身份绑定的公钥(称其为部分公钥,使用时与消息数据共同传输或者可以根据身份标识公开查询)。相比传统pki体制,clpkc体制从结构上消除了证书,确保了公钥无需任何证书支持,也无需进行复杂的证书管理,减少了系统负担和资源代价,更加适合于低带宽需求和低能量消耗的移动安全应用环境和物联网环境。

相比于ibc体制,clpkc体制解决了以下几个问题:1)密钥托管问题。ibc体制的用户私钥完全由kgc决定生成,而clpkc体制的用户私钥为用户秘密值与kgc生成的部分私钥的组合。2)密钥更新问题。ibc体制的用户私钥完全由用户身份标识派生,具有一对一的映射关系,这意味着难以支持用户密钥更新与撤销机制。而clpkc体制下kgc针对同一用户标识可生成的不同私钥,可以为同一用户分配多个私钥。3)计算效率问题。ibc体制是基于双线性对的密码运算,而clpkc体制可基于rsa算法、elgamal算法、ecc算法和双线性对等多种密码学困难问题进行构造,可根据计算效率的要求选择合适的clpkc体制提高计算效率。

迄今为止,国内外学者已提出了几十种无证书公钥密码方案,但是大部分方案都利用双线性对构造方案,导致运行效率低,算法复杂,与ibc体制相比在计算效率方面优势不明显。或采用rsa算法或elgamal算法构造,在保障一定的算法安全强度的前提下密钥所占用的存储空间较大,对于资源受限的场合不一定适用。因此,构造一种高效而轻便的无证书公钥密码签名体制方法是本发明的主要宗旨。



技术实现要素:

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

本发明所采用的技术方案是:一种基于25519椭圆曲线的无证书公钥密码签名方法,应用于密码系统中;所述密码系统包括密钥生成中心kgc和用户;

其特征在于,所述方法包括以下步骤:

步骤1:密码系统建立;

建立系统公共参数,包括含曲线参数及密码函数;确定系统主公私钥对,并将系统公共参数和主公钥向系统内各参与用户发布;

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

步骤1.1:确定无证书公钥密码签名体制的25519曲线参数params={t,q,e(fq),d,n,g},其中t为整数,q为t位素数,满足qmod4=1;e(fq):x2+y2=1+dx2y2为有限域fq构成的fq×fq上点的集合;d为fq上的非平方剩余;n为素数,长度在t-4到t-3位之间;g为椭圆曲线的n阶基点;

步骤1.2:确定无证书公钥密码签名体制的密码函数{f1(·),f2(·),h3(·),h4(·),fb(·)},其中h3(·)表示一组基于哈希函数和数学运算的安全映射函数{0,1}*→[1,n-1],h4(·)表示输出为2t比特的安全映射函数;f1(·)和f2(·)为一组密钥成分协商函数,fb(·)为用户密钥决定函数;

步骤1.3:密钥生成中心随机产生系统主私钥ppri=ssk∈[1,n-1],计算将其结果第t+1至2t比特定义为结果第4至t-2比特参与sk的计算:计算系统主公钥ppub=[sk]g,[·]g表示点乘运算;

密钥生成中心公布系统公共参数{params,f1,f2,h3,h4,fb}及系统主公钥ppub。

步骤2:用户秘密建立;

用户产生秘密值,由秘密值产生临时公私钥对,并向密钥生成中心提交私钥申请,发送用户标识,根据密钥成分协商函数决定是否发送用户临时公钥;

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

步骤2.1:用户选取用户标识id,并随机选取整数ask∈[1,n-1],计算将其结果第t+1至2t比特定义为结果第4至t-2比特参与ak的计算:计算用户部分公钥a=[ak]g;

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

本实施例中,密钥成分协商函数,包括f1(·)及f2(·),根据系统配置的密钥成分协商模式来决定函数返回值;其计算方式包含以下简化和变形:

(1)若用户私钥完全由密钥生成中心决定生成,则f1(·)输出置恒定值h1=0,f2(·)输出置恒定值h2∈[1,n-1];

(2)若用户私钥由密钥生成中心与用户共同决定生成,则f1(·)输出置恒定值h1∈[1,n-1],f2(·)输出由双方公钥a和b计算f2(·)=hash(a||b),或置恒定值h2∈[1,n-1]。

步骤3:用户部分私钥提取;

密钥生成中心根据私钥申请及密钥成分协商函数和用户密钥决定函数产生用户部分私钥,并通过安全信道或采用用户公钥a加密返回给用户;

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

步骤3.1:密钥生成中心接收私钥申请后,提取用户标识id及公钥a并验证用户身份;计算bk=fb(seed,id,a),b=[bk]g,h1=f1(a,b),h2=f2(a,b),生成部分公钥l=[h1]a+[h2]b;确认用户密钥有效期t,计算h3=h3(l,ppub,t,id),得到用户部分私钥sb=h2bk+h3skmodn;

步骤3.2:密钥生成中心将{b,t,sb}通过安全信道或采用用户公钥a加密并发送给用户;其中,当系统参数f1取值不为零时,采用用户公钥a加密。

本实施例中,用户密钥决定函数fb(·),当系统私钥选定后,输出返回值由密钥种子seed,id和a共同决定;当输入数据id不为空,且两次输入数据值id和a一致时,输出返回值也保持一致;当输入数据id为空时保证每次请求该函数所得到的返回值不一致;其计算方式包含以下简化和变形:

(1)若输入数据id为空,则从随机数发生源获取随机数r∈[1,n一1],返回r;

(2)若输入数据id不为空,a为空,则将系统私钥种子与用户id进行组合bsk=seed||id,计算计算返回bk;

(3)若输入数据id和a都不为空,则将系统私钥种子与用户id及公钥a进行组合bsk=seed||id||a,计算计算返回bk。

步骤4:用户私钥建立;

用户根据临时私钥、密钥生成中心下发的部分私钥和密钥成分协商函数计算得到实际私钥,且可验证下发的部分私钥来源是否可信;

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

步骤4.1:用户接收来自密钥生成中心的消息,若消息采用用户公钥a加密,则首先利用用户私钥ak解密得到{b′,t′,s′b},其中b′为用户公钥种子,t′为用户密钥有效期,s′b为用户部分私钥;计算h1=f1(a,b′),h2=f2(a,b′),合成部分公钥l′=[h1]a+[h2]b′;计算h3=h3(l′,ppub,t′,id),合成用户实际公钥q=l′+[h3]ppub;

步骤4.2:用户计算用户私钥α=h1sa+s′bmodn,验证αg=q从而确定密钥生成中心发送的消息{b′,t′,s′b}的合法性;

步骤4.3:根据步骤4.2的验证结果决定是否存储(t′,l′,α),其中t′为用户密钥有效期,l′为部分公钥,α为实际私钥。

步骤5:用户公钥还原;

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

步骤6:消息签名和验证;

持有私钥的用户对消息进行签名,其他用户利用签名用户发送的部分公钥、密钥有效期和用户标识还原得到用户实际公钥,并利用实际公钥验证消息签名的合法性;

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

步骤6.1:持有私钥的用户利用消息种子seedm对消息计算摘要r=h4(seedm,m),利用私钥α计算签名r=rg,s=r+h4(r,l′,ppub,m)αmodn;

步骤6.2:首次建立通信时持有私钥的用户将部分公钥、密钥有效期、用户标识{l′,t′,id}与消息m及签名{r,s}一同发送,再次通信时只需发送消息m及签名{r,s};

步骤6.3:其他用户利用用户公钥还原方法得到实际公钥q,对消息和签名{m′,r′,s′}计算并验证s′g=r′+h4(r′,l″,ppub,m′)q从而确定消息m′的合法性。

本发明所述的无证书公钥密码签名体制组成与一般的无证书密码体制一致,分为密钥生成中心(keygenerationcenter,kgc)和用户,但在私钥申请与提取阶段与一般无证书密码体制模型有所区别,其区别在于:本发明所述的密钥提取步骤在用户设置秘密值步骤之后,而一般模型中用户秘密值步骤设置在密钥提取步骤之后;其优势是可以消除替换公钥攻击、假冒身份攻击和伪造签名攻击,且用户可以在接收到来自kgc密钥信息后利用系统公钥验证数据来源真实性。

本发明的有益效果包括:

(1)运算高效性;

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

(2)算法兼容性;

本发明所述的用户秘密建立、用户私钥建立和用户公钥还原方法,其特征在于:所述的公私钥对(α,l,q)可适用于25519曲线公钥密码算法,即用户直接使用实际私钥α与部分公钥l进行消息签名运算,而其他用户可先通过用户标识和部分公钥还原得到实际公钥,然后使用部分公钥l与实际公钥q进行消息签名验证运算。在计算签名的过程中,25519曲线公钥密码算法无需从高质量的随机数发生器中获取随机数参与签名运算,避免了由于随机数发生器设计漏洞而带来的密钥安全性问题,在资源和成本受限的硬件环境下有较大的优势。

附图说明

图1为本发明实施例的流程图。

具体实施方式

为了便于本领域普通技术人员理解和实施本发明,下面结合附图及实施例对本发明作进一步的详细描述,应当理解,此处所描述的实施示例仅用于说明和解释本发明,并不用于限定本发明。

请见图1,本发明提供的一种基于25519椭圆曲线的无证书公钥密码签名方法,应用于密码系统中;

本实施例的密码系统包括密钥生成中心kgc和用户;

本实施例的方法包括以下步骤:

步骤1:密码系统建立;

建立系统公共参数,包括含曲线参数及密码函数;确定系统主公私钥对,并将系统公共参数和主公钥向系统内各参与用户发布;

步骤2:用户秘密建立;

用户产生秘密值,由秘密值产生临时公私钥对,并向密钥生成中心提交私钥申请,发送用户标识id,根据密钥成分协商函数决定是否发送用户临时公钥;

步骤3:用户部分私钥提取;

密钥生成中心根据私钥申请及密钥成分协商函数和用户密钥决定函数产生用户部分私钥,并通过安全信道或采用用户公钥a加密返回给用户;

步骤4:用户私钥建立;

用户根据临时私钥、密钥生成中心下发的部分私钥和密钥成分协商函数计算得到实际私钥,且可验证下发的部分私钥来源是否可信;

步骤5:用户公钥还原;

其他用户根据部分公钥、系统主公钥、密钥有效期以及用户标识还原得到用户的实际公钥;

步骤6:消息签名和验证;

持有私钥的用户对消息进行签名,其他用户利用签名用户发送的部分公钥、密钥有效期和用户标识还原得到用户实际公钥,并利用实际公钥验证消息签名的合法性。

下面通过具体实施例来具体阐述本技术方案。

实施例一

在该系统安全选项中,上述用户密钥生成机制的具体配置如下:

1)用户产生随机请求ask∈[1,n-1]且f1(·)=0;

2)私钥生成函数:

3)映射函数选取为f2(·)=1和h3=hash(l||ppub||t||id);

配置后的用户密钥生产机制如下:

(一)用户密钥提取(extract)

该步骤主要用于产生用户user的签名私钥。具体过程如下表1所示:

表1

步骤1:用户user在集合{1,2,…,n-1}中选取随机数ask,对其计算摘要并将身份标识id发送给kgc,请求签名私钥。

步骤2:kgc收到私钥请求后,首先利用已有的身份认证方法确认id与user身份一致。随后,将kgc私钥的摘要值的高半部分与id串联得到计算摘要并按照eddsa算法将摘要值的指定比特重组为签名私钥:

通过公式计算签名部分公钥l,

l=b=[bk]g=(xl,yl)

其中,(xl,yl)示l的横纵坐标。

步骤3:kgc确定密钥有效期t,通过以下公式计算签名私钥α,

h3=h3(l||ppub||t||id),

α=bk+h3skmodn

其中h3(·)表示安全哈希函数,符号||表示连接,modn表示模n运算。

步骤4:kgc将消息(b,t,α)通过安全信道发送给用户user。

步骤5:用户user接收kgc发送的消息(b′,t′,α′)。

步骤6:用户user计算l′=1·b′,h3=h3(l′||ppub||t′||id),用以验证αg?=l′+[h3]ppub,选择是否接受并保存(t′,l′,α)。

(二)用户公钥还原(restore)

该步骤主要用于还原出用户user的实际公钥。计算公式如下:

h3=h3(l″||ppub||t″||id′),

q=l″+[h3]ppub

根据上述公式,用户的实际公钥可由t″、id′、l″、ppub计算得出,其中l″为用户的部分公钥,ppub为系统主公钥,t″为密钥有效期,id′为用户标识。

本实施例的方案优势如下:

1)kgc可通过系统主私钥完全控制用户私钥生成;

2)kgc对同一id生成的用户私钥是确定的,因此该模式类似于sm9算法。可通过id恢复用户私钥,无需占用私钥存储空间;

3)运算高效,适合用于批量化密钥生成场景。

实施例二

在该系统安全选项中,上述用户密钥生成机制的具体配置如下:

1)用户产生随机请求ask∈[1,n-1]且f1(·)=0;

2)私钥生成函数:

bsk∈[1,n-1],

3)映射函数选取为f2(·)=1和h3=hash(l||ppub||t||id);

配置后的用户密钥生产机制如下:

(一)用户密钥提取(extract)

该步骤主要用于产生用户user的签名私钥。具体过程如下表2所示:

表2

步骤1:用户user在集合{1,2,…,n-1}中选取随机数ask,对其计算摘要并将身份标识id发送给kgc,请求签名私钥。

步骤2:kgc收到私钥请求后,首先利用已有的身份认证方法确认id与user身份一致。随后,在集合{1,2,…,n-1}中选取随机数bsk,计算摘要并按照eddsa算法将摘要值的指定比特重组为签名私钥:

通过公式计算签名部分公钥l,

l=b=[bk]g=(xl,yl)

其中,(xl,yl)示l的横纵坐标。

步骤3:kgc确定密钥有效期t,通过以下公式计算签名私钥α,

h3=h3(l||ppub||t||id),

α=bk+h3skmodn

其中h3(·)表示安全哈希函数,符号||表示连接,modn表示模n运算。

步骤4:kgc将消息(b,t,α)通过安全信道发送给用户user。

步骤5:用户user接收kgc发送的消息(b′,t′,α′)。

步骤6:用户user计算l′=1·b′,h3=h3(l′||ppub||t′||id),用以验证αg?=l′+[h3]ppub,选择是否接受并保存(t′,l′,α)。

(二)用户公钥还原(restore)

该步骤主要用于还原出用户user的实际公钥。计算公式如下:

h3=h3(l″||ppub||t″||id′),

q=l″+[h3]ppub

根据上述公式,用户的实际公钥可由t″、id′、l″、ppub计算得出,其中l″为用户的部分公钥,ppub为系统主公钥,t″为密钥有效期,id′为用户标识。

本实施例的技术方案优势如下:

1)kgc可通过系统主私钥完全控制用户私钥生成;

2)kgc对同一id生成的用户私钥是不确定的,因此对于使用同一id的用户user可以选择吊销其某个公私钥对,且私钥丢失后不可恢复;

3)运算高效,适合用于批量化密钥生成场景。

实施例三

在该系统安全选项中,上述用户密钥生成机制的具体配置如下:

1)用户产生随机请求ask∈[1,n-1]且f1(·)=1;

2)私钥生成函数:

3)映射函数选取为f2(·)=1和h3=hash(l||ppub||t||id);

配置后的用户密钥生产机制如下:

(一)用户密钥提取(extract)

该步骤主要用于产生用户user的私钥和部分公钥。

具体过程如下表3所示:

表3

步骤1:用户user在集合{1,2,…,n-1}中选取随机数ask,对其计算摘要并按照eddsa算法将摘要值的指定比特重组:

随后,计算a=[ak]g,将身份标识id和部分公钥a发送给kgc,请求私钥;

步骤2:kgc收到私钥请求后,首先利用已有的身份认证方法确认id与user身份一致。随后,将kgc私钥的摘要值的高半部分与id和用户公钥a串联得到计算摘要并按照eddsa算法将摘要值的指定比特重组:

通过公式计算签名部分公钥l,

b=[bk]g,

l=1·a+1·b=(xl,yl)

其中,(xl,yl)示l的横纵坐标。

步骤3:kgc确定密钥有效期t,通过以下公式计算签名私钥sb,

h3=h3(l||ppub||t||id),

sb=bk+h3skmodn

其中h3(·)表示安全哈希函数,符号||表示连接,modn表示模n运算。

步骤4:kgc将消息(b,t,sb)通过安全信道或利用用户user的公钥a进行加密,发送给用户user。

步骤5:用户user接收并解密(若消息已加密)kgc发送的消息(b′,t′,s′b)。

步骤6:用户user计算恢复用户部分公钥l′=1.a+1.b′,实际私钥α=ak+s′bmodn

步骤7:用户user计算h3=h3(l′||ppub||t′||id),用以验证αg?=l′+[h3]ppub,选择是否接受并保存私钥(t′,l′,α)。

(二)用户公钥还原(restore)

该步骤主要用于还原出用户user的实际公钥。计算公式如下:

h3=h3(l″||ppub||t″||id′),

q=l″+[h3]ppub

根据上述公式,用户的实际公钥可由t″、id′、l″、ppub计算得出,其中l″为用户的部分公钥,ppub为系统主公钥,t″为密钥有效期,id′为用户标识。

本实施例的技术方案优势如下:

1)kgc可通过系统主私钥参与控制用户私钥生成;

2)用户参与生成实际使用私钥,kgc不能完全控制用户实际使用私钥;

3)kgc对同一id用户生成的私钥是确定的,但实际使用私钥由用户决定。若用户选择一个有意义的便于记忆的ask作为私钥,则可与kgc配合,通过id恢复用户实际使用私钥。用户通过选择不同的ask用以生成不同的实际使用私钥,因此对于使用同一id的用户user可以选择吊销其某些公钥。

实施例四

在该系统安全选项中,上述用户密钥生成机制的具体配置如下:

1)用户产生随机请求ask∈[1,n-1]且f1(·)=1;

2)私钥生成函数:

bsk∈[1,n-1],

3)映射函数选取为f2(·)=1和h3=hash(l||ppub||t||id);

配置后的用户密钥生产机制如下:

(一)用户密钥提取(extract)

该步骤主要用于产生用户user的私钥和部分公钥。

具体过程如下表4所示:

表4

步骤1:用户user在集合{1,2,…,n-1}中选取随机数ask,对其计算摘要并按照eddsa算法将摘要值的指定比特重组为签名私钥的第一部分:

随后,计算a=[ak]g,将身份标识id和部分公钥a发送给kgc,请求私钥;

步骤2:kgc收到私钥请求后,首先利用已有的身份认证方法确认id与user身份一致。随后,在集合{1,2,…,n-1}中选取随机数bsk,再次计算摘要并按照eddsa算法将摘要值的指定比特重组为签名私钥:

通过公式计算签名部分公钥l,

b=[bk]g,

l=1·a+1·b=(xl,yl)

其中,(xl,yl)示l的横纵坐标。

步骤3:kgc确定密钥有效期t,通过以下公式计算签名私钥sb,

h3=h3(l||ppub||t||id),

sb=bk+h3skmodn

其中h3(·)表示安全哈希函数,符号||表示连接,modn表示模n运算。

步骤4:kgc将消息(b,t,sb)通过安全信道或利用用户user的公钥a进行加密,发送给用户user。

步骤5:用户user接收并解密(若消息已加密)kgc发送的消息(b′,t′,s′b)。

步骤6:用户user计算恢复用户部分公钥l′=1·a+1·b′,实际私钥α=ak+s′bmodn。

步骤7:用户user计算h3=h3(l′||ppub||t′||id),用以验证αg?=l′+[h3]ppub,选择是否接受并保存私钥(t′,l′,α)。

(二)用户公钥还原(restore)

该步骤主要用于还原出用户user的实际公钥。计算公式如下:

h3=h3(l″|||ppub||t″||id′),

q=l″+[h3]ppub

根据上述公式,用户的实际公钥可由t″、id′、l″、ppub计算得出,其中l″为用户的部分公钥,ppub为系统主公钥,t″为密钥有效期,id′为用户标识。

本实施例的技术方案优势如下:

1)kgc可通过系统主私钥参与控制用户私钥生成;

2)用户参与生成实际使用私钥,kgc不能完全控制用户实际使用私钥;

3)kgc对同一id生成的用户私钥是不确定的,因此对于使用同一id的用户user可以选择吊销其某个公钥,但私钥丢失后不可恢复。

签名验签方案

(一)用户对消息签名(sign)

该步骤主要用于展示拥有签名私钥的用户usera如何进行消息签名。计算步骤如下:

步骤1:将用户私钥的摘要值的高半部分与消息m串联,对其计算摘要:

步骤2:计算签名:

r=rg

s=r+h4(r,l,ppub,m)αmodn

步骤3:将签名值(r,s)与消息m及表明用户身份的用户标识id,部分公钥l′,密钥有效期t′绑定一同发送。

(二)验证消息签名(verify)

该步骤主要用于展示用户userb如何通过系统公钥及用户usera的公钥及标识对消息签名进行验证。计算步骤如下:

步骤1:用户userb从用户usera处接收到用户usera的标识id,部分公钥l″,密钥有效期t″,消息m′,签名(r′,s′)。根据用户usera的标识和部分公钥还原实际公钥q,详细步骤参见用户公钥还原部分。

步骤2:计算并验证:

s′g?=r′+h4(r′,l″,ppub,m′)q

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

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