私钥恢复、协同地址的创建、签名方法及装置、存储介质与流程

文档序号:18791565发布日期:2019-09-29 18:54阅读:215来源:国知局
私钥恢复、协同地址的创建、签名方法及装置、存储介质与流程

本说明书涉及密码货币的钱包技术领域,尤其是涉及一种私钥恢复、协同地址的创建、签名方法及装置、存储介质。



背景技术:

密码货币的拥有权完全取决于是否持有相应的私钥,因此密码货币的安全性取决于相应的私钥是否具备完善的安全保护策略。

目前对于普通用户来说,使用通常是直接交由密码货币交易所代为保管,或者存储于用户个人的在线钱包或者硬件钱包上。其中,交易所代为保管和在线钱包的安全性相对偏低,可能容易出现如交易所密码货币被盗、在线钱包私钥丢失等事件。硬件钱包是通过将私钥离线存储于硬件设备中,这种方式杜绝了将私钥暴露在网络环境中,免遭黑客攻击的风险,可提更高的安全性,但是用户需要进行交易转账时,需要插入硬件设备或者手动输入私钥,使用不便。

因此,如何提高密码货币钱包的安全性和便利性已成为目前亟需解决的技术问题。



技术实现要素:

本说明书实施例的目的在于提供一种私钥恢复、协同地址的创建、签名方法及装置、存储介质,以提高密码货币钱包的安全性和便利性。

为达到上述目的,一方面,本说明书实施例提供了一种协同地址的签名方法,包括:

接收第一客户端发起的对目标协同地址的交易请求,所述交易请求中包含交易哈希值及所述第一客户端用其私钥碎片生成的签名;

用所述私钥碎片对应的第一公钥对所述签名进行验证;

在通过对所述签名的验证时,基于各自持有的私钥碎片,与服务器协同对所述交易请求进行基于安全多方计算的门限签名,从而生成交易签名。

另一方面,本说明书实施例提供了一种客户端,包括:

交易请求接收模块,用于接收第一客户端发起的对目标协同地址的交易请求,所述交易请求中包含交易哈希值及所述第一客户端用其私钥碎片生成的签名;

私钥签名验证模块,用于用所述私钥碎片对应的第一公钥对所述签名进行验证;

交易签名生成模块,用于在通过对所述签名的验证时,基于各自持有的私钥碎片,与服务器协同对所述交易请求进行基于安全多方计算的门限签名,从而生成交易签名。

另一方面,本说明书实施例提供了一种计算机存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

接收第一客户端发起的对目标协同地址的交易请求,所述交易请求中包含交易哈希值及所述第一客户端用其私钥碎片生成的签名;

用所述私钥碎片对应的第一公钥对所述签名进行验证;

在通过对所述签名的验证时,基于各自持有的私钥碎片,与服务器协同对所述交易请求进行基于安全多方计算的门限签名,从而生成交易签名。

另一方面,本说明书实施例提供了另一种协同地址的签名方法,包括:

接收第一客户端发起的对目标协同地址的交易请求,所述交易请求中包含交易哈希值及所述第一客户端用其私钥碎片生成的签名;

将所述交易请求提供给第二客户端,以供所述第二客户端用所述私钥碎片对应的第一公钥对所述签名进行验证;

在所述第二客户端通过对所述签名的验证时,基于各自持有的私钥碎片,与所述第二客户端协同对所述交易请求进行基于安全多方计算的门限签名,从而生成交易签名。

另一方面,本说明书实施例提供了一种服务器,包括:

交易请求接收模块,用于接收第一客户端发起的对目标协同地址的交易请求,所述交易请求中包含交易哈希值及所述第一客户端用其私钥碎片生成的签名;

交易请求转发模块,用于将所述交易请求提供给第二客户端,以供所述第二客户端用所述私钥碎片对应的第一公钥对所述签名进行验证;

交易签名生成模块,用于在所述第二客户端通过对所述签名的验证时,基于各自持有的私钥碎片,与所述第二客户端协同对所述交易请求进行基于安全多方计算的门限签名,从而生成交易签名。

另一方面,本说明书实施例提供了另一种计算机存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

接收第一客户端发起的对目标协同地址的交易请求,所述交易请求中包含交易哈希值及所述第一客户端用其私钥碎片生成的签名;

将所述交易请求提供给第二客户端,以供所述第二客户端用所述私钥碎片对应的第一公钥对所述签名进行验证;

在所述第二客户端通过对所述签名的验证时,基于各自持有的私钥碎片,与所述第二客户端协同对所述交易请求进行基于安全多方计算的门限签名,从而生成交易签名。

另一方面,本说明书实施例提供了一种协同地址的创建方法,包括:

接收第一客户端发起的协同地址创建请求;所述协同地址创建请求中携带所述第一客户端的临时公钥;

响应于所述协同地址创建请求,随机生成第二多项式;

在所述第一客户端随机生成第三多项式且服务器随机生成第一多项式后,与所述第一客户端和所述服务器交换函数值;

根据所述第二多项式及交换获得的函数值,生成自身的私钥碎片、与所述私钥碎片对应的第二公钥、以及协同地址;

用所述临时公钥将所述第二公钥及所述第二多项式的第三函数值加密为密文;

将所述密文及所述协同地址提供给所述第一客户端,以便所述第一客户端生成私钥碎片并验证所述协同地址。

