区块链理论:Bloom过滤器

逻辑逐浪家
• 阅读 2617

Bloom过滤器

由于SPV节点需要从区块链其他节点获取感兴趣的交易信息从而选择性的验证交易,与全节点收取每一个区块内的全部交易不同的是,SPV节点对特点数据的请求可能无意中透露了钱包里的地址信息,这样就产生了隐私风险。例如监控网络的第三方可以跟踪某个SPV节点上的钱包所请求的全部交易信息,并且利用这些信息把交易地址和钱包的用户关联起来,从而损害了用户的隐私。而Bloom过滤器可以解决SPV节点的隐私风险问题。Bloom过滤器是一个允许用户描述特定的关键词组合而不必精确表述的基于概率的过滤方法,在SPV节点里,这一方法被用来向其他区块链节点发送交易信息查询请求,同时交易地址不会被暴露。

假设你来到一个陌生的城市旅游,而你的手里又没有地图,这个时候你可能会向路人打听你要去的目的地。如果你向陌生人直接表述:“您好,请问去颐和园怎么走?”,无意间你就暴露了目的地。而如果使用Bloom过滤器,你就会想陌生人表述“您好,请问最近有带园字的旅游景点吗?”,虽然这样的表述方式没有之前的清晰,并且获得了很多的无用信息,但是你可以根据询问到的信息自己进行筛选。你的目的地暴露的概率就会小很多。

Bloom原理

Bloom过滤器可以让SPV节点指定交易的搜索模式,该搜索模式可以根据私密性和准确性被调节。更高的准确性则会暴露更多的隐私,而更高的私密性也意味着更低的准确性。在Bloom过滤器的实现是由一个可变长度的二进制数组(N)和数量可变的一组哈希函数(M)组成。这些函数的输出值在1~N之间与数组的长度对应,并且该函数为确定性函数,任何一个节点,相同的输入都会产生相同的输出。数组的长度越长,哈希函数的个数越多,准确性越高。反之准确性越低,隐私性越好。我们来详细看一下这个过程,以一个长度为16的数组和数量为3个的哈希函数组成的Bloom过滤器为例
区块链理论:Bloom过滤器
Bloom过滤器中的二进制数组的初始值为0,关键词通过哈希函数的计算被添加到二进制数组中,例如关键词“A”,经过第一个哈希函数计算得出的数值是3,那么二进制数组中下标为1的位置就会被替换成1,经过第二个函数得出的数字是1,那么下标1的位置就会被替换成1,以此类推。当全部M个哈希函数都运算过之后,一共有M个位的值从0变成了1,这个关键词也被“记录”在了Bloom过滤器里
区块链理论:Bloom过滤器
如果某个关键词经过哈希函数的计算得出的数字为3,那么此时3的位置已经是1了,此时3位置的1不会改变。该过滤器之所以是基于概率的数据结构,就是因为关键字的增加导致准确性降低。
区块链理论:Bloom过滤器
节点把Bloom发送到其他的区块链节点的,其他节点使用该过滤器筛选出的符合二进制数组的结果记录在Bloom过滤器中。为测试某一关键词是否被记录在某个Bloom过滤器中,我们将该关键词逐一代入各哈希函数中运算,并将所得的结果与原数组进行对比。如果所有的结果对应的位都变为了1,则表示这个关键词有可能已被该过滤器记录。之所以这一结论并不确定,是因为这些字节1也有可能是其他关键词运算的重叠结果。简单来说,Bloom过滤器正匹配代表着“可能是”。
区块链理论:Bloom过滤器
如图,“X”符合请求节点的要求,但是这个“X”并不一定就是请求节点想要的。因为现在发送过来的二进制数组中数值是经过“A”和“B”计算后重叠的结果。如果我们代入关键词计算后的结果某位为0,说明该关键词并没有被记录在过滤器里。负匹配的结果不是可能,而是一定。也就是说,负匹配代表着“一定不是”
区块链理论:Bloom过滤器

