Blockstack: A Global Naming and Storage System Secured by Blockchains

做者:Muneeb Ali, Jude Nelson, Ryan Shea, and Michael Freedman Blockstack Labs and Princeton University (USENIX ATC 16)html

1. Motivation

当咱们想要访问facebook的我的数据的时候,咱们一般会在浏览器下输入facebook的域名,这个时候咱们会首先访问DNS服务器,将域名转化为ip,而后再去访问facebook服务器所在的ip地址,在这个过程当中,域名的管理机构好比verSign(威瑞信)有一套pki体系会验证域名是否合法,这两步都完成以后,咱们就能够去访问到本身的数据。以下图所示:git

由于有时候中心化的第三方常常会发生数据泄露的事件,所以做者提出一个系统想把这些过程所有变成去中心化的过程。这个系统可让用户注册一个惟一且人类可读的用户名和与用户名相联系的公钥,同时将用户产生的数据与用户名和公钥绑定。将上面的过程简化成以下形式:github

2. Background

做者首先想到的是NameCoin这个系统,NameCoin是从Bitcoin上fork下来的一个分支,在它上面作了一些业务上的修改,它是除了比特币外运行最久的一个区块链系统。数据库

NameCoin的做用提供传统DNS(域名管理系统)服务商相似的功能,但与传统系统不同的是Namecoin基于去中心化的区块链,是一种分散式的DNS,它将域名与IP映射的信息全都存在了区块链上,这样能够阻止网络审查,保证信息自由发布。咱们经常使用的com和cn的DNS服务商分别由美国和中国控制,因此政府能够审查网站内容,甚相当闭。但如今NameCoin把域名和IP的映射信息全都存在区块链上,不容许其修改,浏览器

一些问题

a. 区块链的安全问题缓存

这个系统首先在nameCoin上运行,出现了一下这些问题:首先是区块链的安全问题,NameCoin的使用的总体算力不是很高,并且是基于比特币的区块链,很容易出现单个矿池掌握百分之51以上的算力,好比上图就是两大矿池在2015年的七八月份出现挖矿的算力比例。这样这个区块链很容易受到攻击。安全

b. 一些未知的协议或者软件问题服务器

NameCoin由于不成熟会出现一些软件不稳定的问题,好比说可能会由于网络中的某些人发送的交易中数据字段不少,区块在打包这个交易时花费的时间很长,会致使一些延迟问题。能够看出图中NmaeCoin这个系统在2014年的时候在产生第19200个区块的时候,有很大的网络延迟。网络

c.网络吞吐量的下降架构

有些大型的矿池有意或者由于其余缘由没法把交易打包进他正在写的区块,这些交易就只能由其余的矿工来完成打包任务,这个时候网络的吞吐量就会大大降低。

3. Design of Blockstack

做者根据以上问题,发现这个NameCoin系统的性能和安全性有很大的问题,这个时候要寻找一个安全稳定的区块链,但发现这种要求的区块链只有目前比较成熟的比特币和以太坊等。因而做者就想把业务层和区块链分离开来,底层使用原有的BitCoin系统。做者在这里提出了一个blockstack的分层结构,将系统分红了两层—控制层和数据层。其中控制层中包含了一层单独的区块链层以及还有一层定义了注册用户,用户公私钥的建立,以及一些与用户名绑定的hash函数的建立的业务层,数据层主要负责数据的存储。整个系统架构以下:

其中控制层分为两层,一层是区块链层,另外一层是虚拟链层;数据层也分为两层,分别是路由层和存储层。

a. 区块链层

第一次:区块链层,它负责存储blockstack的一些操做序列,同时就这些操做序列的顺序一致提供共识。做者在blockstack系统中将该层的区块链系统设置成了bitcoin,由于bitcoin相对其余的区块链来讲运行的时间最长,稳定性比较好。系统会把这些操做序列处理成bitcoin所能接受的交易的形式保存在区块链上,

b. 虚拟链层

虚拟链定义了blockstack上的操做序列,好比建立用户,插入数据,删除数据等等这些操做序列,这个操做序列能够当作一种状态机,好比图中这些都是针对用户x,y,z的操做序列,当bitCoin中有一个新区快产生的时候,blockstack会去读取该区块,从其中找到能够接受的交易传到虚拟链这一层。在将这些操做序列接收以前,会检查系统的blockstack是系统否达成共识,即系统会验证系统当前的操做序列是否保持一致,而后验证用户名下面的加密地址是否一致。若是这些都没有问题,就会将这些操做信息存入blockstack数据库,数据的组织形式和图上同样,一个域名,也就是用户名,加密地址,zonefile的hash值。

c. 路由层

刚才说到了,虚拟链层存储了域名和对应的zonefile的hash,而zonefile其实是存储在路由层的。

Zonefile在传统的DNS里指的是一组包含如何将网络域名转换为对应的IP地址的指令集,里面一般包含了域名对应的IP的信息。而在本系统中,zonefile和它的意义差很少,里面存放的是域名对应的数据存放在哪一个云服务商的服务器里。

d. 存储层

存储层以key-value的形式存储真实的数据,这些数据都会被用户所拥有的公钥进行加密

整个系统架构部署在BitCoin上以下:

4. 全局一致HASH——Simple Name Verification

由于blockstack的底层采用的是其余的区块链系统,有可能一些节点没有在某些时刻达到一致,这个时候上层的blockstack须要验证一把。验证的办法以下:

验证全局一致hash的时候,它会将当前区块中与本系统相关的交易取出来同时加上以前区块已经计算过的针对对应块的Ph值,作一个共同的hash计算,这里要注意,它并不会遍历全部的区块,它只会遍历编号为h减去2的i次幂的区块。举例以下,如今只取一部分区块:

假设如今底层区块链的块高是h,先将块中是关于blockstack的交易取出来,组织成一棵默克尔树的形式,拿到根节点,而后再去将以前获得的块h-1,h-2,h-4,h-8的值作一个求和取hash的计算。就会获得快高为h的共识hash值了。

5. Future Work

将来的工做,由于如今系统的底层是BitCoin,做者想测试一下把它迁到以太坊,或者超级帐本试一试,同时设想将这三个都做为底层的区块链系统试一试。

相关知识

DNS

DNS( Domain Name System)是域名系统的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工做。

DNS的查询过程

假设如今咱们要访问www . qq .com的过程。

1.在浏览器中输入www . qq .com 域名,操做系统会先检查本身本地的hosts文件是否有这个网址映射关系,若是有,就先调用这个IP地址映射,完成域名解析。

2.若是hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,若是有,直接返回,完成域名解析。

3.若是hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此咱们叫它本地DNS服务器,此服务器收到查询时,若是要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具备权威性。

4.若是要查询的域名,不禁本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具备权威性。

五、若是本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,若是未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来受权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,若是本身没法解析,它就会找一个管理.com域的下一级DNS服务器地址http://qq.com给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找http://qq.com域服务器,重复上面的动做,进行查询,直至找到http://www.javashuo.com/tag/www.qq.com主机。

六、若是用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器若是不能解析,或找根DNS或把转请求转至上上级,以此循环。不论是本地DNS服务器用是是转发,仍是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

论文原文以及相应的slides地址:github

参考资料

[1] DNS原理及其解析过程

[2] BlockStack:A Global Naming and Storage System Secured by Blockchains. USENIX ATC ’16

[3] Blockstack:只用一个数字ID行走区块链世界?

[4] Blockstack:给DAPP开发者和用户的便捷桥梁?

相关文章
相关标签/搜索