另一方面,本说明书实施例提供了另一种客户端,包括:

请求接收模块,用于接收第一客户端发起的协同地址创建请求;所述协同地址创建请求中携带所述第一客户端的临时公钥;

函数生成模块,用于响应于所述协同地址创建请求,随机生成第二多项式;

数值交换模块,用于在所述第一客户端随机生成第三多项式且服务器随机生成第一多项式后,与所述第一客户端和所述服务器交换函数值;

数据生成模块,用于根据所述第二多项式及交换获得的函数值,生成自身的私钥碎片、与所述私钥碎片对应的第二公钥、以及协同地址;

数据加密模块,用于用所述临时公钥将所述第二公钥及所述第二多项式的第三函数值加密为密文;

数据发送模块,用于将所述密文及所述协同地址提供给所述第一客户端,以便所述第一客户端生成私钥碎片并验证所述协同地址。

另一方面,本说明书实施例提供了另一种计算机存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

接收第一客户端发起的协同地址创建请求;所述协同地址创建请求中携带所述第一客户端的临时公钥;

响应于所述协同地址创建请求,随机生成第二多项式;

在所述第一客户端随机生成第三多项式且服务器随机生成第一多项式后,与所述第一客户端和所述服务器交换函数值;

根据所述第二多项式及交换获得的函数值,生成自身的私钥碎片、与所述私钥碎片对应的第二公钥、以及协同地址;

用所述临时公钥将所述第二公钥及所述第二多项式的第三函数值加密为密文;

将所述密文及所述协同地址提供给所述第一客户端,以便所述第一客户端生成私钥碎片并验证所述协同地址。

另一方面,本说明书实施例提供了另一种协同地址的创建方法,包括:

接收第一客户端发起的协同地址创建请求,并将其提供给第二客户端;所述协同地址创建请求中携带所述第一客户端的临时公钥;

随机生成第一多项式;

在所述第一客户端随机生成第三多项式且所述第二客户端随机生成第二多项式后,与所述第一客户端和所述第二客户端交换函数值;

根据所述第一多项式及交换获得的函数值,生成协同地址及自身的私钥碎片;

接收所述第二客户端提供的用所述临时公钥加密而成的密文,所述密文包含所述第二客户端的第二公钥及所述第二多项式的第三函数值;

将所述密文及所述协同地址提供给所述第一客户端,以便所述第一客户端生成私钥碎片并验证所述协同地址。

另一方面,本说明书实施例提供了另一种服务器,包括:

请求转发模块,用于接收第一客户端发起的协同地址创建请求,并将其提供给第二客户端;所述协同地址创建请求中携带所述第一客户端的临时公钥;

函数生成模块,用于随机生成第一多项式;

数值交换模块,用于在所述第一客户端随机生成第三多项式且所述第二客户端随机生成第二多项式后,与所述第一客户端和所述第二客户端交换函数值;

数据生成模块,用于根据所述第一多项式及交换获得的函数值,生成协同地址及自身的私钥碎片;

密文接收模块,用于接收所述第二客户端提供的用所述临时公钥加密而成的密文,所述密文包含所述第二客户端的第二公钥及所述第二多项式的第三函数值;

数据发送模块,用于将所述密文及所述协同地址提供给所述第一客户端,以便所述第一客户端生成私钥碎片并验证所述协同地址。

另一方面,本说明书实施例提供了另一种计算机存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

接收第一客户端发起的协同地址创建请求,并将其提供给第二客户端;所述协同地址创建请求中携带所述第一客户端的临时公钥;

随机生成第一多项式;

在所述第一客户端随机生成第三多项式且所述第二客户端随机生成第二多项式后,与所述第一客户端和所述第二客户端交换函数值;

根据所述第一多项式及交换获得的函数值,生成协同地址及自身的私钥碎片;

接收所述第二客户端提供的用所述临时公钥加密而成的密文,所述密文包含所述第二客户端的第二公钥及所述第二多项式的第三函数值;

将所述密文及所述协同地址提供给所述第一客户端,以便所述第一客户端生成私钥碎片并验证所述协同地址。

另一方面,本说明书实施例提供了另一种协同地址的创建方法,包括:

通过服务器向第二客户端发起协同地址创建请求;所述协同地址创建请求中携带自身的临时公钥;

随机生成第三多项式;

在所述服务器随机生成第一多项式且所述第二客户端随机生成第二多项式后,与所述第二客户端和所述服务器交换函数值,以便所述第二客户端和所述服务器生成协同账户的协同地址;

接收所述服务器发送的密文及协同地址,并用所述临时公钥对应的临时私钥解密所述密文,获得所述第二客户端的第二公钥及所述第二多项式的第三函数值;

根据所述第三多项式及所述第三函数值,生成自身的私钥碎片;

根据自身的私钥碎片及所述第二公钥验证所述协同地址。

另一方面,本说明书实施例提供了另一种客户端,包括:

请求发送模块,用于通过服务器向第二客户端发起协同地址创建请求;所述协同地址创建请求中携带自身的临时公钥;

函数生成模块,用于随机生成第三多项式;

数值交换模块,用于在所述服务器随机生成第一多项式且所述第二客户端随机生成第二多项式后,与所述第二客户端和所述服务器交换函数值,以便所述第二客户端和所述服务器生成协同账户的协同地址;

