本发明属于加密通信,尤其涉及一种基于区块链的隐蔽通信方法。
背景技术:
1、基于区块链的隐蔽通信存在一些明显的技术限制。首先,消息发送方必须通过其控制的地址参与区块链交易的生成,承担了较高的身份暴露的风险。然后,区块链数据永久链上保存,一旦某些基于区块链的隐蔽通信信息被内部攻击者泄露,攻击者就会利用这些不可抹去的痕迹去破获更多的隐蔽通信。最后,区块链这种广播性质的隐蔽通信信道也给通信双方的密钥协商与同步带来挑战。公开研究成果所提出的基于区块链的隐蔽通信还没有突破上述技术瓶颈,因而无法实现隐蔽性高、性能优良的隐蔽信道。
2、现有的解决方案中主要集中在消息嵌入技术上。一种常见的方法是利用区块链中的可修改字段来携带隐蔽消息。尽管这类方法很直接,但缺乏隐蔽性。为了增强基于区块链的隐蔽通信的隐蔽性,进一步的研究引入了隐式嵌入,例如利用区块链协议中的随机数,或者地址的交互关系来携带隐蔽消息。与显式嵌入方法相比,隐式嵌入技术具有更好的隐蔽性。然而,这些方法并未解决区块链隐蔽通信所带来的特殊性问题。
3、第一个问题是,消息发送方因为必须显式地参与区块链交易的生成,因而承担了较高的身份暴露的风险。区块链领域的去匿名化研究已经获得了相当多的成果,可以有效追踪某一被怀疑的用户的所有上链行为。如果发送方使用的地址被检测到,隐蔽通道就会暴露。因此,为了保护消息发送方,必须引入发送方地址随机化技术,同时又不影响通信双方下一次通信信道的构建。现有方案都没有考虑这种非对称性带来的安全问题。
4、第二个问题是,区块链提供的是一种广播性质的隐蔽通信信道。在建立隐蔽通信之前,双方需要交换密钥信息,并进行同步。现有的解决方案都是双方通过链下协商解决通信初始化问题,而协商过程与区块链无关,暴露风险变大。所以即使链上的隐蔽通信是安全的,也会由于链下协商而暴露。但是现有方案都不合理地假设链下协商是安全的。
5、第三个问题是,所有隐蔽通信数据都会随着区块链永久保存,一旦某些隐蔽通信用户叛变或者被攻破,相关的承载了隐蔽通信的交易样本就会被攻击者所掌握。攻击者就可以利用链上的不可抹去的痕迹去破获更多的隐蔽通信。现有的方案都不考虑部分隐蔽通信被暴露的情况下,如何确保其它隐蔽通信的安全。但是在现实中,隐蔽通信不是一次性的,而是长期使用;而且是集体行为,必须考虑相关可能性。
技术实现思路
1、本发明的目的在于,为克服现有技术缺陷,提供了一种基于区块链的隐蔽通信方法,通信双方只需要知道对方的公钥,就可以在没有直接联系的情况下生成相同的密钥信息,并帮助对方找到隐蔽通信载体;允许发送方为每个承载了隐蔽通信的交易使用不同的随机发送地址,而接收方可以根据需要动态生成和同步这些地址;设计了一种交易特征伪装机制,并利用数字签名中的随机数作为消息载体。
2、本发明目的通过下述技术方案来实现:
3、一种基于区块链的隐蔽通信方法,所述方法用于发送方和接收方通信,所述发送方拥有带有第一签名算法的第一私钥,所述第一私钥对应有第一公钥以及对应有比特币地址,所述接收方拥有第二私钥,所述第二私钥对应有第二公钥,发送方与接收方互相知道对方公钥且不知道对方私钥,所述方法包括:
4、发送方利用第一私钥生成第一完整交易,并利用第二签名算法后生成第二完整交易,将所述第一完整交易和所述第二完整交易广播上链;
5、接收方通过查询所述比特币地址的交易获取所述第一完整交易和所述第二完整交易,并通过第二签名算法恢复第一私钥;
6、发送方和接收方之间通过ecdh算法生成一个共享秘密,并对所述共享秘密哈希,得到第一链码;
7、发送方生成伪造交易集合,所述伪造交易集合包括伪造交易的输入数量,输出数量,输入总金额,输出总金额和交易费;
8、发送方和接收方使用所述第一私钥和所述第一链码构造hd钱包使用的扩展私钥,并通过所述扩展私钥按照所述hd钱包的方法同步生成公私钥对;
9、发送方将通信消息拆分成多个消息片段,并生成若干笔隐蔽通信交易的原始字节,所述原始字节对应的任意一个完整交易中的一个输入地址为对应的公钥的比特币地址,交易承载参数、输出总金额和交易费从所述伪造交易集合中随机选取;
10、发送方将每个消息片段嵌入对应的完整交易中,将签名附加到对应交易上,得到完整的隐蔽通信交易集合,并广播上链;
11、接收方通过查询每个隐蔽通信交易的输入地址,获取完整的隐蔽通信交易集合,并恢复每个交易的原始字节,提取出对应签名;
12、接收方从所述对应签名中恢复消息片段,所有的消息片段组成完整的消息。
13、进一步的,所述第一签名算法包括:
14、输入发送方私钥和第一交易原始字节;
15、对第一交易原始字节进行哈希,得到第一哈希结果z1;
16、随机选择k1∈{1,…,n-1},计算椭圆曲线点(x1,y1)=k1·g,g是区块链密码系统的椭圆曲线的生成元,令r1=x1modn,n是比特币椭圆曲线的阶数;
17、计算s1=k1-1·(z1+r1·skalice)modn,skalice为发送方私钥;
18、得到签名σ1=(r1,s1)。
19、进一步的,所述第二签名算法包括:
20、输入发送方私钥、k1、接收方公钥和第二交易原始字节;
21、对第二交易原始字节进行哈希,得到第二哈希结果z2;
22、随机选择t∈{0,1},计算e=(k1-wt)·g+(-ak1-b)·pkbob,pkbob为接收方公钥,w是一个固定的奇整数,a和b是两个固定的常数。
23、计算k2=hash(e),计算椭圆曲线点(x2,y2)=k2·g,令r2=x2modn,计算s2=k2-1·(z2+r2·skalice)modn;
24、得到签名σ2=(r2,s2)。
25、进一步的,所述通过第二签名算法恢复第一私钥具体包括:
26、输入接收方私钥、(r1,s1)、(r2,s2)和第二原始交易字节;
27、用r1和r2作为椭圆曲线横坐标确定相应的纵坐标,得到椭圆曲线点(x1,y1)和(x2,y2);
28、计算e1=(x1,y1)-skbob(a·(x1,y1)+b·g);
29、如果(x2,y2)=hash(e1)·g,则返回k2=hash(e1),否则计算e2=e1-w·g,如果(x2,y2)=hash(e2)·g,则返回k2=hash(e2);
30、对第二原始交易字节进行哈希,得到第二哈希结果;
31、恢复发送方的私钥skalice=r2-1·(s2k2-z2)。
32、进一步的,所述生成伪造交易集合具体包括:
33、下载比特币的真实交易数据并生成交易承载参数以及交易费集合,交易承载参数包括输入数量、输出数量和输入总金额;
34、发送方对每个伪造交易按照所述伪造交易的交易承载参数选择相应的交易费集合,并从所述交易费集合中随机选择一个交易费;
35、发送方确定每个伪造交易的输出总金额参数。
36、进一步的,所述交易承载参数的生成方法包括:
37、发送方将真实交易数据集分成训练集和测试集;
38、发送方提取出训练集交易的参数,并构建交易表格,表格每列对应一个参数,每行对应一个具体的交易;
39、在abc-channel的方案中,提取并生成输入数量、输出数量和输入总金额,其中,输入总金额是一个连续的随机变量,输入数量和输出数量是两个离散的随机变量;
40、用one-hot向量表示表格中的每个离散值;
41、对表格中的每个连续值进行归一化处理;
42、将表格每一行中的归一化后的连续值与离散值连接在一起;
43、以training-by-sampling的方式对样本进行训练。
44、进一步的,所述交易费的生成方法包括:
45、发送方按照输入数量和输出数量对真实交易集合进行分组得到第一分组集合;
46、再对第一分组集合根据输出总金额分组得到第二分组集合;
47、利用高斯分布对第二分组集合中每个组的交易集合的交易费分布拟合,得到第一高斯分布;
48、从第一高斯分布中取样n个数据,n为第二分组集合中每个组的交易总数,并移除不在第二分组集合中交易费的最大值与最小值之间的数据,得到第一交易费集合。
49、进一步的,所述通过所述扩展私钥按照所述hd钱包的方法同步生成公私钥对具体包括:
50、令i=hmac-sha512(chaincodeab,0x00||pkalice||i),chaincodeab表示第一链码,第一链码为hmac_sha512的密钥,0x00||pkalice||i是对应的数据,pkalice为发送方私钥且使用比特币压缩公钥的方式将发送方私钥序列化成字节表示,i是一个32比特的整数且序列化为一个4字节的序列;
51、将i拆分成两个32字节的序列il和ir;
52、将il解释为一个256比特的数字parse256(il),则私钥ski=parse256(il)+skalice(modn),公钥pki=parse256(il)*g+pkalice。
53、进一步的,所述第二签名算法为kleptography算法。
54、进一步的,在所述方法中,每个交易使用唯一地址作为发送地址,发送方可以生成额外的接收地址,每个接收地址都是唯一的。
55、本发明的有益效果在于:
56、(1)在本发明中,发送方利用区块链交易来传输消息,生成模拟交易特征和特定于该交易的地址。一旦生成,该交易将被发送到区块链。接收方在接收到该交易后可以从中提取出消息。需要注意的是,只有接收方能够识别该交易,而攻击者无法将其与区块链上的其他交易区分开。并且本发明使用了kleptography技术,使得通信双方无需直接通信,就能完成协商同步,在这个过程中不会降低隐蔽性。
57、(2)为了增强隐蔽通信交易与正常交易的相似性,本技术设计了用于生成表格数据的生成对抗网络来生成承载交易的关键参数。为了训练模型,本发明使用历史上的真实交易(即真实数据)作为训练数据集。接下来使用高斯分布来模拟真实数据中观察到的费用分布,使得攻击者无法通过交易的任何特征来区分隐蔽通信的承载交易和其它交易。
58、(3)本发明为了增强发送发地址的不可追踪性,采用了动态地址生成而不是使用固定地址。每个交易将使用一个唯一的地址作为发送地址。发送方可以生成额外的接收地址,只要确保每个接收地址都是唯一的。通过为每个交易动态生成地址,攻击者无法通过单个地址将多个交易关联起来。同时,交易使用的地址是不可预测的。