专利详情

标题一种基于哈希链的区块链高容量隐蔽信道构建方法
[标]当前申请(专利权)人南开大学
申请日2024年3月31日
申请号CN202410380916.8
公开(公告)日2024年8月9日
公开(公告)号CN118041686B
授权日2024年8月9日
法律状态/事件授权发明
专利类型授权
发明人蒋泽恩 | 苏明 | 刘晓光 | 王刚
受理局中国
当前申请人(专利权)地址300350 天津市津南区同砚路38号 (天津,天津,津南区)
IPC分类号H04L9/40 | H04L9/00 | H04L9/06 | H04L69/00
国民经济行业分类号-
代理机构天津创智睿诚知识产权代理有限公司
代理人王海滨
被引用专利数量-
专利价值-

摘要

本发明公开了一种基于哈希链的区块链高容量隐蔽信道构建方法,通信双方先在通信前在本地生成基于哈希链的链式地址池,然后通过使用伪随机数生成器对每一个地址生成相应的隐蔽位置,实现将隐蔽信息隐藏在交易字段中;基于哈希链的结构特征,可以支持嵌入任意可变长度的信息,在接收方端可以快速检测错误和终止通信信号;利用链式地址池的有序性,根据隐蔽信息来排列区块链交易输出地址排列,大大提高了隐蔽信道容量;同时本方案中地址池可以周期性更新,不会重用,具备高效且隐蔽的特点。

1.一种基于哈希链的区块链高容量隐蔽信道构建方法,其特征在于:该方法包括以下步骤:
步骤1:发送方和接收方在本地搭建好区块链平台;
步骤2:发送方和接收方得到共享密钥psk、公钥PK0;
步骤3:发送方使用加密算法对要传递的信息m进行加密,得到对应的隐蔽信息密文b;
步骤4:发送方和接收方均使用公钥PK0和共享密钥psk,进行哈希链计算,生成各自的地址池公钥,并转换为相应的地址,加入到发送方和接收方各自的地址池中;
步骤5:将隐蔽信息密文b分成第一部分隐蔽信息密文b1和第二部分隐蔽信息密文b2;发送方构建交易时,从其本地地址池中选取地址,作为交易的输出地址,对每一个输出地址通过伪随机数发生器计算出b1的嵌入位置,将b1嵌入到交易字段中的相应嵌入位置;将b2嵌入至交易的输出地址排序中;
将b2嵌入至交易的输出地址排序中的方法为:
对于输出地址集合D={d1,d2,d3…,dn},设其消息空间为MD:={0,1}t,其中Π是所有地址di(i=1,2...n)的排列的集合,对于集合Π中不同的元素,得到隐藏函数MD→D,D∈∏,如下所示:

将b2与输出地址集合D的排列一一映射:


ri是指输出地址排列中的从第i位后面比di小的地址的个数,从第1位开始,从输出地址集合D中选择第ri+1大的地址加入到交易中相应的地址位置上,实现将b2隐藏在输出地址排序中;
步骤6:发送方将嵌入了隐蔽信息密文的交易数据发送到区块链网络中;
步骤7:接收方从区块链网络监听交易,从中提取出隐蔽信息密文;步骤7包括以下步骤:
步骤7.1:接收方对区块中的每一个交易的地址进行验证,如果该地址存在于接收方本地的地址池中,那么该交易即为携带隐蔽信息密文的交易;
步骤7.2:对步骤7.1中抓取的交易信息进行解码,得到交易字段和交易的输出地址集合D′={d′1,d′2,…d′n};
步骤7.3:对地址集合D′中每一个地址d′i,作为步骤5中的伪随机数发生器种子,生成嵌入位置,然后从交易字段的二进制流的相应嵌入位置中提取出隐蔽信息密文b1′;
步骤7.4:根据获取到的地址集合D′,找到集合D′所映射的隐蔽信息密文b2′;
步骤7.5:将步骤7.3得到的隐蔽信息密文b1′与步骤7.4得到的隐蔽信息密文b2′拼接起来,从而得到该交易所携带的全部隐蔽信息密文b′;
步骤7.6:接收方通过比较通信双方的地址池的终止地址,来判断发送是否终止以及接收到的消息的完整性;
其中,对于发送方,当发送方地址池的大小达到最大后,发送方使用其要传递的隐蔽信息密文b生成发送方地址池的终止地址PKk+1,发送方地址池的终止地址PKk+1的生成公式如下:
PKk+1=Hash((psk*PKk)||b0||b1||…||bm)*G;其中,b=(b0,b1…bm)为要传递的隐蔽信息密文b,||表示字符串拼接;PKk是发送方的地址池第k个公钥;G为椭圆曲线生成元;
对于接收方,当接收方地址池的大小达到最大后,接收方使用其提取到的全部隐蔽信息密文b′计算出接收方地址池的终止地址PK′k+1,接收方地址池的终止地址PK′k+1的生成公式如下:
PK′k+1=Hash((psk*PK′k)||b′0||b′1||…||b′l)*G;其中,b′=(b′0,b′1,…,b′l)为接收方最终提取的全部隐蔽信息密文b′;PK′k是接收方的地址池第k个公钥;
最后,通过比较PK′k+1与PKk+1是否一致,来判断发送是否终止以及接收到的消息的完整性;如果一致,则表示发送终止并且接收到的消息完整;然后进行步骤8;
步骤8:使用步骤3中相同的加密算法对步骤7中得到的隐蔽信息密文进行解密。
2.根据权利要求1所述的基于哈希链的区块链高容量隐蔽信道构建方法,其特征在于:步骤2中,发送方和接收方以线下聚会的方式进行共享密钥psk的共享。
3.根据权利要求1所述的基于哈希链的区块链高容量隐蔽信道构建方法,其特征在于:所述共享密钥psk为椭圆曲线有限域空间上随机选取的值。
4.根据权利要求1所述的基于哈希链的区块链高容量隐蔽信道构建方法,其特征在于:步骤2中,发送方和接收方约定好通信参数:包括地址池大小k、对要传递的信息加密所采用的加密算法以及生成地址池公钥时的Hash函数。
5.根据权利要求1所述的基于哈希链的区块链高容量隐蔽信道构建方法,其特征在于:步骤3中所述的加密算法为国际通用的密码学安全的对称加密算法。
6.根据权利要求1所述的基于哈希链的区块链高容量隐蔽信道构建方法,其特征在于:步骤4中,发送方使用公钥PK0和共享密钥psk,进行哈希链计算,生成发送方地址池的公钥PKi+1;接收方也使用公钥PK0和共享密钥psk,进行哈希链计算,生成接收方地址池的公钥PKi′+1;
PKi+1=Hash(psk*PKi)*G,i=0,1,…,k-1;
PK′i+1=Hash(psk*PK′i)*G,i=0,1,…,k-1,PK′0=PK0;
其中,Hash为Hash函数,k为地址池大小;
发送方地址池公钥PKi+1转换为相应的地址di+1,加入到发送方地址池中;接收方地址池公钥PKi′+1转换为相应的地址d′i+1,加入到接收方地址池中。
7.根据权利要求1所述的基于哈希链的区块链高容量隐蔽信道构建方法,其特征在于:步骤5中,所述的交易字段包括金额字段和/或手续费字段。