数据接收模块,用于接收所述服务器发送的密文及协同地址,并用所述临时公钥对应的临时私钥解密所述密文,获得所述第二客户端的第二公钥及所述第二多项式的第三函数值;

私钥生成模块,用于根据所述第三多项式及所述第三函数值,生成自身的私钥碎片;

地址验证模块,用于根据自身的私钥碎片及所述第二公钥验证所述协同地址。

另一方面,本说明书实施例提供了另一种计算机存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

通过服务器向第二客户端发起协同地址创建请求;所述协同地址创建请求中携带自身的临时公钥;

随机生成第三多项式;

在所述服务器随机生成第一多项式且所述第二客户端随机生成第二多项式后,与所述第二客户端和所述服务器交换函数值,以便所述第二客户端和所述服务器生成协同账户的协同地址;

接收所述服务器发送的密文及协同地址,并用所述临时公钥对应的临时私钥解密所述密文,获得所述第二客户端的第二公钥及所述第二多项式的第三函数值;

根据所述第三多项式及所述第三函数值,生成自身的私钥碎片;

根据自身的私钥碎片及所述第二公钥验证所述协同地址。

另一方面,本说明书实施例提供了一种私钥恢复方法,包括:

接收第一客户端发起的对应于协同地址的私钥碎片恢复请求;所述私钥碎片恢复请求中携带所述第一客户端的临时公钥;

响应于所述私钥碎片恢复请求,随机生成第二多项式;

接收服务器提供的第一多项式的第二函数值;

根据所述第二多项式及所述第二函数值,生成自身的新私钥碎片、以及与所述新私钥碎片对应的新第二公钥;

用所述临时公钥将所述新第二公钥及所述第二多项式的第三函数值加密为密文;

将所述密文及所述第二多项式的第一函数值提供给所述服务器,以便所述服务器根据所述第一函数值及所述第一多项式生成所述服务器的新私钥碎片,并便于所述服务器将所述密文及所述第一多项式的第三函数值提供给所述第一客户端,从而便于所述第一客户端生成新私钥碎片并验证所述协同地址。

另一方面,本说明书实施例提供了另一种客户端,包括:

请求接收模块,用于接收第一客户端发起的对应于协同地址的私钥碎片恢复请求;所述私钥碎片恢复请求中携带所述第一客户端的临时公钥;

函数生成模块,用于响应于所述私钥碎片恢复请求,随机生成第二多项式;

数值接收模块,用于接收服务器提供的第一多项式的第二函数值;

数据生成模块,用于根据所述第二多项式及所述第二函数值,生成自身的新私钥碎片、以及与所述新私钥碎片对应的新第二公钥;

数据加密模块,用于用所述临时公钥将所述新第二公钥及所述第二多项式的第三函数值加密为密文;

数据发送模块,用于将所述密文及所述第二多项式的第一函数值提供给所述服务器,以便所述服务器根据所述第一函数值及所述第一多项式生成所述服务器的新私钥碎片,并便于所述服务器将所述密文及所述第一多项式的第三函数值提供给所述第一客户端,从而便于所述第一客户端生成新私钥碎片并验证所述协同地址。

另一方面,本说明书实施例提供了另一种计算机存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

接收第一客户端发起的对应于协同地址的私钥碎片恢复请求;所述私钥碎片恢复请求中携带所述第一客户端的临时公钥;

响应于所述私钥碎片恢复请求,随机生成第二多项式;

接收服务器提供的第一多项式的第二函数值;

根据所述第二多项式及所述第二函数值,生成自身的新私钥碎片、以及与所述新私钥碎片对应的新第二公钥;

用所述临时公钥将所述新第二公钥及所述第二多项式的第三函数值加密为密文;

将所述密文及所述第二多项式的第一函数值提供给所述服务器,以便所述服务器根据所述第一函数值及所述第一多项式生成所述服务器的新私钥碎片,并便于所述服务器将所述密文及所述第一多项式的第三函数值提供给所述第一客户端,从而便于所述第一客户端生成新私钥碎片并验证所述协同地址。

另一方面,本说明书实施例提供了另一种私钥恢复方法,包括:

接收第一客户端发起的对应于协同地址的私钥碎片恢复请求,并将其转发给第二客户端;所述私钥碎片恢复请求中携带所述第一客户端的临时公钥;

随机生成第一多项式;

将所述第一多项式的第二函数值提供给所述第二客户端;

接收所述第二客户端提供的密文及第二多项式的第一函数值,所述密文包含所述第二客户端的新第二公钥及所述第二多项式的第三函数值;

根据所述第一函数值及所述第一多项式的第一函数值,生成自身的新私钥碎片;

将所述密文及所述第一多项式的第三函数值提供给所述第一客户端,以便所述第一客户端生成新私钥碎片并验证所述协同地址。

另一方面,本说明书实施例提供了另一种服务器,包括:

请求转发模块,用于接收第一客户端发起的对应于协同地址的私钥碎片恢复请求,并将其转发给第二客户端;所述私钥碎片恢复请求中携带所述第一客户端的临时公钥;

函数生成模块,用于随机生成第一多项式;

数值提供模块,用于将所述第一多项式的第二函数值提供给所述第二客户端;

数据接收模块,用于接收所述第二客户端提供的密文及第二多项式的第一函数值,所述密文包含所述第二客户端的新第二公钥及所述第二多项式的第三函数值;

