本发明涉及区块链技术,具体涉及抗后门攻击的公共参数产生技术。
背景技术:
现实生活中,密码设备常常被作为黑盒使用。设备使用者(用户)相信密码设备的内部设计符合安全规范,不会去检查其中代码的真实性。用户使用密码设备产生相应的公共参数和用户的秘密密钥。然而,在黑盒环境下,攻击者(如制造商)可能会秘密地嵌入后门到密码设备中:将用户的秘密密钥嵌入到公共参数中(如使用攻击者的公钥加密秘密密钥生成公共参数),该参数与公开已知的密码算法产生的公共参数是不可区分的。掌握后门的攻击者可以很容易地从公共参数中恢复出秘密密钥(如使用攻击者的私钥解密公共参数得到秘密密钥)而不被人察觉,从而密码设备的安全性遭到破坏。这种攻击被称为后门攻击。
另一方面,区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链由一组基于点到点网络的节点组成,各节点通过执行共识机制,维护数据的一致性。区块链利用区块的哈希值将数据区块连接起来形成块链式结构,使区块中的数据具有不可篡改、可追溯和公开透明等特性。区块链通过分布式节点共识算法来生成、更新和存储数据,可以达到去中心化的功能。区块链通过数字签名的方式声明和转让数字资产保证了数据传输和访问的安全。
因为每个区块的内容是不可预测的,所以下一个区块的哈希值也是不可预测的。以以太坊区块链为例,以太坊中的数据是公开透明的,任何人都可以接入以太坊网络中查询以太坊区块链的内容以及验证区块的哈希值。不仅如此,目前为止以太坊算力为449.1th/s,即每秒计算4.49×1014次哈希。而中国计算速度最快的超级计算机神威·太湖之光的持续性能为每秒9.3×1016次逻辑计算,约为5.5×1012次哈希计算,低于以太坊的算力。由此可见,以太坊区块链有足够的算力保证数据的不可伪造性。
技术实现要素:
本发明所要解决的技术问题,根据区块链的公开透明、防篡改以及最新确认的区块哈希值的随机性等良好性质提供一种基于区块链的抗后门攻击的公共参数产生方法。
本发明为所要解决的技术问题所采用的技术方案是,一种基于区块链的抗后门攻击的公共参数产生方法,包括步骤:
1)准备阶段:
首先确定公共参数的取值范围,生成公共参数的选值集合g;
2)公共参数生成阶段:
在系统中设置生成次数变量i;获取区块链上最新确认的l个区块哈希值,将这l个区块哈希值和生成次数变量i通过约定映射关系映射到集合g中的元素得到此次生成的公共参数;
3)公共参数验证阶段:
判断生成阶段产生的参数是否满足条件,若不满足条件,则舍弃该参数,更新生成次数变量i=i+1,返回步骤2);若满足条件,则输出该公共参数至公共参数使用设备。
本发明的有益效果是:
(1)公共参数基于区块链上最新确认的区块,并有区块链的算力保证,即使是系统的开发者也无法预知或设定公共参数,具有随机性;公共参数产生完全公开透明具有可验证性和随机性,安全性高,可以有效抵抗后门攻击;
(2)对使用者完全透明,任何一个人都可以根据区块哈希值计算出公共参数,具有可验证性;
(3)去中心化,不需要任何第三方的投入。
附图说明
图1为使用连续l个区块哈希值映射生成公共参数的示意图。
图2为本发明流程图。
具体实施方式
下面结合附图和实施例对本发明进行进一步的说明。
本实施例选取一个代表模p剩余类加群zp作为集合g进行讨论,其中p为大素数,其他集合的公共参数产生方法与zp中的参数产生方法类似,本文不做详细描述。
由系统发起者生成参数,系统发起者可以是使用参数的中心机构,也可以是其他团体或机构。公共参数生成过程如图2所示:
1)准备工作:
首先确定参数范围和条件,zp中公共参数产生规则:给定大素数p,确定群zp={0,1,2,…,p-1},确定参数parameter的条件为1<parameter<p-1,也可以是满足规范的条件。确定参数集合g=zp。
2)生成阶段:
生成参数开始时,在系统中设置初始的生成次数变量i,i的初始值为0。将以太坊上最新确认的l个区块哈希值作为输入的一部分,设这l个区块的哈希值按时间先后顺序分别表示为hblock1、hblock2、……、hblockl。
本发明定义映射f(hblock1,hblock2,…,hblockl,i)→g,i=0,1,…。映射f将l个区块哈希值映射为集合g中的元素。如图1所示,本实例将l个区块采用哈希值映射的方式映射为集合zp中的元素,哈希函数若采用sha256算法,则哈希函数将任意长度的二进制值映射为长度为256的二进制值h:{0,1}*→{0,1}256。定义映射h(hblock1||hblock2||…||hblockl||i)→zp,i=0,1,…。其中,||为连接符,h()为哈希函数,将任意长度的二进制值映射为固定长度的二进制值,这个固定的二进制值称为哈希值。产生a1=h(hblock1||hblock2||…||hblockl||i)。
进一步的,为了保证了产生的公共参数在集合zp中均匀分布,满足随机性,根据集合g中给定参数的比特长度plen与公共参数的比特长度a1len的大小关系对映射结果再取模:首先计算给定参数p的比特长度plen。若plen≤a1len,公共参数a1=h(hblock1||hblock2||…||hblockl||i)modp,其中mod为取模运算,得到此次产生的参数a1∈zp;若plen>a1len,首先搜索满足plen≤256l的最小l,再计算a1=h(hblock1||hblock2||…||hblockl||i)||h(hblock1||hblock2||…||hblockl||i+1)||…||h(hblock1||hblock2||…||hblockl||i+l-1)modp,i=0,得到此次产生的参数a1∈zp。
验证阶段:
判断a1是否满足1<a1<p-1,若满足则输出公共参数parameter=a1;若不满足,则i=i+1,并且重新执行生成阶段a1=h(hblock1||hblock2||…||hblockl||i)∈zp或者根据给定大素数长度与公共参数长度的大小关系对映射结果再取模,重复此过程,直至找到满足条件的公共参数。
下面给出几种典型的后门攻击以及相应的公共参数产生方法
实施例1
1.1被破坏的rsa密钥生成
rsa正确的密钥生成过程:任意选取两个不同的大素数p和q计算乘积n=pq,计算
设置后门的rsa密钥生成过程:任意选取两个不同的大素数p和q计算乘积n=pq,计算
在被破坏的rsa密钥生成中,公钥的产生在概率上和正确产生e是不可区分的,但却留有后门。知道后门的攻击者可以发起无法被察觉的攻击。其使用与pk*对应的sk*恢复出秘密参数p,进而求解q和
1.2基于区块链的抗后门攻击的rsa公钥生成方法
准备工作:
确定rsa公钥e的范围:集合
生成阶段:
生成参数开始时,在系统中设置初始的生成次数变量i,i的初始值为0。将以太坊上最新确认的12个区块哈希值作为输入的一部分,设这12个区块的哈希值按时间先后顺序分别表示为hblock1、hblock2、hblock3、hblock4、hblock5、hblock6、hblock7、hblock8、hblock9、hblock10、hblock11、hblock12。
将12个区块哈希值映射到集合g中,定义映射h(hblock1||hblock2||…||hblock12||i)→g,i=0,1,…。其中,||为连接符,h()为哈希函数,将任意长度的二进制值映射为固定长度的二进制值,这个固定的二进制值称为哈希值。本实施例中哈希函数若采用sha256算法,h:{0,1}*→{0,1}256,表示哈希函数将任意长度的二进制值映射为长度为256的二进制值。
更具体地,首先计算
验证阶段:
判断a1是否满足
实施例2
2.1(i′,i′+1)dhkleptogram
(i′,i′+1)dhkleptogram的攻击过程如下:
协议每次通过
2.2基于区块链的抗(i,i+1)dhkleptogram的参数产生方法
准备工作:
确定公共参数g的范围:群zp={0,1,…,p-1},p为大素数。确定公共参数g的条件:要求g为zp的生成元,阶为p-1,即ord(g)=p-1,其中ord为对应元素在群中的阶数。
生成阶段:
生成参数开始时,设置生成次数变量i,初始i=0。将以太坊上最新确认的12个区块哈希值作为输入的一部分,设这12个区块的哈希值按时间先后顺序分别表示为hblock1、hblock2、hblock3、hblock4、hblock5、hblock6、hblock7、hblock8、hblock9、hblock10、hblock11、hblock12。
将12个区块哈希值映射到zp中,定义映射h(hblock1||hblock2||…||hblock12||i)→zp,i=0,1,…。其中,||为连接符,h()为哈希函数,将任意长度的二进制值映射为固定长度的二进制值,这个固定的二进制值称为哈希值。本实施例中哈希函数若采用sha256算法,h:{0,1}*→{0,1}256,表示哈希函数将任意长度的二进制值映射为长度为256的二进制值。
更具体地,首先计算p的比特长度plen。若plen≤256,a1=h(hblock1||hblock2||…||hblock12||i)modp,其中mod为取模运算,得到此次产生的参数a1∈zp;若plen>256,首先搜索满足plen≤256l的最小l,计算a1=h(hblock1||hblock2||…||hblock12||i)||h(hblock1||hblock2||…||hblock12||i+1)||…||h(hblock1||hblock2||…||hblock12||i+l-1)modp,i=0,得到此次产生的参数a1∈zp。上述方式保证了产生的公共参数在集合中均匀分布,满足随机性。
验证阶段:
判断a1是否满足ord(a1)=p-1,若满足则输出产生的公共参数g=a1;若不满足,则更新i=i+1,并且重新执行生成阶段,重复此过程,直至找到满足条件的参数。
实施例3
3.1针对swisspost电子投票的后门攻击
haines等人在《hownottoproveyourelectionoutcome》提出瑞士投票系统存在漏洞,投票选项对应的素数存在后门攻击。例如在客户端和服务器勾结的情况下,两个选项yes和no分别对应两个不同的素数pyes和pno。投票者点击pyes但被恶意的客户端修改为pno。客户端生成pno的部分选择码,服务器进一步使用部分选择码生成选择码供投票者验证。修改后的选项最终验证的内容为
3.2基于区块链的抗后门攻击的swisspost电子投票参数产生方法
准备工作:
确定公共参数pyes的范围:正整数集合z+。确定公共参数pyes的条件:素数。
生成阶段:
生成参数开始时,在系统中设置初始的生成次数变量i,i的初始值为0。将以太坊上最新确认的12个区块哈希值作为输入的一部分,设这12个区块的哈希值按时间先后顺序分别表示为hblock1、hblock2、hblock3、hblock4、hblock5、hblock6、hblock7、hblock8、hblock9、hblock10、hblock11、hblock12。
将12个区块哈希值映射到正整数集合z+中,定义映射h(hblock1||hblock2||…||hblock12||i)→z+,i=0,1,…。其中,||为连接符,h()为哈希函数,将任意长度的二进制值映射为固定长度的二进制值,这个固定的二进制值称为哈希值。本实施例中哈希函数若采用sha256算法,h:{0,1}*→{0,1}256,表示哈希函数将任意长度的二进制值映射为长度为256的二进制值。
计算a1=h(hblock1||hblock2||…||hblock12||i),得到此次产生的参数a1∈z+。
验证阶段:
判断a1是否满足素数条件,若满足则输出产生的公共参数pyes,其中pyes=a1;若不满足,则i=i+1,并且重新回到生成阶段计算a1=h(hblock1||hblock2||…||hblock12||i),重复此过程,直至找到满足条件的参数。
作为黑盒使用的密码设备存在后门攻击,攻击者可能秘密地嵌入后门到密码设备中:将用户的秘密密钥嵌入设备输出的公共参数中,然后从公共参数中恢复出秘密密钥。为了抵御后门攻击,本发明提供了一种基于区块链的抗后门攻击的公共参数产生方法并对该方法进行了详细介绍。本文应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权力要求的保护范围内。