重新定义WEB架构:blockstack

区块链技术发展至今,除了比特币这个应用落地之外。似乎鲜有其他可以落地的应用。最近这个概念也越来越弱。
在17年时有家公司打算把区块链的技术落地到一个叫blockchain 的项目。他提出了一个完全和过去设计web架构不一样的理念。
同时他自己主要是作为一个命名系统而存在。
这个应用是个探索者,未来的路可能前途无量,也可能不是一条正确的方向。但我还是很乐意看到这样的想法和尝试。

首先他提出了一个理念。在过去各家科技公司拥有了绝对的数据。所有用户的数据都托管在他们使用的APP的服务端。现在的APP基本都是这个模式。我们称之为中心化的APP。


image.png

那么他提出了去中心化的APP。也就是让用户对自己的数据有绝对的控制权。科技公司只提供处理数据的APP代码逻辑。在这种架构下,APP和用户在一起,数据被放在另一侧。数据不再和APP绑定。用户可以自由的切换APP而不用理会数据没有的问题。就拿博客来说,自己写的文章的数据不再放在某个具体博客网站的数据库里。而是存在一个公有云上,必须有自己的私钥才有权利去读到自己的数据。随后你可以用这份数据去配上不同网站的APP代码,来在不同网站上呈现的你的文章。


image.png

他的亮点在于,数据是用户的,而不是属于某个APP的。所以就可以防止某些公司去做出贩卖或窥探数据的问题。

这种设计看上去十分美好,但是世界没有向这个方向走,也是因为他存在很多问题。
相比于用户写的裸数据,不够架构化。在写应用代码的时候会非常困难,相比较于直接把数据存进数据库。
如果要让用户自己去负责把数据结构化。又对用户提出了很高的要求。
同时只有用户自己对自己的数据有最终解释权。那么他们可以篡改自己的数据,就违背了一些应用依赖于一个SOURCE OF TRUTH的情况。比如竞价系统,如果最后得标价是1000元。用户发现自己中标失败后,篡改自己的数据为得标价格。来HACK应用是很难避免的。因为应用只有代码逻辑。数据完全来自用户。
同时也给开发人员带来很多的麻烦。

从目前来看,现在的架构虽然有隐私上的问题。但是利大于弊。

  • 易于编程
  • 对软件和数据的集中控制使更改(和调试)变得容易
  • 性能,可靠性的良好解决方案
  • 易于实施特定于应用程序的安全性
  • 成功的收入模式(广告)

Blockstack

blockstack立志于构建一个命名系统。有了命名系统之后,可以做很多事情。比如云盘是不可靠的,我们放在云盘上的数据必须是加密的,那么我们就需要一个名字到PUBLIC KEY的映射。同时我这个名字OWN了哪些数据也是很重要的。
这里的名字我觉得类似于一个域名或者你的手机号,他可以代表你的身份,需要抢注,一旦一个名字被一人占用后,他就一直独享,直到他把这个名字转卖掉。这里就和比特币的思想很像。
所有人需要对这个名字的主人的所有权达成共识在P2P的环境下。

Zooko's triangle

Zooko Wilcox-O'Hearn曾推测,任何一种命名系统都无法同时满足三种特性:可读性(Human-meaningful),唯一性(Unique),和分散性(Decentralized)。也就是说,任何一种命名系统都要至少像其中一种特性妥协。例如,我们给小孩起名字,可以满足可读性和分散性,但却无法保证名字是唯一的;满足可读性和唯一性的传统DNS,它是中心化的(不满足分散性),同样的例子还有EMAIL地址;如果你用UUID来生成名字满足安全性和分散性,但域名确是随机字符串(无法满足可读性)。类似的例子有你的公钥。

这里BLOCKSTACK利用区块来存对名字的占有属性。如果我能够在一个区块里写下我拥有XXX的名字,那么这个名字将属于我,并且全局唯一。其实这个名字虽然具备可读性,但是你很难依靠他直接来区分某个人,因为任何一个人都可以对一个名字进行抢注。所以你还是要在线下和那个人取得联系,得知属于他的NAME。这个类似于微信号的意义。

4层架构

BLOCK STACK 架构分为4层。
首先用户需要安装一个客户端,里面含有一个浏览器,可以展示不同的APP,以及用户的私钥也是保存在客户端。当浏览器去SERVER端拿到数据后,需要用户的私钥进行解密展示。

紧接着与客户端打交道的就是BNS, BLOCK NAMING SERVICE。 这里面会从区块里面找到所有用户注册的NAME信息和对应的ZONE+PUBLIC KEY。当用户需要去读自己或是其他用户的数据的时候,首先就是要向BNS去发送自己的NAME。然后BNS会在区块中找到对应的pub key + zone hash. 然后把请求转发给下一层。

第三层是叫ATLAS SERVER.他的职责是存储ZONE RECORD。因为ZONE RECORD过于庞大,如果直接存进区块这样对资源已经性能都有很大的不利。所以我们只在区块中存放ZONE的HASH。而其对应的ZONE RECORD会放在ALTAS SERVER上。ZONE RECORD 定义了数据在第四层的具体位置。是不可变的。

第四层是GAIA SERVER。 他是对所有存储设备的一个抽象,即统一GET,PUT接口。背后可以是Amazon S3, 或者是Dropbox。 上面存放的数据都是通过公钥加密的,只有用户自己的私钥可以解密。

这背后就牵涉到私钥该如何保管,因为你的设备的APP里必须包含私钥。如果你的手机不小心丢在咖啡店,被他人使用就可以冒充你做一些事情。所以可能未来私钥还需要结合指纹?这个我也不知道。

另外在区块中抢注一个NAMING 是需要消耗比特币为代价的,也就是说你必须为你的数据存储支付费用。因为如果不这么做,就会有很多坏人抢注掉非常多的名字。

image.png

总结

这篇文章自己其实读的不是非常深入。收获如下
区块链的核心是共识,而里面完成共识的步骤本质上是挖矿。所以我们必须基于MINING来保持事件的顺序性。
区块是昂贵资源,里面存的信息越精简越好。这样APP才可以有足够的性能和存储去使用。
分布式的存储设计十分具有吸引力。如果你只是在聊中心化的存储,现有的系统已经很强大了。
公钥基础设施如果能够被非中心化的构建出来-此处的任何进展都将是巨大的,从所有用户到其公共密钥的通用映射将非常有用。因为每个人都可以有自己的唯一签名和加密方案。
BLOCKSTACK除了这一点还为我们提供了NAMING 的可读性。
应用程序和数据分离,听起来是个好主意; 但是前提必须是对开发人员需要足够友好。另外存储付费不知道用户是否会为此买单。
对隐私数据进行端到端加密是一个好主意,但是私钥管理既痛苦又脆弱, 同时加密使共享和访问控制非常尴尬

你可能感兴趣的:(重新定义WEB架构:blockstack)