私钥生成模块,用于根据所述第一函数值及所述第一多项式的第一函数值,生成自身的新私钥碎片;

数据提供模块,用于将所述密文及所述第一多项式的第三函数值提供给所述第一客户端,以便所述第一客户端生成新私钥碎片并验证所述协同地址。

另一方面,本说明书实施例提供了另一种计算机存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

接收第一客户端发起的对应于协同地址的私钥碎片恢复请求,并将其转发给第二客户端;所述私钥碎片恢复请求中携带所述第一客户端的临时公钥;

随机生成第一多项式;

将所述第一多项式的第二函数值提供给所述第二客户端;

接收所述第二客户端提供的密文及第二多项式的第一函数值,所述密文包含所述第二客户端的新第二公钥及所述第二多项式的第三函数值;

根据所述第一函数值及所述第一多项式的第一函数值,生成自身的新私钥碎片;

将所述密文及所述第一多项式的第三函数值提供给所述第一客户端,以便所述第一客户端生成新私钥碎片并验证所述协同地址。

另一方面,本说明书实施例提供了另一种私钥恢复方法,包括:

通过服务器向第二客户端发起对应于协同地址的私钥碎片恢复请求;所述私钥碎片恢复请求中携带自身的临时公钥;

接收所述服务器发送的密文及第一多项式的第三函数值;所述密文中携带所述第二客户端的新第二公钥及第二多项式的第三函数值;

用所述临时公钥对应的临时私钥解密所述密文,获得所述新第二公钥及所述第二多项式的第三函数值;

根据所述第一多项式的第三函数值及所述第二多项式的第三函数值,生成自身的新私钥碎片;

根据自身的新私钥碎片及所述新第二公钥验证所述协同地址。

另一方面,本说明书实施例提供了另一种客户端,包括:

请求发起模块,用于通过服务器向第二客户端发起对应于协同地址的私钥碎片恢复请求;所述私钥碎片恢复请求中携带自身的临时公钥;

数据接收模块,用于接收所述服务器发送的密文及第一多项式的第三函数值;所述密文中携带所述第二客户端的新第二公钥及第二多项式的第三函数值;

数据解密模块,用于用所述临时公钥对应的临时私钥解密所述密文,获得所述新第二公钥及所述第二多项式的第三函数值;

私钥生成模块,用于根据所述第一多项式的第三函数值及所述第二多项式的第三函数值,生成自身的新私钥碎片;

地址验证模块,用于根据自身的新私钥碎片及所述新第二公钥验证所述协同地址。

另一方面,本说明书实施例提供了另一种计算机存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

通过服务器向第二客户端发起对应于协同地址的私钥碎片恢复请求;所述私钥碎片恢复请求中携带自身的临时公钥;

接收所述服务器发送的密文及第一多项式的第三函数值;所述密文中携带所述第二客户端的新第二公钥及第二多项式的第三函数值;

用所述临时公钥对应的临时私钥解密所述密文,获得所述新第二公钥及所述第二多项式的第三函数值;

根据所述第一多项式的第三函数值及所述第二多项式的第三函数值,生成自身的新私钥碎片;

根据自身的新私钥碎片及所述新第二公钥验证所述协同地址。

由以上本说明书实施例提供的技术方案可见,本说明书实施例通过用安全多方计算技术,使多个参与方可以利用各自持有的隐私信息生成一个协同地址和各自的私钥碎片;在此基础上,当需要交易协同地址上的资产时,通过将安全多方计算和门限签名相结合,使多个参与方可以利用各自持有的私钥碎片协同生成该协同地址的签名。如此,就实现了各参与方在隐私保护了各自持有的私钥碎片的前提下,协同完成对该协同地址上的资产的交易授权,从而大大提高了密码货币钱包的安全性。由于本说明书实施例也是一种在线钱包技术,因而相对于硬件钱包,其同样兼具有较好的便利性。

附图说明

为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。在附图中:

图1为本说明书一些实施例中创建协同地址的流程图;

图2为本说明书一些实施例中协同地址的交易签名流程图;

图3为图2中基于安全多方计算的门限签名部分的流程图;

图4为本说明书一些实施例中恢复私钥碎片的流程图;

图5为本说明书一些实施例中客户端的结构框图;

图6为本说明书一些实施例中服务器的结构框图;

图7为本说明书另一些实施例中客户端的结构框图;

图8为本说明书另一些实施例中服务器的结构框图;

图9为本说明书另一些实施例中客户端的结构框图;

图10为本说明书另一些实施例中客户端的结构框图;

图11为本说明书另一些实施例中服务器的结构框图;

图12为本说明书另一些实施例中客户端的结构框图。

具体实施方式

为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。

本说明书实施例可以应用于区块链网络中的任何节点,所述节点可以是客户端或服务器。

在本说明书一些实施例中,所述客户端可以为台式电脑、平板电脑、笔记本电脑、智能手机、数字助理、智能可穿戴设备等。其中,智能可穿戴设备可以包括智能手环、智能手表、智能眼镜、智能头盔等。当然,所述客户端并不限于上述具有一定实体的电子设备,其还可以为运行于上述电子设备中的软体。

在本说明书一些实施例中,所述服务器可以为具有运算和网络交互功能的电子设备;也可以为运行于该电子设备中,为数据处理和网络交互提供业务逻辑的软体。

