一种基于椭圆曲线的区块链密钥共享和动态更新方法与流程

文档序号:17693692发布日期:2019-05-17 21:17阅读:195来源:国知局
一种基于椭圆曲线的区块链密钥共享和动态更新方法与流程

本发明涉及椭圆曲线密码体制、共享密钥技术、区块链技术,尤其涉及一种基于椭圆曲线的区块链密钥共享和动态更新方法。



背景技术:

椭圆曲线密码体制是一种基于椭圆曲线数学的公开密钥加密算法,椭圆曲线方程可以表示为:y2=x3+ax+b,q>3。其中4a3-27b2≠0,a,b属于有限域gf(q),q为素数或为2m的整数。在椭圆曲线上有一个离散对数难题,即对于椭圆曲线上的点k,g,满足k=kg,对给定的k和g来计算k比较容易,而根据k,g求解k非常困难,这里k与g进行的运算为有限域上的纯量乘法。正是由于这种特性,这个难题被应用在密码学上,k为私钥,k为公钥,可以利用该密钥对进行加解密、签名等操作。正是因为这种密码体制安全性高,运算速度快,存储空间小,包括比特币在内的众多区块链都将其作为加密算法。

共享密钥技术是指将一个主密钥分成多个子密钥,由不同的成员保管,被主密钥加密的数据只有通过各个成员将子密钥拼凑在一起才能进行解密。1979年shamir就曾提出过一个基于多项式插值算法的门限密钥共享体制,该体制是指,n个参与者共享主密钥s,密钥管理中心利用分配算法和主密钥生成n个子密钥,仅当有任何t个参与者将子密钥放在一起时,才能重构出子密钥。这个体制的前提是密钥分发者和接收者都是诚实的,因此无法有效地阻止密钥分发者和接收者欺诈。

区块链在本质上是一个去中心化的分布式数据库,每个区块链节点都增量备份该数据库,通过共识机制保证区块链上的数据是不可篡改的。但是在一些场景下,各个区块链节点需要共享一些数据,为了数据的安全性,区块链节点会选择对数据进行加密存储,但此时加解密使用的密钥对由谁保管成为了新的难题。而传统的密钥分割方案不支持子密钥的动态增删以及主密钥的更新,不适用于区块链网络中节点经常增删、主密钥可能泄露的问题。



技术实现要素:

针对现有技术的不足,本发明提出一种基于椭圆曲线的区块链密钥共享和动态更新方法,通过密钥共享技术使得区块链上可以存放和传输隐私数据,同时适配区块链节点的动态增删问题,更好地保证区块链节点之间的信任问题。

本发明的目的是通过如下技术方案实现的:一种基于椭圆曲线的区块链密钥共享和动态更新方法,包含密钥管理和数据加解密过程。其中密钥管理包括如下步骤:

1)节点密钥初始化:区块链在第一次启动时,执行内置的密钥初始化的智能合约方法,智能合约在执行时用合约内算法随机生成一个主密钥s,以及与节点个数相同的子密钥,将其分发给各个节点,并公布验证函数以及各参数,初始化前使用配置文件设定需要超过多少个子节点的子密钥可以重构主密钥。

2)子密钥验证:各个区块链节点收到子密钥后,通过调用子密钥验证的合约方法,用当前合约中公开的各参数对子密钥进行验证,如果验证通过,说明收到的子密钥是真实的。节点之间也可以互相验证身份,调用验证方法,让被验证者提供密钥处理后的结果,验证者对其进行哈希运算,将结果与公布的哈希结果进行比对即可验证。

3)主密钥合成:超过规定个数的区块链节点拿出自己的子密钥,即可以根据规定算法重构出主密钥。

4)主密钥更新:当节点发起更新主密钥的请求时,当超过规定节点个数的节点愿意参与,则可以在不更新子密钥的前提下对主密钥进行更新,并重新公布新的验证函数参数。

