一种基于椭圆曲线的协同签名方法、装置和系统
文献发布时间:2023-06-19 11:57:35
技术领域
本发明涉及信息安全技术领域,具体涉及一种基于椭圆曲线的协同签名方法、装置和系统。
背景技术
在信息安全方面,数字签名是非常重要的一部分。安全的数字签名在电子公文、电子合同等应用中确定对方身份,是信息真实的基础。在公钥密码体制中,保证私钥的安全性是一个非常重要的问题。用户的私钥通常 需要在专门的硬件安全模块(HSM,HardwareSecurity Module)中安全存储和使用,私钥不能从密码硬件中导出。常见的HSM包括USBKEY(U盾)、智能卡、TF卡(Trans-flash Card,闪存卡)、密码芯片等。
目前,已有多种旨在提高私钥安全性的方案。基于门限密码学的方案,将私钥进行拆分由不同实体负责存储,任何一方均无法获取全部的私钥信息;仅当不低于门限数目的实体参与运算,才能完成数字签名的生成。此外,该方案中,各个实体之间交互复杂,涉及点加、点乘、点减等多种运算,通信次数较多,通信数据量较大,计算开销较大。
因此如何设计一种基于椭圆曲线的协同签名方法,能够保证私钥的安全性且保证各个通信方交互简单、通信次数和数据量减少是目前急需解决的问题。
发明内容
本发明针对上述问题,有必要提供一种基于椭圆曲线的协同签名方法、装置和系统,能够保证私钥的安全性且保证各个通信方交互简单、通信次数和数据量减少。
本发明第一方面提出一种基于椭圆曲线的协同签名方法,应用于进行协同签名的第一通信方,所述协同签名方法包括:
生成第一随机数,并根据所述第一随机数和椭圆曲线基点计算生成第一部分签名,并将根据待签名消息计算生成的消息摘要和所述第一部分签名发送至第二通信方,以使所述第二通信方能够基于所生成的第二随机数和所述第一部分签名计算确定第二椭圆曲线随机点;
接收第二通信方发送的第二部分签名和第三部分签名;其中,第二部分签名由所述第二通信方根据所述消息摘要和所述第二椭圆曲线随机点计算生成;第三部分签名由所述第二通信方在第二部分签名为非零值时,基于所述第二随机数和所持有的第二私钥分量生成;
根据所述第一随机数、所持有的第一私钥分量、所述第二部分签名和所述第三部分签名计算生成第四部分签名;
在所述第四部分签名为非零值时,对外输出所述第二部分签名和所述第四部分签名构成的所述待签名消息的完整签名。
进一步的,采用点乘算法对所述第一随机数和椭圆曲线基点计算生成所述第一部分签名;
采用公式e=Hash(ZA||M)对所述待签名消息计算生成消息摘要;
其中,e为消息摘要,Z
采用公式s = (k
其中,s为第四部分签名,k
进一步的,所述第一通信方和所述第二通信方共同的用户身份标识至少包括所述第一通信方和所述第二通信方共享的椭圆曲线算法的椭圆曲线参数以及所述第一通信方和所述第二通信方根据所述第一私钥分量、所述第二私钥分量以及基于椭圆曲线算法的安全计算协议所生成的公钥。
本发明第二方面提出了一种基于椭圆曲线的协同签名方法,应用于进行协同签名的第二通信方,所述协同签名方法包括:
接收第一通信方发送的消息摘要和第一部分签名,其中,所述消息摘要由所述第一通信方根据待签名消息计算生成,所述第一部分签名由所述第一通信方根据生成的第一随机数和椭圆曲线基点计算生成;
生成第二随机数,并根据所述第二随机数和所述第一部分签名计算生成第二椭圆曲线随机点,并在在第二部分签名为非零值时,基于所述第二随机数和所持有的第二私钥分量生成第三部分签名;
将所述第二部分签名和所述第三部分签名发送给所述第一通信方,以使所述第一通信方根据所述第一随机数、所持有的第一私钥分量、所述第二部分签名和所述第三部分签名计算生成第四部分签名,并在所述第四部分签名为非零值时,对外输出所述第二部分签名和所述第四部分签名构成的所述待签名消息的完整签名。
进一步的,采用公式(x
其中,(x
采用公式r=( e+x
其中,r为所述第二部分签名,x
采用公式s
其中,s
本发明第三方面提出一种基于椭圆曲线的协同签名装置,应用于进行协同签名的第一通信方,包括至少一个处理器,以及与所述至少一个处理器连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行前述应用于进行协同签名的第一通信方的协同签名算法。
本发明第四方面提出一种基于椭圆曲线的协同签名装置,应用于进行协同签名的第二通信方,包括至少一个处理器,以及与所述至少一个处理器连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行前述应用于进行协同签名的第二通信方的协同签名算法。
本发明第五方面提出一种基于椭圆曲线的协同签名系统,包括第一协同签名装置和第二协同签名装置,所述第一协同签名装置为应用于进行协同签名的第一通信方的协同签名装置,所述第二协同签名装置为应用于进行协同签名的第二通信方的协同签名装置。
本发明第六方面提出一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行前述应用于进行协同签名的第一通信方的协同签名算法。
本发明第气方面提出一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行前述应用于进行协同签名的第二通信方的协同签名算法。
本发明具有突出的实质性特点和显著的进步,具体的说:
(1)本发明中通信双方分别存储部分私钥信息,其中任何一方不能推导出完整的私钥信息,进一步的保护了完整的签名私钥,双方协同才能完成对消息的签名,提高了签名的安全性。
(2)本发明技术方案通过密钥拆分的算法设计充分保证密码算法的安全性,在不依赖于密码硬件的软件密码模块中使用,也可以达到用户数据安全保密的效果;
(3)本发明在进行协同签名的过程中,第一通信方在计算第四部分签名时需要进行一次逆元运算,在计算第一部分签名时需要进行一次点乘操作,且该点乘操作支持预运算;第二通信方在计算第二椭圆曲线随机点时需要进行一次点乘运算,在计算第三部分签名时需要进行一次逆元运算,且该点乘运算支持预运算,因此整个协同签名过程中只需要进行两次逆元运算和两次点乘运算,所需的计算开销显著下降,使得通信交互简单、通信数据量减少,给算法的实现带来了很大的便利。
(4)本发明中,通过让第四部分签名,含有协同签名双方分别选取的随机数及双方各自持有的私钥分量,不但使第四部分签名具有更好的混淆效果,而且也使第四部分签名具有签名的作用,从而提高了协同签名双方进行签名的安全性。
(5)由于在协同签名的过程中,第一通信方和第二通信方通过两次通信便完成了对待签名消息的签名,从而减少了签名数据在网络中传输的总时间,进而能够满足无线移动通信或云计算环境中低延迟、少交互的应用需求。
本发明的附加方面和优点将在下面的描述部分中变得明显,或通过本发明的实践了解到。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1是根据本发明实施例的一种基于椭圆曲线的协同签名方法,应用于进行协同签名的第一通信方的流程图;
图2是根据本发明实施例的一种基于椭圆曲线的协同签名方法中公钥生成的流程图;
图3是根据本发明实施例的一种基于椭圆曲线的协同签名方法,应用于进行协同签名的第二通信方的流程图;
图4是根据本发明实施例的一种基于椭圆曲线的协同签名方法双方交互的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,当一个组件被认为是“连接”另一个组件,它可以是直接连接到另一个组件或者可能同时存在居中组件。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。
本申请实施例中的技术方案为解决上述的技术问题,总体思路如下:生成第一随机数,并根据所述第一随机数和椭圆曲线基点计算生成第一部分签名,并将根据待签名消息计算生成的消息摘要和所述第一部分签名发送至第二通信方,以使所述第二通信方能够基于所生成的第二随机数和所述第一部分签名计算确定第二椭圆曲线随机点;
接收第二通信方发送的第二部分签名和第三部分签名;其中,第二部分签名由所述第二通信方根据所述消息摘要和所述第二椭圆曲线随机点计算生成;第三部分签名由所述第二通信方在第二部分签名为非零值时,基于所述第二随机数和所持有的第二私钥分量生成;
根据所述第一随机数、所持有的第一私钥分量、所述第二部分签名和所述第三部分签名计算生成第四部分签名;
在所述第四部分签名为非零值时,对外输出所述第二部分签名和所述第四部分签名构成的所述待签名消息的完整签名。
本发明中通信双方分别存储部分私钥信息,其中任何一方不能推导出完整的私钥信息,进一步的保护了完整的签名私钥,双方协同才能完成对消息的签名,提高了签名的安全性。
本发明的技术方案通过密钥拆分的算法设计充分保证密码算法的安全性,在不依赖于密码硬件的软件密码模块中使用,也可以达到用户数据安全保密的效果。
为了更好地理解上述技术方案,下面通过附图以及具体实施例对本发明技术方案做详细地说明,应当理解本发明实施例以及实施例中的具体特征是对本发明技术方案的详细说明,而不是对本发明技术方案的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互组合。
以下,将分别从第一通信方、第二通信方的角度对协同签名方法进行描述:
实施例1
图1是根据本发明实施例的基于椭圆曲线的协同签名方法,应用于进行协同签名的第一通信方的流程图,如图1所示,所述协同签名方法包括:
步骤101生成第一随机数k,并根据所述第一随机数k和椭圆曲线基点计算生成第一部分签名,并将根据待签名消息计算生成的消息摘要和所述第一部分签名发送至第二通信方,以使所述第二通信方能够基于所生成的第二随机数和所述第一部分签名计算确定第二椭圆曲线随机点;
具体的,采用点乘算法对所述第一随机数k
具体的,在生成消息摘要时,第一通信方将第一通信方和第二通信方共同的用户身份标识Z
其中,||表示拼接,Hash( )表示预定的密码杂凑函数。
需要说明的是:在进行协同签名之前,通信双方即第一通信方和第二通信方需要满足共享椭圆曲线的参数E(Fq)、G和n,椭圆曲线E为定义在有限域Fq上的椭圆曲线,G表示椭圆曲线E上n阶的基点,各参数的具体取值等均根据椭圆曲线算法预先设定。
具体的,所述第一通信方和所述第二通信方共同的用户身份标识Z
在具体实施时,双方共享了椭圆曲线E(Fp)的上述参数之后,通信双方生成各自的私钥分量,并协同生成完整的签名公钥,具体步骤如图2所示:
第一通信方生成随机数d
第一通信方根据第一私钥分量d
第二通信方生成随机数d
第二通信方根据第二私钥分量d
其中,本发明中以类似[k]G的形式表示椭圆曲线E上的点乘运算,[k]G代表点G的k倍点,k是正整数。表示数值的乘法运算时乘号省略,例如k
在第一通信方和第二通信方均拥有完整的签名公钥之后,当需要对位于第一通信方的待签名消息进行签名操作时,第一通信方需要生成第一随机数,并将所述第一随机数和椭圆曲线基点计算生成第一部分签名发送给第二通信方,使第二通信方能够基于所生成的第二随机数和所述第一部分签名计算确定第二椭圆曲线随机点,并根据所述消息摘要和所述第二椭圆曲线随机点计算生成第二部分签名,并在第二部分签名为非零值时,基于所述第二随机数和所持有的第二私钥分量生成第三部分签名。
第一通信方在接收到第二通信方发送的第二部分签名和第三部分签名之后,才能执行步骤102;
步骤102,根据所述第一随机数、所持有的第一私钥分量、所述第二部分签名和所述第三部分签名计算生成第四部分签名;
在所述第四部分签名为非零值时,对外输出所述第二部分签名和所述第四部分签名构成的所述待签名消息的完整签名。
具体的,第一通信方采用公式s = (k
其中,mod n表示模n运算,s为第四部分签名,k
本发明在进行协同签名的过程中,第一通信方在计算第四部分签名时需要进行一次逆元运算,在计算第一部分签名时需要进行一次点乘操作,且该点乘操作支持预运算;第二通信方在计算第二椭圆曲线随机点时需要进行一次点乘运算,在计算第三部分签名时需要进行一次逆元运算,且该点乘运算支持预运算,因此整个协同签名过程中只需要进行两次逆元运算和两次点乘运算,所需的计算开销显著下降,使得通信交互简单、通信数据量减少,给算法的实现带来了很大的便利。
实施例2
本实施例从第二通信方的角度进行描述所述协同签名方法,如图3所示,所述协同签名方法包括:
步骤201,接收第一通信方发送的消息摘要和第一部分签名,其中,所述消息摘要由所述第一通信方根据待签名消息计算生成,所述第一部分签名由所述第一通信方根据生成的第一随机数和椭圆曲线基点计算生成.
步骤202,生成第二随机数,并根据所述第二随机数和所述第一部分签名计算生成第二椭圆曲线随机点,具体的,采用公式(x
其中,(x
获取所述第二椭圆曲线随机点后,根据所述消息摘要和所述第二椭圆曲线随机点生成所述第二部分签名。
具体的,采用公式r=( e+x
其中,r为所述第二部分签名,x
在获得第二部分签名之后,还需要先判断第二部分签名r是否等于0,若等于0,则需要重新生成第二随机数k
在第二部分签名r为非零值时,基于所述第二随机数k
具体的,采用公式s
其中,s
步骤203,将所述第二部分签名r和所述第三部分签名s
实施例3
为了使本领域的技术人员能更加清楚的理解上述协同签名过程,如图4所示,本实施例从第一通信方和第二通信方进行交互的过程进行详细的描述。
所述协同签名过程如下:
步骤301,所述第一通信方生成第一随机数k
在具体实施时,所述第一通信方采用点乘算法对所述第一随机数k
步骤302,所述第一通信方将根据待签名消息计算生成的消息摘要e和所述第一部分签名[k
步骤303,所述第二通信方生成第二随机数k
具体的,所述第一通信方采用公式(x
其中,x
步骤304,所述第二通信方根据所述消息摘要e和所述第二椭圆曲线随机点(x
具体的,所述第二通信方采用公式r=( e+x
其中,r为所述第二部分签名,x
步骤305,所述第二通信方判断所述第二部分签名r是否为零,若所述第二部分签名r为零时,重新生成第二随机数k
步骤306,所述第二通信方基于所述第二随机数k
具体的,所述第二通信方采用公式s
其中,k
步骤307,所述第二通信方将所述第二部分签名r和所述第三部分签名s
步骤308,所述第一通信方根据所述第一随机数k
具体的,所述第一通信方采用公式s = (k
其中,k
步骤309,所述第一通信判断所述第四部分签名s是否为零,若所述第四部分签名s为零时,重新生成第一随机数k
步骤310,所述第一通信方对外输出所述第二部分签名r和所述第四部分签名s构成的所述待签名消息的完整签名(r,s)。
本实施例生成的协同签名的正确性过程如下:
将s
s = (k
=((k
= (k
实施例4
本实施例提出一种基于椭圆曲线的协同签名装置,应用于进行协同签名的第一通信方,包括至少一个处理器,以及与所述至少一个处理器连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行前述实施例1所述的协同签名算法。
实施例5
本实施例提出一种基于椭圆曲线的协同签名装置,应用于进行协同签名的第二通信方,包括至少一个处理器,以及与所述至少一个处理器连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行前述实施例2所述的协同签名算法。
实施例6
本实施例提出一种基于椭圆曲线的协同签名系统,包括第一协同签名装置和第二协同签名装置,所述第一协同签名装置为前述实施例4所述的协同签名装置,所述第二协同签名装置为前述实施例5所述的协同签名装置。
实施例7
本实施例提出一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行前述实施例1所述的协同签名算法。
实施例8
本实施例提出一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行前述实施例2所述的协同签名算法。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
- 一种基于椭圆曲线的协同签名方法、装置和系统
- 一种基于SM2椭圆曲线的签名验证算法的实现方法及系统