一种基于区块链技术的DNS系统的制作方法

文档序号:18161289发布日期:2019-07-13 09:20阅读:488来源:国知局
一种基于区块链技术的DNS系统的制作方法

本发明涉及互联网领域,具体而言,涉及一种基于区块链技术的dns系统。



背景技术:

如图1所示,域名系统dns是互联网上重要的基础设施。域名方便人们理解和使用,ip地址则更有利于计算机进行处理,dns负责将域名转换为ip地址,从而更加方便人们访问互联网。目前的dns是一种有中心的分布式结构,由icann来进行统一调度和管理,icann作为中心化的组织完全控制着域名的分布,这存在着严重的权力滥用风险和单点失效风险。另外,目前的dns很容易受到ddos攻击、缓存污染攻击、消失性风险、致盲性风险等各种问题,根据《globaldnsthreatreport2018》报道,2018年至少77%的组织至少遭受过一次dns攻击。有学者提出通过认证、加密等方法的dnssec协议来解决这些问题,但是这没有改变dns的基础结构,仍然会存在各种中心化导致的问题。

区块链具有去中心化、安全、可信、不可篡改等特点似乎可以解决上述这些问题。比特币由中本聪在2009年提出,随后人们提取出比特币的底层技术并命名为区块链。区块链是一种可信的分布式数据库,其按时间顺序存储记录,区块链协议在去中心化的网络中维护分布式的数据库。根据其不同的读写权限和中心化程度,区块链可以被分为公有链、联盟链和私有链,这三者去中心化程度越来越低。比特币是区块链1.0的代表,以太坊作为区块链2.0的代表,其结合了区块链1.0和智能合约,从而可以让开发者去部署dapp,这极大的丰富了区块链的功能。域名币是第一个基于区块链的域名系统,但是其面临着严重的安全威胁,blockstack则是第一个直接在比特币的链上进行运行的域名系统,但是其性能受到底层比特币的限制,类似的还有nebulis和consortiumdns方案,但是这些方案中的扩展性和吞吐量远远不能满足域名服务的要求。

namecoin:域名币首次将域名服务与区块链技术结合起来,其直接使用比特币的代码做修改,所以与比特币拥有很多相同的功能和机制比如pow,他们使用相同的数学问题来挖矿,所以矿工只需要花费一份算力就可以在两个系统中进行挖矿,这可能造成安全风险。域名币使用.bit作为其顶级域名,这意味着目前所有的域名都能够通过加上.bit来进行移植比如.com.bit,.cn.bit等。但是域名币使用pow作为其共识机制,这意味着在早期其很可能由于其算力不足而遭受51%算力攻击。

blockstack:是第一个直接在比特币系统上进行操作的系统。考虑到域名币中的安全问题,blockstack将域名系统移植到比特币系统上,这可以利用比特币充足的算力来抵抗51%算力攻击,同时由于使用了分层和虚拟链等技术,比特币节点并不能意识到blockstack的存在,不足之处就是blockstack的性能受限于比特币的性能。

nebulis:是一个与blockstack类似的平台,其可以理解为一个全球的分布式目录来替代目前存在的域名系统,与blockstack的不同之处在于其使用ipfs作为http的替代,并且使用以太坊来提供域名服务,但是其也会受限于以太坊的性能。

consortiumdns:提出使用联盟链的形式来管理域名服务,其将网络节点划分为查询节点和挖矿节点,并将系统设计成三层结构,即区块链层、共识层、存储层,使用外部存储层去解决区块链自身的存储问题。同时,系统构建区块和记录的索引来加快域名解析的效率。不同于域名币和blockstack使用的公链形式,consortiumdns使用的联盟链形式更有利于进行权限管理,这可以减少域名上的数字犯罪,但是consortiumdns在链的结构上有较差的扩展性和较低的系统吞吐量。

其中,namecoin:存在严重的安全风险;blockstack:性能受限于比特币系统;nebulis:性能受限于以太坊系统;consortiumdns:扩展性较差、吞吐量较低。



技术实现要素:

本发明提供一种基于区块链技术的dns系统,采用一条主链,记录少量的重要信息,主要负责存储顶级域上的请求和子链的哈希值;多条分别连接所述主链的子链,可以进行扩展、迁移和适当的舍弃,主要负责存储一个特定tld下的所有操作请求,不同的子链存储不同的tlds下的记录,所有的子链都和主链维持相同的区块高度;节点,包括联盟节点和普通节点,分布于所述主链和所述子链上并只存储部分子链,利用代理签名来允许节点处理那些没有存储的子链上的操作;所述联盟节点,分布于所述主链上,可以对tld上的请求进行权限管理;所述普通节点,分布于所述子链上,可以参与tld下的各种操作请求,解决现有技术中安全性差,性能受限,扩展性差,吞吐量低的技术问题。