5)子密钥增删:当一个新的节点加入区块链网络,区块链自动调用新增子密钥合约方法,根据规则随机生成一个新的子密钥,并公开该子密钥的相关参数;当一个节点被区块链网络移除,区块链自动调用节点密钥移除方法,将该节点密钥标记为无效密钥,在后续主密钥合成时不能参与。若移除后节点数量少于设定的最小解密节点数量,则对主密钥进行更新,设定新的最小解密节点数量。

数据加解密过程包括如下过程:

6)数据加密:当一个节点需要在区块链中存储隐私数据或传输隐私数据时,可以使用主密钥对数据进行加密。

7)数据解密:当一个节点需要将区块链中存储的隐私信息进行解密时,需要调用主密钥合成智能合约方法,用合成的主密钥对数据进行解密。

进一步地,所述的步骤1)中,区块链在第一次启动时,系统在有限域上选取一条安全椭圆曲线e,并在椭圆曲线e上随机选择n个参数,n为创世节点数目,作为子密钥通过安全信道分配给所有创世节点。同时根据启动时的参数配置确定可以解密的最少子密钥数量t,程序内部选定一个t-1次的多项式f(x),使得f(0)=s,其中s为区块链主密钥。同时区块链公开一个验证函数供各节点校验自己节点的真实性。

进一步地,所述的步骤2)中,验证函数有两个,一个为其中aj和g都是公开参数,(i,yi)=(di+kig)(modn),其中di和g也是公开参数,ki为该节点自己的密钥。另一个为fi=h(ci),其中h为公开的哈希函数,ci=kig(modn)。验证函数一方面用于节点验证自身得到的子密钥是真实的,另一方面用于节点之间互相验证身份的真实性。

进一步地,所述的步骤3)中,f(x)为一个t-1次的多项式,形式为区块链在获得t个不同子密钥后,该t-1次多项式可以转换为一个由t个t元一次方程组成的方程组,则必有解,解的结果中f(0)即为主密钥。

进一步地,所述的步骤4)中,只需要重新生成一个多项式f2(x),满足f2(0)=s’,s’即为新的主密钥,更新主密钥后重新计算验证函数的相关参数并对全网进行公开。

进一步地,所述的步骤5)中,当一个新的节点加入区块链网络中,只需要在椭圆曲线上再随机选择一个点作为子密钥,并计算该子密钥的验证函数相关参数,进行公开。当删除一个节点时,合约中该节点密钥的状态设置为无效,在密钥合成过程中如果又收到了该无效密钥,则忽略该密钥。当密钥总个数低于初始化时设定的最小解密个数t时,即使所有节点都拿出自己的密钥也无法重构出主密钥,此时要对主密钥进行更新,并设定新的最小解密个数t’。

进一步地,所述的步骤6)中,节点可以选择使用非对称加密或对称加密方法,若使用非对称加密方法,只需要使用主密钥公开的公钥进行加密即可;若使用对称加密方法,则需要调用主密钥合成智能合约方法,用合成的主密钥对数据进行加密。

进一步地,所述的步骤7)中,区块链在执行合成主密钥进行解密的合约方法前,会先使用哈希验证函数对各节点提供的密钥进行验证,以防止收到错误的密钥导致主密钥合成错误。

本发明的增益效果是:本发明通过将基于椭圆曲线的多项式密钥共享技术应用在区块链节点的密钥分发与更新中,使得区块链中可以更安全地存储和传输隐私数据,让区块链的应用场景更为广泛,尤其是可信数据计算及交换领域。另外,本发明适配了区块链节点动态增删的场景,加强了密钥共享技术在区块链领域的契合程度。更重要的是,本发明提供了节点子密钥的自我验证和相互验证方法,增强了区块链节点之间的信任。另外,节点在收到子密钥之后永不出库,即使要重组主密钥,各节点提供的也是子密钥经过特殊运算的结果,保证了节点密钥的安全性。

附图说明

图1是本发明的方法中进行数据加密的流程图;

图2是本发明的方法中进行数据解密的流程图;

具体实施方式

下面根据附图描述本发明,本发明的目的和效果变得更加明白,以下结合附图对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

一种基于椭圆曲线的区块链密钥共享和动态更新方法,包含密钥管理和数据加解密过程。其中密钥管理包括如下步骤:

