分布式Web的名称解析器

2021-01-18 12:27:38

域名系统(DNS)将名称与资源进行匹配。不用键入104.18.26.46来访问Cloudflare博客,而是键入blog.cloudflare.com,然后使用DNS,域名解析为104.18.26.46,即Cloudflare博客IP地址。

同样,诸如以太坊和IPFS之类的分布式系统也依赖于命名系统来使用。可以使用DNS,但其解析程序的属性与分布式Web(dWeb)系统中重视的属性相反。即,dWeb解析器理想地提供(i)可本地验证的数据,(ii)内置历史记录和(iii)没有单个信任锚。

在Cloudflare Research,我们一直在探索替代方法来解决对符合这些属性的响应的查询。我们很自豪地宣布推出一种新的分布式Web解析器,可在该解析器中访问以太坊名称服务(ENS)索引的IPFS内容。

要了解它的构建方式以及今天的用法,请继续阅读。

行星际文件系统(IPFS)是用于在分布式文件系统上存储内容的对等网络。它由一组称为节点的计算机组成,这些计算机使用公共寻址系统存储和中继内容。

该寻址系统依赖于内容标识符(CID)的使用。 CID是自我描述的标识符,因为标识符是从内容本身派生的。例如,QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco是ipfs上的Wikipedia主页的CID版本0(CIDv0)。

要了解为什么将CID定义为自我描述,我们可以查看其二进制表示形式。对于QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco,其CID如下所示:

第一个是用于生成CID的算法(在这种情况下为sha2-256);然后是编码内容的长度(sha2-256哈希为32),最后是内容本身。引用多编解码器表时,可以了解内容的编码方式。

这种编码机制很有用,因为它跨多个协议创建了一个独特且可升级的内容寻址系统。

以太坊是具有智能合约功能的基于账户的区块链。基于帐户的每个帐户都与地址相关联,并且可以通过分组分组的操作进行修改,并通过以太坊的共识算法“工作量证明”进行密封。

帐户分为两类:用户帐户和合同帐户。用户帐户由私钥控制,私钥用于签署该帐户的交易。合同账户持有字节码,当交易发送到他们的账户时,字节码由网络执行。一笔交易可以同时包含资金和数据,从而允许帐户之间进行丰富的交互。

创建事务后,将得到网络上每个节点的验证。对于两个用户帐户之间的交易,验证包括检查原始帐户签名。当交易在用户和智能合约之间进行时,每个节点都会在以太坊虚拟机(EVM)上运行智能合约字节码。因此,所有节点执行相同的操作套件,并以相同的状态结束。如果一个参与者是恶意的,则节点将不会添加其贡献。由于节点拥有不同的所有权,因此它们有动机不作弊。

您可能已经注意到,尽管CID描述了一条内容,但它没有描述在哪里找到它。实际上,CID描述了内容,但没有描述其在网络上的位置。该文件的位置将通过对IPFS节点的查询来检索。

IPFS URL(统一资源定位符)如下所示:ipfs:// QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco。访问此URL意味着使用IPFS协议(用ipfs://表示)检索QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco。但是,键入这样的URL容易出错。而且,这些URL并不是很友好,因为没有记住这种长字符串的好方法。要变通解决此问题,您可以使用DNSLink。 DNSLink是在DNS TXT记录中指定IPFS CID的一种方式。例如,ipfs上的Wikipedia具有以下TXT记录

此外,其A记录指向IPFS网关。这意味着,当您访问en.wikipedia-on-ipfs.org时,您的请求将定向到IPFS HTTP网关,然后使用您的域TXT记录查找CID,并使用IPFS网络。

这是在易用性和安全性之间进行权衡。用户的网络浏览器无法验证所提供内容的完整性。这可能是因为浏览器未实现IPFS或因为它无法验证域签名DNSSEC。我们在上一期有关端到端完整性的博客文章中谈到了这个问题。

DNS简化了对IP地址的引用,就像邮政地址是引用地理位置数据和手机抽象电话号码中的联系人的方式一样。所有这些系统都提供了一种人类可读的格式,并降低了操作的错误率。

为了验证这些数据,可信任的锚点或“真理的来源”为:

政府注册处的邮政地址。在英国,地址由城市,行政区和地方议会处理。

