Decentralized User Data Layer - An Implementation Based on Nervos CKB

Decentralized User Data Layer

An Implementation Based on Nervos CKB

简介

大型互联网公司对用户的数据垄断、审查、泄露等问题愈来愈严重。这一方面是因为现代的互联网服务日益深入到了我们的生活每一个方面,另一方面是因为用户的社交关系、数据沉淀等使得用户的迁移成本越来越高,大公司对用户数据滥用有恃无恐。

互联网应用种类繁多,但关于用户数据无非涉及几个方面:身份鉴权、社交关系维护、个人专属数据管理、共享数据的管理等。本方案讨论将这些数据进行去中心化保存,由用户自己管理自己的数据,并允许中心化服务使用和访问,在享受便利的同时确保个人数据的隐私性和安全性。

方案

设计思想

身份鉴权

使用非对称密码学,在区块链上公布自己的公钥,利用私钥进行身份鉴权证明。这样的好处是,用户的身份与特定中心化服务解耦。

社交关系

在区块链上维护一个用户关系图,关系代表社交或授权,这样可以把关系数据与特定中心化服务解耦。

用户私有数据

用户私有数据包括用户的头像、昵称、UGC等信息,这些数据由用户自行加密后托管到分布式数据网络。这个数据网络可以是类似 ipfs 的去中心化网络,也可以是分布式数据中心。二者的区别在于,ipfs 的激励机制目前并不明确,可能对用户数据的持久性和可用性造成影响;后者则是用户直接支付服务费用,由运营方保存数据。两者都没有数据泄露的问题,因为他们托管的数据是加密过的。

多人共享数据

多人共享数据包括聊天群、弹幕、打分等等。这些数据有些无法直接归到某个用户名下,有些则需要一些额外的数据结构来简化数据的查找工作。考虑一个美食点评应用,每个用户的点评数据应该保存在用户自己的数据托管方,但我们仍然需要一个数据结构来保存哪些人对对象做了点评,以方便数据查找。这些数据是由于特定服务提供的场所触发了用户产生了内容,因此它可以由中心化服务保存并管理。这些中心化服务也可以因此获得流量和商业模式。

授权管理

授权的本质是数据获取权限,可以通过与特定用户进行信息加密密钥分享实现。例如实现“朋友圈”功能,首先用户的朋友圈信息都由一个对称密钥保护,而每一个用户的好友关系都由一个链上的授权关系描述。该授权关系同时由授权方将对称密钥用被授权方的公钥加密后放到链上,这样被授权方即可获得对称加密密钥,进而访问用户数据。

中心化服务

在 DUDL 的世界观里,互联网服务(如 SNS,电子商务等)仍然是以中心化的形式出现的,只不过他们的用户系统被 DUDL 取代。当他们需要用户的个人数据时,他们在获得链上授权的前提下,会去访问用户的数据托管服务器,拿到数据后进行业务处理。

实现流程

  1. 用户将自己的公钥信息发布到链上作为身份 ID,同时可以附带昵称、头像等愿意公开的信息;用户希望建立好友关系或授权关系时,将信息加密密钥用对方公钥加密后连同公钥哈希一起写入区块链
  2. 用户将自己的相关数据加密后写入数据服务器。数据服务器具备业务无关、开源、任何人均可运行、自动同步、自动计费等特点(后面会详细介绍)
  3. 用户数据会在自己选择(并付款)的多个数据服务器中自动同步
  4. 用户访问中心化服务,如未来的 Fb 等,TA 需要用数字签名证明自己的身份,中心化服务生成的页面则需要获取用户和 TA 的好友的私有数据
  5. 中心化服务通过区块链确认用户权限以及授权信息,并获取数据服务器的访问 URI
  6. 中心化服务向数据服务器请求数据,数据服务器向区块链确认其授权,并将数据返回
  7. 用户侧将所需要的信息解密后在前端展示

组件

轻客户端

大部分 dApp 采用中心化后台服务器作为区块链世界与传统互联网世界的桥梁,这种做法弱化了去中心化应用的无须信任性。轻客户端通过大幅降低区块链的存储和带宽需求来方便用户获得去信任的数据与支付服务。

区块链智能合约

链上合约比较简单,主要是把区块链当作可信第三方用来做密钥交换和信息公示功能。

数据服务器

数据服务器会是一个任何人可运行的开源组件,它忠实地完成如下工作:

  • 接受用户文件存储的请求,并预先收取一定的费用
  • 接受文件访问的请求,并根据访问者的数字签名到链上确认其是否有被访问数据的访问权限
  • 与区块链中记录的同一个用户名下的可访问数据服务器进行自动同步
  • 根据数据存储量、存储时间、访问流量综合计费

DUDL 数据服务器是业务无关的,无论应用方是社交网络还是视频网站,他们对数据服务器的需求是相同的,这样可以标准化服务器API,吸引更多的人提供数据服务器。用户可以选择其中若干个作为自己的分布式数据托管方,同时用户可以自己维护一个数据服务器。

SDK

中心化服务方需要使用 SDK 接入 DUDL 服务,它将简化授权管理、数据访问等流程。

应用案例:dSNS

dSNS 网站

该网站可以由中心化运营方开设,也可以是任何人都可以部署的开源版本。它负责对用户的内容进行索引与数据聚合。

内容发布

用户将发布内容加密、私钥签名后通过 dSNS 网站上传到自己预先购买的数据服务器中。数据服务器之间自动同步。

好友关系维护

用户通过 dSNS 网站浏览自己在链上设置的好友列表,新增或删除好友。操作被推送到区块链。

内容浏览

浏览好友主页时 dSNS 网站向好友指定的数据服务器发出请求,其中附带用户的数字签名。对方数据服务器验证链上的好友关系,将所需要的数据发送给 dSNS 页面,页面在用户前端使用解密密钥解码内容,展示给用户。

推荐/信息流排序

dSNS 网站可以监测哪些内容最受好评,因此可以在终端展示时进行热门排序。

评论

好友之间可以对发布的内容进行评论,评论的内容保存在评论发起人的数据服务器,但其索引保存在被评论人的数据服务器。这样,当用户浏览某个内容时,dSNS 根据评论索引找到并显示所有的评论。

5 Likes