门限签名是通过门限密码学构造出的签名方案。例如,在一个t/n门限签名方式中,n个参与方组成群组,并用n个参与方的隐私信息(如,私钥)生成一个协同账户的钱包地址(以下简称协同地址);当需要动用协同地址上的资产时,需要不少于t个参与方利用各自的隐私信息协同合作,才能产生对协同地址的交易签名。

安全多方计算(securemulti-partycomputation,简称mpc),是指用户在无需进行数据归集的情况下,完成数据协同计算,同时保护数据所有方的原始数据隐私。整个计算过程中,计算参与各方除了自己的输入数据和输出结果外,无法获知任何额外有效信息,并且保证计算结果准确。

本说明书实施例旨在利用安全多方计算技术,使多个参与方可以利用各自持有的隐私信息生成一个协同地址和各自的私钥碎片;在此基础上,当需要交易协同地址上的资产时,通过将安全多方计算和门限签名相结合,使多个参与方可以利用各自持有的私钥碎片协同生成该协同地址的签名。如此,就实现了各参与方在隐私保护了各自持有的私钥碎片的前提下,协同完成对该协同地址上的资产的交易授权,从而大大提高了密码货币钱包的安全性。由于本说明书实施例也是一种在线钱包技术,因而相对于硬件钱包,其同样兼具有较好的便利性。

为便理解本说明书,下面通过具体实施例并结合具体的应用场景对本说明书进行描述。应当指出的是,下文是以客户端a、客户端b和服务器三个区块链节点为例进行说明的,在本说明书其他实施例中,也可以采用两个区块链节点(即省略服务器),或更多区块链节点实现,本说明书对此不作限定。

一、协同地址创建

在本说明书一些实施例中,图1中示出了协同地址的创建方法。在图1所示实施例中,当客户端a发起创建协同地址的请求时,可以先在本地随机生成公私钥对(tpka,tska),然后将携带tpka的协同地址创建请求通过服务器发送给客户端b。响应于协同地址创建请求,若客户端b同意协同地址创建请求,则服务器、客户端b和客户端a可以分别在本地随机生成一个多项式。

例如,在本说明书一实施例中,服务器、客户端b、客户端a可以分别生成随机数x1、x2、x3。服务器随机选取一次多项式p1(x)=x+x1,使得p1(0)=x1,并计算出p1(x)在自变量x分别取值为1、2和3对应的函数值p1(1)、p1(2)、p1(3):p1(1)←x1+1,p1(2)←x1+2,p1(3)←x1+3。客户端b随机选取一次多项式p2(x)=x+x2,使得p2(0)=x2,并计算出p2(x)在自变量x分别取值为1、2和3对应的函数值p2(1)、p2(2)、p2(3):p2(1)←x2+1,p2(2)←x2+2,p2(3)←x2+3。客户端a随机选取一次多项式p3(x)=x+x3,使得p3(0)=x3,并计算出p3(x)在自变量x分别取值为1、2和3对应的函数值p3(1)、p3(2)、p3(3):p3(1)←x3+1,p3(2)←x3+2,p3(3)←x3+3。

在服务器、客户端b和客户端a分别在本地随机生成一个多项式后,服务器、客户端b、客户端a之间可以交换一些指定的函数值,以用于后续协同地址创建。

例如,在本说明书一实施例中,服务器可以将p1(2)发送给客户端b,并将p1(3)发送给客户端a;客户端b可以将p2(1)发送给服务器,并将p2(3)发送给客户端a;客户端a可以将p3(1)发送给服务器,并将p3(2)发送给客户端b。此时,服务器可以计算出第一参数ps=p1(1)+p2(1)+p3(1);客户端b可以计算出第二参数pb=p1(2)+p2(2)+p3(2),客户端a可以计算出第三参数pa=p1(3)+p2(3)+p3(3)。相应的,客户端a可以将第三参数pa分别提供给服务器和客户端b,客户端b可以将第二参数pb提供给服务器,服务器可以将第一参数ps提供给客户端b。

在本说明书一实施例中,客户端b可以根据p2(x)及交换获得的函数值,生成自身的私钥碎片skb、与该私钥碎片skb对应的第二公钥pkb、以及协同地址,并可以用客户端a的临时公钥tpka将第二公钥pkb及p2(3)加密为密文,然后将所述密文通过服务器提供给客户端a,以便客户端a生成自身的私钥碎片ska并验证协同地址对应的公钥pk。

例如,客户端b可以根据公式skb=p1(2)+p2(2)生成自身的私钥碎片skb;可以根据公式pkb=skb×g生成与私钥碎片skb对应的第二公钥pkb;可以根据公式pk←p1×l1×g+p2×l2×g生成协同账户的公钥pk,并根据公式addr←hash(pk)生成协同账户对应的协同地址,addr为协同地址,hash(pk)表示用哈希函数对pk进行哈希计算。其中,p1和p2为从集合(pa,pb,ps)中任取的两个值,g为系统参数(例如可以为椭圆曲线生成元等),l1、l2分别为p1、p2对应的拉格朗日系数。比如,在一示例性实施例中,以p1选择为pa,p2选择为pb为例,则l1为客户端a的拉格朗日系数la,l2为客户端b的拉格朗日系数lb,则此时:pk←pa×la×g+pb×lb×g。

