区块链技术指南 | ODIN协议初窥

Abstract

本文主要介绍了ODIN协议是什么、如何使用、格式等内容。

1 Introduction

ODIN是用来对标传统互联网中的DNS的。

ODIN(Open Data Index Name) – 开放数据索引命名标识技术规范。该协议被项目方(PPk Pub)自称为:”ODIN标识协议是基于区块链的自主、唯一、安全、持久的命名协议,是对等、可信的新型DNS协议。”

2 PPk Pub介绍

根据项目方自身的说法[1]:

「PPk Pub 希望融合 Blockchain、IPFS、ICN/NDN等创新技术来做出一些有趣的事情,让“Peer”个体的 未来更美好。」

PPkPub目前有2个开源项目:ODINPTTP。其中,项目方将ODIN协议描述为「ODIN 标识协议是基于区块链的自主、唯一、安全、持久的命名协议,是“对等、可信的新型DNS协议”」,而将PTTP协议描述为「PTTP 传输协议是融合 ODIN 标识、区块链和 ICN/NDN 未来网络体系架构设计等多个领域新兴技术而定义的一种对等可信的网络传输协议,是“融合区块链技术的新型 HTTP 协议”。」

由此,我们可以认为,ODIN对标的是传统互联网中的DNS,即域名系统;而PTTP对标的是传统互联网中的HTTP,即超文本传输协议。

3 ODIN 希望解决的问题

虚拟化是计算机科学中最常用的策略之一,虚拟CPU、虚拟内存、虚拟网络。我喜欢把DNS理解为虚拟IP,互联网上网站的 IP 地址是一串数字,不容易被记忆而且需要和网站绑定,借助DNS系统,用户只需要记住网址即可。

不过ODIN想要解决的问题不是区块链地址(如合约地址及、账户地址)不容易记忆等问题,而是为了解决传统DNS系统中存在的问题

PPkPub认为「传统的DNS将主机名解析成 IP 地址使用到一个全局的、层次性的分布式数据库系统。 虽然互联网本源是分布式、自治性的系统,而 DNS 却不是自治性的系统,根域、重要的顶级域和根证书此前多由美国政府或由美国政府授权的非营利性机构 ICANN 掌控, 这对各地区互联网络自主能力的威胁始终存在。」

除此之外,PPkPub认为DNS还有其他缺陷

• DNS 信息易被篡改(不安全):

– 由于 DNS 报文协议天生不足,其域名信息容易被篡改,包括报文欺骗、缓存中毒等,通过实施 DNSSEC 可以解决此问题。但实施 DNSSEC 需要完善的电子证书体系,以美国为核心的电子证书体系从国家层面 来说存在更大的危险性。

• DDoS 集中攻击(不安全):

– 由于 DNS 是一个拥有中心的树状结构,很容易遭受 DDoS 攻击,且无有效手段防范,攻击越靠近中心效果越显著。

• 商业收费模式不合理:

– 只能通过 ICANN 或多家顶级域名机构授权商家进行注册,不仅注册费用偏高,每年都要交,而且还有一些不尽合理的限制性条款(比如故意设置很繁琐的转出政策)。

为了解决DNS的这些问题,PPkPub设计了ODIN系统。ODIN实现了以下特征

• 自治性:

– ODIN 标识符基于去中心化的区块链技术由申请者自主生成并管理,其生成和管理规则是完全开放的,没有中心化的控制机构。除了拥有管理密钥的申请者之外,其他组织和个人都无权控制和篡改。

• 安全性:

– 每一个 ODIN 标识符的拥有者都对应拥有一对非对称加密技术的公私钥,可以通过私钥对自主发布的数 据内容进行签名,接受数据内容的个体可以通过公钥进行验证,以确保收到的数据是来源可信和不被 篡改的。

• 唯一性:

– 结合比特币区块链, ODIN 标识符能对任何数据内容对象 ( 如文本、图片、声音、数据、影像、软件等 )的开放访问索引进行唯一标识 , 使数据内容对象能被人们准确地识别和提取。

