首页 / 专利库 / 电脑编程 / 算法 / 哈希算法 / 两方EdDSA协同签名协议

两方EdDSA协同签名协议

阅读:787发布:2020-05-08

专利汇可以提供两方EdDSA协同签名协议专利检索,专利查询,专利分析的服务。并且本 发明 公开了两方EdDSA协同签名协议,属于 密码学 技术领域。包括密钥生成、签名过程和验证过程,所述密钥生成过程:构造哈希函数H(·),生成密钥sk,所述密钥生成中密钥sk分割成多个部分,并由双方分别保管;所述签名过程:第一方和第二方共同完成签名过程,最后所得的签名为coding(R)||coding(S),其中S由第一方所得,R由第二方所得;所述验证过程:对于明文M签名后的消息coding(R)||coding(S),使用验证密钥coding(A)验证;判断等式是否成立。提高签名密钥的安全性。,下面是两方EdDSA协同签名协议专利的具体信息内容。

1.两方EdDSA协同签名协议,包括密钥生成、签名过程和验证过程,其特征在于所述密钥生成过程:构造哈希函数H(·),生成密钥sk,所述密钥生成中密钥sk分割成多个部分,并由双方分别保管;
所述签名过程:第一方和第二方共同完成签名过程,最后所得的签名为coding(R)||coding(S),其中S由第一方所得,R由第二方所得;
所述验证过程:对于明文M签名后的消息coding(R)||coding(S),使用验证密钥coding(A)验证;判断等式是否成立。
2.根据权利要求1所述的两方EdDSA协同签名协议,其特征在于所述密钥sk包括三个部分,第一部分是第一个l’/4位的d11,第二部分是第二个l’/4位的d10,最后一部分是其余的l’/2位的d2。
3.根据权利要求2所述的双方EdDSA协同签名协议,其特征在于所述的密钥d11、d10、d2分配完成后,第一部分是由第一方保存,剩下的两个部分是由第二方保存;第一方需要发送SHA256([s1]B)给第二方,第二方发送在发送[s2]B给第一方,第一方收到[s2]B后,再发送[s1]B给第二方。
4.根据权利要求2所述的两方EdDSA协同签名协议,其特征在于所述的共同完成签名的过程为:
1)第一方通过d11计算出r1=H(d11||M),并计算σA=(r1-s1-α)modL以及RA=[α]B;第一方将σA和RA发送给第二方;
2)第二方通过d10计算r2=H(d10||M),并令β=H(coding(R)||coding(A)||M);当第二方接收到第一方发送的σA和RA后,计算出[r1]B的值,于是能够得到R=[r1]B+[r2]B=[r]B;
3)第二方计算σB=[σA+r2+β(s2-σA)]modL,并将σB和β发送给第一方;
4)第一方接收到σB和β后,计算出S=[σB+s1+α+β(r1-α)]modL=(r+βs)modL;
5)最后双方共同所得到的签名为coding(R)||coding(S)。
5.根据权利要求1所述的两方EdDSA协同签名协议,其特征在于所述哈希函数H(·)为h=H(coding(R)||coding(A)||M),将任意长度的比特串编码为l’长度的字符串;当x=l’/2,将x分为l’/4比特的x0,l’/4比特的x1,剩下的为x2,然后计算H(x)=h(x0||x2)||h(x1||x2)。
6.根据权利要求5所述的两方EdDSA协同签名协议,其特征在于哈希函数H(·)具有单向性,通过以下方法证明:
若哈希函数h是单向的,则哈希函数H也是单向的;假设攻击者A可以攻破哈希函数H的单向性;设计算法B攻破h的单向性,就是给出y和h,能找到x能够满足y=h(x),B把y||y发送给A,通过y||y=h(x0||x2)||h(x0||x2)=H(x0||x0||x2),A求出x0||x2,B计算出x0||x2作为x的值。
7.根据权利要求5所述的两方EdDSA协同签名协议,其特征在于哈希函数H(·)具有防碰撞性,证明方法如下:
假设攻击者A可以攻破哈希函数H的抗碰撞性。设计算法B攻破h的抗碰撞性,就是(1)给出h,能找到x和x',满足h(x)=h(x′);(2)给出x和h,能找到x'满足h(x)=h(x')。
(1)攻击者A求出不同的x0||x1||x2和x′0||x′1||x2′满足H(x0||x1||x2)=H(x′0||x′1||x′2)=h(x0||x2)||h(x1||x2)=h(x0′||x2′)||h(x1′||x2′)。由于A可以攻破哈希函数H的抗碰撞性,那么我们有x0||x2≠x′0||x′2或x1||x2≠x′1||x′2。因此,B就能得到x=x0||x2和x′=x′0||x2′;或者x=x1||x2和x′=x′1||x2′;
(2)攻击者A得到不同的x′0||x′1||x2′满足H(x0||x0||x2)=h(x0||x2)||h(x0||x2)=H(x′0||x′1||x′2),其中x=x0||x2,B就能得到x′=x′0||x2′。

说明书全文

两方EdDSA协同签名协议

技术领域

[0001] 本发明涉及密码学技术领域,具体涉及两方EdDSA协同签名协议。

背景技术

[0002] Edwards-curve数字签名算法被称为EdDSA,是一种比ECDSA更高效的新型签名方案。在EdDSA算法中,需要对整数或字符串进行如下编码:
[0003] coding(·):整数s以小尾数形式编码为b位。将椭圆曲线上的一个元素(x,y)编码为b比特字符串,记为coding(x,y),它是y的b-1比特和1比特的x相连。对于x的值,若原x是负的,则为1;若原x是正的,则为0。
[0004] EdDSA的签名过程如下:
[0005] ·密钥生成:
[0006] 随机选择一个b比特的字符串k,通过哈希函数得到H(k)=(h0,h1,...,h2b-1),并计算出 以及A=[s]B,由此得到验证密钥为coding(A),签名密钥为s。其中coding(·)的功能如上描述。
[0007] ·签名过程:
[0008] 对于明文消息M,输出签名后的消息coding(R)//coding(S),其中r=H(hb||…||h2b-1||M),R=[r]B,S=(r+H(coding(R)||(coding(A))||M)*s)mod L。
[0009] ·验证过程:
[0010] 对于明文M签名后的消息coding(R)//coding(S),使用验证密钥coding(A)验证。判断等式[2c*S]B=2c*R+[2c*h]A是否成立,其中h=H(coding(R)||coding(A)||M)。
[0011] 对以上所用符号的说明如下:p为椭圆曲线E的奇素数幂;b为满足8的倍数的整数,其中EdDSA的公钥恰好为b比特,EdDSA的签名恰好为b比特;c为等于2或3的整数;n为满足c<=n<b的整数;B为椭圆曲线E上的点;L是由B所组成的有限循环群的阶。
[0012] 在EdDSA算法中,签名密钥一旦泄露,整个方案将不再安全。为了提高签名密钥的安全性,本专利提出一个两方协同的EdDSA签名算法。

发明内容

[0013] 针对现有技术的不足,本发明提供一种两方EdDSA协同签名协议的技术方案,解决了现有签名方式不安全的问题。
[0014] 两方EdDSA协同签名协议,包括密钥生成、签名过程和验证过程,所述密钥生成过程构造哈希函数H(·),生成密钥sk,所述密钥生成中密钥sk分割成多个部分,并由双方分别保管;
[0015] 所述签名过程:第一方和第二方共同完成签名过程,最后所得的签名为coding(R)//coding(S),其中S由第一方所得,R由第二方所得;
[0016] 所述验证过程:对于明文M签名后的消息coding(R)||coding(S),使用验证密钥coding(A)验证;判断等式是否成立。
[0017] 进一步的,所述密钥sk包括三个部分,第一部分是第一个/′/4位的d11,第二部分是第二个/′/4位的d10,最后一部分是其余的/′/2位的d2。
[0018] 进一步的,所述的密钥d11、d10、d2分配完成后,第一部分是由第一方保存,剩下的两个部分是由第二方保存;第一方需要发送SHA256([s1]B)给第二方,第二方发送在发送[s2]B给第一方,第一方收到[s2]B后,再发送[s1]B给第二方。
[0019] 进一步的,所述的共同完成签名的过程为:
[0020] 1)第一方通过d11计算出r1=H(d11||M),并计算σA=(r1-s1-α)mod L以及RA=[α]B;第一方将σA和RA发送给第二方;
[0021] 2)第二方通过d10计算r2=H(d10||M),并令β=H(coding(R)||coding(A)||M);当第二方接收到第一方发送的σA和RA后,计算出[r1]B的值,于是能够得到R=[r1]B+[r2]B=[r]B;
[0022] 3)第二方计算σB=[σA+r2+β(s2-σA)]mod L,并将σB和β发送给第一方;
[0023] 4)第一方接收到σB和β后,计算出S=[σB+s1+α+β(r1-α)]mod L=(r+βs)mod L;
[0024] 5)最后双方共同所得到的签名为coding(R)//coding(S)。
[0025] 进一步的,所述哈希函数H(·)为h=H(coding(R)||coding(A)||M),将任意长度的比特串编码为/′长度的字符串;当x<I′/2时,将其填充为/′/2比特,当x>=/′/2,将x分为/′/4比特的x0,I′/4比特的x1,剩下的为x2,然后计算H(x)=h(x0||x2)||h(x1||x2)。
[0026] 进一步的,哈希函数H(·)具有单向性,通过以下方法证明:
[0027] 若哈希函数h是单向的,则哈希函数H也是单向的;假设攻击者A可以攻破哈希函数H的单向性;设计算法B攻破h的单向性,就是给出y和h,能找到x能够满足y=h(x),B把y||y发送给A,通过y||y=h(x0||x2)||h(x0||x2)=H(x0||x0||x2),A求出x0||x2,B计算出x0||x2作为x的值。
[0028] 进一步的,哈希函数H(·)具有防碰撞性,证明方法如下:
[0029] 假设攻击者A可以攻破哈希函数H的抗碰撞性。设计算法B攻破h的抗碰撞性,就是(1)给出h,能找到x和x′,满足h(x)=h(x′);(2)给出x和h,能找到x′满足h(x)=h(x′)。
[0030] (1)攻击者A求出不同的x0||x1||x2和x′0||x′1||x2′满足H(x0||x1||x2)=H(x′0||x′1||x′2)=h(x0||x2)||h(x1||x2)=h(x0′||x2′)||h(x1′||x2′)。由于A可以攻破哈希函数H的抗碰撞性,那么我们有x0||x2≠x′0||x′2或x1||x2≠x′1||x′2。因此,B就能得到x=x0||x2和x′=x′0||x2′;或者x=x1||x2和x′=x′1||x2′
[0031] (2)攻击者A得到不同的x′0||x′1||x2′满足H(x0||x0||x2)=h(x0||x2)||h(x0||x2)=H(x′0||x′1||x′2),其中x=x0||x2,B就能得到x′=x′0||x2′。
[0032] 本方法最大特点在于在保持原有EdDSA签名算法的特点(如签名时所用的随机数是确定的)的前提下,实现了两方协同签名,提高签名密钥的安全性。附图说明
[0033] 图1为两方EdDSA算法的密钥生成;
[0034] 图2为两方EdDSA算法的签名过程。