在本说明书一实施例中,客户端b还可以根据公式生成客户端a的私钥碎片ska对应的第一公钥pka,以便于后续在客户端a发起针对协同地址的交易请求时,可以对客户端a的签名进行验证。当然,在其他实施例中,第一公钥pka也可以是由服务器或客户端a生成并提供给客户端b,本说明对此不作限定,具体可以根据需要选择。

在本说明书一实施例中,在收到客户端a发起的协同地址创建请求之后,客户端b还可以先对客户端a进行身份认证,当通过对客户端a的身份认证后,再与客户端a和服务器进行以生成协同地址为目的交互,从而可以提高安全性。

在本说明书一实施例中,客户端b可以将第二公钥pkb对应的第一字符串及p2(3)对应的第二字符串,按序拼接成第三字符串,然后再用客户端a的临时公钥tpka将第三字符串加密为密文(即enc(tpka,p2(3)||pkb)),如此可以降低处理开销,提高处理效率。

在本说明书一实施例中,服务器也可以根据p2(x)及交换获得的函数值,生成协同地址及自身的私钥碎片sks;当收到接收客户端b提供的密文时,可以将密文及协同地址提供给客户端a,以便客户端a生成自身的私钥碎片ska并验证协同地址对应的公钥pk。例如,服务器可以根据公式sks=p1(1)+p2(1)生成自身的私钥碎片sks;可以根据上述公式pk←p1×l1×g+p2×l2×g生成协同账户的公钥pk,并根据公式addr←hash(pk)生成所述协同账户对应的协同地址。

在本说明书一实施例中,客户端a在接收到服务器发送的密文及协同地址后,可以用tpka对应的tska解密所述密文,即p2(3)||pkb←dec(tska,enc(tpka,p2(3)||pkb)),从而可以获得p2(3)和pkb。据此,客户端a可以根据公式ska=p1(3)+p2(3)生成自身的私钥碎片ska。并且,在此基础上,客户端a可以验证pk=(la×ska)×g+pkb是否成立;如果成立,则认为协同地址创建成功。否则,认为协同地址创建失败。

参考图7所示,与上述协同地址创建方法中的客户端b对应,本说明书一些实施例的客户端可以包括:

请求接收模块71,可以用于接收第一客户端发起的协同地址创建请求;所述协同地址创建请求中携带所述第一客户端的临时公钥;

函数生成模块72,可以用于响应于所述协同地址创建请求,随机生成第二多项式;

数值交换模块73,可以用于在所述第一客户端随机生成第三多项式且服务器随机生成第一多项式后,与所述第一客户端和所述服务器交换函数值;

数据生成模块74,可以用于根据所述第二多项式及交换获得的函数值,生成自身的私钥碎片、与所述私钥碎片对应的第二公钥、以及协同地址;

数据加密模块75,可以用于用所述临时公钥将所述第二公钥及所述第二多项式的第三函数值加密为密文;

数据发送模块76,可以用于将所述密文及所述协同地址提供给所述第一客户端,以便所述第一客户端生成私钥碎片并验证所述协同地址。

参考图8所示,与上述协同地址创建方法中的服务器对应,本说明书一些实施例的服务器可以包括:

请求转发模块81,可以用于接收第一客户端发起的协同地址创建请求,并将其提供给第二客户端;所述协同地址创建请求中携带所述第一客户端的临时公钥;

函数生成模块82,可以用于随机生成第一多项式;

数值交换模块83,可以用于在所述第一客户端随机生成第三多项式且所述第二客户端随机生成第二多项式后,与所述第一客户端和所述第二客户端交换函数值;

数据生成模块84,可以用于根据所述第一多项式及交换获得的函数值,生成协同地址及自身的私钥碎片;

密文接收模块85,可以用于接收所述第二客户端提供的用所述临时公钥加密而成的密文,所述密文包含所述第二客户端的第二公钥及所述第二多项式的第三函数值;

数据发送模块86,可以用于将所述密文及所述协同地址提供给所述第一客户端,以便所述第一客户端生成私钥碎片并验证所述协同地址。

参考图9所示,与上述协同地址创建方法中的客户端a对应,本说明书一些实施例的客户端可以包括:

请求发送模块91,可以用于通过服务器向第二客户端发起协同地址创建请求;所述协同地址创建请求中携带自身的临时公钥;

函数生成模块92,可以用于随机生成第三多项式;

数值交换模块93,可以用于在所述服务器随机生成第一多项式且所述第二客户端随机生成第二多项式后,与所述第二客户端和所述服务器交换函数值,以便所述第二客户端和所述服务器生成协同账户的协同地址;

数据接收模块94,可以用于接收所述服务器发送的密文及协同地址,并用所述临时公钥对应的临时私钥解密所述密文,获得所述第二客户端的第二公钥及所述第二多项式的第三函数值;

私钥生成模块95,可以用于根据所述第三多项式及所述第三函数值,生成自身的私钥碎片;

地址验证模块96,可以用于根据自身的私钥碎片及所述第二公钥验证所述协同地址。

二、交易签名

在本申请一些实施例中,在创建完成协同地址后,各参与方(即客户端a、客户端b和服务器)就可以协同管理同一个钱包账户了。当需要交易协同地址上的资产时,需要各参与方进行基于安全多方计算的门限签名,以协同完成对交易该协同地址上的资产的授权。例如,以2/3门限签名方式为例,协同地址的交易签名方法可如图2所示。

