本申请属于密钥生成技术领域,尤其涉及一种基于区块链的密钥生成方法及装置。
背景技术:
在发送方和接收方之间传输业务数据时,为了保证数据的安全性,需要利用密钥对传输的业务数据进行加密。
现有技术中,通常预先生成密钥并存储密钥,并在进行业务数据传输时,再利用预先生成并存储的密钥对业务数据进行加密。
但是,由于预先生成并存储私钥和公钥,导致为破解密钥预留了一定的时间,提高了密钥被破解的风险,降低了数据的安全性。
技术实现要素:
有鉴于此,本申请的目的在于提供一种基于区块链的密钥生成方法及装置,用于解决现有技术中密钥被破解的风险高、数据的安全性低的问题。
技术方案如下:
本申请提供一种基于区块链的密钥生成方法,包括:
在发送方向接收方发送业务数据前,发送方生成第一私有密钥,并基于所述第一私有密钥生成第一公开密钥;
基于区块链,发送方将所述第一公开密钥作为区块链交易中的金额发送给接收方;
接收方生成第二私有密钥,并基于所述第二私有密钥生成第二公开密钥;
基于区块链,接收方将所述第二公开密钥作为区块链交易中的金额发送给发送方;
发送方基于所述第一私有密钥和所述第二公开密钥,计算出第一共享密钥;接收方基于所述第二私有密钥和所述第一公开密钥,计算出第二共享密钥。
优选地,所述发送方生成第一私有密钥,并基于所述第一私有密钥生成第一公开密钥包括:
发送方随机选取素数;
在大于1且小于所述素数的区间内,随机选取数据作为第一私有密钥;
基于公式a=g^amodp计算得到第一公开密钥;其中,a为第一公开密钥;a为第一私有密钥;p为素数;g为生成元,所述生成元是所述素数的原根。
优选地,所述基于区块链发送方将所述第一公开密钥作为区块链交易数据中的金额发送给接收方包括:
发送方对所述素数、所述生成元和所述第一公开密钥分别进行补零操作,得到补零后长度为8位的素数、生成元和第一公开密钥;
发送方公开广播账本,从账本中选择一个该发送方未花费的交易输出utxo,并从所述utxo中向接收方支付数值分别为8位长度的素数、8位长度的生成元和8位长度的第一公开密钥,单位均为聪的金额。
优选地,所述从所述utxo中向接收方支付数值分别为8位长度的素数、8位长度的生成元和8位长度的第一公开密钥,单位均为聪的金额之后,还包括:
发送方将向接收方支付的交易广播到区块链分布式系统中,使得完成交易确认后将该交易写入区块并通过区块加入到区块链中。
优选地,所述接收方生成第二私有密钥,并基于所述第二私有密钥生成第二公开密钥包括:接收方获取到账本后,在大于1且小于所述素数的区间内,随机选取数据作为第二私有密钥;
基于公式b=g^bmodp计算得到第二公开密钥;其中,b为第二公开密钥;b为第二私有密钥;p为素数;g为生成元,所述生成元是所述素数的原根。
优选地,所述发送方基于所述第一私有密钥和所述第二公开密钥,计算出第一共享密钥包括:
基于公式k1=b^amodp计算第一共享密钥;其中,k1为第一共享密钥,b为第二公开密钥;a为第一私有密钥;p为素数;
所述接收方基于所述第二私有密钥和所述第一公开密钥,计算出第二共享密钥包括:
基于公式k2=a^bmodp计算第二共享密钥;其中,k2为第二共享密钥,a为第一公开密钥;b为第二私有密钥;p为素数。
优选地,还包括:发送方利用所述第一共享密钥对所述业务数据进行加密。
本申请还提供了一种基于区块链的密钥生成装置,包括:
第一生成单元,用于在发送方向接收方发送业务数据前,发送方生成第一私有密钥,并基于所述第一私有密钥生成第一公开密钥;
第一发送单元,用于基于区块链,发送方将所述第一公开密钥作为区块链交易中的金额发送给接收方;
第二生成单元,用于接收方生成第二私有密钥,并基于所述第二私有密钥生成第二公开密钥;
第二发送单元,用于基于区块链,接收方将所述第二公开密钥作为区块链交易中的金额发送给发送方;
计算单元,用于发送方基于所述第一私有密钥和所述第二公开密钥,计算出第一共享密钥;接收方基于所述第二私有密钥和所述第一公开密钥,计算出第二共享密钥。
优选地,所述第一生成单元包括:
选取子单元,用于发送方随机选取素数,并在大于1且小于所述素数的区间内,随机选取数据作为第一私有密钥;
计算子单元,用于基于公式a=g^amodp计算得到第一公开密钥;其中,a为第一公开密钥;a为第一私有密钥;p为素数;g为生成元,所述生成元是所述素数的原根。
优选地,还包括:加密单元,用于利用计算得到第一共享密钥或第二共享密钥对业务数据进行加密。
与现有技术相比,本发明提供的上述技术方案具有如下优点:
从上述技术方案可知,本申请中在发送方向接收方发送业务数据前,发送方生成第一私有密钥,并基于所述第一私有密钥生成第一公开密钥;基于区块链,发送方将所述第一公开密钥作为区块链交易数据中的金额发送给接收方;接收方生成第二私有密钥,并基于所述第二私有密钥生成第二公开密钥;基于区块链,接收方将所述第二公开密钥作为区块链交易数据中的金额发送给发送方;发送方基于所述第一私有密钥和所述第二公开密钥,计算出第一共享密钥;接收方基于所述第二私有密钥和所述第一公开密钥,计算出第二共享密钥。使得发送方与接收方之间传输业务数据时,可以利用第一共享密钥或第二共享密钥对业务数据加密,且由于仅在需要在发送方和接收方之间传输业务数据时,才生成第一共享密钥和第二共享密钥,缩短了密钥的存储时间,进而降低了密钥被破解的风险,提高了利用密钥加密数据的安全性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1是本申请公开的一种基于区块链的密钥生成方法的流程图;
图2是本申请公开的另一种基于区块链的密钥生成方法的流程图;
图3是本申请公开的生成对发送方与接收方之间传输的业务数据进行加密的密钥的示意图;
图4是本申请公开的一种基于区块链的密钥生成装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请提供了一种基于区块链的密钥生成方法,参见图1所示,该方法可以包括以下步骤:
s101、在发送方向接收方发送业务数据前,发送方生成第一私有密钥,并基于所述第一私有密钥生成第一公开密钥。
在不同的业务场景中,业务数据是不同的。以电力这一业务场景为例,针对新兴的分布式光伏发电模式,除去自用电量部分外,多余电力可以用于申领补贴和就近交易。例如,用户a有多余电力可以与附近的用户b进行多余电力的就近交易,交易数据包括销售价格和销售量,则销售价格和销售量为业务数据,用户a需要将业务数据发送至用户b。
为了保证电力的销售价格和销售量的可信度,需要使用密钥对销售价格和销售量进行加密。
当需要使用密钥对业务数据进行加密的情况下,发送方生成第一私有密钥,并基于第一私有密钥生成第一公开密钥。
s102、基于区块链,发送方将所述第一公开密钥作为区块链交易中的金额发送给接收方。
区块链指的是按照时间顺序将区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。
基于区块链实现的交易过程包括支付交易,交易广播,交易写入区块,以及区块加入区块链这几个步骤。其中,交易对象可以为比特币。
本实施例中将发送方和接收方分别作为区块链分布式系统中的两个子节点,将发送方和接收方之间协商密钥的过程作为发送方和接收方之间进行交易的过程,发送方作为支付方,将第一公开密钥作为交易金额支付给接收方。
s103、接收方生成第二私有密钥,并基于所述第二私有密钥生成第二公开密钥。
发送方向接收方支付成功后,接收方生成第二私有密钥,并基于第二私有密钥生成第二公开密钥。
s104、基于区块链,接收方将所述第二公开密钥作为区块链交易中的金额发送给发送方。
步骤s102为发送方向接收方进行支付的交易,而步骤s104为接收方向发送方进行支付的交易。
本步骤中接收方作为支付方,将第二公开密钥作为交易金额支付给发送方。
s105、发送方基于所述第一私有密钥和所述第二公开密钥,计算出第一共享密钥;接收方基于所述第二私有密钥和所述第一公开密钥,计算出第二共享密钥。
在计算出第一共享密钥和第二共享密钥后,可以利用第一共享密钥或第二共享密钥对发送方和接收方之间传输的业务数据进行加密。
通过上述技术方案,本实施例中在发送方向接收方发送业务数据前,发送方生成第一私有密钥,并基于所述第一私有密钥生成第一公开密钥;基于区块链,发送方将所述第一公开密钥作为区块链交易数据中的金额发送给接收方;接收方生成第二私有密钥,并基于所述第二私有密钥生成第二公开密钥;基于区块链,接收方将所述第二公开密钥作为区块链交易数据中的金额发送给发送方;发送方基于所述第一私有密钥和所述第二公开密钥,计算出第一共享密钥;接收方基于所述第二私有密钥和所述第一公开密钥,计算出第二共享密钥。使得发送方与接收方之间传输业务数据时,可以利用第一共享密钥或第二共享密钥对业务数据加密,且由于仅在需要在发送方和接收方之间传输业务数据时,才生成第一共享密钥和第二共享密钥,缩短了密钥的存储时间,进而降低了密钥被破解的风险,提高了利用密钥加密数据的安全性。且,不会长时间的占用存储空间,提升了存储资源利用率,降低了存储成本。
本实施例中还提供了另一种基于区块链的密钥生成方法,参见图2所示,该方法可以包括以下步骤:
s201、在发送方向接收方发送业务数据前,发送方随机选取素数。
需要利用密钥对业务数据进行加密时生成密钥。生成密钥的过程包括发送方随机选取大素数p。
s202、在大于1且小于所述素数的区间内,随机选取数据作为第一私有密钥。
发送方在[1,p]之间随机选取数据作为第一私有密钥a,即1<a<p。
s203、基于公式a=g^amodp计算得到第一公开密钥;其中,a为第一公开密钥;a为第一私有密钥;p为素数;g为生成元,所述生成元是所述素数的原根。
生成元g是素数p的原根。
得到素数p的原根的过程为:假设g是p的原根,那么i值不同g^imodp的结果两两不同,其中,1<g<p,0<i<p。即g^(p-1)=1(modp)当且仅当指数为p-1时成立。
可见,g^imodp≠g^jmodp,其中i≠j且i,j均介于1至(p-1)之间,则g为p的原根。
p、a、g均确定后,基于公式a=g^amodp可以计算得到第一公开密钥a。
s204、发送方对所述素数、所述生成元和所述第一公开密钥分别进行补零操作,得到补零后长度为8位的素数、生成元和第一公开密钥。
p、g、a均确定后,对这三个数据分别执行补零操作。具体为在数据左边填充0,使得填充0后的数据总长度为8位,得到0.000…0a,0.0…0000g,0.0…0000p。
s205、发送方公开广播账本,从账本中选择一个该发送方未花费的交易输出utxo,并从所述utxo中向接收方支付数值分别为8位长度的素数、8位长度的生成元和8位长度的第一公开密钥,单位均为聪的金额。
比特币的交易由交易输入和交易输出组成,每一笔交易都要花费一笔输入而产生一笔输出,而所剩余的输出就是utxo(unspenttransactionoutput,未花费的交易输出)。
区块链是一个分布式账本,一种通过去中心化、去信任的方式集体维护一个可靠数据库,区块链是一种几乎不可能被更改的分布式数据库。此处分布式不仅体现为数据的分布式存储,也体现为数据的分布式记录,即由区块链分布式系统中的各个子节点共同维护。
发送方作为区块链分布式系统中的一个子节点,公开广播账本,从账本中选择一个区块链分布式系统中其他的子节点支付给该发送方的utxo,从选择的utxo中向接收方支付0.000…0a聪,0.0…0000g聪,0.0…0000p聪。其中,1btc(比特币)=10^8聪。
s206、发送方将向接收方支付的交易广播到区块链分布式系统中,使得完成交易确认后将该交易写入区块并通过区块加入到区块链中。
发送方向接收方支付特定数量的聪后,还需要将发送方向接收方支付的此次交易广播到区块链分布式系统中,使得通过区块链分布式系统中的各个子节点都可以接收到此次交易,进而确认此次交易是否成功。各个子节点将接收到的交易作为区块链中区块的输入,即将该交易写入区块中,并将写入交易的该区块加入到区块链中。
其中,时间戳服务器对以区块形式存储的交易加上时间戳,使得每条实际产生的交易都能正确的被存储。
且正是由于交易都被存储在区块链的分布式账本中,因此可以为后续生成的密钥的准确性和真实性提供追溯依据。
s207、区块链记录交易后的账本后,接收方在大于1且小于所述素数的区间内,随机选取数据作为第二私有密钥。
随着区块链分布式系统中各个子节点之间进行交易,账本会进行更新。区块链记录发送方向接收方支付的交易后,接收方在[1,p]这一区间内随机选取数据作为第二私有密钥b,即l<b<p。
s208、基于公式b=g^bmodp计算得到第二公开密钥;其中,b为第二公开密钥;b为第二私有密钥;p为素数;g为生成元,所述生成元是所述素数的原根。
p、b、g均确定后,基于公式b=g^bmodp可以计算得到第二公开密钥b。
s209、基于区块链,接收方将所述第二公开密钥作为区块链交易中的金额发送给发送方。
接收方得到b后,对b执行补零操作。具体为在数据左边填充0,使得填充0后的数据总长度为8位,得到0.000…0b。
接收方作为区块链分布式系统中的一个子节点,公开广播账本,从账本中选择一个区块链分布式系统中其他的子节点支付给该接收方的utxo,从选择的utxo中向发送方支付0.000…0b聪。
s210、基于公式k1=b^amodp计算第一共享密钥;其中,k1为第一共享密钥,b为第二公开密钥;a为第一私有密钥;p为素数。
并基于公式k2=a^bmodp计算第二共享密钥;其中,k2为第二共享密钥,a为第一公开密钥;b为第二私有密钥;p为素数。
计算得到的第一共享密钥和第二共享密钥后,需要使用加密算法基于共享密钥对发送方和接收方之间传输的业务数据进行加密、解密。
由于本实施例中基于区块链的分布式账本生成发送方和接收方之间的密钥,使得发送方利用密钥对业务数据加密后的密文只能由接收方解密,从而降低了密文被破译的几率,提高了业务数据的安全性。
参见图3所示,为本实施例中生成对发送方与接收方之间传输的业务数据进行加密的密钥的示意图。其中,alice为发送方,bob为接收方。
对应上述实施例公开的基于区块链的密钥生成方法,本申请实施例提供了一种基于区块链的密钥生成装置,参见图4所示,该装置包括:
第一生成单元401、第一发送单元402、第二生成单元403、第二发送单元404和计算单元405。
第一生成单元401,用于在发送方向接收方发送业务数据前,发送方生成第一私有密钥,并基于所述第一私有密钥生成第一公开密钥。
可选地,第一生成单元401包括:
选取子单元和计算子单元。
所述选取子单元,用于发送方随机选取素数,并在大于1且小于所述素数的区间内,随机选取数据作为第一私有密钥;
所述计算子单元,用于基于公式a=g^amodp计算得到第一公开密钥;其中,a为第一公开密钥;a为第一私有密钥;p为素数;g为生成元,所述生成元是所述素数的原根。
第一发送单元402,用于基于区块链,发送方将所述第一公开密钥作为区块链交易中的金额发送给接收方;
第二生成单元403,用于接收方生成第二私有密钥,并基于所述第二私有密钥生成第二公开密钥;
第二发送单元404,用于基于区块链,接收方将所述第二公开密钥作为区块链交易中的金额发送给发送方;
计算单元405,用于发送方基于所述第一私有密钥和所述第二公开密钥,计算出第一共享密钥;接收方基于所述第二私有密钥和所述第一公开密钥,计算出第二共享密钥。
可选地,在其他实施例中,还可以包括:
加密单元,用于利用计算得到第一共享密钥或第二共享密钥对业务数据进行加密。
还可以包括:
解密单元,用于利用计算得到的第一共享密钥或第二共享密钥对加密后的业务数据进行解密。
通过上述技术方案,本实施例中在发送方向接收方发送业务数据前,发送方生成第一私有密钥,并基于所述第一私有密钥生成第一公开密钥;基于区块链,发送方将所述第一公开密钥作为区块链交易数据中的金额发送给接收方;接收方生成第二私有密钥,并基于所述第二私有密钥生成第二公开密钥;基于区块链,接收方将所述第二公开密钥作为区块链交易数据中的金额发送给发送方;发送方基于所述第一私有密钥和所述第二公开密钥,计算出第一共享密钥;接收方基于所述第二私有密钥和所述第一公开密钥,计算出第二共享密钥。使得发送方与接收方之间传输业务数据时,可以利用第一共享密钥或第二共享密钥对业务数据加密,且由于仅在需要在发送方和接收方之间传输业务数据时,才生成第一共享密钥和第二共享密钥,缩短了密钥的存储时间,进而降低了密钥被破解的风险,提高了利用密钥加密数据的安全性。且,不会长时间的占用存储空间,提升了存储资源利用率,降低了存储成本。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。