本发明为解决上述技术问题而提供的这种基于区块链技术的dns系统,包括,

主链,只有一条,记录少量的重要信息,主要负责存储顶级域上的请求和子链的哈希值,;

子链,存在多条并分别连接所述主链,可以进行扩展、迁移和适当的舍弃,主要负责存储一个特定tld下的所有操作请求,不同的子链存储不同的tlds下的记录,所有的子链都和主链维持相同的区块高度;

节点,包括联盟节点和普通节点,分布于所述主链和所述子链上并只存储部分子链,利用代理签名来允许节点处理那些没有存储的子链上的操作;

所述联盟节点,分布于所述主链上,可以对tld上的请求进行权限管理;

所述普通节点,分布于所述子链上,可以参与tld下的各种操作请求。

进一步,所述主链的区块结构包括,

主链区块头,包括主链标识符、区块高度、前一个区块的哈希值、整个区块体的merkle根信息;

主链区块体,共有两个部分,第一部分是对顶级域名的各种操作,第二部分是在同一周期各个子链上的所有请求的哈希值。

进一步,所述子链的区块结构包括,

子链区块头,包括.com子链标识符、时间戳、区块高度、前一个区块的哈希值、区块体的merkle根、版本号和其他的一些重要信息;

子链区块体,记录顶级域.com下的所有操作请求。

进一步,所述联盟节点之间建立一个全连接,形成一个联盟委员会来管理主链,当某个组织想要申请注册.com顶级域名时,由所述联盟节点来投票决定其是否被允许注册,通过可链接的环签名lrs保证投票过程的公平性和投票节点的匿名性。

进一步,所述可链接的环签名lrs包括,

init:假设联盟委员会里面有n个用户,

群成员的公钥列表为:pk={pk1,pk2,…,pkn},

私钥列表为:sk={sk1,sk2,…,skn},

被签名的消息m∈{0,1}*,

匿名签名者的公私钥对为:{pki,ski}(1≤i≤n);

sign:以所有群成员的公钥pk、签名者的私钥ski、消息m作为输入,输出一个可链接的环签名lrs值σ;

verify:以所有群成员的公钥pk、消息m、签名值σ作为输入,根据其是否有效对应输出1或0;

link:以两个签名值σ和σ'作为输入,如果存在签名值是无效的则不进行输出,否则根据其是否具有链接性对应输出1或0,

当verify和link对所有的pk,sk,i,m,m'都成立时则称所述可链接的环签名lrs是正确的,即:

verify(pk,m,sign(pk,ski,m))=1