在图2所示的签名方法中,当客户端a希望交易目标协同地址上的资产时,其可以通过服务器向客户端b发起针对目标协同地址的交易请求。其中,所述交易请求不仅可以携带有交易哈希值,还可以携带有客户端a用其私钥碎片ska生成的签名。例如,在本说明书一实施例中,客户端a可以用其私钥碎片ska并通过签名公式tsignature←ecdsa(ska,txhash)生成签名。其中,ecdsa为椭圆曲线数字签名算法(ellipticcurvedigitalsignaturealgorithm,简称ecdsa),tsignature为签名,txhash为交易哈希值。以转账交易请求为例,其中,交易哈希值可以包含转出钱包地址、转入钱包地址、转入额度等交易信息。

服务器在将交易请求转发给客户端b后,客户端b可以用私钥碎片ska对应的第一公钥pka对客户端a的签名进行验证;在通过对该签名的验证后,客户端b和服务器可以基于各自持有的私钥碎片,协同对所述交易请求进行基于安全多方计算的门限签名,从而生成交易签名。

在本说明书一实施例中,客户端b和服务器可以基于各自持有的私钥碎片,协同对所述交易请求进行基于安全多方计算的门限签名,例如可以如图3所示。在图3中,客户端b可以生成随机数k1和随机数q1,并将随机数k1和随机数q1提供给服务器;同时,服务器可以生成随机数k2和随机数q2,并将随机数k2和随机数q2提供给客户端b。

在此基础上,客户端b可以根据公式rb=k1×g生成第一中间参数rb,并提供给服务器;同样,服务器可以根据公式rs=k2×g生成第二中间参数rs。至此,客户端b和服务器可以分别根据公式r=rb+rs生成签名参数r。因此,客户端b可以将自身的私钥碎片skb及签名参数r代入第一签名函数中生成第一签名部分。相应的,服务器可以将自身的私钥碎片sks及签名参数r代入第二签名函数中生成第二签名部分。

例如,在本说明书一实施例中,所述第一签名函数可以包括sigb←(e×skb+rx)×q-1,所述第二签名函数可以包括sigs←(e×sks+rx)×q-1,其中,sigb为第一签名部分,sigs为第二签名部分,e为交易哈希值,rx为签名参数r在坐标系上对应的x坐标值,q=q1×q2。

参考图5所示,与上述签名方法中的客户端b对应,本说明书一些实施例的客户端可以包括:

交易请求接收模块51,可以用于接收第一客户端发起的对目标协同地址的交易请求,所述交易请求中包含交易哈希值及所述第一客户端用其私钥碎片生成的签名;

私钥签名验证模块52,可以用于用所述私钥碎片对应的第一公钥对所述签名进行验证;

交易签名生成模块53,可以用于在通过对所述签名的验证时,基于各自持有的私钥碎片,与服务器协同对所述交易请求进行基于安全多方计算的门限签名,从而生成交易签名。

参考图6所示,与上述签名方法中的服务器对应,本说明书一些实施例的服务器可以包括:

交易请求接收模块61,可以用于接收第一客户端发起的对目标协同地址的交易请求,所述交易请求中包含交易哈希值及所述第一客户端用其私钥碎片生成的签名;

交易请求转发模块62,可以用于将所述交易请求提供给第二客户端,以供所述第二客户端用所述私钥碎片对应的第一公钥对所述签名进行验证;

交易签名生成模块63,可以用于在所述第二客户端通过对所述签名的验证时,基于各自持有的私钥碎片,与所述第二客户端协同对所述交易请求进行基于安全多方计算的门限签名,从而生成交易签名。

应当理解的是,以上仅是举例说明基于安全多方计算的门限签名方法,根据签名算法的不同、安全多方计算算法的不同,和/或,门限签名方式(例如2/3模式、3/5模式、5/5模式等)的不同,上述基于安全多方计算的门限签名的方法步骤也会有差异。由于这些都在本说明书的精神和原理之内,因而其所作的修改、等同替换、改进等,均应包含在本说明书的权利要求范围之内。

三、私钥恢复

在本说明书一些实施例中,一旦用户的客户端设备(例如智能手机)丢失,或者客户端被删除,则用户可以在新的客户端设备安装客户端,或在原有的客户端设备上重新安装客户端。当客户端对应的用户重新登录时,可以获得相应协同地址的公钥pk。在此基础上,如图4所示,以客户端a为例,当客户端a发起私钥碎片恢复请求时,可以先在本地随机生成公私钥对(tpka,tska),然后将携带tpka的钥碎片恢复请求通过服务器发送给客户端b。响应于钥碎片恢复请求,服务器和客户端b可以分别在本地随机生成一个多项式。

例如,在本说明书一实施例中,服务器可以随机选取一次多项式p1(x)=x+ls×sks,使得p1(0)=ls×sks,并计算出p1(x)在自变量x分别取值为1、2和3对应的函数值p1(1)、p1(2)、p1(3):p1(1)←ls×sks+1,p1(2)←ls×sks+2,p1(3)←ls×sks+3。客户端b可以随机选取一次多项式p2(x)=x+lb×skb,使得p2(0)=lb×skb,并计算出p2(x)在自变量x分别取值为1、2和3对应的函数值p2(1)、p2(2)、p2(3):p2(1)←lb×skb+1,p2(2)←lb×skb+2,p2(3)←lb×skb+3。其中,ls为服务器的拉格朗日系数。