具体实施方式

[0035] 下面结合说明书附图对本发明的技术方案作进一步说明。
[0036] 对于传统的EdDSA,存在密钥保存不安全问题。对此,通过安全的两方数字签名协议来解决这个问题。
[0037] 首先,在一个安全的哈希函数h(·)的基础上,构造一个新的函数H(·)。该哈希函数h(·)将任意长度的字符串编码为/长度的比特串。而新函数H(·)将任意长度的比特串编码为/′长度的字符串。当x<I′/2时,将其填充为/′/2比特。当x>=I′/2,将x分为/′/4比特的x0,/′/4比特的x1,剩下的为x2。然后计算H(x)=h(x0||x2)||h(x1||x2)。
[0038] 以下证明所构造的新哈希函数H(·)符合密码哈希函数的单向性和抗碰撞性。
[0039] ·若哈希函数h是单向的,则提出的哈希函数H也是单向的
[0040] 假设攻击者A可以攻破哈希函数H的单向性。设计算法B攻破h的单向性,就是给出y和h,能找到x能够满足y=h(x)。B把y||y发送给A。通过y||y=h(x0||x2)||h(x0||x2)=H(x0||x0||x2),A求出x0||x2。B计算出x0||x2作为x的值。
[0041] ·抗碰撞性
[0042] 假设攻击者A可以攻破哈希函数H的抗碰撞性。设计算法B攻破h的抗碰撞性,就是(1)给出h,能找到x和x′,满足h(x)=h(x′);(2)给出x和h,能找到x′满足h(x)=h(x′)。具体如下:
[0043] (1)攻击者A求出不同的x0||x1||x2和x′0||x′1||x2′满足H(x0||x1||x2)=H(x′0||x′1||x′2)=h(x0||x2)||h(x1||x2)=h(x0′||x2′)||h(x1′||x2′)。由于A可以攻破哈希函数H的抗碰撞性,那么我们有x0||x2≠x′0||x′2或x1||x2≠x′1||x′2。因此,B就能得到x=x0||x2和x′=x′0||x2′;或者x=x1||x2和x′=x′1||x2′
[0044] (2)攻击者A得到不同的x′0||x′1||x2′满足H(x0||x0||x2)=h(x0||x2)||h(x0||x2)=H(x′0||x′1||x′2),其中x=x0||x2,B就能得到x′=x′0||x2′。
[0045] 由以上可知所构造的哈希函数H(·)满足单向性和抗碰撞性。
[0046] 在EdDSA算法中,通常建议edwards25519和edwards448这两条曲线来实例化。本专利中的算法适合于这条曲线的实例化。
[0047] 两方EdDSA签名过程如下:
[0048] ·密钥生成:
[0049] 如图一所示。与原EdDSA方案相比,将签名密钥sk分割成三个部分,第一部分是第一个/′/4位的d11,第二部分是第二个/′/4位的d10,最后一部分是其余的I′/2位的d2。第一部分是由Alice(第一方)保存,剩下的两个部分是由Bob(第二方)保存。值得一提的是,在发送[s1]B给Bob之前,Alice需要发送5HA256([s1]B)给Bob,Alice收到Bob的[s2]B后,再发送[s1]B给Bob。此步骤是用于防止Bob能够单独地决定A的签名过程。最后,得到验证密钥A=[s1]B+[s2]B=[s]B,相应的签名密钥d=d11||d10||d2。Alice拥有d11、s1,Bob拥有d10、d2、[s1]B、s2。
[0050] ·签名过程:
[0051] 如图二所示,具体过程如下:
[0052] 1)Alice通过d11计算出r1=H(d11||M),并计算σA=(r1-s1-α)mod L以及RA=[α]B,Alice将σA和RA发送给Bob;
[0053] 2)Bob通过d10计算r2=H(d10||M),令β=H(coding(R)||coding(A)||M)。当Bob接收到Alice发送的σA和RA后,可以计算出[r1]B的值。于是能够得到R=[r1]B+[r2]B=[r]B;
[0054] 3)Bob计算σB=[σA+r2+β(s2-σA)]mod L,并将σB和β发送给Alice;
[0055] 4)Alice接收到σB和β后,就可以计算出S=[σB+s1+α+β(r1-α)]mod L=(r+βs)mod L;
[0056] 5)最后所得到的签名为coding(R)//coding(S)。
[0057] ·验证过程:
[0058] 对于明文M签名后的消息coding(R)||coding(S),使用验证密钥coding(A)验证。判断等式是否成立,其中h=H(coding(R)||coding(A)||M)。
[0059] 在所设计的两方签名协议中,对于Bob,他只知道三个方程,分别为σA=r1-s1-α、σB=σA+r2+β(s2-σA)和y=[α]B。最后一个方程y=[α]B类似于离散对数方程,不可解。因此实际上为两个方程和三个未知数,联立方程组后不可解。所以Alice所拥有的密钥对于Bob是安全的。
[0060] 而对于Alice,他只知道方程S=σB+s1+α+β(r1-α),R=[r1]B+[r2]B。对于最后一个方程R=[r1]B+[r2]B,同样不可解。因此实际上为一个方程组,两个未知数,无解。所以Bob所拥有的密钥对于Alice是安全的。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