cyfs://o/$owner_id/$obj_id
我们继续CYFS Object URL创建之旅。
一个有效的身份可用$owner_id表达,$owner_id在逻辑上可以认为是公钥的Hash。在实现上,$owner_id和$obje_id一样,都是CYFS NamedObject Id。能称作owner_id的,是Desc中包含"publick key"的NamedObject,这类NamedObject我们称作"有权对象"。在这里详细的介绍NamedObject还有一点早,但我们只要知道,不管是OOD,还是CYFS 浏览器要能在CYFS Network里被识别,都需要一个有效的身份(DevcieObject)。
XXXObject在CYFS里都是NamedObject,NamedObject是通用的可信结构化数据。在结构上分:不可变部分 Desc、可变部分 Body,以及这两部分的签名 DescSign,BodySign。每一个 NamedObject,都有一个全网唯一的对象 Id(ObjectId),我们用 ObjectId 来区分每个对象。这个 ObjectId,就是对 Desc 部分做 Hash 计算得到的。如果 Desc 部分发生了变化,那么 ObjectId 也发生了变化。
这结构简化后如下图: DeviceObject的owner字段以PeopeObjectId的方式引用了PeopleObject,因此谁拥有了PeopleObject里公钥对应的私钥,谁就是设备的拥有者。我们会在设备的存储空间里保存设备自己的私钥。这实际上构成了一个两级的证书结构,大部分数据只要有DeviceObject的签名,就可以证明是“数据是通过我的设备创建的”,这通常是自动化的。而有更高安全级别的数据(比如转账的TX),就需要PeopleObject的私钥进行签名,这通常是非自动化的,需要私钥持有者交互式确认。
因此在使用CYFS系统前,必须给OOD,以及CYFS浏览器绑定DeviceObject,DevceObject的Owner则指向一个PeopleObject,PeopleObject类似很多系统里的开发者身份证书。CYFS是一个去中心系统,任何人无须审批就可以基于密码学工具在本地直接创建PeopleObject。cyfs://o/$owner_id/$obj_id 中的$owner_id,就是PeopleObject的Id.
这种绑定方式只需要一台PC即可完成。
使用此种方式激活后,会在控制台打印助记词。请将助记词记录下来,并妥善保管。后续可以使用该助记词,在超送中恢复身份,并继续用超送管理身份和已激活的设备。
安装cyfs-tool:
使用命令行npm i -g cyfs-tool
,安装beta版本的cyfs-tool工具
如果想要安装nightly版本线的cyfs-tool,需要执行命令
npm i -g cyfs-tool-nightly
注意cyfs-tool的版本线必须和要操作的ood/runtime的版本线相匹配。使用不匹配的版本会导致未预料的各种错误
-
绑定OOD
安装好OOD之后,确定ood-daemon进程在运行。执行
cyfs desc -a
命令,该命令会自动检查本机是否有未激活的OOD和runtime。如有,自动创建身份并进行激活该命令会在控制台输出一组12个单词的助记词,请将助记词记录下来,并妥善保管
-
绑定runtime
先安装CYFS浏览器,并启动。确保浏览器上显示扫码激活页面
执行
cyfs desc -a -m "助记词组" --only-runtime
命令,这里-m参数必须输入上一步,在绑定OOD时输出的助记词组,词组必须用双引号括起来。执行完毕后,浏览器应该会自动转到主页
-
生成成套的身份
使用命令
cyfs desc -s <save_path>
,生成配套的身份文件,保存在save_path目录下。如果不指定save_path,默认为~/.cyfs_profile生成的
<save_path>/people.desc
和<save_path>/people.sec
文件是自己身份的密钥对,请妥善保存,切勿删除该命令会在控制台输出一组12个单词的助记词,请将助记词记录下来,并妥善保管
-
绑定OOD
身份生成后,复制
<save_path>/ood.desc
和<save_path>/ood.sec
两个文件到OOD机器的${cyfs_root}/etc/desc
下,并重命名为device.desc
和device.sec
-
绑定CYFS浏览器
身份生成后,复制
<save_path>/runtime.desc
和<save_path>/runtime.sec
两个文件到CYFS浏览器机器的${cyfs_runtime_root}/etc/desc
下,并重命名为device.desc
和device.sec
${cyfs_root}
具体路径:
- Windows:
c:\cyfs
- MacOS:
~/Library/cyfs
- 其他系统:
/cyfs
${cyfs_runtime_root}
具体路径:
- Windows:
%appdata%/cyfs
- Mac OS:
~/Library/Application Support/cyfs
将PeopleObject与一个OOD的DeviceObject绑定,是用户进入CYFS Network的一个关键操作,这个操作会把这个关联关系写入到区块链里。CYFS使用区块链技术代替传统的DNS,要解决的一个重要的基础问题就是寻址问题。寻址是去中心系统里的重要基础设施,在很多底层模块里都会用到。通过一个可信的PeopleObjectId,查询得到一个可验证的(有对应People Private Key签名)的配置文件,是CYFS中基础的Zone寻址。
CYFS定义用户拥有的所有设备构成了一个逻辑的Zone,这个Zone可用用户的PeoopleId来指代。Zone内存在一个中心节点,称作OOD,Zone内的设备高度依赖OOD,两个Zone之间的通信,也通常是指两个Zone的OOD之间的通信。Zone的信息保存在一个被称作 ZoneConfig的配置对象中,这个对象总是会被保存在区块链上。最简单的ZoneConfig就是记录了Zone内的OOD的DeviceObject。因此,CYFS Network是由多个中心化的,小规模的Zone组成的去中心的,大规模的网络。这个设计既能通过去中心保障用户的权利,也能用传统的中心化技术提高CYFS Network上Service的执行效率,降低运行成本。
寻址信息需要可靠的一致性KV存储。DHT曾是被广泛应用的去中心KV保存技术,但实践证明基于DHT实现的寻址系统在一致性上和可靠性上有许多难以解决的问题。基于区块链技术的KV存储系统不管在一致性和可靠性上都非常完美,唯一的缺点是写入性能较差以及写入成本较高。CYFS只有ZoneConfig改变时才要上链,这对大部分人来说,是一个每年最多几次的事情,区块链的缺点在这个场景下是完全可以接受的。
尽管任何一个支持智能合约的公链都可以通过智能合约简单明了的实现CYFS的Zone寻址逻辑,不过从CYFS未来面向的是所有互联网用户(10亿级别)的规模成本考虑,我们使用定制的公链:MetaChain 来原生的实现CYFS Zone寻址逻辑。今天CYFS 处于 Beta (测试网)上线的状态,这意味着网络里数据是真的,资产是假的,我们的MetaChain还是一个"玩具实现",用最小的研发资源支撑整个系统能先跑通。我们正在积极的,开放的推动正式的MetaChain(或合作公链)的研发,当我们认为MetaChain的实现已经有了工业级的强度,会发布CYFS Beta II.(测试网第二阶段)
MetaChain被设计成有特定用途的多币区块链,展开讨论这里的共识经济思考已经超过了本文的边界。从用户的角度,我们希望用户可以在MetaChain上使用任意已经存在的数字资产:可以用ETH来交MetaChain的手续费,也可以用BTC来交MetaChain的手续费。但考虑到MetaChain的现状,为了保护用户的数字资产安全,我们目前只在MetaChain上开放了同样处在测试网阶段的生态Coin:DMC(Data Mall Coin,https://www.dmctech.io/)。如何获得DMC,并将其交换到MetaChain上可以关注DMC基金会的相关公告。
因此,无论是直接绑定,还是生成身份后续手工绑定,生成的PeopleObject和OOD DeviceObject都会上链。目前MetaChain针对这个操作会根据DMC基金会的协议,由DMC生态空投赠币。这些空投用来支付MetaChain的手续费是非常足够的。可以让我们的教程流畅的进行下去。也让CYFS早期的用户,可以顺利的完成新用户的创建(DID的创建)
我们通过CYFS TOOL命令行来直接调用MetaChain。CYFS TOOL是SDK里的重要工具,还提供了其他有助使用和Dec App开发的其他功能。详见 CYFS TOOL命令说明
前面的章节我们已经把原理说的很清楚了。从最终用户的角度,这才是我们推荐的,最为安全的方法,关键的PeopleObject秘钥保存在手机上。该方法适用于所有种类的OOD,操作简单方便
- 安装CyberChat(下载页),CyberChat的中文名是超送。按照提示创建身份
- 绑定OOD:先安装OOD,从官网二进制,或者自己编译的OOD均可。安装后:
- 如果OOD和超送在同一个局域网,可用超送的扫描绑定功能直接绑定
- 如果OOD和超送不在同一个局域网,先确定你的防火墙规则允许1325端口被访问,在OOD上执行
./ood-installer --bind
后,使用超送扫描终端展示的二维码进行绑定 - 正确展示二维码要求终端使用等宽字体, 如果在windows系统下推荐默认windows terminal/vs code terminal, 或者手工 cmd 下用
chcp 65001
, 设置当前编码为UTF-8代码页
- 绑定runtime:安装CYFS浏览器,初始使用按提示扫描网页中的二维码进行绑定
为了进一步方便普通用户使用,我们计划通过CYFS Browser支持PeopleObject的构建和VirtualOOD的绑定。当相关功能完成开发后我们会补充在这里。
- 首先基于助记词我们得到了People秘钥对(默认使用RSA 1024算法),并构造了包含People PublickKey的PeopleObject。
- 随后我们通过People的私钥,再产生OOD秘钥对,并构造包含OOD PublicKey的DeviceObject,并把Owner设置成了第一步构造的PeopleObject. 然后用People私钥签名OOD DeviceObject的Desc和Body部分
- 最后我们产生Runtime秘钥对,并按类似过程构建Runtime DeviceObject。
- 我们把上述Object和私钥分别复制到对应设备的指定目录。 如下图所示,
本章我们学习了CYFS 密码学身份(DID)的构造,并了解了其基本原理。我们还为这些身份绑定了关键的OOD,同一个People拥有的所有Device,组成了CYFS网络中的Zone,Zone内的中心节点是OOD,并了解了这些信息是如何通过MetaChain保存的。到这里我们已经完成了准备工作,下一章我们将完成文件的发布。