服务器可以将p1(2)提供给客户端b,以使得客户端b可以根据p2(x)及p1(2)生成自身的新私钥碎片sk'b、以及与所述新私钥碎片sk'b对应的新第二公钥pk'b。例如,在一个实施例中,客户端b可以根据公式sk'b=p1(2)+p2(2)生成自身的新私钥碎片sk'b;根据公式pk'b=sk'b×g生成与所述新私钥碎片sk'b对应的新第二公钥pk'b。此后,客户端b可以用临时公钥tpka将pk'b及p2(3)加密为密文(加密过程可以参见上述协同地址创建部分的相关描述,在此不再赘述),然后将密文及p2(1)提供给服务器。

据此,服务器可以根据公式sk's=p1(1)+p2(1)生成自身的新私钥碎片sk's,然后服务器可以将密文及p1(3)提供给客户端a,从而便于客户端a生成自身的新私钥碎片sk'a验证协同地址对应的公钥pk,即验证pk=(la×sk'a)×g+pk'b是否成立;如果成立,则确认私钥碎片恢复成功,从而使得客户端a可以恢复出一个新私钥碎片sk'a,至此密钥恢复完成。如此,解决了单个节点丢失密钥造成的钱包无法恢复的问题。

在另一个实施例中,客户端b还可根据公式生成与客户端a的新私钥碎片sk'a对应的新第一公钥pk'a,以便于后续在客户端a发起针对协同地址的交易请求时,可以对客户端a的签名进行验证。当然,在其他实施例中,新第一公钥pk'a也可以是由服务器或客户端a生成并提供给客户端b,本说明对此不作限定,具体可以根据需要选择。

应当理解的是,客户端对应的用户应当是注册用户,即在发起创建协同地址的请求之前,客户端对应的用户需要先下载并完成客户端的安装,然后登陆进客户端,并根据提示进行注册。

参考图10所示,与上述私钥碎片恢复方法中的客户端b对应,本说明书一些实施例的客户端可以包括:

请求接收模块101,可以用于接收第一客户端发起的对应于协同地址的私钥碎片恢复请求;所述私钥碎片恢复请求中携带所述第一客户端的临时公钥;

函数生成模块102,可以用于响应于所述私钥碎片恢复请求,随机生成第二多项式;

数值接收模块103,可以用于接收服务器提供的第一多项式的第二函数值;

数据生成模块104,可以用于根据所述第二多项式及所述第二函数值,生成自身的新私钥碎片、以及与所述新私钥碎片对应的新第二公钥;

数据加密模块105,可以用于用所述临时公钥将所述新第二公钥及所述第二多项式的第三函数值加密为密文;

数据发送模块106,可以用于将所述密文及所述第二多项式的第一函数值提供给所述服务器,以便所述服务器根据所述第一函数值及所述第一多项式生成所述服务器的新私钥碎片,并便于所述服务器将所述密文及所述第一多项式的第三函数值提供给所述第一客户端,从而便于所述第一客户端生成新私钥碎片并验证所述协同地址。

参考图11所示,与上述私钥碎片恢复方法中的服务器对应,本说明书一些实施例的服务器可以包括:

请求转发模块111,可以用于接收第一客户端发起的对应于协同地址的私钥碎片恢复请求,并将其转发给第二客户端;所述私钥碎片恢复请求中携带所述第一客户端的临时公钥;

函数生成模块112,可以用于随机生成第一多项式;

数值提供模块113,可以用于将所述第一多项式的第二函数值提供给所述第二客户端;

数据接收模块114,可以用于接收所述第二客户端提供的密文及第二多项式的第一函数值,所述密文包含所述第二客户端的新第二公钥及所述第二多项式的第三函数值;

私钥生成模块115,可以用于根据所述第一函数值及所述第一多项式的第一函数值,生成自身的新私钥碎片;

数据提供模块116,可以用于将所述密文及所述第一多项式的第三函数值提供给所述第一客户端,以便所述第一客户端生成新私钥碎片并验证所述协同地址。

参考图12所示,与上述私钥碎片恢复方法中的客户端a对应,本说明书一些实施例的客户端可以包括:

请求发起模块121,可以用于通过服务器向第二客户端发起对应于协同地址的私钥碎片恢复请求;所述私钥碎片恢复请求中携带自身的临时公钥;

数据接收模块122,可以用于接收所述服务器发送的密文及第一多项式的第三函数值;所述密文中携带所述第二客户端的新第二公钥及第二多项式的第三函数值;

数据解密模块123,可以用于用所述临时公钥对应的临时私钥解密所述密文,获得所述新第二公钥及所述第二多项式的第三函数值;

私钥生成模块124,可以用于根据所述第一多项式的第三函数值及所述第二多项式的第三函数值,生成自身的新私钥碎片;

地址验证模块125,可以用于根据自身的新私钥碎片及所述新第二公钥验证所述协同地址。

虽然上文描述的过程流程包括以特定顺序出现的多个操作,但是,应当清楚了解,这些过程可以包括更多或更少的操作,这些操作可以顺序执行或并行执行(例如使用并行处理器或多线程环境)。

为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁盘式存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法或者设备中还存在另外的相同要素。

本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本说明书的实施例而已,并不用于限制本说明书。对于本领域技术人员来说,本说明书可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书的权利要求范围之内。

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