在万维网发明人Tim Berners-Lee爵士的《编织互联网:谈万维网的最初设计和最终命运》一书中有这样一段话:
虽然万维网是在一种松散的状态下成长的,但事实上它有一个中心的致命弱点,通过这个弱点可以击垮或控制它。当用http://www.lcs.mit.edu/foo 这样的URI(Universal Resource Identifier,统一资源标识符)来寻找一个网页时,客户机会先检查第一个字符串,就像通常的情况那样,当它是http时,它就知道www.lcs.mit.edu 这个部分是万维网服务器的域名。域名系统运行于计算机的分级系统中,计算机通过DNS(域名解析系统)搜索它来找到实际的互联网地址(类似于 18.23.189.58那样的一串数字),然后数据包就被发送到那里。分级系统顶端是5台存储主目录的计算机——操作者在其中任何一台上的错误都会立即 使系统发生故障,导致巨大的破坏。人们对这一技术弱点本身的关注要比对与之平行的社会集中化问题的关注要差得多。
目前大众所熟知的万维网是建构在DNS+IP这样的从有限顶层开始的多层级授权基础上的,受万维网发明时的互联网基础 环境所限,这是可以理解的,但随着互联网的快速发展,商业化资本的涌入和逐利已将开放、失控的万维网引向封闭、受控状态,这已经限制了万维网的最初设计: 让人们可以平等自主地分享信息。
同时作者Tim Berners-Lee爵士认为“将类似公钥加密技术引入万维网对于个人表达信任是根本性的”,“万维网之所以能成功,就是因为任何人都可以有制作链接的 能力,使它能展现现实生活中的各种信息和关系。密码学并不经常体现万维网上信任的原因是,还不存在一个万维网式的分权式的基础结构”。
横空出世的比特币所带来的区块链技术,正是Tim Berners-Lee当初所设想的“能充分将密码学带入万维网的分权式的基础结构”。基于区块链技术可以定义出开放、中性的命名标识体系,自主、唯一、 安全、持久,进一步结合更多的网络技术就可以定义出新的传输协议,相比原有的DNS+IP体系,它可以更好地适配和推动万维网的进化。下文介绍的PPk ODIN开源项目正是基于这样的理念在做尝试。
10.2.1 ODIN简介
PPk开放小组( The PPk Public Group)是一个开放的网络技术极客小组,集合了一群对比特币等加密货币感兴趣的P2P技术爱好者,小组成员多具有10年以上通信和互联网行业技术研发 从业背景,对于互联网业态的发展趋势有着独立判断和独特理念,关注以区块链为代表的底层技术的潜在价值,并尝试融合区块链、IPFS等创新P2P技术,来 定义一个实现一些中性、开放、开源的基础协议和工具集。图10-8为PPk开放小组图标。
图10-8 PPk开放小组图标
ODIN项目作为PPk开放小组发布的第一个开源项目,是Open Data Index Name即“开放数据索引命名标识”的缩写。广义上,ODIN是指在网络环境下标识和交换数据内容索引的一种开放性系统,它遵从URI规范,并为基于数字 加密货币区块链(BlockChain)的自主开放、安全可信的数据内容管理和知识产权管理提供了一个可扩展的框架。它包括4个组成要素:标识符、解析系 统、元数据和规则(Policies)。狭义上,ODIN是指标识任何数据内容对象的一种永久性开放标识符。
参考图10-9所示的区块链层叠结构(Blockchain Stack)来理解,PPk的ODIN项目定位于比特币区块链之上的叠加网络层(Overlay Network)+分布式协议层(Decentralized Protocol),往上通过不同开发者自由开发的开源或商业API,可以支持更多具体业务功能应用App。
图10-9 ODIN开源项目示意图
ODIN可以被形象地理解为“数据时代的自主域名”,是基于比特币区块链定义并可扩展兼容更多区块链的完全开放的、去中心化的命名标识体系,相比传统的DNS域名它有更多创新特性,可以很好地被应用到大数据、智能设备和物联网等新兴领域。
10.2.2 实现功能
PPk开放小组定义并发起建立了一套完全开放、开源的ODIN运行机制,如图10-10所示。它包括基础技术和扩展应用方面,其中,基础技术是一个基于区块链的分布式数据内容索引命名与标识系统,它保证数据内容的自主开放性、安全性、唯一性、永久性和可扩展性。
图10-10 ODIN基础运行机制
每个有意开放数据的数据生产者(Data Producer)可以通过开源的ODIN注册客户端来自主注册获得一个ODIN号(成为ODIN拥有者,即ODIN Owner)。以此为前缀可以为其开放的每一份数据资源编制一个包含本身ODIN前缀的、增加了后缀的ODIN标识串,并将该ODIN标识串映射到数据资 源的元数据和URL上,这样ODIN就成为数据资源的一部分,始终与该数字资源共存。然后,已被开放的这些数据资源的ODIN记录、元数据及其URL信息 可以JSON编码的形式保存在该ODIN拥有者的数据库内,这些被集中存贮起来的资源就形成一个ODIN资源标识库。
当用户根据ODIN标识串寻找一个数据资源或有关这一资源的相关信息时,查询请求就会通过开源的ODIN解析库在区块链上进行定位,然后传送到该ODIN拥有者所登记的访问点(Access Point)上进行解析,并得到该数据资源的元数据描述和实际数据URL链接。
ODIN拥有者可以完全开放数据资源访问权,也可以通过适当的自定义机制让用户获取数据资源访问权,如通过订购、资源传递、按浏览付费或者预印本付费等方式获得。
有条件的个体可以自主提供代理注册服务(称为ODIN注册者,ODIN Register),ODIN注册者缺省拥有所代理注册ODIN的维护私钥,并有权对ODIN的注册登记信息进行配置更新,在经ODIN Register和ODIN Owner双方确认同意的情况下,可以将注册者转移更新为由ODIN Owner拥有私钥的比特币地址,这时ODIN Owner将获得完全自主的权利,等同于自主注册。
10.2.3 主要特点
基于区块链技术定义的ODIN标识体系具有以下显著特性。
·自主性:ODIN标识符基于去中心化的区块链技术,由申请者自主生成并管理,其生成和管理规则是完全开放的,没有中心化的控制机构。除了拥有管理密钥的申请者之外,其他组织和个人都无权控制和篡改。
·安全性:每一个ODIN标识符的拥有者都对应拥有一对非对称加密技术的公私钥,可以通过私钥对自主发布的数据内容进行签名,接收数据内容的个体可以通过公钥进行验证,以确保收到的数据是来源可信和未被篡改的。
·唯一性:ODIN标识符能对任何数据内容对象(如文本、图片、声音、数据、影像、软件等)的开放访问索引进行唯一标识,使数据内容对象能被人们准确地识别和提取。
·兼容性:ODIN可以与现有的一些标识符(如国际标准书号ISBN、国际标准刊号ISSN、国际标准文本代码ISTC、出版者标识符PII等)相互兼容。
10.2.4 ODIN标识编码格式
1.一级基础ODIN标识
一级ODIN的标准结构式为:
ppk:[BTC_BLOCK_SN].[BTC_TRANS_INDEX]/[DSS]
ODIN分为命名体系、前缀和后缀3部分,用冒号、斜杠分开。前缀中又以小圆点分为两部分 [BTC_BLOCK_SN]为该ODIN在比特币区块链上的登记记录所在区块的数字流水号(由比特币网络决定)。[BTC_TRANS_INDEX]为 该ODIN在比特币区块链上的登记记录所在区块内的具体存储位置的阿拉伯数字编号(从0开始寻址)。后缀[DSS](Data Suffix String)是由ODIN拥有者自选并自行给出的该ODIN标识所对应具体数据内容定位标识,需要自主确保具有唯一性。
[DSS]
RESOURCE_ID#[DATA_BLOCK_SN.CHUNK_INDEX]
或者
#[DATA_CHUNK_INDEX]
其中:
·RESOURCE_ID为对应的资源标识,由所属ODIN标识拥有者来定义,可以是流水编号,也可以是唯一取值的字符串,需自行保证能与标准结构式区分开,且不能包含“#”和“/”字符。
·DATA_BLOCK_SN为对应的内容区块编号(从1开始,对于文件File可理解为版本号,对于动态数据流Stream可以理解为顺序产生的数据包)。
·CHUNK_INDEX为对应的子数据块在该区块内部的索引编号(从0开始)。
·DATA_CHUNK_INDEX则表示所有区块的子数据块记录的第几个子块(从0开始)。
注意:“#”字符及其后续部分可省略,缺省表示对应最新内容区块的第一个子数据块。
下面几例都是符合定义的一级ODIN的合法编码:
ppk:351474.430/
ppk:351474.430/#
ppk:351474.430/#1.0
ppk:305678.568/ISBN2890321345#1.0
ppk:305678.1000/ISBN2890321345-P235#2
一级基础ODIN可以采用短编码方式,结构式为:
ppk:[REG_ORDER_INDEX]/[DSS]
[REG_ORDER_INDEX]为该ODIN记录在全部ODIN注册记录中以注册时间早晚排序的阿拉伯数字索引值(从0开始)。
下面几例都是符合定义的一级基础ODIN的合法缩短编码:
ppk:1/
ppk:356/#1.0
ppk:356/ISBN2890321345#1.0
ODIN的命名结构使每个数据资源在全网具有自主、安全的唯一索引标识。ODIN不同于URL,它是数据资源的索引名 称,而与实际地址无关。实际上它是一种URI或URN(Universal Resource Name,统一资源名称),是信息索引的数字标签和身份证。有了它,数据资源就具有了唯一性和可追踪性。
2.多级扩展ODIN标识
以一级ODIN为基础,一级ODIN的拥有者可以利用自有的区块链来扩展自定义二级ODIN,并将二级ODIN注册记录批量打包后形成的新区块的HASH关键字,写入上一级基础区块链,获得合法验证并确保唯一性。以此类推,可以形成更多级的ODIN标识。
多级ODIN的标准结构式为:
ppk:[PARENT_ODIN_PREFIX]/[SUB_BLOCK_SN].[SUB_TRANS_INDEX]/[DSS]
·[PARENT_ODIN_PREFIX]为对应上级ODIN前缀。
·[SUB_BLOCK_SN]和[SUB_TRANS_INDEX]为对应子级ODIN在上级自定义区块链上的登记记录所在区块和区块内记录位置的阿拉伯数字编号。
·后缀[DSS](Data Suffix String)是由上级ODIN拥有者自选并自行给出的具体数据内容定位标识,需要自主确保具有唯一性,命名方案同上。
举例如下:
ppk:351474.430/21.35/
ppk:351474.430/21.35/ISBN2890321345#
ppk:351474.430/21.35/ISBN2890321345#1.0
ppk:305678.1000/23.678/235.32/ISBN2890321345-P218#
多级ODIN自定义结构式为:
ppk:[PARENT_ODIN_PREFIX]/[SUB_TRANS_ID]/[DSS]
[SUB_TRANS_ID]为该ODIN记录在子级区块链上的唯一标识,由所属上级ODIN标识拥有者来定义,可以是流水编号,也可以是唯一取值的字符串,需自行保证能与标准结构式区分开,且不能包含“/”和“#”这两个字符。
举例如下:
ppk:351474.430/22/
ppk:1/22/ISBN2890321345
ppk:1/22/ISBN2890321345#2.1
ppk:1/china/books/
ppk:1/china/books/#
ppk:1/china/books/ISBN2890321345-P218#
10.2.5 ODIN标识技术规范
类似XCP(合约币)和Mastercoin(万事达币)等数字加密货币的技术原理,ODIN的实现是通过将特定消息数据按比特币协议规范进行编码后,作为比特币交易广播到比特币网络上,存入区块链。
每条ODIN信息包括以下特性:
·一个比特币源地址(对应ODIN消息生成者)。
·一个比特币目的地址(对应受ODIN消息指向的目标个体,当消息生成者与受消息指向的目标个体相同时,该地址为空)。
·若干个1-of-N多重签名输出比特币地址公钥(由ODIN数据包编码生成,实际生成交易时从ODIN设置数据中按 顺序每提取31个字节,并在该31个字节的前部加上第1个字节取值3,第2个字节为后续有效数据长度,总共33个字节对应一个压缩格式的比特币公钥。如果 不足33个字节的自动在尾部追加二进制0填满,直到正好达到33字节对应一个压缩公钥)。
·比特币源地址中有一定数量的比特币余额。建议有0.001BTC以上,用于生成从源地址发送到目的地址的若干有效交 易条目以嵌入ODIN数据包。注意:因为比特币1-of-N多重签名交易的特点,这些比特币金额不会发生实际支出,将在下一个ODIN消息中被回收循环利 用。
·以比特币计的消息成本固定费用(默认是0.0001BTC),将支付给收录这个交易数据块的比特币网络矿工。
·一个比特币找零地址(与上述第一项的比特币源地址相同,用于按照比特币交易协议将输入交易的比特币金额在生成若干条满足嵌入ODIN数据包的交易条目后多出的金额回收到消息发送者账户)。
上述的特性第3项是技术实现的关键,ODIN的数据会嵌入比特币交易的多重签名输出数据块中,因为是1-of-N输 出,每个数据块的第1个公钥固定是发送者的,因而输出的币值可以赎回循环使用,第2~N个公钥的地址空间用来存放编码的ODIN消息数据。关于比特币多重 签名交易的详细说明请参考比特币协议规范。
注意:N建议取值为3,最大不超过10。对1条1-of-N多重签名输出仍无法容纳的ODIN数据块,可依样扩展存入第2条、第3条等更多条多重签名输出记录中。
注意:为了便于识别,每个ODIN消息都以31个字节的指定字符串起始作为前缀特征标识,这个字符串非常长,因而不可能把ODIN的特定交易和其他的比特币交易搞混。
10.2.6 使用示例
通过ODIN标识解析并获取对应数据的方法很简单。
1.通过一个ODIN检索网站或解析云服务
有网站搭建能力的个体都可以利用开源的ODIN检索库来设立一个ODIN检索网站或解析云服务。
比如,登录http://ppkpub.org/odin/ 这个示例网站,在Query ODIN的提示框内输入已知ODIN号(例如352084.951),单击Go按钮,ODIN系统就会显示相应的ODIN注册信息,如图10-11所示。
图10-11 ODIN注册信息
在此简单示例的基础上,可以进一步实现更为复杂的资源检索或云服务功能,读者可以留意PPk ODIN开源项目的具体进展。
2.APP内置ODIN标识支持
APP的开发者可以将开源的ODIN标识解析SDK直接包含到自己的程序内,这样就能直接解析和获取ODIN所对应数据资源的元数据描述和实际数据URL,并根据元数据的定义来自定义最终展现。
10.2.7 开放资源
(HTML)ODIN(开放数据索引命名)技术规范如下:
http:// ppkpub.org/ppk_odin_spec_cn.html
(GitHub)用Java语言编写的ODIN标识注册管理开源工具示例的源码如下:
https:// github.com/ppkpub/javatool/
(GitHub)ODIN标识解析应用开发工具包(SDK):
https:// github.com/ppkpub/sdk/
10.2.8 问题与思考
(1)如何类比已有案例以方便理解ODIN的功能?
ODIN与域名DNS类比会比较容易理解些。
ODIN会索引到一个或若干个数据源URL,机制上像域名DNS解析,只是把传统的域名登记机构换成了创新的区块链来实现,不需要传统域名管理机构了,谁需要都可以自主地到区块链上登记,另外可以发挥比特币地址公私钥加密技术的特点,来提供更为安全可信的解析结果。
也可以类比一些能提供域名解析功能的数字加密货币来进行理解,比如Namecoin、BTS等,因为ODIN与它们本 质上类似,都是发挥了区块链技术的公开可信、不可篡改的特点来提供类似域名的功能。不同点在于ODIN没有建立一个新的加密货币,而是明确比特币区块链作 为一级标识承载区块链,因为比特币区块链具有事实上最强的稳定性和可靠性。以比特币区块链提供的可信基础,ODIN能兼容Namecoin、LTC等其他 区块链,甚至私有区块链,作为二级和更多级扩展标识承载区块链。
(2)ODIN为什么采用区块链?
以比特币为代表的区块链的独特之处在于实现了历史上第一个形式上去中心化、逻辑上却完美中心化的技术体系,简单理解就是:从彼此无关的不同节点读取到都是完全相同的唯一拷贝。以此为基础,才能定义出类似ODIN这样具有自主、安全关键特性的唯一资源标识。
(3)ODIN采用比特币区块链承载一级标识是否能确保安全?
比特币作为第一个提出和实现区块链的加密货币,经过多年的运行已形成一个具有超强算力的分布式网络,其算力已经远超传统超级计算服务集群的总算力,而且还在持续增加,从而充分保证了其区块链的安全性和稳定性。
理论上,如果比特币网络的超大算力有超过一半被某个个体所控制,该个体就可以篡改近期的若干区块数据(即著名的51% 攻击,参见第9章的内容),但其攻击难度随区块增长呈现指数级提高,超过6个区块确认后基本就不可能了。而且攻击者也只能篡改自己相关的交易信息(比如重 复消费自己的比特币)或者不记录别人发出的交易,但不能凭空伪造别人比特币地址相关的交易,所以ODIN申请者在向比特币网络广播ODIN注册消息后,只 需要等待6个区块就可以规避以上攻击风险以确认注册是否成功,即使在极小概率的情况下,比特币网络被攻击成功导致注册不成功,也只需重新发起注册,对于注 册者来说除了耽误了一些操作时间之外没有损失。
所以采用比特币区块链作为ODIN的一级骨干区块链是安全可信的。
(4)比特币价格的大幅调整是否会对ODIN标识体系的稳定运行产生很大影响?
每条ODIN消息存储到比特币区块链的成本主要是支付给收录该交易的比特币“矿工”的费用,目前是 0.0001BTC,相当于约6美分或0.4元人民币,是非常少的。当比特币价格有大幅调整时,该项费用也可以适当调整,以达到相对合理和低的费用(调整 客户端的参数配置即可)。
另外,通过使用二级和更多级扩展标识,还可以大幅度降低标识的注册和维护成本(可以接近0成本)。
如果未来比特币价格存在大幅度走低的可能,矿工关闭矿机导致算力大幅波动,在一定程度上会影响比特币网络的健壮性,但对于ODIN标识来说,只要等待6个区块的确认仍能保证相当高的可信和稳定性。
所以比特币价格的大幅度波动对ODIN标识体系整体的稳定运行只有很小的影响,而且通过适当的规则可有效规避相关风险。
(5)ODIN与现有DNS域名体系的差异是什么?
现有DNS域名体系是组织形式和逻辑上都中心化,与承载ODIN的区块链相比,无法提供自主性,且DNS协议因为出现时期早,在安全性等多方面上也存在不足。但因为其作为现有互联网的基础协议以稳定为重,很难做出大的改变。
ODIN形式上和DNS域名有点像,但借助区块链的独特性使得其运行机制有本质的差别,它强调自主和安全,是“数据时代的自主域名”。
(6)ODIN与URI/URL的差异在哪?
ODIN不同于URL(Uniform Resource Locator,统一资源定位符),它是数据资源的索引名称,而与实际地址无关,与URL的最大区别就是实现了对资源实体的永久性标识。实际上它是一种 URI或URN是信息索引的数字标签和身份证。有了它,数据资源具有了自主、安全的唯一性和可追踪性。
(7)ODIN与其他基于区块链的标识应用像Namecoin、Onename等案例的差异在哪?
ODIN和以上这些标识应用本质上都利用了区块链技术来生成唯一可信标识,也都是完全开放开源的,但在技术方案、应用扩展上各有特点,差异对比如表10-1所示。
表10-1 ODIN与基于区块链的典型命名标识差异对比
10.3 本章小结
本章介绍了两个基于比特币的方案。介绍了闪电网络通过支付通道实现离线交易的原理,并且说明了如何在支付通道的基础上 实现支付网络的功能,使得没有直接支付通道的比特币用户之间可进行离线交易。闪电网络的解决问题的思路被其他区块链系统借鉴,例如闪电网络已经被移植到以 太坊上,用智能合约实现了雷电网络。另一个案例则是利用比特币网络实现的DNS方案——ODIN。ODIN借助比特币强大算力的支撑,实现了去中心化的管 理形式,确保了ODIN的DNS记录不可更改性。希望本章的案例能给读者带来更多的启发。
来源:我是码农,转载请保留出处和链接!
本文链接:http://www.54manong.com/?id=997