• 持久性:

– ODIN 标识符一旦生成就不可篡改 , 不随其所标识的数据内容对象的持有者或存储地址等属性的变更而改变。

可以看到,ODIN的这些特性确实很大程度上解决了传统DNS的问题和缺陷。

而ODIN这种区块链域名服务系统,可以解决区块链地址(是一串很长的编码,包括合约地址及账户地址)不容易记忆等问题,使用ODIN后,只需要记住类似于网站的网址一样的、人类看上去有意义的字符串,就可以得到实际的、人类看上去无意义的地址。其实以太坊中也有区块链域名系统,叫做ENS(https://ens.domains)。

3 ODIN技术原理

区块链技术指南 | ODIN协议初窥

区块链技术指南 | ODIN协议初窥

ODIN运行机制

区块链技术指南 | ODIN协议初窥

ODIN体系架构

ODIN域名系统的实现是借助比特币网络(只基于比特币网络)。用户通过PPkPub自主开发的PPk浏览器工具(或网站)进行ODIN域名(ODIN标识)的注册。域名注册的原理是,在比特币网络中广播一条域名和注册者比特币账户绑定的交易。只要域名注册的信息写到比特币区块链了,那就算是域名注册成功了。

这个域名注册的消息当然是有特定格式的(属于ODIN协议的一部分),具体的格式不适合在推文中展现,可以见[5]。

那如何注册ODIN域名呢(即ODIN标识)

可以在https://ppkpub.github.io/braintool/ 中进行注册([2]中提供了注册步骤,演示了比特币账户注册ODIN协议),其通过在区块链网络中发送一笔注册标识的交易(需要手续费),然后通过一些监控区块链的工具([2]中提到PPk工具,可以修改管理和测试浏览 ODIN 标识映射的内容)对链上的数据进行解析,显示到前端来表明完成了注册。

如何解析ODIN域名呢?

区块链技术指南 | ODIN协议初窥

区块链技术指南 | ODIN协议初窥

ODIN+PTTP运行流程

DNS域名系统,最重要的是各个层次的DNS服务器,它们是用来解析域名的,ODIN中自然是通过区块链来进行解析了(参考上图)。由于所有注册信息都在链上,当用户根据ODIN标识串寻找一个数据资源或有关这一资源的相关信息时,查询请求就会通过开源的ODIN解析库在区块链上进行定位,然后被传送到该ODIN 拥有者所登记的访问点(Access Point)上按照PTTP(Peer Trusted Transfer Protocol)传输协议进行解析并得到该数据资源的元数据描述和实际数据URL链接。

如何使用ODIN域名

PPk工具主要是指PPk浏览器(也内置了比特币钱包的功能)。传统浏览器是HTTP客户端,向域名所指的服务器发起请求,然后将返回的HTML文件解析出来展示给用户。

PPk浏览器是PTTP客户端,向ODIN域名所指的区块链网络上的访问点AP发起请求,然后将返回的HTML文件解析出来展示给用户。这里的AP可以是区块链网络中的节点(可以横跨多种区块链平台:以太坊 ETH,比原链 BTM,超级账本 Fabric ),甚至也可以是中心化的Web服务器。所以说,ODIN出发点是改进传统互联网。

在注册到ODIN域名后,可以在 PPk 浏览器上为这个域名设置网站([3]的第6部分)。其原理是将网站页面分发服务部署到分布式存储服务类型( Dat、IPFS 或 BtmFS)上,将部署后得到的网址再和ODIN域名进行关联(通过在比特币网络中发一条域名和网址关联的交易)。

在[4]中还提到了: 如何搭建一个支持 PTTP 协议的内容节点 AP?

PPk 客户端在 0.8.5 版本后,支持通过 Dat(分布式数据同步协议)、IPFS、BtmFS(比原链的分布式文件系统)等多种分布式存储服务来快速建立一个简单的 AP 网站示例,并很方便地关联到自己所注册的 ODIN 标识。

实际上其原理是:和前面的[3]中的第6部分内容类似。将网站页面分发服务部署到分布式存储服务类型( Dat、IPFS 或 BtmFS)上,将部署后得到的网址再和ODIN域名进行关联(通过在比特币网络中发一条域名和网址关联的交易)。自己搭建一个AP和自己搭建一个网站是差不多。

如何让自己的 AP 节点发布的内容自证可信?

类似传统 DNS 域名的安全升级方案 DNSSEC,ODIN 标识原生支持内容可信配置功能,依靠公开的比特币区块链,数据请求者可以对从支持 PTTP 协议的内容节点即 AP(Access Point)获得的数 据内容自主进行可信验证。

实际上其原理是:产生一对公私钥,私钥放在AP上并配置好,公钥放在比特币区块链上公开,客户端可以使用公钥对请求AP而返回的数据中签名内容进行验证,从而来验证合法可信性。

4 ODIN域名的格式

区块链技术指南 | ODIN协议初窥

区块链技术指南 | ODIN协议初窥

ODIN域名/标识

说了这么多,竟然还没介绍ODIN域名的格式(如上图所示)。因为ODIN这套系统如何运行比ODIN的数据格式、域名格式要重要。

根ODIN 的标准结构式为:

ppk:[BTC_BLOCK_SN].[BTC_TRANS_INDEX]/[DSS]

ODIN 分为命名体系、前缀和后缀三部分,用冒号、斜杠分开。

• 前缀中又以小圆点分为两部分 [BTCBLOCKSN]为该ODIN在比特币区块链上的登记记录所在区块的数字流水号(由比特币网络决定), [BTCTRANSINDEX]为该ODIN在比特币区块链上的登记记录所在区块内的具体存储位置的阿拉伯数字编号(从0开始寻址)。

• 后缀[DSS] (Data Suffix String)由ODIN注册者可选并自行给出的该ODIN标识所对应具体数据内容定位标识,需要自主确保具有唯一性。

[DSS]的命名方案:

RESOURCE_ID#[DATA_BLOCK_ID.CHUNK_INDEX]

其中:

• RESOURCE_ID 为对应的资源标识,由所属ODIN标识注册者来定义,可以是流水编号,也可以是唯一取值的字符串,需自行保证能与标准结构式区分开,且不能包含# / (  ) “这五个字符。

• DATABLOCKID 为对应的内容区块编号(从1开始,对于文件File可理解为版本,对于动态数据流Stream可以理解为顺序产生的数据包)

• 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.1

除了以上的基本格式之外,ODIN还支持短编码、多级扩展ODIN等,具体见[6]。

5 后记

ODIN&PPK构建了去中心画的DNS系统,能够帮助用户索引、定位存储于任何链、任何网络上的资源,构建起“围城”之间的桥梁。这与THE OASIS跨游戏道具资产转移协议的愿景不谋而合 。未来,DegameLabs将带来THE OASIS与ODIN&PPK协议相结合的技术展望。

参考文献

[1] https://github.com/ppkpub/docs/ 下的DOCPPkAbout.pdf

[2] https://github.com/ppkpub/docs/ 下的 DOCPPkBrainTool_Tutorial.pdf

[3] https://github.com/ppkpub/docs/ 下的 DOCPPkBrowser_Tutorial.pdf

[4] https://github.com/ppkpub/docs/ 下的 DOCPPkJavaTool_Tutorial.pdf

[5] https://github.com/ppkpub/docs/ 下的 PPKODINSPEC.txt

[6] https://github.com/ppkpub/docs/ 下的 PPK_ODIN.txt

公众号:DegameLabs链游实验室,专注于链游新玩法,定期进行技术分享。

该内容来自于互联网公开内容,非区块链原创内容,如若转载,请注明出处:https://htzkw.com/archives/16557

联系我们

aliyinhang@gmail.com