1)节点密钥初始化:区块链在第一次启动时,执行内置的密钥初始化的智能合约方法,智能合约在执行时用合约内算法随机生成一个主密钥s,以及与节点个数相同的子密钥,将其分发给各个节点,并公布验证函数以及各参数,初始化前使用配置文件设定需要超过多少个子节点的子密钥可以重构主密钥。

2)子密钥验证:各个区块链节点收到子密钥后,通过调用子密钥验证的合约方法,用当前合约中公开的各参数对子密钥进行验证,如果验证通过,说明收到的子密钥是真实的。节点之间也可以互相验证身份,调用验证方法,让被验证者提供密钥处理后的结果,验证者对其进行哈希运算,将结果与公布的哈希结果进行比对即可验证。

3)主密钥合成:超过规定个数的区块链节点拿出自己的子密钥,即可以根据规定算法重构出主密钥。

4)主密钥更新:当节点发起更新主密钥的请求时,当超过规定节点个数的节点愿意参与,则可以在不更新子密钥的前提下对主密钥进行更新,并重新公布新的验证函数参数。

5)子密钥增删:当一个新的节点加入区块链网络,区块链自动调用新增子密钥合约方法,根据规则随机生成一个新的子密钥,并公开该子密钥的相关参数;当一个节点被区块链网络移除,区块链自动调用节点密钥移除方法,将该节点密钥标记为无效密钥,在后续主密钥合成时不能参与。若移除后节点数量少于设定的最小解密节点数量,则对主密钥进行更新,设定新的最小解密节点数量。

数据加解密过程包括如下过程:

6)数据加密:当一个节点需要在区块链中存储隐私数据或传输隐私数据时,可以使用主密钥对数据进行加密。

7)数据解密:当一个节点需要将区块链中存储的隐私信息进行解密时,需要调用主密钥合成智能合约方法,用合成的主密钥对数据进行解密。

进一步地,所述的步骤1)中,区块链在第一次启动时,系统在有限域上选取一条安全椭圆曲线e,并在椭圆曲线e上随机选择n个参数,n为创世节点数目,作为子密钥通过安全信道分配给所有创世节点。同时根据启动时的参数配置确定可以解密的最少子密钥数量t,程序内部选定一个t-1次的多项式f(x),使得f(0)=s,其中s为区块链主密钥。同时区块链公开一个验证函数供各节点校验自己节点的真实性。

进一步地,所述的步骤2)中,验证函数有两个,一个为其中aj和g都是公开参数,(i,yi)=(di+kig)(modn),其中di和g也是公开参数,ki为该节点自己的密钥。另一个为fi=h(ci),其中h为公开的哈希函数,ci=kig(modn)。验证函数一方面用于节点验证自身得到的子密钥是真实的,另一方面用于节点之间互相验证身份的真实性。

进一步地,所述的步骤3)中,f(x)为一个t-1次的多项式,形式为区块链在获得t个不同子密钥后,该t-1次多项式可以转换为一个由t个t元一次方程组成的方程组,则必有解,解的结果中f(0)即为主密钥。

进一步地,所述的步骤4)中,只需要重新生成一个多项式f2(x),满足f2(0)=s’,s’即为新的主密钥,更新主密钥后重新计算验证函数的相关参数并对全网进行公开。

进一步地,所述的步骤5)中,当一个新的节点加入区块链网络中,只需要在椭圆曲线上再随机选择一个点作为子密钥,并计算该子密钥的验证函数相关参数,进行公开。当删除一个节点时,合约中该节点密钥的状态设置为无效,在密钥合成过程中如果又收到了该无效密钥,则忽略该密钥。当密钥总个数低于初始化时设定的最小解密个数t时,即使所有节点都拿出自己的密钥也无法重构出主密钥,此时要对主密钥进行更新,并设定新的最小解密个数t’。

进一步地,所述的步骤6)中,节点可以选择使用非对称加密或对称加密方法,若使用非对称加密方法,只需要使用主密钥公开的公钥进行加密即可;若使用对称加密方法,则需要调用主密钥合成智能合约方法,用合成的主密钥对数据进行加密。