帐户由其地址标识。地址以" 0x"开头并紧随其后的是20个字节(参考以太坊黄纸,参见4.1),例如:0xf10326c1c6884b094e03d616cc8c7b920e3f73e0。这不是很容易理解,当交易不可逆并且人们很容易输错单个字符时,这可能会很吓人。

第一个缓解策略是引入一种新的表示法,以基于地址0xF10326C1c6884b094E03d616Cc8c7b920E3F73E0的哈希将某些字母大写。这可以帮助检测错误类型,但是仍然无法读取。如果必须将交易发送给朋友,则无法确认她没有输错地址。

创建以太坊名称服务(ENS)来解决此问题。它是一个能够将人类可读的名称(称为域)转换为区块链地址的系统。例如,域privacy-pass.eth指向以太坊地址0xF10326C1c6884b094E03d616Cc8c7b920E3F73E0。

注册表是一个智能合约,它维护一个域列表以及有关每个域的一些信息:域所有者和域解析器。所有者是允许管理域的帐户。他们可以创建子域并更改其域的所有权,以及修改与其域关联的解析器。

解析程序负责保存记录。例如,Public Resolver是一个智能合约,不仅可以将名称与区块链地址相关联,而且还可以将名称与IPFS内容标识符相关联。解析器地址存储在注册表中。然后,用户联系注册表以检索与该名称关联的解析器。

考虑可以直接访问以太坊状态的用户Alice。流程如下:Alice希望获取Privacy Pass的以太坊地址,该域名为privacy-pass.eth。她在ENS注册中心中寻找privacy-pass.eth,并找出privacy-pass.eth的解析器为0x1234 ...。现在,她在解析器地址中查找privacy-pass.eth的地址,该地址原来是0xf10326c...。

访问privacy-pass.eth的IPFS内容标识符的方式与此类似。解析器相同,只是访问的数据不同-爱丽丝(Alice)调用了与智能合约不同的方法。

目标是能够使用这种直接从Web浏览器索引IPFS内容的新方法。但是,访问ENS注册表需要访问以太坊状态。要访问IPFS,您还需要访问IPFS网络。

为了解决这个问题,我们将使用Cloudflare的分布式Web网关。 Cloudflare同时运行以太坊网关和IPFS网关,可分别从cloudflare-eth.com和cloudflare-ipfs.com获得。

EthLink的第一个版本由Jim McDonald构建,并由eth.link的True Name LTD运营。从下周开始,eth.link将过渡为使用Cloudflare分布式Web解析器。为此,我们在Cloudflare Workers之上构建了EthLink。这是IPFS的代理。附加.link时,它将代理所有ENS注册的域。例如,privacy-pass.eth应该呈现“隐私通行证”主页。在您的网络浏览器中,https://privacy-pass.eth.link会执行此操作。

解决方案是使用Cloudflare Worker在Cloudflare边缘完成的。 Cloudflare Workers允许JavaScript代码在Cloudflare基础架构上运行,从而无需维护服务器并提高了服务的可靠性。另外,它遵循Service Workers API,因此最终用户可以根据需要检查解析器返回的结果。

为此,我们为* .eth.link设置了通配符DNS记录,以通过Cloudflare代理并由Cloudflare Worker处理。当用户爱丽丝访问privacy-pass.eth.link时,工作人员首先获取要从以太坊中检索的CID的CID。然后,它将与该CID匹配的内容请求到IPFS,并将其返回给Alice。

所有零件都可以在本地运行。该工作程序可以在服务工作程序中运行,并且以太坊网关可以指向本地以太坊节点和IPFS Companion提供的IPFS网关。这意味着,尽管Cloudflare提供了解决方案即服务,但所有组件都不必受到信任。

那我们分发了吗?不,但是我们越来越近,正在建立新兴技术和当前Web基础结构之间的桥梁。通过提供专用于分布式Web的网关,我们希望使每个人都可以访问这些服务。

我们感谢ENS团队在扩展分布式Web方面对新解析器的支持。 ENS团队一直在https://eth.link上运行类似的服务。 1月18日,他们会将https://eth.link切换为使用我们的新服务。

这些服务受益于Cloudflare Worker平台增加的速度和安全性,同时为在浏览器中运行分布式协议铺平了道路。

研究IPFS以太坊分布式Web