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

1. Motivation

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

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

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地址映射,完成域名解析,此解析不具有权威性。

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

6、如果用的是转发模式,此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开发者和用户的便捷桥梁?

Blockstack: A Global Naming and Storage System Secured by Blockchains的更多相关文章

  1. Storage System and File System Courses

    I researched a lot about storage system classes given at good universities this year. This had two r ...

  2. f4: Facebook’s Warm BLOB Storage System——Erasure Code

    Facebook在OSDI 2014上发表论文f4: Facebook's Warm BLOB Storage System,这个系统主要目的就是降低存储成本,在容忍磁盘,主机,机架,数据中心的同时提 ...

  3. Bigtable: A Distributed Storage System for Structured Data

    https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf Abstr ...

  4. [LeetCode] Design Log Storage System 设计日志存储系统

    You are given several logs that each log contains a unique id and timestamp. Timestamp is a string t ...

  5. Bigtable:A Distributed Storage System for Strctured Data

    2006 年10 月Google 发布三架马车之一的<Bigtable:A Distributed Storage System for Strctured Data>论文之后,Power ...

  6. LeetCode Design Log Storage System

    原题链接在这里:https://leetcode.com/problems/design-log-storage-system/description/ 题目: You are given sever ...

  7. [leetcode-635-Design Log Storage System]

    You are given several logs that each log contains a unique id and timestamp. Timestamp is a string t ...

  8. 1.1 Introduction中 Kafka as a Storage System官网剖析(博主推荐)

    不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Kafka as a Storage System kafka作为一个存储系统 An ...

  9. SDF:Software-Defined Flash for Web-Scale Internet Storage System

    一.参考 http://www.csdn.net/article/a/2013-12-18/309280 http://gtstorageworld.blog.51cto.com/908359/126 ...

随机推荐

  1. 99%的程序都没有考虑的网络异常?使用Fundebug.notify()主动上报

    近日看到一篇文章99%的程序都没有考虑的网络异常,开篇提到: 绝大多数程序只考虑了接口正常工作的场景,而用户在使用我们的产品时遇到的各类异常,全都丢在看似 ok 的 try catch 中.如果没有做 ...

  2. JavaWeb中点赞功能的实现及完整实例

    实现原理1.功能描述:一个用户对同一文章只能点赞一次,第二次就是取消赞2.建立一个点赞表great,字段有文章ID(aid),点赞用户ID(uid)3.当有用户进行点赞行为时,使用aid和uid搜索点 ...

  3. Python从零开始——列表List

    一:Python列表知识总览 二:列表操作符 三:Python内置函数操作列表 四:Python列表封装函数

  4. 爬虫---Beautiful Soup 爬取图片

    上一篇简单的介绍Beautiful Soup 的基本用法,这一篇写下如何爬取网站上的图片,并保存下来 爬取图片 1.找到一个福利网站:http://www.xiaohuar.com/list-1-1. ...

  5. Highways POJ - 1751

    题目链接:https://vjudge.net/problem/POJ-1751 思路: 最小生成树板子,只需要多记录每个dis[x]的权值是从哪个点到x这个点的. #include <stdi ...

  6. @RequestMapping和@GetMapping和PostMapping

    简介 - @GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写.该注解将HTTP Get 映射到 特定的处理方法上. - ...

  7. logrotate日志管理工具与split文件切割命令

    概述 logrotate是一个Linux系统默认安装了的日志文件管理工具,用来把旧文件轮转.压缩.删除,并且创建新的日志文件.我们可以根据日志文件的大小.天数等来转储,便于对日志文件管理. logro ...

  8. python调用oracle存储过程

    oracle 存储过程 python调用oracle存储过程 -- 通过cx_Oracle连接 import cx_Oracle # 连接数据库 orcl_engine = 'scott/s123@x ...

  9. web框架--tornado框架之模板引擎继承

    使用模板的继承可以重复使用相同结构的模板, 可以大大减少代码量 入门实例 一.demo目录结构 注解: master.html为模板内容,被index.html,account.html引用 二.各文 ...

  10. Linux性能优化实战学习笔记:第七讲

    一.进程的状态 1.命令查看 top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 28961 root 20 0 43816 3148 ...