进一步地,所述的步骤7)中,区块链在执行合成主密钥进行解密的合约方法前,会先使用哈希验证函数对各节点提供的密钥进行验证,以防止收到错误的密钥导致主密钥合成错误。

实施例1

本发明各步骤执行的逻辑如下:

节点密钥初始化。区块链在第一次运行时,在区块链环境中执行密钥初始化合约方法,对主密钥和子密钥的初始化。合约首先随机生成一个主密钥s,并在素数域gf上选取一条椭圆曲线方程e(a,b),即:y2=x3+ax+b,q>3,其中4a3-27b2≠0,。程序在椭圆曲线上随机选择n个不同的参数,记为k1,k2,……kn作为子节点的密钥,通过安全信道分配给各个节点ni。然后,程序在椭圆曲线上选定一个基点g。接下来,程序选取一个t-1次多项式其中f(0)=a0=s。对于j=1,2,……t-1,计算aj=ajg(modn),对于i=1,2,……n,计算di=(i,yi)-kig,以及fi=h(kig),其中h(x)为一个哈希运算方法。然后公开e、g、aj、di、fi。

子密钥验证。子节点ni收到密钥后,可以执行子密钥自我验证的合约方法,首先根据公开参数g,a1~ar-1,di,计算ci=kig(modn)以及(i,yi)=(di+kig)(modn),并验证公式如果成立,则证明该节点收到的子密钥是可靠的。另外,当一个节点ni要向其他节点证明自己的真实性,则提供ci,其他节点验证fi=h(ci),公式如果成立则证明该节点的身份是可靠的。

主密钥合成。当各节点达成共识需要恢复主密钥用于解密隐私数据或其他用途时,只要超过或等于t个节点拿出他们的密钥,即可恢复主密钥。各节点在合约中根据公开参数计算(i,yi)=(di+kig)(modn),区块链在收到各节点的(i,yi)对后,调用主密钥合成方法,该方法选定的f(x)为一个t-1次的多项式,在区块链获得t个不同(i,yi)对后,该t-1次多项式可以转换为一个由t各t元一次方程组成的方程组如下:

用矩阵法可解出主密钥s即可。

主密钥更新。当各节点达成共识想要对主密钥进行更新时,区块链执行主密钥更新合约方法,合约重新在给定的椭圆曲线中选取一个基点g’,及一个新的多项式即为新的主密钥,合约按模块1)的方法重新公开参数aj,di。

子密钥增删。当一个新的节点加入区块链时,区块链自动调用申请子密钥的合约方法,该方法在给定的椭圆曲线中再选取一个点作为子密钥,计算得,以及di+1=(i+1,yi+1)-ki+1g),公开di+1。当一个节点被移出区块链时,区块链自动执行移除子密钥方法,该方法调用后将合约中该密钥的状态设置为失效,在后续执行主密钥合成时如果收到该密钥,则将其忽略。当节点被移除后,如果有效子密钥数小于初始化时设定的最小解密密钥数目t,则调用主密钥更新方法,重新生成一个主密钥,并设定一个新的最小解密密钥数t’。

数据加密,如图1所示,当一个节点需要在区块链中存储隐私数据或传输隐私数据时,可以使用主密钥对数据进行加密。加密方法有非对称加密和对称加密两种方法。若使用非对称加密方法,只需要使用主密钥公开的公钥进行加密即可;若使用对称加密方法,则需要调用主密钥合成智能合约方法,用合成的主密钥对数据进行加密。

数据解密,如图2所示,当一个节点需要将区块链中存储的隐私信息进行解密时,需要调用主密钥合成智能合约方法,用合成的主密钥对数据进行解密。区块链在执行合成主密钥进行解密的合约方法前,会先使用哈希验证函数对各节点提供的密钥进行验证,以防止收到错误的密钥导致主密钥合成错误。

本领域普通技术人员可以理解,以上所述仅为发明的优选实例而已,并不用于限制发明,尽管参照前述实例对发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在发明的精神和原则之内,所做的修改、等同替换等均应包含在发明的保护范围之内。

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