吕婧淑,操晓春
(中国科学院信息工程研究所 信息安全国家重点实验室,北京 100093)
近年来,区块链[1](blockchain)作为一种去中心化、不可篡改、可追溯、多方共同维护分布式数据库的技术,被广泛地应用于金融、身份认证、公示公证等领域[2]。区块链源自化名为“中本聪”的学者提出的比特币[3]系统的底层技术。
区块链有去中心化、匿名性、可追溯和安全可信的特点[4]。1)去中心化: 区块链中数据的新建、验证、更新等操作都是通过 P2P网络的传播和数学方法的计算完成,而无需中心化机构的管理和参与;2)匿名性: 在区块链上进行交易的节点是通过一个公钥地址完成的,并不知道对方在现实世界的真实身份,因此区块链具有很强的匿名性; 3)可追溯: 数据一旦被验证正确,所有区块都会记录该数据及其时间戳,因此区块链具有很强的可追溯和不可抵赖性; 4)安全可信: 采用哈希算法对区块链应用的交易数据、区块数据等加密以保证数据的安全性、采用数字签名技术对交易数据进行签名以保证其他节点能够验证该数据的真实性; 同时借助分布式系统各节点的工作量证明等共识算法形成的强大的计算能力来抵御外部攻击,从而保证区块链数据不可篡改和不可伪造。
基于区块链开发的比特币是区块链技术最广为人知的应用,以下简称为比特币。比特币本质上是由点对点(P2P)网络系统生成的数字货币,其发行过程不依赖特定的中心化机构,而是依赖于 P2P网络中所有节点共同参与一种称为工作量证明(Proof of work,POW)的共识过程以完成交易的验证与记录。POW 共识过程(俗称“挖矿”,每个节点称为“矿工”)是各节点为了获得新区块的记账权使用自己的计算资源来竞争解决一个难度可动态调整的数学问题。难度值通常为含有很多个前置零的哈希值,各节点不断地对区块头部的数据进行哈希计算,若某节点计算出的哈希值小于等于难度值则成功解决该数学问题,获得新区块的记账权并向全网广播。其余所有节点验证通过后将当前时段所有比特币的交易打包记入新区块、按照时间顺序链接到比特币主链上。比特币的第一个区块(称为创世区块)诞生于2009年1月4日,由创始人“中本聪”持有。一周后,“中本聪”向密码学专家哈尔芬尼发送了10个比特币(此处的比特币为货币单位),成为历史上第一次比特币交易。
信息隐藏模型[5]最早源自 Simmons提出的囚徒问题: Alice和Bob是狱友,他们想谋划一个越狱计划,但又不能让监视他们的典狱官 Wendy发现。这个问题可以被抽象为: A想向B秘密传递一些消息,因此A需要选择一个看似平常的消息R(当R在网络中公开传输时不会引起怀疑,称消息 R为载体),将秘密信息m加密后嵌入载体R中,此时载体R变成隐秘对象S,并且S尽可能地保持原有载体S的特征不变,使得攻击者在仅知 R的表面消息时无法检测到秘密消息m。这样,就实现了信息的隐蔽传输。
结合囚犯问题和上述模型的分析,信息隐藏的概念可以定义为将秘密信息隐藏于某个公开的载体中传输并不被接收者以外的人发现。根据信息隐藏技术的目的和载体不同,其可以分为四个分支: 隐写术[6]、匿名通信[7]、隐蔽信道[8]、数字水印[9]。其中,隐写术是一种将秘密信息隐藏于某种不被怀疑的载体中实现隐蔽通信的技术; 匿名通信指采取一定的措施来隐藏通信流中的通信关系,使窃听者难以获取或辨别通信双方的关系及内容。近年来,基于信息隐藏中隐写术和匿名通信两个分支发展出的隐蔽匿名通信[10]技术在多媒体、网络、信道等载体中都有应用。隐蔽通信技术具有安全、匿名、隐藏容量的特点: 1)安全性: 对普通用户来说,隐藏过程是无法“感受”到的,对攻击者来说,载体的特征在统计角度上不可分辨; 2)匿名性: 隐蔽传输的发送方和接收方的真实身份对普通用户和攻击者来说都是未知的或很难推断的; 3)隐藏容量: 是指载体所能承载的秘密信息的数量,即秘密信息与载体信息大小的比例,一般希望这个比例越大越好。隐蔽信道的传输介质分为存储类型和时间类型,由此衍生出存储型隐蔽信道和时分型隐蔽信道。操作系统、数据库和网络系统中都可以构造隐蔽信道,本文主要讨论基于网络的隐蔽信道。
然而,现有的隐蔽通信技术存在一定的问题: 1)存储型隐蔽信道通常使用网络协议包的冗余字段进行信息隐藏,其安全性受所嵌协议包通信频率的影响,若两个进程通过该协议通信的频率很低,那么隐藏在网络协议中的秘密信息很容易被发现; 2)通信双方的匿名性较难保证,一旦被检测到利用网络协议隐藏信息,便能够通过双方 IP地址收集与其在同一地址内移动端的定位数据从挖掘双方现实生活中的实际地址,从而造成隐私泄露; 3)时分型隐蔽信道受当前网络环境和设定的时间间隔影响很大: 对基于分组交换的 IP网络而言,数据分组因为选取不同的路由而引入不同的处理延时,若延时超过了设置的时间间隔,就会出现误码,即本应为“1”的消息被接收方误认为是“0”。
可以看出,区块链技术在一定程度上满足隐蔽通信的特点,1)安全可信: 采用哈希算法对区块链应用的交易数据、区块数据等加密以保证数据传输及存储的安全性。区块链天然的加密机制保障了存储型隐蔽信道所隐藏内容的安全性; 2)去中心化: 新区快、新交易的产生不需要经过中心化机构的审核,所有数据保存在分布于全球的完整节点。新区快、新交易产生时会向全网广播消息,而不会通过中心化机构转发,因此去中心化特点提高了隐蔽信道的不可感知性; 3)假名性: 以比特币为例,每个节点在网络中交易使用的是其公钥生成的地址,因此无法获得节点的真实身份,保护了隐蔽信道通信双方的隐私。这些特点使得区块链技术很适合隐蔽通信的场景。因此本文要解决的问题是将区块链某些技术层作为隐蔽匿名通信的载体传输秘密消息。具体来说,是在区块链的网络层和应用层构建隐蔽信道。
然而,正是由于区块链的可追溯、不可抵赖等特性,使得隐蔽传输的难度相对普通载体变大——1)新区块的产生和所有交易信息都会在区块链 P2P网络中广播,因此所有节点都能够查看到新区块和新交易的内容; 2)上述信息不仅会在网络中广播,而且还会被记录在区块体中,而区块链是分布式记账的系统,因为这些信息会永久存储在所有节点的账本中。那么隐蔽匿名通信的双方若要使用基于存储的信息隐藏算法,隐藏的信息会随着新区块和新交易实时地被全网节点获知,并且任何节点都能随时查看区块记录的之前的信息,但通信双方并不希望其他节点发现,因此这对隐藏算法的要求很高。
2.1.1 网络隐蔽通信的背景
隐蔽通信[12]的概念首先由Lampson提出。隐蔽通信是允许一方以不违反系统的安全策略的方式传送信息到另一方,是一种能抵抗审查的通信方式。在互联网开放环境下,隐蔽通信也能使用网络中数据流等载体来实现。因为所有通过网络的信息都以数据流的形式传输,数据流传输会通过不同网络拓扑,数据流由这些网络节点共享,如果以网络数据流为载体,采用隐写术是可以实现隐蔽通信的。隐写术是一门关于信息隐藏的科学,信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容。现代隐写术利用信号或协议的冗余作为载体,将秘密信息隐藏于其中,以达到在不影响使用的前提下掩盖传输秘密信息及其存在的目的。
2.1.2 网络隐蔽通信的类型
网络隐蔽通信[13]的基本方式是以网络数据流作为载体,采用隐写术构建隐蔽信道,是相对公开信道而言的。隐蔽信道是在公开信道中建立起来的一种进行隐蔽通信的信道,该信道的存在仅为确定的收方所知。
网络隐蔽通信中的隐蔽信道可分为两种模式: 基于存储的隐蔽信道和基于时间的隐蔽信道。1)基于存储的隐蔽信道又称为存储型隐蔽信道,秘密信息被嵌入到网络数据包的某些未用位或者载荷中,随着网络包一起发送出去。2)基于时间的隐蔽信道又称为时分型隐蔽信道,此种隐蔽信道利用数据包到达的顺序,或者利用单位时间内是否有数据包到达传递信息。
其中,存储型隐蔽信道主要在网络层、传输层和应用层采用隐写术建立,即在各层的常用协议中的某些冗余字段嵌入信息,既不会影响正常的网络通信,又能达到发送秘密信息的目的。例如,网络层经常使用的IP协议中的服务类型、标识ID、标志字段等字段在特定情况下都是空置字段,可以被用来构造隐蔽信道; 传输层常使用的 TCP协议中的序号、确认号、标志和紧急指针等字段可以被用户构造隐蔽信道。应用层中的 HTTP协议利用请求报文的请求首部Accept域中选项参数之间的排列位置来编码隐藏信息。
从技术角度看,区块链系统由数据层、网络层、共识层、激励层和应用层组成,如图1所示。其中,数据层包括了区块,区块头部包含了时间戳、难度值,区块体包含了交易数据,区块之间通过哈希算法计算后的链式结构相连; 从网络层可以看出,区块链系统是建立在对等网络(P2P网络)和 TCP/IP协议上的分布式系统,新区块和新交易在这样的网络上有其独特的广播机制; 在共识层上,节点通过使用数据层中的哈希算法和动态变化的难度值来确保新区块产生的公平性和链条的一致性。一旦数据被记录在区块内,若要篡改需要重新按照共识机制计算一遍所有的区块内容,因此只要诚实节点占比超过50%,篡改的速度就会比最长链的增长速度慢。在应用层: 1)区块链系统中每个节点共享同一份账本数据的特点使其很适合重要数据的存储; 2)区块链的不可篡改性和可追溯性使其很适合用户身份、企业各类许可证和执照的验证; 3)区块链去中心化的特点使其能够应用于股权众筹、P2P网络借贷等商业模式,而不需要第三方中介机构,无需交易双方的信用以节省成本; 4)区块链的共识机制和不可篡改性保证了其在公共事务中的公平和透明,因此也可以应用于政治选举、股东投票等。
图1 区块链技术框架图Figure 1 Blockchain Technology Framework
比特币是基于区块链技术的虚拟货币应用,属于图1的应用层。它本质上不依赖中心机构,而是由去中心化的点对点网络生成的虚拟货币,并由该网络中所有节点共同记账、维护账本。比特币发行的方式就是由上述POW[11]机制决定的。中本聪的白皮书定义的 POW: P2P分布式网络中所有节点搜索一个随机数能够在特定公式计算下满足难度值。一旦某个节点花费 CPU资源找到一个随机数满足了POW 的公式,便成为新区块的拥有者,并创建该区块的初始交易(包含coinbase字段的交易)。随后,该节点将新区块和初始交易打包通过比特币特有的广播机制向全网节点广播。本文提出的隐蔽信道就是基于比特币 P2P网络的广播机制、交易机制和节点间通信机制构造的。因此,本节将详细介绍比特币网络中的广播机制、交易机制和节点的通信机制。
2.3.1 广播机制
比特币网络中,每一个新区块、新交易产生后都需要向周围的节点广播,得到足够数量的验证后新区块才能被加到已有区块链上、新交易才能被打包加入到现有区块中。为了避免重复发送节点已经收到的区块消息或交易消息,这些消息的广播过程并不是直接发送,而是如图2所示:
图2 比特币网络广播机制示意图Figure 2 Schematic Diagram of Bitcoin Network Broadcasting Mechanism
节点A和节点B是邻居节点。节点A收到了一个新区块或新交易产生的消息,首先 A要对新区块或交易进行验证,完全验证通过后向节点 B发送一个inv消息(inv消息包含了一系列A收到的交易散列值和区块散列值,它们现在都是可被请求的状态);节点B收到的inv消息中若有交易和区块散列值还未存储在B本地,那么节点B将会向节点A发送一个getdata消息(getdata消息包含了节点B未存储的区块或交易的散列值)。最终,节点A发送给节点B请求的区块或交易整体数据。
节点通过 inv消息可以广播(advertise)它所拥有的对象信息。inv消息可以主动发送,也可以用于应答getblocks消息。其具体的数据格式如下表所示。其中,inv消息负载的最大长度为 50000字节。inventory数据为区块或交易的散列值。
表1 inv消息的数据格式Table 1 Data Structure of inv Message
getdata用于应答inv消息来获取指定对象,它通常在接收到inv包后滤去inventory数据中的已知元素,并将其发送给inv消息的发送者。它的数据格式与inv消息相同。并且,getdata消息负载的最大长度为50000字节。
表2 getdata消息的数据格式Table 2 Data Structure of getdata Message
inv消息和 getdata消息数据格式中共有的清单向量(Inventory vector)是用于告知其他节点本节点拥有的对象或请求的数据。
表3 清单向量的数据格式Table 3 Data Structure of inventory vector
清单向量数据格式中第一个字段,即对象类型(type)标识已经定义如下 3个值。第二个字段,即对象散列值(hash)为区块或交易的散列值。而这里的hash为区块或交易ID经过SHA256算法的结果,共256位,占存储32字节。其中,类型值为0清单向量hash字段为可忽略的错误数据; 类型值为1,hash字段存储的是关于交易的哈希值; 类型值为2时,hash字段存储的是关于区块的哈希值。清单向量的类型字段说明如下表所示:
表4 清单向量的类型值Table 4 Type Value of inventory vector
2.3.2 交易机制
比特币交易数据的格式如下表所示。一个完整的交易数据包括了version(协议版本号)、输入数量、tx_in(输入列表)、输出数量、tx_out(输出列表)和锁定时间。其中,输入列表包括了prev output(引用交易的散列值)、index(前向交易的索引)、script length(解锁脚本长度)、scriptsig(解锁脚本)、sequence(交易序列号)。输出列表包括了 value(每笔交易输出的比特币量)、pk_script length(锁定脚本的长度)、pk_script(锁定脚本)和lock time(锁定时间)。
表5 交易消息的数据格式Table 5 Data Structure of tx Message
其中,有两种情况可以嵌入数据: 1)比特币每10min产生一个新区快,此时会创建该区块的coinbase交易(初始交易)。此时,tx_in(交易输入列表)中的coinbase字段可以嵌入自定义数据。2)tx_out(交易输出列表)中的value为8个字节的零值,即交易输出比特币数量为零,则表明这不是普通的转账交易,而是追加的备注信息,可嵌入自定义内容。
2.3.3 通信机制
比特币网络中节点的通信分为两个阶段: 第一个阶段通过 TCP三次握手协议建立连接,第二个阶段为建立连接后广播消息的互传及每天向邻居节点发送ADDR消息。本文使用ADDR消息构造隐蔽信道,因此本节重点介绍节点通信机制中的 ADDR消息。ADDR消息包含最多1000个IP地址及其时间戳,用于从邻居节点中获取已知的活动节点。只有在节点建立与其邻居节点的传出连接后,才能发起ADDR消息的请求,即getaddr消息,但这个消息没有附加数据。ADDR消息在两种情况下会发送: 1)每天,每个节点会向其邻居节点发送一条ADDR消息;2)当一个节点接收到一条包含地址数量不超过10个的ADDR消息时,它将ADDR消息转发给两个随机选择的已连接的邻居节点。每个ADDR消息包含节点从其路由表中随机选择的最多1000个地址。该消息的数据结构如表6所示。
表6 ADDR消息的数据结构Table 6 Data Structure of ADDR Message
本文以比特币广播和交易消息作为隐蔽传输的载体,在比特币网络上搭建隐蔽传输框架。需要说明的是,网络的广播、交易和通信机制只有比特币全节点才会参与,因此本文的框架是搭建于全节点参与的P2P网络。该框架可以分为数据层、网络层、共识层和应用层四层。其中,网络层的节点通信机制和广播机制传输的消息中有可嵌入数据的字段;应用层的交易信息也有可嵌入数据的字段。因此,本文的隐蔽传输框架包含两个: (1)利用应用层交易机制、网络层广播机制两层的消息及其之间的关系设计的 BDTX(broadcast-transaction,广播-交易)隐蔽信道; (2)利用网络层节点通信机制设计了ADDR(地址广播)隐蔽信道。隐蔽传输的整体框架如图3所示。
本节将分别详细地阐述两种隐蔽信道的细节并分析其原理。
新交易或新区块产生后,网络层会通过inv消息和getdata消息来进行有效的广播(广播过程如图2所示)。两个消息都包含清单向量(结构如表3所示),清单向量中type字段为1时,hash字段为新产生的交易哈希值。清单向量中的交易哈希值与接收节点已验证过的交易有索引关系。因此,本节通过两者的索引关系构建如图4所示的BDTX隐蔽信道。
图3 隐蔽传输框架图Figure 3 Covert Transmission Frame Diagram
从图4可以看出,BDTX隐蔽信道是由比特币广播模块、交易模块、嵌入模块和提取模块四个部分构成。其中,广播模块和交易模块分别已在2.3.1和2.3.2节介绍过。嵌入模块包括加密、插入索引和密文分片三个功能。加密是将秘密信息转换成二进制信息后使用AES算法[14]进行加密; 插入索引是将嵌入密文的交易哈希值作为索引插入广播模块的清单向量中; 密文分片将密文按照双方预先约定好的协议分片并插入交易模块的tx_in中。分片协议为将密文平均分成x片,每片y比特,将x片密文以相同长度间隔地插入tx_in的coinbase字段,即每间隔z比特插入一个分片。需要特别说明的是,含有coinbase字段的交易仅在新区块产生时会创建,即每 10min才会广播一个含有 coinbase字段的交易哈希值。提取模块的作用是将密文按照上述分片协议复原出完整密文、解密、恢复二进制秘密消息。
图4 BDTX隐蔽信道示意图Figure 4 BDTX Covert Channel Schematic
对于两个已经建立连接的节点 A、B来说,由于使用AES加解密算法,因此假设双方已共享该算法的密钥。一次秘密信息的传输流程如下: 1)A节点使用网络层广播机制向B节点发送inv消息,该消息的清单向量的类型值为 1或 2,即清单向量的内容分别为一系列交易哈希值或区块哈希值; 2)A节点使用嵌入模块将加密后的秘密信息按照分片协议分片并嵌入交易消息的 tx_in(交易输入列表)的coinbase字段; 3)B节点收到inv消息后,读取清单向量中的类型值,使用提取模块恢复秘密信息: 以清单向量中协议位置的交易哈希值为索引在交易消息中搜索是否存在相等的交易哈希值; 若存在,找到该交易tx_in的coinbase字段被分片的密文、按照分片协议恢复密文、用约定好的密钥解密; 4)若B节点成功完成上一步的提取,则返回给A节点正常的getdata消息,即滤去索引哈希值; 若并未成功提取出秘密信息,则返回给A节点仍包含索引哈希值的getdata消息。
由于ADDR消息能够隐藏信息的存储空间相对有限,但其相对其他消息具有较强的时分性——在节点传出连接数量未达到上限时,每天每个节点都要向其邻居节点广播 ADDR消息。因此,基于该特点设计了ADDR隐蔽信道,如图5所示。
图5 ADDR隐蔽信道示意图Figure 5 ADDR Covert Channel Schematic
如图 5所示,ADDR隐蔽信道分为三个模块:ADDR广播模块、嵌入模块和提取模块。其中,ADDR广播模块的原理已在2.3.3节中阐述过。嵌入模块的作用是将秘密信息转换成二进制消息后使用AES算法加密、按照分片协议分割密文、按照时分协议将分割后的密文片段嵌入ADDR消息中。分片协议为将密文分为x片,每片y比特。时分协议为通信双方提前约定y个地址作为标志位,并约定好y个标志地址的顺序。若第比特为“1”,则在当日ADDR消息中嵌入对应顺序的标志地址; 若第比特为“0”,则在当日 ADDR消息中不嵌入对应顺序的标志地址。提取模块的作用是将密文按照时分协议复原完整的密文、解密恢复二进制消息。
对于已建立网络连接的两个节点A、B来说,A节点是秘密信息的发送方,B节点是秘密信息的接收方。一次秘密信息的传输过程如下: 1)A、B提前约定分片数量与每片的比特数,及与每片比特数相等数量的特定地址作为判断分片内容的标志位; 2)A每天都向包括B在内的邻居节点发送ADDR消息,按照时分协议根据分片的每个比特决定ADDR消息中是否包含对应的特定地址,即分片内容为“1”时ADDR消息包含对应顺序的特定地址、分片内容为“0”时ADDR消息不包含对应顺序的特定地址; 3)B节点收到ADDR消息后根据是否包含特定地址复原密文、用提前约定的密钥解密恢复秘密信息。
隐蔽信道需要满足两个性能要求: 安全性和有一定的隐藏容量。首先,安全性是传输秘密信息最重要的特性,指的是对普通节点来说隐藏过程是无法感知到的; 对攻击者来说,载体的特征在统计上不可分辨,即如何保证不被攻击者发现且不影响其他节点通信的情况下传输秘密信息。其次,隐藏容量指的是载体所能承载的秘密信息的数量,它决定了隐秘传输的效率。本节将从以上两个性能方面分别分析本文提出的BDTX和ADDR隐蔽信道。
隐蔽信道的安全性分为不可感知性和不可检测性。对普通节点来说,BDTX隐蔽信道利用的广播消息和交易消息分别是由比特币网络协议、分布式记账规则规定的,即新区块或新交易产生后的广播机制、任何一笔交易都同步记录在所有节点的账本中。ADDR隐蔽信道利用的ADDR消息是网络广播协议规定的,即每当节点收到连接请求时都要立即宣告其版本和每天节点都要向邻居节点广播其地址消息。因此,BDTX和BDTX道并未修改inv消息、getdata消息的数据格式和内容本身,只是利用其内容作为索引和反馈,并且新区快初始交易信息中的coinbase字段是可以允许节点写入数据的。因此,对普通节点来说,BDTX和ADDR隐蔽信道都是不可感知的。
在BDTX隐蔽信道中使用了inv消息中清单向量的hash值作为索引,由于inv消息的负载最大长度为50000字节,除去count字段外,最多存储1387个清单向量(每个清单向量长度为 36字节),因此攻击者需要从1387个inventory向量中遍历找到索引(约定好某个位置的交易哈希值)。因此,攻击者在清单向量找到索引需要尝试的次数为 1387,在嵌入模块中将每条密文都分为x片,每片有y位,再按固定间隔z比特嵌入,同时假设攻击者破解加密密文的难度为α。交易信息的 coinbase字段占 69字节,即 552比特,密文长度为比特,可选择嵌入分片的位置个数为因此攻击者在这些位置中找到正确分片需要遍历的次数为
对ADDR隐蔽信道来说,假设密文分为x片每片为y比特,需要耗时天进行传输。每条ADDR消息可能包含0~1000条地址,因此假设实际传输过程中每条ADDR消息平均包含n条地址。假设攻击者持续监控发送节点的网络消息,需要在X条 ADDR消息中遍历找出特定的x条消息,在每条ADDR消息遍历n条地址找出特定的y条地址。则共需要遍历
同时,为了对比本文提出的三种隐蔽信道和传统隐蔽信道的安全性,此处再对同样为网络层的 IP协议内构造隐蔽信道的安全性做分析。IP包能构造隐蔽信道的字段都集中在其 20字节的首部,如: 服务类型 ToS的最后一位、数据包长度小于当前网络MTU时的16位标识ID和3位标志字段、数据包不分片时的13位分片偏移量。因此,攻击者从首部160位中找出x片y位的密文需要尝试的次数如表格最后一列所示。
从表7可以看出,BDTX相对ADDR和IP隐蔽信道的攻击难度是最大的,安全性最高,其中 IP隐蔽信道的攻击难度最低。这是由于BDTX隐蔽信道以清单向量的交易hash值作为索引,破解难度更大。并且本文提出的两种隐蔽信道的安全性都比传统的IP隐蔽信道高。
隐藏率的计算方式为秘密信息所占比特数与载体所占比特数之比。BDTX隐蔽信道的载体为交易信息的coinbase字段,占69字节,即552比特; IP隐蔽信道的载体为 IP包内服务类型 ToS字段的最后一位、16位标识ID、3位标志字段和13位分片偏移量,共计33比特。ADDR的载体为ADDR消息的addr_list字段,占30字节,即240比特。
对于BDTX和IP两种隐蔽信道来说,由于每种载体容量大小不同,因此假设每种信道每片密文都为y比特,分片间隔都为z比特,而分片数量分别为。每个载体能存储的秘密信息容量为分片数乘以每片所占比特数,即。两种信道的分片数量分别可以由公式(1)、(2)表示。
对于以上两个方程,可以求解得出公式(3)、(4):
对于ADDR隐蔽信道来说,ADDR消息最多包含1000个地址,载体容量为240bit,而分片的每比特仅仅使用一个标志位地址,即 0.24比特。密文分片协议为将密文分为片,每片y比特(与以上两种信道每片比特数相同),但其使用时分协议进行嵌入,因此该信道的分片间隔为不是存储维度,而是时间维度。因此,可直接计算该隐蔽信道的隐藏率,如公式(5)所示:
将BDTX和IP隐蔽信道的分片数量分别代入隐藏率的公式,即分片量乘以每片比特数与载体比特数的比例; 并与已计算出的 ADDR隐蔽信道的隐藏率进行对比。得到了如表8所示的隐藏率对比结果。
表8 三种隐蔽信道与传统隐蔽信道的隐藏率对比Table 8 Comparison of Ratio between Three Hidden Channels and Traditional Covert Channels
将三种隐蔽信道的隐藏率两两相比,IP隐蔽信道的隐藏率是最高的,然后依次是BDTX、ADDR隐蔽信道。而在安全性分析中,即BDTX隐蔽信道的安全性相对更高,但是其隐藏率就更低。IP隐蔽信道的隐藏率更高,但是其安全性更低。这也符合安全性和隐藏率的相互制约的特点,即提高安全性会因导致算法复杂而降低隐藏率。
本文提出了两种隐蔽信道,分别是 BDTX和ADDR隐蔽信道。两种隐蔽信道都有各自的优缺点。BDTX隐蔽信道利用了比特币网络层的广播机制和应用层的交易机制之间的关系建立密文的索引,再于新区块初始交易的 coinbase字段嵌入密文,提高了该隐蔽信道的安全性,但也牺牲了一部分隐藏率;同时,含有 coinbase字段的交易每次新区块产生才会被创建一次,因此秘密信息的传输会受新区块产生速度的限制(一般10分钟产生一个新区快)。ADDR隐蔽信道利用了ADDR消息每天广播一次的时分特性,没有索引机制。因此,其安全性和隐藏率都居中;然而,ADDR消息是在通信双方建立连接的基础上才能互相广播,一旦传输过程的某一天断开连接,那么会出现误码情况。
本文提出了利用比特币网络的广播机制、交易机制和通信机制构造隐蔽信道。除此之外,还有其他两种可以考虑的隐蔽信道: 1)可以通过两节点之间三次握手建立连接时 TCP包内没有数据的特点,发送者在报文的序号字段(32位)嵌入自定义数据以构造隐蔽信道; 2)利用数据传输协议头中一些必须填充的位(如TCP数据包协议头的源端口、IP协议数据包协议头中的源IP地址等)来隐藏信息; 3)全球的大部分比特币节点为轻节点,即只使用类似 SPV客户端进行交易而不存储历史账本的节点,但轻节点之间发生的交易也会被全节点验证并写入账本,并且轻节点可以查看某笔交易是否被验证机器次数。因此可以利用轻节点之间的通信协议构造隐蔽信道。