KERI-design
KERI白皮书
目的:为互联网作为可信任的跨层提供一个安全的去中心化信任基础
相关名词:decentralized key management infrastructure (DKMI):分散的密钥管理基础设施。自主标识符(Autonomic Identifiers:AID)和自主命名空间(Autonomic Namespaces:AN)
0x00 摘要
信任的主要根是自认证标识符(self-certifying identifiers),这些标识符在发布时被强绑定到加密签名(公钥、私钥)密钥对。这些密钥是自包含(self-contained)的,直到/除非需要将控制权转移到新密钥对。在这种情况下,签名传输语句的仅附加链接键事件日志提供了可验证的控制源。这使得介入的操作基础设施可以替换,因为事件日志可以由包括环境基础设施在内的任何基础设施提供。环境基础设施上的端可验证日志支持环境可验证性(任何人、任何地点、任何时间均可验证)。
主要密钥管理操作是通过新的密钥预轮转方案(key pre-rotation)进行密钥轮转,有直接(一对一)模式和间接(一对任意)模式。间接模式依赖于见证密钥事件接收日志(key event receipt logs:KERL)作为验证事件的次要信任根。在直接模式中,身份控制器通过控制密钥对的验证签名建立控制。间接模式通过用于验证事件的见证密钥事件接收日志(KERL)扩展了信任基础,其安全由KERI的控制建立协议算法在一组证人(witness)中提供。
0x01
身份系统安全覆盖的重要基本特征是它将控制器、标识符和密钥对绑定在一起。发送方控制器以独占方式绑定到(公钥、私钥)密钥对的公钥。公钥以独占方式绑定到唯一标识符。发送方控制器还被唯一地绑定到唯一标识符。如下所示:
下图是管理员标识符的认证与颁发。其中controller指用户,identifier指的是标识符。
上图的著名应用:证书颁发机构(CA)、域名系统(DNS)。DNS将控制器绑定到域名标识符。DNS还将域名(如“mail.example.com”)映射到IP地址(如“54.85.132.205”)。CA将具有域名的控制器绑定到来自(公钥、私钥)密钥对的公钥(证书)。
1.1 自我认证的标识符(SELF-CERTIFYING IDENTIFIERS)
对标识符的完全分散和可信任控制,最好是通过基于自认证标识符来实现。可信计算组(Trusted Computing Group:TCG)使用术语”隐式身份”和”嵌入式证书颁发机构”来描述关联计算设备自动生成设备标识符的过程,此过程叫做设备标识符组合引擎(Device Identifier Composition Engine:DICE)。
- 自认证标识符以密码学方式将标识符绑定到密钥对。
派生码
- 可以利用派生码,从公钥中得到自我认证的标识符。
例如,公钥如下:F5pxRJP6THrUtlDdhh07hJEDKrJxkcR9m5u1xs33bhp=
,假如派生码为B
,那么我们可以生成自我认证的标识符:BF5pxRJP6THrUtlDdhh07hJEDKrJxkcR9m5u1xs33bhp
,派生码不仅用于自我认证标识符前缀,还用于密钥、签名和摘要。
初始声明
自我认证标识符的实际使用需要一些初始配置数据(初始数据),并在签署的初始声明中正式表示。初始数据包括公钥、派生码等。标识符的初始信任基础只是签名的初始声明。初始声明结构如下所示:
可转让性
密钥轮转有效地将标识符的控制权转移到不同的密钥对。可以使用签名过的转让声明对标识符进行转让,然而,对于自认证标识符,在传输之后,新的控制密钥对不再唯一地绑定到该标识符。尽管如此,它的新绑定仍然是加密可验证的,只要有一个传输语句的副本,而传输语句的日志是可验证的。因此,用于维护传输语句日志的基础设施只是对标识符建立控制的次要信任根。每个标识符都有自己的事件日志链。
有两种标识符类型:可转让的和不可转让的。当不可转让标识符的私钥暴露于潜在危害时,控制器必须放弃该标识符,因为它不再安全。然而,当可转移标识符的私钥暴露于潜在危害时,则可以将对标识符的控制转让到新的密钥对以保持安全。
许多自我认证标识符的应用只需要临时使用,之后标识符被放弃(短暂标识符)。由于不可转移(短暂)标识符在发生泄露时不可恢复,唯一的办法是用另一个标识符替换该标识符。在某些应用中,考虑到维护密钥状态的相当简单性,不可转移标识符可能是首选。但在其他应用程序中,标识符需要随时间而保持。在这种情况下,需要一个可转让的自我认证标识符。KERI的主要创新在于它提供了一种通用的去中心化机制,既支持不可转让的标识符,也支持可转让的自我认证标识符。
自我认证标识符的类型
基本类型、自我寻址(Self-Addressing)、多签名自寻址(Multi-Sig Self-Addressing)、委托自寻址(Delegated Self-Addressing)、自签名(Self-Signing)
加密信任基础
信任根
自认证标识符的主要信任根是加密。因为派生过程在开始时,在一个或多个签名密钥对和标识符前缀之间进行唯一绑定。这个唯一的绑定是用一个或多个单向函数建立的。绑定是加密可验证的,不依赖于初始建立的任何操作基础设施。
真实来源。
创建自我认证标识符的过程意味着只有控制器可以对标识符做出可验证的权威控制声明,控制器由此被绑定到标识符。这使得控制器成为唯一的真实来源。在一开始,自我认证标识符有一个单一的信任根(密钥和标识符的绑定)和一个以密码方式绑定在一起的真实来源(控制器和标识符的绑定)。
Loci-of-Control(控制点)
控制语句可以控制标识符。这些控制语句的组成的概念图如下:
0x02 自主标识符(Autonomic identifier:AID)
SSI(自我主权身份)已被公认为一种重要的身份识别新方法,为了更好地定义一个能代表自我主权身份的模型,我们使用术语自主身份系统(Autonomic Identity System:AIS)和自主标识符(Autonomic Identifier:AID)来命名这个模型。
自主命名空间(Autonomic Namespace:AN)
我们将自主命名空间(AN)定义为具有自证明前缀的命名空间。自证明前缀提供对其命名空间的根控制权限的加密验证。自主命名空间是自我认证的,因此也是自我管理的。
自主身份系统(AIS)的主要目的是使任何实体能够以独立、可互操作和可移植的方式建立对标识符命名空间的控制。
AID部分提供安全基础设施,而PID部分提供特定于应用程序的人类意义。合法化的人类有意义识别符(Legitimized Human Meaningful Identifiers:LID)与AID的关系图(AID信任域内的多个LID):
AID:LID的主要标识符是AID,并对加密信任根进行自我认证。次要标识符是LID,不是自我认证的,但在相关主要标识符的信任域的保护下是安全的。
0x03 分布式账本(Distributed Ledgers)
去中心化密钥管理基础设施的自主命名空间标识符的主要替代方案是注册在基于分布式共识算法的账本上的标识符。然而,分布式共识账本可能需要大量的基础设施,这些基础设施必须进行设置、操作和维护。通常,依赖分布式共识账本的基础设施必须在成本、吞吐量和延迟之间进行权衡。因此,基础设施的可扩展性和性能可能不如完全不依赖分布式共识账本的方案。这种身份系统使用账本上的加密交易来注册控制器、标识符和一个或多个密钥对之间的绑定。
一般来说,注册过程如下:为了在分类账上输入交易,每个参与用户首先创建一个(公钥、私钥)密钥对。公钥用于创建一个特殊的案例标识符(比特币地址),用户可以通过该标识符在分类账上输入交易。此时,公钥为账本访问标识符(ledger access identifier)(此标识符的目的是使用户能够与分类账交互)。然后用户现在具有访问权限,那么现在可以在分布式账本上注册标识符,注册标识符可以不同于账本访问标识符。下图说明了此过程:
这种方法有两个信任源:(1)账本。(2)用户的账本访问标识符,它是用户选择的公钥/私钥对的公钥。注册标识符一般是不可移植的,因为他被绑定在了访问标识符的交易里。
0x04 信任扩展层(Trust Spaning Layer)
略,大体看了看。
0x05 密钥管理
最小充分原则(Minimally Sufficient Means)
干一件事用最简单的办法,就是最小充分原则。基础设施不需要分布式共识账本,但可以将其作为第2个真相来源。它利用了这样一个事实,即只有私钥的持有者可以创建对密钥执行可验证操作的事件。KERI的主要目标是为可转移自认证标识符提供一种标准机制,该机制是关键事件收据的见证(签名)日志,以实现当前控制权限对标识符的最终可验证性。
密钥管理任务是密钥复制、密钥恢复和密钥轮换(3个R)。
密钥复制(Reproduction)
密钥可以由不同的人从根密钥与确定性密钥导出路径重新导出,从而得到密钥的副本。
密钥恢复(Recovery)
密钥恢复以便在持有私钥的设备丢失或损坏的情况下可以恢复私钥。(感觉和Reproduction差不多呢)
密钥轮转(Rotation)
密钥轮转有效地将对标识符的权威控制(根权限)从一组密钥对转移到另一组密钥。密钥轮转涉及安全地撤销密钥对并用新密钥对替换密钥对的方法。只需旋转到null即可实现标识符的撤销。
对于可转移的自证明标识符(即标识符所有者变更),从公钥派生的自认证标识符不会更改,而仅更改了私钥。因此,为了验证属于可转移自证明标识符的声明,验证者必须知道该标识符的密钥轮换历史。每个轮换操作都会创建一个新的(公钥、私钥)密钥对。第一次轮换操作必须使用原始私钥签名,密钥轮转不会更改标识符,然而,在轮转之后,要用新的私钥签名,并用新的公钥验证。原始私钥已被吊销,并替换为轮换操作中指定的新私钥,新的公钥包含在标识符的密钥轮换历史中。语句的验证首先需要查找和验证密钥轮换历史记录,最后一个记录条目提供用于签名和验证语句的当前密钥对。
难以解决的问题是在已经发生特定漏洞攻击后(妥协后)进行轮换,即攻击者获得了私钥,此时攻击者可以创建有效的有密钥轮换操作。这种攻击可以使用预轮转方案来解决。
0x06 术语与组件
标识符前缀结构如下:
前缀中的派生元素(Derivation)指定密码套件,例如用于DID文档的认证部分中的W3C DID(分散式标识符)类型字段的规范格式。密钥对的控制机构可以在接收到初始声明时被验证。该初始声明包括标识符的派生过程规范、权威的公钥配置信息,它是由权威私钥签名的。初始声明结构如下:
在下面的说明中,身份与公钥相绑定,比如用户A
拥有公私钥对(A,a)
。C
代表控制器,C_X
表示控制器在交互事件中使用的密钥对,C_R
表示在密钥轮换事件中使用的密钥对。上标指示事件索引,而下标指示来自不同的控制器,例如,{C_0}^1
和{C_1}^1
。
上图表示,有序列化数据<t,A,C>
,且用A^0
与B^0
对应的私钥进行签名,并将结果连接起来,可以简化为:
密钥事件是与以唯一顺序出现的与标识符相关联的特殊类型的事件,其结构如下:
密钥事件序列结构如下(后一个密钥事件的digest是前一个密钥事件的摘要):
\epsilon
用于表示密钥事件。可以用与\epsilon_k
中的序列号相同的k
作为标签的下标,以表示其在事件序列中的位置。{\epsilon_k}^A
表示标识符A
的第k
个事件。标识符A
的签名消息可以表示如下:
\eta
可以表示为消息的摘要,由于事件消息中的摘要部分是上一条消息的摘要,因此有:
建立事件(Establishment Event)是为标识符建立当前权威密钥对的密钥事件,包括初始事件与轮换事件两种类型。建立事件结构如下图所示:
初始事件(Inception Event)表示标识符的创建操作。轮换事件表示对将控制权从当前控制密钥集合转移到新集合的标识符上的轮换操作的建立密钥事件。
非建立事件(Non-Establishment Event)是与来自建立事件子序列(历史)的事件交织到密钥事件历史中的一种密钥事件(没看懂),可以对当前控制机构(根授权密钥对)进行密码验证,就是可用于为其他目的作出可核实的权威性声明(密钥的正常使用),这些可能包括对加密密钥、通信路由或服务端点等的授权。。在建立事件(密钥轮换)之间可能发生许多非建立事件。seal是密码摘要或散列树根(Merkle根)形式的密码承诺,其将任意数据锚定到密钥事件序列中的特定事件,非建立事件中有seal,其中非建立事件的结构如下:
互动事件是(Interaction Event)一种非建立事件,下面给出事件序列的示意图:
合作委派(Cooperative Delegation)。标识符委派操作由一对事件组成,分别为delegating event与delegated event。delegating event中的seal与delegated event的seal是交叉引用的。委派操作直接生成建立事件,不是初始事件就是轮换事件,因此,委派操作可以分别创建和轮换用于委托的自我证明标识符前缀的权威密钥。
合作委派的一个常见用例是将签名授权委派给新的标识符前缀。合作委派的另一个主要好处是,任何只损害代理的权威密钥的攻击者不会因此获取该代理的控制权限,成功的攻击者还必须破解委托者的权威密钥。委托者可以收回对代理的任何利用。相反,仅泄露委托者的签名密钥也不会在不危及代理密钥的情况下实现委派轮换(为啥?)。两组密钥必须同时被破解。下图显示了C
通过为D
创建委托建立事件对的委托交互事件进行的委托操作序列:
委派轮转事件(Delegating Rotation Event),就是在密钥轮换事件中加入seal,委派轮转事件的序列如下(红框是与上图不同的部分,与上图相比,安全性会增强、但是便利性会降低,为啥,还有一个不懂的点是为什么是A Interaction
?):
见证人(witness)是由标识符的控制者指定(信任)的实体或组件。见证人的主要角色是验证、签名和保持与标识符相关的事件。见证人指定包括在建立事件中。因此,可以使用标识符的轮换历史来验证证人的角色。当被指定时,见证人成为支持基础设施的一部分,建立并维护对标识符的控制权限。因此,标识符见证是其信任基础的一部分,可以由其控制者控制(但不一定如此)。证人池的目的是保护控制者不受外部利用其标识符。见证人总是优先考虑它接收到的事件的第一个版本(第一次看到)。见证人不会在事件序列中签署同一事件的任何其他冲突版本。
收据(receipt)是由消息传递的一种特殊类型的事件,该消息包括其他事件消息上的一个或多个签名,每个签名都可以由见证人创建。见证人的主要目的是接收的事件的第一个验证版本生成、存储和传播事件收据。下图显示了带有附加见证前缀和签名的接收消息示意图:
对于一个见证者标识符C
,其前缀为{W^C}_0
,那么密钥收据信息为:
其中\epslion^C_k
是相关密钥事件序列的第k
条,{W_0}^k
是见证者标识符的前缀,\sigma^C_{W^C_0}
是见证者针对密钥事件的签名。如果有多个签名,那么可以这样表示:
需要注意的是,为了避免递归验证,见证人只能使用不可转让(不可旋转)的标识符密钥,他们必须在受到攻击时创建新的标识符。
密钥事件日志(KEL:key event log)是由标识符的控制器创建的密钥事件消息的有序链式记录,这是一个仅附加的日志。KEL可以是标识符的信任基础的一部分,并且可以充当信任的次要根。而密钥事件收据日志(KERL:Key Event Receipt Log)是一个KEL,见证人为他们创建收据的每个标识符保存一个单独的KERL。重复事件日志(DEL:Duplicitous Event Log)由一组关于KERL的两个或多个可证明相互不一致的事件消息表示。
解析器(Resolver)是提供标识符发现的实体或组件。解析器主要将标识符映射到标识符的信任基础组件的URL或IP地址。给定组件的URL或IP地址,用户可以从中获得或被引导到相关联的事件历史(KEL、KERL和DEL),以便用户可以建立标识符的当前(根)控制权限。
实时攻击(live attack)与dead攻击(dead attack),破坏事件的一致性。直接攻击与间接攻击。缓解措施:重复性检测(duplicity detection)。
实时攻击涉及对当前或最近事件的攻击。防止实时攻击对于维护当前的操作安全至关重要。防止实时利用的重点是提供足够的当前事件可用性,并确保其一致性(非双重性)。相比之下,dead攻击涉及对过去事件的攻击。防止dead攻击的保护主要由双工检测(一致性)提供。KEL的一个可验证副本(KERL)足以检测任何其他可验证但不一致的副本中的重复性。通过归档冗余副本,可以相对轻松地减轻对过去事件可用性的攻击。必须减少对受损签名密钥的恶意利用,因为随着计算和加密技术的发展,数字签名可能会变得不那么安全。
0x07 预轮转
密钥轮转的主要目的是防止攻击者从成功泄露的一个或多个私钥中获得对标识符的控制。给定潜在被泄露的私钥,必须使用不同的私钥来授权安全轮换操作,否则攻击者可以使用被泄露的密钥来轮换到其控制下的密钥对,从而有效地允许其捕获对标识符的控制。一种常见的缓解措施是指定一个特殊的密钥对,仅用于轮换操作,但随着时间的推移,轮换密钥对最终也可能会暴露出来。该协议通常假设私钥至少在第一次暴露之前保持私有。如前所述,本方法缓解的主要风险是在通过使用私钥签署声明而发布之后,标识符的控制权被窃取的问题。预轮转能够通过一组未暴露的轮转密钥从泄露的暴露签名密钥中恢复,该组未暴露轮转密钥先前在加密承诺(即预轮转)中指定。轮转前的承诺也为轮转前提供了一定程度的后量子安全(后量子安全是??)。
后量子安全
量子计算机无法解决安全单向函数的问题。这直接适用于预轮转中声明的公钥,它对公钥的摘要进行预承诺,而不是对公钥进行预承诺。
基本预轮转
Time:2023-03-11
每个初始事件都包含两组密钥,分别是初始密钥与下一密钥的摘要,如下图所示:
验证者要验证:(1)私钥的控制器授权了初始事件;(2)验证当前事件的签名(这是当前密钥签的名),以证明对标识符前缀的控制;(3)验证下一个密钥确实是这个密钥,这样一个承诺。密钥轮转示意图(密钥事件序列)如下:
问题:预旋转密钥什么时候有效?这是预旋转密钥本身可以控制的吗?
答案:不是,是当前密钥控制的,因为需要当前密钥的签名。我理解的是,当前密钥不想用了,到了生命末尾了,所以才做这样的轮转操作。但是,这样想好像是错误的,这样的话,如果敌手拿到当前密钥,那么他就可以控制后面的所有密钥轮转,因此,预旋转的控制权似乎在自己身上。
在普通的管理身份系统中,密钥、控制器和标识符之间的绑定可以通过管理法令(administrative fiat)来建立。因此,可以使用管理法令(administrative fiat)来进行受损管理密钥的恢复。但是在该方案中,密钥、控制器和标识符之间的绑定是纯加密的(去中心化的)时,一旦根控制权限的密钥被完全捕获,就没有恢复机制。因此,这些密钥的安全性更为关键。因此,在该协议中,管理密钥(建立事件,包括初始事件与轮转事件)是一次且首次(one-time first-time)用作管理密钥。
根据定义,dead攻击发生在给定轮转事件的创建和传播之后的某个时间。成功的dead攻击必须首先破坏过去某个轮转事件的当前签名密钥集,然后创建该过去轮换事件的备用可验证版本,然后在原始事件传播到该验证器之前,将该备用事件传播到给定的验证器。但是,由于这组密钥是一次且首次(one-time first-time)的,因此攻破此密钥十分困难。
假设攻击者攻破了密钥,创建了一个备用但可验证的事件,那么只要事件的原始版本(正常事件)有时间传播到验证器或验证器可以访问的其他组件(如证人、观察者、陪审员、法官),验证器或其他组件仍然可以受到保护,这样就将安全性交付给了检测双工性的法官。因此,攻击者必须抢先传播过去轮转事件,但是不太可能(攻击者攻破需要时间),于是攻击者必须阻止验证器访问密钥事件历史记录的任何原始副本,这也非常难。
总之,恶意的轮换事件与存储在原始密钥事件历史记录(KEL/KERL)的任何副本中的事件的原始版本不一致。
为了保护初始事件中的初始密钥对免受dead攻击,控制器可以同时创建初始事件和旋转事件,然后将它们作为一个整体一起发布。这样可以最小化这些初始密钥对的暴露。下面是dead攻击的示意图:
实时攻击被定义为在最近的旋转事件传播之前,以某种方式破坏该事件中未暴露的下一组(预旋转的)密钥,这意味着必须在首次使用密钥对事件本身进行签名之前就攻击成功,这就能攻破预轮转机制,但是这种攻击极其困难。下面是实时攻击的示意图:
预轮转不需要任何特殊的轮换密钥基础设施。通常情况下,密钥轮转管理的常见方法是有专用管理密钥对,其功能是授权对签名密钥对的轮转操作。但在多次轮转之后,管理轮转密钥可能会暴露。但是在我们的方案中,没有这些问题。
下图是密钥轮转事件与交互事件的关系图:
扩展轮转事件就是向轮转事件中加入payload,以传递一些信息。
委托模式
合作委托可以应用到基础设施是由多个设备组成的系统中。控制器(被委托者:delegate)从另一个控制器(委托者:delegator)接收其对其标识符的控制权限。委托的前缀是自寻址、自证明的,这会将被委托者的前缀绑定到委托者的前缀(不懂)。当体系结构是二价的时,delegating密钥事件驻留在专用的安全计算基础设施(如TPM)中,而则delegated密钥事件在普通设备上,delegating密钥一直进行委派交互,delegated密钥一直进行其他交互。相当于TPM是一个delegated密钥产生器。delegated密钥自身不能进行轮转,这种权力在TPM中。
被委托操作(delegated operations)就是被委托标识符(delegated identifier)的建立操作(初始事件和轮换事件)。被委托标识符的非建立操作仅出现在被委托事件序列(delegated stream)中。在委托事件序列(delegating stream)中,每个委托事件(delegating event)都包括对被委托事件(delegated event)的承诺,称为委托印章(delegation seal)。委托印章包括被委托标识符的前缀和被委托事件的摘要。委托印章为验证器在其事件序列中验证被委托事件提供了所需的信息,如下所示(被委托印章、委托轮转事件、委托印章、被委托建立事件)。(这段叙述的有点混乱,反正delegating与delegated相互保存对方的seal)
委托者同时控制多个被委托者:
0x08 协议操作模式
描述了控制器与验证器之间的协议。验证器如何查找某标识符密钥事件序列呢?有两种模式:直接、间接。
- 直接模式指:为了让验证器访问标识符的密钥事件序列,该验证器必须直接从该标识符的控制器接收那些事件。如下所示:
- 间接模式指:控制器未连接到网络时,必须信任其他组件来传播密钥事件,以将密钥事件传给验证器。如下所示:
如果再加入区块链(分布式账本)的话,结构图如下所示:
控制器的公布服务由一组N名指定证人提供。尽管证人是由控制器明确指定的,但他们可能在控制器的控制下,也可能不在控制之下。证人集的目的是更好地保护服务免受包括拜占庭故障在内的故障的影响。因此,该服务采用了一种拜占庭容错(BFT)算法。我们称之为KERI协议算法(KA2CE)。KA2CE算法的主要目的是保护控制器在受到外部攻击的情况下发布其密钥事件序列的权威副本的能力。这包括保持足够的可用性,以便任何验证器都可以根据需要获得权威副本。
由于控制器是创建任何和所有密钥事件的唯一真相来源,因此仅控制器就足以对其自己的密钥事件进行排序。
完整的验证结构图如下:
0x09 KERI的共识控制建立协议算法(KA^2_CE)
由标识符的控制器与控制器指定的一组N个见证人协同运行,通过KERL(密钥事件接收日志)提供该标识符的密钥事件历史的服务。
控制器的证人指定(Witness Designation)
控制器在初始事件配置中指定证人计数编号(tally)和证人的初始集合。计数编号(tally)的目的是为确认事件的证人数量提供一个责任阈值。
见证策略(Witnessing Policy)
见证策略是验证者第一个看到的事件版本总是获胜,后面的其他事件版本都被丢弃。
证人收到来自其他证人的收据时,如果收据与自己的一致(一致性收据),那么就将收据中其他证人签名添加到日志(KERL)中,不一致的收据将被丢弃,或放到DEL中。可选的,控制者可以选择让陪审员(与证人一起)保存证人维护的双重事件日志(DEL)。
事件托管(Event Escrow)
事件托管是控制器和证人之间可选的功能。KERI中,控制器选择向其证人发送事件的传输协议可能不同。在其中一些协议中,如果证人是托管的,性能会更高。
协商一致进程(Consensus Process)
在算法中使用N个指定证人的目的是确保在出现错误证人的情况下保证服务的可用性和安全性。KA^2_CE中协商一致进程目的是为控制器的每个事件生成一份可验证的协议,其中包括事件和足够数量的证人以安全、高度可用的方式签名(收据)。
F被定义为恶意节点的最大数量,那么F+1个节点的任何一致性协议都是可以相信的。假设N=2F+1,其中N是节点的总数。F+1个节点的一致保证了正确性,因为N个节点中至少F+1个是诚实的,他们所占的比重也超过一半,因此不可能有其他一致性。因此,该协议被称为安全协议。但是,不能保证:一致的节点在下一轮中也一致。因为在给定的一轮中,多达F个一致的节点可能随后在下一回合中变得没有响应。在多阶段或多轮算法中,尽管协议是安全的,但协议不是有效的,因为协议正确性可能不会传播到下一轮。相反,假设N=3F+1,且超过2F+1个节点一致代表协议有效,尽管这些2F+1个网络节点中的一些F变得没有响应,但剩余的F+1个诚实且响应的节点将能够将该正确的安全协议传播到下一轮。因此N=3F+1,法定人数为2F+1,可保证在多轮比赛中达成正确、安全和实时的协议。(不太懂)
当控制器收到证人发来的收据时,会组成这样一个Agreement,如下所示:
见证旋转(Witness Rotation)
轮转事件可能会改变证人集的计数、大小和组成,且每个证人都需要见证:从见证集中删除某证人,这样一个事件。
恢复(Recovery)
下面是一个攻击示意图,攻击者攻击了4暴露出来的当前密钥,并非法产生了7、8、9事件。可以看出,相同的序列号,交互事件与轮转事件相比,轮转事件的优先级更高。该规则,允许将可问责但有争议的事件接受为有效事件,以防止不诚实但未被利用的控制器稍后对其先前创建的事件进行恶意争议。因此,控制器可以恢复对受损密钥的控制,但不可否认已经负责的交互事件。
当委托事件是交互事件时,攻击者必须破坏被委托人(delegate)的预旋转签名密钥和委托人(delegator)的当前签名密钥。
0x10 事件语义和语法(event semantics and syntax)
控制器具有标记为C的标识符前缀,该标识符前缀绑定到从(C^0,c^0)
开始的密钥对序列的多个密钥对,这取决于前缀派生。
初始事件结构示意图如下:
\epsilon_0^C
是标识符前缀C的事件流中的第0个事件,ν_0^C
是协议版本,C是限定的标识符前缀,t_0^C=0
是该事件的唯一单调递增序列号,icp
是表示初始事件的事件ilk,K_0^C
是签名阈值,签名者为L_0^C
,这些签名者是从公钥集合中选择的,公钥集合如下:
η_0^C(K_1^C,C_1^C)
是下一组权威密钥的串行化数据(K_1^C,C_1^C)
的摘要,其中k_1^c
是L_1^C
个签名者中所需的下一个阈值。M_0^C
是事件的证人收据数量的可问责的阈值,而\hat{W}_0^C
是N_0^C
个指定证人总数的标识前缀列表,\hat{\sigma}_0^C
是签名的集合。
轮转事件示意图:
其中大部分与初始事件一样,不同的是:\hat{X}_l^C
是要删除的证人列表,\hat{Y}_l^C
是要加入的证人列表。
交互事件示意图:
ixn是表示交互事件的事件ilk。
KERI-PPT补充
用以密码学为信任根取代传统的以人为信任根。使用者可能不信任信息的内容,但一定可以谁发了这条信息。
开源代码:apache2(keripy)
Keri的优势:
1 | 1. 可扩展性:专为性能、异步、裸机TCP、UDP、非加密而设计。 |
传统的IP数据包加密如下。其安全性取决于Identifier的secret key确实是用来生成signature的secret key。
Keri的自绑定如下:
Basic SCID(Secure Channel ID,即安全信道标识符)的生成&初始事件生成:(下面的did:..
是资源标识符)
Self-Addressing SCID(自寻址SCID生成):
问题:为什么叫自寻址?与basic相比,有什么好处?可以看到,其实在Inception Statement上与Basic没有什么不同,就是在Prefix(自认证标识符的前缀)上有所不同,猜测是方便密钥轮转。
多重签名自寻址SCID:
委托自寻址SCID:
既是自寻址、又是自签名SCID:(Inception Signature 通常为Inception Digest的两倍)
Inconsistency and Duplicity(不一致性与重复性)
内部不一致:一个节点的KERL已经保存了两个不同的事件,且事件序号相同。外部不一致:节点收到两个不同的事件,且事件序号相同。如果节点收到的两个事件不一致,但是都可以验证,那么就叫做重复(Duplicity)。重复(Duplicity)通过重复性检测(Duplicity detection)来避免。
上图画红框的部分,就是保存了Cate日志的副本,来检测Cate是否发布了不一样的事件。有好多Doug,Doug可以用区块链来做,但是也可以用其他方式来做,用Keri来做的话,Doug叫做KERL,任何人都可以验证,不需要相信其他的东西(End Verifiable)(零信任)。
KERI=self-cert root of trust + certificate transparency(证书透明度)+ KA^2CE + recoverable + post-quantum
KEL:Key Event Log(事件日志)
KERL:Key Event Receipt Log(收据日志)
留言
- 文章链接: https://wd-2711.tech/
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明出处!