点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
stellar区块链JavaScript开发包简介
StellarJSSDK封装了Stellar交易的提交,以及与StellarHorizonAPI服务器的交互过程,可以运行在Node.js环境或Web浏览器中。jsstellarsdk主要有两个作用:1、通过HorizonAPI服务器查询Stellar区块链数据2、构建Stellar交易、签名并提交到Stellar网络中。相关推荐:汇
Stella981 Stella981
3年前
Python从零实现区块链仿真【含源码】
在区块链或数字货币领域,Python并不是主流的开发语言。但是如果你的目的是研究区块链技术的原理,或者需要在自己的笔记本上仿真一个区块链网络并进行一些研究性的实验,比如完成自己的毕业设计项目或科研课题,那么Python就是合适的。在这个教程里,我们将学习如何使用Python从零开发一个多节点的区块链网络,并基于这个仿真区块链网络,开发一个去中心化的数据分享应
Stella981 Stella981
3年前
Hyperledger Fabric如何启用双向TLS安全通信?
HyperlederFabric区块链支持在通信节点之间启用TLS传输层安全通信,TLS支持单向验证仅验证服务节点身份,或双向验证同时验证服务节点和客户端节点的身份。本文将介绍如何在HyperledgerFabric网络中启用双向TLS安全通信。HyperledgerFabric链码与应用开发相关教程:Hype
Stella981 Stella981
3年前
Hyperledger Caliper
在这个教程中,我们将学习如何使用HyperledgerCaliper对包含多个排序节点的Fabric网络进行基准测试,我们使用DockerSwarm作为容器编排工具。HyperledgerFabric区块链开发教程:Fabric区块链Node.js开发详解(https://www.oschina.net/action/G
Stella981 Stella981
3年前
Bytom DAPP开发流程
从目前已经发布的DAPP来看,DAPP架构大致可以分成3种类型:插件钱包模式、全节点钱包模式和兼容模式。插件钱包模式是借助封装了钱包的浏览器插件通过RPC协议与区块链节点通信,插件在运行时会将Web3框架注入到DAPP前端页面中,然后DApp通过Web3来与区块链节点通信。全节点钱包模式需要项目方同步并持有一
Wesley13 Wesley13
3年前
NEO从源码分析看UTXO交易
_0x00前言_社区大佬:“交易是操作区块链的唯一方式。”_0x01交易类型_在NEO中,几乎除了共识之外的所有的对区块链的操作都是一种“交易”,甚至在“交易”面前,合约都只是一个小弟。交易类型的定义在Core中的TransactionType中:源码位置:neo/Core/TransactionType
Stella981 Stella981
3年前
BnbTool
BnbTool开发包适用于为PHP应用快速增加对币安链/BinanceChain数字资产的支持能力,即支持使用自有部署区块链节点的应用场景,也支持基于第三方节点开放API服务的轻量级部署场景。官方下载地址:http://sc.hubwiz.com/codebag/bnbtool/(https://www.oschina.ne
搭建平台吧 搭建平台吧
2年前
哈希竞猜游戏技术方向-区块链技术游戏
哈希是区块链技术和防篡改潜力的核心基础和最重要的方面,通过哈希算法可以保持记录以及查看数据的真实性和区块的完整性。这就是区块计数最重要技术特征的一部分。区块链指的是一个又一个区块组成的链条,该链条被保存在所有的服务器中,但凡整个系统中有一台服务器可以工作,那么整条区块链就是安全的;这些服务器在区块链系统服务中被称为节点,是为整个区块链系统提供储存空间和算力支
linbojue linbojue
1年前
数字货币交易所开发(数字货币交易所开发价格)
数字货币交易所开发是当前数字货币行业中备受关注的一个话题。随着区块链技术的不断发展和数字货币市场的蓬勃发展,数字货币交易所作为数字货币买卖的主要场所,其开发和运营也显得尤为重要。数字货币交易所开发(数字货币交易所开发价格)(https://www.ming
区块链技术的基本理论
区块链是一个分布式系统,它记录所有的状态更新信息,例如加密货币系统中的交易。状态更新信息被复制并在所有参与方之间共享。区块链的主要特性是,它允许不受信任的参与方以一种安全的方式相互通信和发送状态更新信息,而无需完全受信任的第三方或授权的中心方。
幂简集成 幂简集成
5个月前
精选区块链技术API,助力创新应用
从最初作为数字货币交易的基础技术,到如今涵盖金融、供应链管理、医疗保健、物联网等多个行业,区块链技术正逐渐成为改变世界的重要力量。在金融领域,区块链技术可以实现更安全、透明、高效的资产交易和结算,提高交易的可信度和效率。在供应链管理中,区块链可以追溯产品的