link(sign(pk,ski,m),sign(pk,ski,m'))=1。

进一步,所述普通节点通过分片协议对在同一个分片内的普通节点进行全连接,形成一个普通委员会来验证各请求的有效性。

进一步,所述分片协议为在一个周期内将所有的节点划分为更小的委员会,每个委员会拥有n个成员并且可以独立的处理一部分操作,。

进一步,所述联盟委员会负责收集和验证所有普通委员会的共识结果,并在委员会内部运行拜占庭容错算法形成一个最终的共识结果并进行广播,其余的普通节点接收到最终的共识结果进行验证,并在主链和相应的子链上添加区块。

进一步,所述代理签名,

假设两个用户a和b,他们各自拥有公钥:(pka,ska)和私钥:(pkb,skb),a是一个顶级域名的拥有者,b是一个子域的拥有者,如果下列条件满足:

a使用其私钥ska计算出σ,并秘密地把σ发送给b;

b使用σ和其私钥skb产生一个新的密钥:σa→b;

b使用新产生的密钥代表a对消息m进行签名:s=sign(σa→b,m);

存在一个公开可验证的算法:vera→b:pk×s×m→{true,false},对于任何的m和s满足:vera→b(pka,s,m)=true<=>s=sign(σa→b,m)

称tld(a)下发了其部分数字签名权力给子域(b),a是原始签名者,b是代理签名者,σ是代理密钥,σa→b是代理签名密钥,s是代理签名。

进一步,还包括key-value数据库,,所述key-value数据库在链外存储索引提高域名解析的效率。

本发明所具有的有益效果:本发明提供的这种基于区块链技术的dns系统,安全性更高;可扩展性跟高;吞吐量更高;匿名性更好;存储量更低。

附图说明

图1是现有技术域名解析流程图。

图2是本发明所述基于区块链技术的dns系统结构图。

具体实施方式

结合上述附图说明本发明的具体实施例。

如图2所示,本发明提供一种基于区块链技术的dns系统,包括

主链,只有一条,记录少量的重要信息,主要负责存储顶级域上的请求和子链的哈希值,;

子链,存在多条并分别连接所述主链,可以进行扩展、迁移和适当的舍弃,主要负责存储一个特定tld下的所有操作请求,不同的子链存储不同的tlds下的记录,所有的子链都和主链维持相同的区块高度;

节点,包括联盟节点和普通节点,分布于所述主链和所述子链上并只存储部分子链,利用代理签名来允许节点处理那些没有存储的子链上的操作;

所述联盟节点,分布于所述主链上,可以对tld上的请求进行权限管理;

所述普通节点,分布于所述子链上,可以参与tld下的各种操作请求。

本发明提供的这种系统架构为一条主链和多条子链,主链主要负责存储顶级域上的请求和子链的哈希值,子链主要负责存储一个特定tld下的所有操作请求,所述tld包括com、org,所有的子链都和主链维持相同的区块高度。现在假设每个国家维护一个联盟节点,世界上所有国家维护的节点之间建立一个全连接,形成一个联盟委员会来管理主链。

由于主链和子链扮演不同的角色,他们各自的区块结构也有所不同,

进一步,所述主链的区块结构包括,如下表,

主链区块头,包括主链标识符、区块高度、前一个区块的哈希值、整个区块体的merkle根信息;

主链区块体,共有两个部分,第一部分是对顶级域名的各种操作,第二部分是在同一周期各个子链上的所有请求的哈希值。

进一步,所述子链的区块结构包括,如下表,

子链区块头,包括.com子链标识符、时间戳、区块高度、前一个区块的哈希值、区块体的merkle根、版本号和其他的一些重要信息;

子链区块体,记录顶级域.com下的所有操作请求。

进一步,所述联盟节点之间建立一个全连接,形成一个联盟委员会来管理主链,当某个组织想要申请注册.com顶级域名时,由所述联盟节点来投票决定其是否被允许注册,通过可链接的环签名lrs保证投票过程的公平性和投票节点的匿名性。

当一个组织想要申请注册一个顶级域名时,首先向联盟节点发起注册请求,代理的联盟节点将请求发给联盟委员会,联盟节点对请求进行审核后发起投票,只有当同意票的数量达到一定比例后这次注册才会被允许,然后组织才能拥有自己的子链。

进一步,所述可链接的环签名lrs包括,

init:假设联盟委员会里面有n个用户,

群成员的公钥列表为:pk={pk1,pk2,…,pkn},

私钥列表为:sk={sk1,sk2,…,skn},

被签名的消息m∈{0,1}*,

匿名签名者的公私钥对为:{pki,ski}(1≤i≤n);

sign:以所有群成员的公钥pk、签名者的私钥ski、消息m作为输入,输出一个可链接的环签名lrs值σ;

verify:以所有群成员的公钥pk、消息m、签名值σ作为输入,根据其是否有效对应输出1或0;

link:以两个签名值σ和σ'作为输入,如果存在签名值是无效的则不进行输出,否则根据其是否具有链接性对应输出1或0,

当verify和link对所有的pk,sk,i,m,m'都成立时则称所述可链接的环签名lrs是正确的,即:

verify(pk,m,sign(pk,ski,m))=1

link(sign(pk,ski,m),sign(pk,ski,m'))=1。

所述可链接的环签名lrs具有以下的性质:

不可伪造性:对于除合法用户以外的其他用户来说伪造一个签名在计算上是困难的;

匿名性:在签名者没有暴露自己身份的前提下,任何人想要知道真正签名者身份的概率将不会超过纯粹进行猜测的概率;

可链接性:任何人都可以检测两个签名是否是被同一个群成员所签。

所述可链接的环签名lrs能实现匿名投票,但是区块链却不是匿名的,区块连中的地址仅仅只是假名,尤其是所有节点都知道联盟节点的地址,当节点发出投票结果时就会暴露投票人。所以本发明中使用一个公共账户来发布投票结果,如下表所示,代理联盟节点以所有联盟节点的公钥加密公共账户的公私钥对(pk,sk)后公开,随后所有的联盟节点能使用自己的私钥来进行对应的解密获得公共账户的公私钥对。

进一步,所述普通节点通过分片协议对在同一个分片内的普通节点进行全连接,形成一个普通委员会来验证各请求的有效性,如果有人想要申请注册.com域名,这时委员会需要去验证该请求是否被com顶级域的拥有者签名过。

进一步,所述分片协议为在一个周期内将所有的所述节点划分为更小的委员会,每个委员会拥有n个成员并且可以独立的处理一部分操作,分片协议可以让整个系统的吞吐量与整个网络的算力呈线性增长,同时可以容忍一定比例的拜占庭节点,分片协议的核心思想就是均匀划分算力,其中引入了周期的概念。

在每个周期,所述节点的工作流程包括以下几个步骤:

s1.节点收集上一周期的操作请求;

s2.节点建立自己的身份:每个普通节点使用上一周期由联盟节点产生的公共随机字符串作为本轮pow的随机性,以ip||pk||randomness||powsolution作为他们的身份,pow的解也可以允许其他节点来验证并接收其身份,同时也可以避免女巫攻击;

s3.节点形成委员会:节点将会根据其建立的身份被指派到不同的委员会,比如节点建立身份的哈希值模上委员会数量后的余数或者是存在2k个委员会,然后根据其后k-bit来进行划分;

s4.节点与同一委员会的节点建立连接:联盟节点随机地从已经解决pow问题的二级域名节点中选出目录委员会并广播出去,其他的节点将自己建立的身份发送给目录委员会,每一个目录委员会节点都独立的验证身份的有效性并收集n个成员,然后目录委员会内部做并集并挑选出出现频率最高的n个成员,将列表广播出去,然后普通节点可以与所属同一委员会的节点建立点对点的连接,这种方法相比于直接广播而没有建立目录委员会可以将消息复杂度由0(n2)降低为0(n·n);

s5.委员会内部共识:每个委员会内部使用确定性的共识算法如pbft来避免分叉和容忍拜占庭节点,假如一个委员会内有3f+1个节点,则pbft最多可容忍f个拜占庭节点;每个分片对最终结果达成共识:r1,r2,…,rn,然后委员会成员代表广播其结果给联盟委员会;

s6.联盟委员会形成最终共识结果:联盟委员会收集各个分片处理的结果并进行验证,在内部运行pbft得到最终共识结果:r={r2,…,rn},假设r1被验证为无效,最后联盟节点将r广播给其他普通节点;

s7.节点记录本周期内的共识结果:所有的节点收到最终的结果并验证其有效性,然后在自己部署的主链和子链上添加记录,值得注意的是,主链并不存储所有的操作记录,并且普通节点可能只存储部分子链,他们可以将r2添加到com-子链然后忽略其他子链上的结果;

s8.联盟委员会产生下一周期的随机数:联盟节点运行一个分布式的commit-xor方案来产生将会用于下一周期pow的公共随机字符串。

进一步,所述联盟委员会负责收集和验证所有普通委员会的共识结果,并在委员会内部运行拜占庭容错算法形成一个最终的共识结果并进行广播,其余的普通节点接收到最终的共识结果进行验证,并在主链和相应的子链上添加区块。

进一步,所述代理签名为,

假设两个用户a和b,他们各自拥有公钥:(pka,ska)和私钥:(pkb,skb),a是一个顶级域名的拥有者,b是一个子域的拥有者,如果下列条件满足:

a使用其私钥ska计算出σ,并秘密地把σ发送给b;

b使用σ和其私钥skb产生一个新的密钥:σa→b;

b使用新产生的密钥代表a对消息m进行签名:s=sign(σa→b,m);

存在一个公开可验证的算法:vera→b:pk×s×m→{true,false},对于任何的m和s满足:vera→b(pka,s,m)=true<=>s=sign(σa→b,m)

称tld(a)下发了其部分数字签名权力给子域(b),a是原始签名者,b是代理签名者,σ是代理密钥,σa→b是代理签名密钥,s是代理签名。

随着时间的推移,区块链系统将会变得越来越庞大,著名的比特币系统截至目前已经接近200gb。巨大的存储容量将会提高节点加入的标准,这不符合使用区块链技术来重构dns的初衷,更多的节点能更好的提供域名服务,也能做到负载均衡。为了减少节点的存储负担,本发明提供的这种基于区块链技术的dns系统允许“轻节点”只存储主链和部分所需的子链,本发明中使用了分片协议,节点将会被随机的指派到一个分片中,所以使用代理签名技术来允许节点处理那些没有存储的子链上的操作。从另一个角度来看,目前的域名空间是一种树状的数据结构,一个tld下可能存在很多个子域名,代理签名也可以把tld的管理权限下发给子域,减少tld的管理负担,让子域拥有管理自己的子域的权利。

在本发明中,假设原始签名者是拥有顶级域名com的机构,代理签名者是拥有子域xxxx.com的公司,如果有人想要注册域名mail.xxxx.com,首先xxxx.com公司判断其是否可以注册,如果有的话就对其进行代理签名,其他节点只需要使用com机构的公钥来验证该签名是否是合法的。另外,代理签名有一些性质:比如其他节点能很容易的区分出签名是由原始签名者还是代理签名者所签署的,并且代理签名者不能伪造原始签名者的签名。

进一步,还包括key-value数据库,,所述key-value数据库在链外存储索引提高域名解析的效率。

本发明提供的这种基于区块链技术的dns系统,是一种安全、可扩展、高性能的域名系统。域名系统中最重要的就是顶级域tld,tld有三种分类:通用顶级域gtld,比如com和org;国家顶级域cctld,比如cn和us;基础设施顶级域arpa。为了降低系统的中心化程度和更好地管理tld,本发明采用了联盟链的形式,假设每个国家都是一个联盟节点,所有的国家形成一个联盟来管理这条链,对顶级域名的各种操作需要由联盟投票决定,本发明中使用可链接的环签名技术来确保投票节点的匿名性和投票过程的公平性。为了增强系统的可扩展性,本方案中采用了多链的结构,即一条主链和多条子链,主链负责记录tld上的请求,子链则负责tld下的操作请求,这也符合目前dns的层次结构。为了增强系统的吞吐量和避免子链参与节点太少造成的中心化问题,本发明使用了分片协议来均匀随机的把节点分成更小的委员会,每个委员会独立的处理一条子链上的请求,分片协议可以让系统的吞吐量随着网络的计算能力增加而增加。为了减少系统的部署成本,本发明允许节点只存储主链和部分子链的同时能参与整个分片协议并进行快速请求验证,其中用到了代理签名的技术。

本发明提供的这种基于区块链技术的dns系统相比于目前的域名解析系统,

安全性方面,dns缓存污染:请求者能够向多个连接的节点发起解析请求,这将会增加攻击者的作恶成本,此外请求者和缓存数据的节点都能部署包含主链的“轻链”,请求者如果愿意的话可以在其本地对响应结果进行验证,从而确保结果是可信的;ddos攻击:联盟节点只负责tld上的注册、注销请求,并且这些请求必须是由申请者在链外向代理联盟节点发起申请,然后由代理联盟节点发布,此外所有的普通节点也都可以提供域名解析服务,所有本发明可以很好地抵抗ddos攻击;51%算力攻击:使用pow来阻止女巫攻击,使用确定性的共识算法pbft作为主要的共识机制,所以不会存在分叉,所有的决策都是由联盟委员会投票产生,一国一票,所以本发明可以避免算力攻击;消失性风险:将重要的tld记录在主链上,并且只有在国家的同意票超过一定比例时才能进行注册和删除,至于子域,其拥有者来进行管理,只有被拥有者的私钥签名过的请求才被认为是有效的,所以本发明可以避免消失性风险;致盲性风险:不存在致盲性风险,所有的节点如果愿意的话都可以拥有完整的域名信息,并且即使节点没有完整的域名信息其也可以向多个节点发起解析请求。

可扩展性方面,本发明中的结构是一条主链和多条子链,主链只需要存储所有子链上数据的哈希值,从理论上来说只要申请是合法的并且通过了联盟委员会的投票,子链的数量可以无限扩张,随着时间的推移,在不同tld下的越来越多域名需要被系统处理,此时系统可以通过接入更多的子链到主链来进行扩张,此外,某条子链记录在某个固定tld下的域名的注册和删除,如果这条子链上存在过多的注册-删除对,则链上会存储很多无用信息,此时节点可以向联盟委员会申请重开一条同样tld的子链,将有用信息进行移植后放弃之前的那条子链,这可以净化整个系统。

高吞吐量方面,本发明中使用了分片协议来实现高吞吐量,其均匀地将网络节点划分为更小的委员会,并且每个委员会能在一个分片内独立的处理请求,所以处理是并行化的,系统的吞吐量与其算力几乎呈线性关系。

匿名性方面,本发明中使用了可链接的环签名技术,在本发明中有很适用的性质,比如其允许群成员验证投票的有效性却不知道确切的投票人,同时公共投票账号可以解决假名的问题,这样的设计可以确保身份匿名性和减少关系投票。

存储方面,本发明中的多链结构允许存储容量有限的节点只存储主链和部分使用频率较高的子链,并且节点能参与所有的流程,这能减少节点的加入标准,更多的参与节点能更好的提供域名解析服务,这也有利于整个系统的负载均衡。

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明具体实施只局限于这些说明,对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1