技术领域
[0001]本发明属于隐蔽通信技术领域,具体涉及一种基于哈希链的区块链高容量隐蔽信道构建方法。
背景技术
[0002]隐蔽通信用于匿名用户交换秘密消息。隐蔽通信和一般通信一样,包括发送者、接收者和通信渠道。发送方首先将消息编码到一个隐蔽通道中,而接收方稍后可以从该通道中提取并解码消息。隐蔽通信的关键特征是,除了发送者和接收者之外,其他人很难检测到这种秘密信道的存在。隐蔽渠道通常依靠公共渠道来隐藏隐蔽信息。因此,从其他用户的角度来看,嵌入的消息是不明显的。这种隐蔽的渠道构建方法经常应用于军事、金融和其他领域。
[0003]区块链平台是一种性能更好的隐蔽通信的信道载体,它实现了一个建立在对等网络上的公共分布式账本,可以将其视为模拟自然广播频道的公告板。消息传输没有特定的目的地,因此完全隐藏了接收方的身份;同时,隐蔽信道在区块链网络的P2P通信层之上,天然的具备鲁棒的通信能力,对一些DDoS攻击具备免疫性。此外,区块链还是一个天然的去中心化系统,通信双方无需进行传统CS系统将通信账户注册在服务端的注册过程。参与者只需要在本地生成地址作为帐户,并将数据打包作为交易形式发送到区块链公网即可完成通信,这样的匿名属性有助于隐藏发送者的真实身份。最后,区块链的不变性确保了防篡改通信,这使得对手很难破坏秘密消息的传输。基于上述区块链的特性,我们可以建立更可靠的隐蔽通信。
[0004]基于区块链的隐蔽通信最大的挑战是找出发送者提交的交易。由于没有发布交易的特定目的地,接收者需要搜索整个交易账本,并检查某些交易是否包含机密信息。为了解决这个问题,大多数现有的方法都采用两个步骤:首先,接收者基于账户派生来识别特殊交易,该交易将发送者和接收者私下联系起来;其次,接收方将匹配的交易作为载体,从中提取隐蔽信息,通过解决通信双方快速同步和拓展区块链交易中隐蔽信息载体可以大大提高区块链隐蔽信道的通信效率。
[0005]综上,构建一个信道容量高、隐蔽性强的区块链隐蔽信道,具有好的应用前景。
发明内容
[0006]本发明的目的是解决现有隐蔽信道的信道容量低,匿名性差,安全性低问题;如何保证隐蔽信道身份不被追踪;以及如何保证匿名性高的同时保证隐蔽信道的高信道容量;如何保证在密码学或网络攻击的情况下保证通信的正常进行。为此,本发明专利提出了一种基于哈希链的区块链高容量隐蔽信道构建方法,该方法使发送端和接收端分别拥有一组区块链地址,用于进行交易和信息同步,在这些地址之间通过在交易金额中使用基于地址生成的嵌入位置算法,实现将信息隐藏在交易字段中,在外界很难观测到异常;同时,该方法还利用链式地址池的有序性,根据隐蔽信息来排列区块链交易输出地址排列,大大提高了隐蔽信道容量;同时本方案中地址池可以周期性更新,不会重用,具备高效且隐蔽的特点。
[0007]本发明是通过以下技术方案实现的:
[0008]一种基于哈希链的区块链高容量隐蔽信道构建方法,该方法包括以下步骤:
[0009]步骤1:发送方和接收方在本地搭建好区块链平台;
[0010]步骤2:发送方和接收方得到共享密钥psk、公钥PK0;
[0011]步骤3:发送方使用加密算法对要传递的信息m进行加密,得到对应的隐蔽信息密文b;
[0012]步骤4:发送方和接收方均使用公钥PK0和共享密钥psk,进行哈希链计算,生成各自的地址池公钥,并转换为相应的地址,加入到发送方和接收方各自的地址池中;
[0013]步骤5:将隐蔽信息密文b分成第一部分隐蔽信息密文b1和第二部分隐蔽信息密文b2;发送方构建交易时,从其本地地址池中选取地址,作为交易的输出地址,对每一个输出地址通过伪随机数发生器计算出b1的嵌入位置,将b1嵌入到交易字段中的相应嵌入位置;将b2嵌入至交易的输出地址排序中;
[0014]步骤6:发送方将嵌入了隐蔽信息密文的交易数据发送到区块链网络中;
[0015]步骤7:接收方从区块链网络监听交易,从中提取出隐蔽信息密文;
[0016]步骤8:使用步骤3中相同的加密算法对步骤7中得到的全部隐蔽信息密文进行解密。
[0017]在上述技术方案中,步骤2中,发送方和接收方以线下聚会的方式进行共享密钥psk的共享。
[0018]在上述技术方案中,所述共享密钥psk为椭圆曲线有限域空间上随机选取的值。
[0019]在上述技术方案中,步骤2中,发送方和接收方约定好通信参数:包括地址池大小k、对要传递的信息加密所采用的加密算法、生成地址池公钥时的Hash函数。
[0020]在上述技术方案中,步骤3中所述的加密算法为国际通用的密码学安全的对称加密算法,例如AES或者SM4。
[0021]在上述技术方案中,步骤4中,发送方使用公钥PK0和共享密钥psk,进行哈希链计算,生成发送方地址池的公钥PKi+1;接收方也使用公钥PK0和共享密钥psk,进行哈希链计算,生成接收方地址池的公钥PK′i+1;
[0022]PKi+1=Hash(psk*PKi)*G,i=0,1,…,k-1;
[0023]PK′i+1=Hash(psk*PK′i)*G,i=0,1,…,k-1,PK′0=PK0;
[0024]其中,G为椭圆曲线生成元,Hash为Hash函数,k为地址池大小;
[0025]发送方地址池公钥PKi+1转换为相应的地址di+1,加入到发送方地址池中;接收方地址池公钥PK′i+1转换为相应的地址d′i+1,加入到接收方地址池中。
[0026]在上述技术方案中,步骤5中,所述的交易字段包括金额字段、手续费字段、输入/输出序号等能够可控编辑的字段。
[0027]在上述技术方案中,步骤5中,对于输出地址集合D={d1,d2,d3…,dn},设其消息空间为MD:={0,1}t,其中Π是所有地址di(i=1,2...n)的排列的集合,对于集合Π中不同的元素,得到隐藏函数如下所示:
[0028]
[0029]
[0030]…
[0031]
[0032]将b2与输出地址集合D的排列一一映射:
[0033]
[0034]
[0035]…Ri=Ri-1mod(n-i)!
[0036]…
[0037]ri是指输出地址排列中的从第i位后面比di小的地址的个数,从第1位开始,从输出地址集合D中选择第ri+1大的地址加入到交易中相应的地址位置上,实现将b2隐藏在输出地址排序中。
[0038]在上述技术方案中,步骤7包括以下步骤:
[0039]步骤7.1:接收方对区块中的每一个交易的地址进行验证,如果该地址存在于接收方本地的地址池中,那么该交易即为携带隐蔽信息密文的交易;
[0040]步骤7.2:对步骤7.1中抓取的交易信息进行解码,得到交易字段和交易的输出地址集合D′={d′1,d′2,…d′n};
[0041]步骤7.3:对地址集合D′中每一个地址d′i,作为步骤5中的伪随机数发生器种子,生成嵌入位置,然后从交易字段的二进制流的相应嵌入位置中提取出隐蔽信息密文b1′;
[0042]步骤7.4:根据获取到的地址集合D′,找到集合D′所映射的隐蔽信息密文b2′;
[0043]
[0044]
[0045]其中,ri为集合中小于I(d′i)的元素个数,即ri=|d′j|I(d′j)>I(d′i),j>i|;
[0046]步骤7.5:将步骤7.3得到的隐蔽信息密文b1′与步骤7.4得到的隐蔽信息密文b2′拼接起来,从而得到该交易所携带的全部隐蔽信息密文b′;
[0047]步骤7.6:接收方通过比较通信双方的地址池的终止地址,来判断发送是否终止以及接收到的消息的完整性。
[0048]在上述技术方案中,步骤7.6中,对于发送方,当发送方地址池的大小达到最大后,发送方使用其要传递的隐蔽信息密文b生成发送方地址池的终止地址PKk+1,发送方地址池的终止地址PKk+1的生成公式如下:
[0049]PKk+1=Hash((psk*PKk)||b0||b1||…||bm)*G;其中,b=(b0,b1…bm)为要传递的隐蔽信息密文b,||表示字符串拼接;PKk是发送方的地址池第k个公钥;
[0050]对于接收方,当接收方地址池的大小达到最大后,接收方使用其提取到的全部隐蔽信息密文b′计算出接收方地址池的终止地址PK′k+1,接收方地址池的终止地址PK′k+1的生成公式如下:
[0051]PK′k+1=Hash((psk*PK′k)||b′0||b′1||…||b′l)*G;其中,b′=(b′0,b′1,…,b′l)为接
[0052]收方最终提取的全部隐蔽信息密文b′;PK′k是接收方的地址池第k个公钥;
[0053]最后,通过比较PK′k+1与PKk+1是否一致,来判断发送是否终止以及接收到的消息的完整性;如果一致,则表示发送终止并且接收到的消息完整;然后进行步骤8。
[0054]本发明的优点和有益效果为:
[0055]1,隐蔽性高,使用地址池的匿名地址,不存在特定接收地址,并且地址池中的地址最多使用两次,避免地址大量重复使用,能够抵抗交易流量分析,地址跟踪分析等攻击。
[0056]2,双工通信,发送方和接收方的信息隐写和传输完全隔离,不会相互影响或者交叉干扰,通过地址池中地址可以进行快速同步,两端可以自由地进行持续信息交换。
[0057]3,信道容量高,所有的可编辑的区块链协议字段都可以用作信道载体,额外使用地址排序作为信道载体,输出地址越多,可以嵌入的隐蔽信息量越多。
附图说明
[0058]图1是本发明的整体流程示意图。
[0059]对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,可以根据以上附图获得其他的相关附图。
具体实施方式
[0060]为了使本技术领域的人员更好地理解本发明方案,下面结合具体实施例进一步说明本发明的技术方案。
[0061]一种基于哈希链的区块链高容量隐蔽信道构建方法,该方法包括通信发送方和接收方、区块链平台、公共网络平台,隐蔽信道构建在区块链平台中。下面具体说明本发明方法的实施步骤。
[0062]步骤1:通信双方(即发送方和接收方)在本地搭建好常用的区块链平台,然后创建相应的公钥和私钥,设E为有限域Fq上的椭圆曲线,G为椭圆曲线生成元,#E(Fq)为椭圆曲线上的阶。
[0063]步骤2:通信双方使用其他安全信道通过密钥交换算法得到共享秘钥,或者通信双方在线下聚会上进行密钥共享,得到共享密钥psk,该共享密钥psk为椭圆曲线有限域空间上随机选取的值。
[0064]然后,通信双方约定好相应的通信参数:包括通信双方公钥PK0、地址池大小k、对要传递的信息加密所采用的加密算法、生成地址池公钥时的Hash函数。
[0065]步骤3:发送方对要传递的信息m进行对称加密,可以使用AES或者SM4算法进行加密,得到对应的隐蔽信息密文b。
[0066]步骤4:通信双方生成各自的地址池,地址池由链式结构地址构成。具体的讲,生成地址池的过程包括以下步骤:
[0067]步骤4.1:通信双方均使用公钥PK0(即PK0作为地址池的初始派生公钥)和共享密钥psk,进行哈希链计算,生成通信双方各自的地址池公钥PKi+1和PKi′+1。
[0068]即,发送方使用公钥PK0和共享密钥psk,进行哈希链计算,生成发送方地址池的公钥PKi+1;接收方也使用公钥PK0和共享密钥psk,进行哈希链计算,生成接收方地址池的公钥PKi′+1。
[0069]具体的讲,PKi+1和PKi′+1的生成公式相同,如下:
[0070]PKi+1=Hash(psk*PKi)*G,i=0,1,…,k-1;
[0071]PK′i+1=Hash(psk*PK′i)*G,i=0,1,…,k-1,PK′0=PK0;
[0072]其中,G为椭圆曲线生成元。
[0073]步骤4.2:地址池的公钥计算完毕后,将其全部转换为区块链地址,通信双方在本地保存地址池中相应的公钥和私钥以及其对应的地址;即发送方地址池公钥PKi+1转换为相应的区块链地址di+1,加入到发送方地址池中;接收方地址池公钥PKi′+1转换为相应的区块链地址d′i+1,加入到接收方地址池中。这样地址池可以随着psk的更新而周期性的进行更新,做到地址不重用,保证隐蔽性。
[0074]步骤5:发送方构建交易,在交易中嵌入隐蔽信息密文b。
[0075]本发明方法中隐蔽信息密文b的嵌入载体包括两类,第一类是区块链协议中的字段载体,例如金额、交易手续费;第二类是使用交易中的输出地址的排序方式作为载体。将隐蔽信息密文b分成两部分,即,第一部分隐蔽信息密文b1和第二部分隐蔽信息密文b2,其中b1嵌入第一类载体中,b2嵌入第二类载体中。
[0076]1)对于第一类载体(即使用字段载体):根据区块链UTXO(Unspent TransactionOutputs)交易特点,在生成交易时,每一个输出交易都包含输出金额和交易手续费,发送方在生成交易时,从其本地地址池中选取地址,作为输出地址,对每一个输出地址通过伪随机数生成算法计算出隐蔽信息密文b1的嵌入位置,将隐蔽信息密文b1嵌入到金额和手续费字段中相应的嵌入位置中。具体的步骤如下:
[0077]发送方从其地址池中顺序选取地址作为隐蔽交易的输出地址;
[0078]选取伪随机数发生器(例如采用Mersenne twister伪随机数生成算法),将每个输出地址分别作为伪随机数发生器的种子输入其中,分别计算出相应的嵌入位置[Ps,Pe];
[0079]将第一部分隐蔽信息密文b1的二进制流嵌入到金额和手续费字段中相应的嵌入位置中。
[0080]2)对于第二类载体(即使用地址排序映射作为载体):在发送方生成交易时,对于每一个交易的输出地址都是按照特定的映射进行排序的,每一种排列方式表示不同的嵌入信息,根据要嵌入的信息可以使用快速枚举的方法将要隐蔽信息密文(即第二部分隐蔽信息密文b2)嵌入交易的输出地址排列中,具体的方法如下:
[0081]对于本方案中的交易的输出地址,基于地址池中的链式结构,因此都存在着固定的顺序,用d1,d2,d3…dn表示输出地址的顺序,因此可以使用地址顺序对信息进行表示。
[0082]对于输出地址集合D={d1,d2,d3…,dn},设其消息空间为MD:={0,1}t,其中π是所有地址di(i=1,2...n)的排列的集合,对于集合π中不同的元素,可以得到隐藏函数如下所示:
[0083]
[0084]
[0085]…
[0086]
[0087]对于输出地址集合D={d1,d2,d3,…dn},以及需要嵌入的隐蔽信息密文b2,需要做到将不同的隐蔽信息密文b2与输出地址集合D的排列做到一一映射:
[0088]
[0089]
[0090]…Ri=Ri-1mod(n-i)!
[0091]…
[0092]ri是指输出地址排列中的从第i位后面比di小的地址的个数,因此只需要从第1位开始,从输出地址集合D中选择第ri+1大的地址加入到交易中相应的地址位置上,从而实现将隐蔽信息密文b2隐藏在地址排序中。
[0093]因此通过选择集合Π中的相应的排列可以表示出相应的隐蔽信息密文:即,发送方通过挑选其本地地址池中的地址作为输出地址,将输出地址的顺序按照相应的要嵌入的隐蔽信息密文b2映射的顺序进行排列。进而在接收方后续提取隐蔽信息密文时,接收方通过对比交易中的输出地址顺序和接收方本地地址池中的原始地址顺序就可以提取出隐蔽信息密文。
[0094]步骤6:发送方将嵌入了隐蔽信息密文的交易数据发送到区块链网络中。
[0095]步骤7:接收方从区块链网络监听交易,从中提取出隐蔽信息密文。
[0096]接收方不断地监听区块链网络的新的区块的生成,每当有新的交易到来,通过将交易中的地址与接收方本地地址池中的公钥地址进行比较,如果相同的话则认为是携带隐蔽信息密文的交易;然后接收方对抓取的该交易信息进行解码,获得该交易的输出地址集合D′={d′1,d′2,…d′n},对集合D′中每一个地址d′i,作为步骤5中的伪随机数发生器种子,生成相应的嵌入位置,提取相应字段中的消息,得到隐蔽信息密文b1′;此外,接收方还会根据集合D′从本地地址池中获取到原始地址集合D,从地址排列中提取隐蔽信息密文的函数:因此对于不同的地址序列:
[0097]根据的定义,对于任意的地址序列定义ri为集合中小于I(d′i)的元素个数,即ri=|d′j|I(d′j)>I(d′i),j>i|,因此对于每个地址序列,可以得到其相应的映射:
[0098]
[0099]根据地址集合d′通过上述公式,可以计算出相应的隐蔽信息密文b2′,即
[0100]具体的讲,步骤7包括以下步骤:
[0101]步骤7.1:接收方在本地生成地址池后,在区块链网络中收集交易信息,比如通过使用bitcoin测试链提供的API工具或者直接从区块链浏览器上可以抓取到最新区块,对区块中的每一个交易的地址进行验证,如果该地址存在于接收方本地的地址池中,那么该交易即为携带隐蔽信息密文的交易。
[0102]步骤7.2:对步骤7.1中抓取的交易信息进行解码,得到交易金额字段A、交易手续费字段F、交易输出地址集合D′={d′1,d′2,…d′n}。
[0103]步骤7.3:对地址集合D′中每一个地址d′i,作为步骤5中的为随机数发生器种子,生成嵌入位置,然后从交易金额字段和/或交易手续费字段的二进制流的相应嵌入位置中提取出隐蔽信息密文b1′。
[0104]步骤7.4:根据获取到的地址集合D′,找到集合D′所映射的隐蔽信息密文b2′;
[0105]
[0106]
[0107]其中,ri为集合中小于I(d′i)的元素个数,即ri=|d′j|I(d′j)>I(d′i),j>i|。
[0108]步骤7.5:将步骤7.3得到的隐蔽信息密文b1′与步骤7.4得到的隐蔽信息密文b2′拼接起来,从而得到该交易所携带的全部隐蔽信息密文b′,b′=b1′||b2′,||表示字符串拼接。
[0109]步骤7.6:接收方通过比较通信双方的地址池的终止地址,来判断发送是否终止以及接收到的消息的完整性。具体的讲:
[0110]对于发送方,当发送方地址池的大小达到最大后,发送方使用其要传递的隐蔽信息密文b生成发送方地址池的终止地址PKk+1,发送方地址池的终止地址PKk+1的生成公式如下:
[0111]PKk+1=Hash((psk*PKk)||b0||b1||…||bm)*G;其中,b=(b0,b1…bm)为要传递的隐蔽信息密文b,||表示字符串拼接。
[0112]对于接收方,当接收方地址池的大小达到最大后,接收方使用其提取到的全部隐蔽信息密文b′计算出接收方地址池的终止地址PK′k+1,接收方地址池的终止地址PK′k+1的生成公式如下:
[0113]PK′k+1=Hash((psk*PK′k)||b′0||b′1||…||b′l)*G;其中,b′=(b′0,b′1,…,b′l)为接
[0114]收方最终提取的全部隐蔽信息密文b′。
[0115]最后,通过比较PK′k+1与PKk+1是否一致,来判断发送是否终止以及接收到的消息的完整性。即,如果一致,则表示发送终止并且接收到的消息完整。然后进行步骤8。
[0116]步骤8:使用步骤3中相同的加密算法对步骤7中得到的隐蔽信息密文b′进行解密,得到原始的要传递的信息m。
[0117]下面列举一个实例:
[0118]本实施例以bitcoin测试链网络为例,设要传递信息m为”bebrave”,其二进制表示为:
[0119]m=
[0120]0110001001100101001000000110001001110010011000010111011001100101,
[0121]共享密钥psk如下:
[0122]psk=08bb4c88fe59063934ee21a509ddbe7041867688ebd27357ed5a0fa4beaf6cc6。
[0123]对需要进行传输的信息m进行加密,使用psk[0:127]作为对称加密密钥,使用psk[128:255]作为加密初始向量,以国密SM4为例,采用CBC(Cipher-block chaining)加密模式,这里采用PKCS7进行填充:
[0124]
[0125]得到密文:
[0126]b=10100000010101000000100110001011100100110001001111000001001111
010001000111000110000110000111001000001100010001010101010110100010
[0128]设公钥PK0为:
[0129]PK0=(e8d7b098a474c2ea9aa7df63d9c71f69faf955998dd72b441dbdc93250b61a3b
[0130]4dc8a81f700f393e61ed57340646c59a61f6f8eb815246246ac72f0ee6172f5c)
[0131]由上述步骤4生成地址池,如下表所示:
[0132]
[0133]发送方构建交易,根据步骤5所示对每一个输出地址计算出其相应的输出金额中嵌入隐蔽信息的位置,将隐蔽信息嵌入到相应的金额的二进制表示的位置中:
[0134]输出地址嵌入位置输出金额(最右边为低位)mw67kZVA8CCVenUPWJtsqEcTRFwQhuD6Aj[4,14]<![CDATA[<u>10110100010</u>0001]]>mry3D3SawaNhJJ4yohyhopHJYBJ8JfQNTZ[0,13]<![CDATA[1<u>00100010101010</u>]]>mp97gaFf2MP9LMrbKHHksCAuM8BAxckh61[7,14]<![CDATA[<u>00000110</u>1000110]]>mrUko6nuY1bC9BVinwQQ6zBs59rb8oN3Kp[1,13]<![CDATA[1<u>0110000111001</u>0]]>mhPZZbfCSxznr1gPpbJaVGmjqyo3UqL1Vz[0,14]<![CDATA[<u>100011100011000</u>]]>mhQi3DokoBFYqBawe8xYgenbmngK3T5U9n[0,14]<![CDATA[<u>000100111101000</u>]]>mo3H19Q5m4fdnCecLgCthZvX6fngEgugHD[0,10]<![CDATA[0100<u>00100111100</u>]]>mtMDjd9B5LW8zX1rjYz91tvftHiRFR32Yp[0,14]<![CDATA[<u>001011100100110</u>]]>mv8U7KHHErR6dd1DGGSat1UF3VfNv1cUkc[0,14]<![CDATA[<u>101000000100110</u>]]>mp8Rqduwm2q4p4r1j14C6heBcYUTjSxCvW[1,11]<![CDATA[101<u>101000000101</u>]]>
[0135]然后按照步骤5所示对地址进行排列,将剩余的信息隐藏在地址排序中,得到输出地址索引集合为{1,2,3,4,5,6,7,8,9,10},如上述步骤所述,可以在一笔交易中嵌入16字节的数据。
[0136]发送方构建交易后,通过本地bitcoin测试链节点将交易发送到区块链网络上,如上述的交易发送到公网,经过节点确认后得到交易ID为:
[0137]70fd4fe7e69e526fc279528a22fb2e12e5505a63878066ccc97df6ca573869ab。
[0138]然后使用bitcoin测试链提供的本地RPC调用接口对最新交易进行抓取,并与地址池地址进行比较,提取出相应输出地址的交易。
[0139]按照步骤7所述使用交易中的输出地址计算出相应的输出金额字段中的嵌入位置,提取相应的隐蔽信息密文,再获取到地址排序中的隐蔽信息密文,将所有隐蔽信息密文拼接。
[0140]最后进行解密,其中psk[0:127]作为对称加密密钥,使用psk[128:255]作为初始向量:
[0141]
[0142]得到最终的要传递的信息:
[0143]m=0110001001100101001000000110001001110010011000010111011001100101。
[0144]以上对本发明做了示例性的描述,应该说明的是,在不脱离本发明的核心的情况下,任何简单的变形、修改或者其他本领域技术人员能够不花费创造性劳动的等同替换均落入本发明的保护范围。