了解公证服务架构

预计阅读时间:15分钟

在此页面上,您获得了Notary服务体系结构的概述。

TUF键和角色的简要概述

本文档假定您熟悉 The Update Framework,但是这里是TUF角色和相应的密钥层次结构的简要概述:

TUF密钥层次结构

  • 根密钥是所有信任的根。它签署了 根元数据文件,该文件列出了根,目标,快照和时间戳公共密钥的ID。客户端使用这些公共密钥来验证存储库中所有元数据文件上的签名。该密钥由馆藏所有者持有,并且应保持离线状态和安全性,比其他任何密钥都重要。

  • 快照密钥对快照元数据文件进行签名,该 文件枚举集合的根,目标和委托元数据文件的文件名,大小和哈希。该文件用于验证其他元数据文件的完整性。快照密钥由集合所有者/管理员持有,或者由公证服务持有,以促进 多个协作者通过委派角色进行签名

  • 时间戳记密钥对时间戳记元数据文件进行签名,该 时间戳记元数据文件具有任何特定元数据的最短到期时间,并通过指定该集合的最新快照的文件名,大小和哈希来为集合提供新鲜度保证。它用于验证快照文件的完整性。时间戳记密钥由Notary服务持有,因此可以在从服务器请求时间戳记时自动重新生成时间戳记,而不是要求集合所有者在每个时间戳记到期之前都联机。

  • target键对目标元数据文件进行签名,该 文件列出了集合中的文件名及其大小和相应的 哈希值。该文件用于验证存储库中某些或所有实际内容的完整性。它还 通过委托角色将信任委托给其他协作者。target键由集合所有者或管理员持有。

  • 委托密钥对委托元数据文件进行签名 ,该文件列出了集合中的文件名,文件大小和各自的 哈希值。这些文件用于验证存储库中某些或所有实际内容的完整性。它们还用于通过较低级别的委托角色将信任委托给其他协作者。委托密钥由集合所有者或管理员到集合协作者的任何人持有。

架构和组件

公证客户从一个或多个(远程)公证服务中提取元数据。一些公证人客户端将元数据推送到一个或多个公证服务。

公证服务由公证服务器 和公证签署人组成,公证服务器存储和更新关联数据库中多个受信任集合的已签名 TUF元数据文件,公证签署人存储公证服务器的私钥并对公证服务器的元数据进行签名。下图说明了此体系结构:

公证服务架构图

根,目标和(有时)快照元数据由客户端生成并签名,客户端将元数据上载到公证服务器。该服务器负责:

  • 确保任何上传的元数据有效,签名且自洽
  • 生成时间戳(有时是快照)元数据
  • 为任何受信任的集合存储并向客户提供最新的有效元数据

公证人签名人负责:

客户端-服务器-签名者交互示例

下图说明了公证客户端,服务器和签名者之间的交互:

公证服务顺序图

  1. 公证服务器可以选择支持使用JWT令牌从客户端进行身份验证 。这需要管理访问控制的授权服务器,以及来自该授权服务器的证书捆绑包,其中包含用于签名令牌的公共密钥。

    如果在公证服务器上启用了令牌认证,那么任何没有令牌的连接客户端都将被重定向到授权服务器。

    有关 更多信息,请参阅Docker Registry v2身份验证文档 。

  2. 客户端通过HTTPS上的基本身份验证登录到授权服务器,获取承载令牌,然后在将来的请求中将该令牌提供给公证服务器。

  3. 客户端上载新的元数据文件时,公证服务器会对照任何先前版本检查它们是否存在冲突,并验证上载的元数据的签名,校验和和有效性。

  4. 一旦所有上传的元数据都经过验证,公证服务器将生成时间戳(可能还包括快照)元数据。它将生成的元数据发送到公证人签名者进行签名。

  5. 公证签名人从其数据库中检索必要的加密私钥(如果有),解密密钥,然后使用它们对元数据进行签名。如果成功,它将签名发送回公证服务器。

  6. 公证服务器是可信数据收集状态的真实来源,它在TUF数据库中存储了客户端上传的元数据和服务器生成的元数据。生成的时间戳和快照元数据证明客户端上载的元数据文件是该可信集合的最新文件。

    最后,公证服务器通知客户端其上传成功。

  7. 客户端现在可以使用仍然有效的承载令牌进行连接,立即从服务器下载最新的元数据。公证服务器只需要从数据库中获取元数据,因为任何元数据都没有过期。

    在时间戳过期的情况下,公证服务器将遍历整个序列,在该序列中它将生成新的时间戳,请求公证签名人进行签名,并将新签名的时间戳存储在数据库中。然后,它将这个新的时间戳以及其余的存储的元数据发送到发出请求的客户端。

威胁模型

服务器和签名者都是对公证服务所有用户的潜在攻击媒介。客户端密钥也是潜在的攻击媒介,但不一定一次攻击所有集合。本节讨论如何设计我们的体系结构以应对折衷。

公证服务器妥协

如果公证服务器遭到破坏,攻击者将可以直接访问存储在数据库中的元数据以及用于与公证签名人进行通信的凭据的访问,因此,可以使用签名人持有的任何密钥来访问任意签名操作。

  • 拒绝服务-攻击者可能拒绝客户端请求,并从数据库中破坏或删除元数据,从而使客户端无法下载或上传元数据。

  • 恶意内容-攻击者可以为一个或多个可信集合创建,存储和提供任意元数据内容。但是,攻击者无法访问任何客户端密钥,例如根,目标以及现有受信任集合的快照密钥。

    如果客户端从未见过受信任的集合并且没有任何形式的固定信任,则只能诱使客户端下载和信任这些受信任的集合的恶意内容。

    如果客户端先前已与任何受信任的集合进行交互或将其信任固定到该集合的特定证书,则该客户端会立即检测到该内容是恶意的,并且不信任这些内容的任何根,目标或(也许)快照元数据集合。

  • 回滚,冻结,混合和匹配-攻击者可以要求公证人签署人签署他们想要的任何任意时间戳(可能还包括快照)元数据。攻击者可以发起冻结攻击,并且根据快照密钥是否可用,进行混合匹配攻击,直到目标文件到期为止。

    只要攻击者确保其恶意元数据的版本号高于任何客户端可能拥有的最新良好元数据的版本号,具有固定信任和不具有固定信任的客户端都将容易受到这些攻击。

注意:不能在仅用于服务器的安全措施中损害时间戳记和快照密钥,因此不需要旋转密钥。一旦缓解了服务器的危害,攻击者就无法生成有效的时间戳或快照元数据,并将其提供给恶意镜像。

公证签名人的妥协

万一公证签名人遭到破坏,攻击者将有权访问数据库中存储的所有(时间戳和快照)私钥。如果密钥存储在HSM中,则它们将具有使用HSM中的密钥对任意内容进行签名和删除的能力,但不能泄露私有资料。

  • 拒绝服务-攻击者可以拒绝所有公证服务器的请求,并从数据库中破坏或删除密钥(甚至从HSM中删除密钥),从而阻止公证服务器对生成的时间戳或快照进行签名。

  • 关键妥协-如果公证签名人使用数据库作为其后端,则攻击者可以窃取所有(时间戳和快照)私有资料。在签名任意元数据方面,攻击者的能力与公证服务器的损害相同,但重要的细节是,在这种特殊情况下,必须进行密钥轮换才能从攻击中恢复。

公证人客户端密钥和凭据受损

用户持有和管理的密钥的安全性取决于用户采取的措施。如果使用Notary Client CLI创建它们,则它们受密码保护,并且Notary CLI不提供以纯文本格式导出它们的选项。

用户可以选择合适的密码,并保护其密钥免受离线暴力攻击。

信任集合所有者/管理员的解密密钥受到破坏的严重性取决于受到破坏的密钥的类型和组合。例如,快照和目标密钥是否都受到威胁,或者仅仅是目标密钥?

考虑到凭据受损,可能的攻击:

仅解密的委托密钥
密钥已泄露 恶意内容 回滚,冻结,混合和匹配 拒绝服务
委托密钥
解密的委派密钥+公证服务可写凭据
密钥已泄露 恶意内容 回滚,冻结,混合和匹配 拒绝服务
委托密钥 有限,也许* 有限,也许* 有限,也许*

如果公证服务拥有快照密钥,并且攻击者具有公证服务写入凭据,则它们可以有效访问快照密钥和时间戳密钥,因为服务器会为其生成快照并为其签名并签名。

攻击者可以添加恶意内容,从集合中删除合法内容以及混合集合中的目标,但只能在密钥可以签名的特定委派角色中进行。根据对该角色的限制,可能会限制他们可以修改的内容类型。他们还可以在关键层次添加或删除其下的其他代表团键的功能。例如,如果DelegationKey2在上面的密钥层次遭到损害,受损的关键只能修改的能力DelegationKey4DelegationKey5

仅解密的委派密钥+解密的快照密钥
密钥已泄露 恶意内容 回滚,冻结,混合和匹配 拒绝服务
委托密钥,快照密钥

攻击者无法访问始终由公证服务持有的时间戳密钥,并且无法设置恶意镜像。

解密的委派密钥+解密的快照密钥+公证服务可写凭据
密钥已泄露 恶意内容 回滚,冻结,混合和匹配 拒绝服务
委托密钥,快照密钥 有限的 有限的 有限的

公证服务始终持有时间戳记密钥。如果攻击者具有公证服务写凭据,则他们可以有效访问时间戳密钥,因为服务器会为其生成并签名时间戳。

攻击者可以添加恶意内容,从集合中删除合法内容以及混合集合中的目标,但只能在密钥可以签名的特定委派角色中进行。根据对该角色的限制,可能会限制他们可以修改的内容类型。一个关键还可以添加或删除它下面的其他代表键的功能上的关键层次。例如,如果DelegationKey2在上述的密钥等级被破坏,它只能修改的能力DelegationKey4DelegationKey5

仅解密目标密钥
密钥已泄露 恶意内容 回滚,冻结,混合和匹配 拒绝服务
目标键
解密目标密钥+公证服务可写凭据
密钥已泄露 恶意内容 回滚,冻结,混合和匹配 拒绝服务
目标键 也许* 也许* 有限,也许*

如果公证服务拥有快照密钥,并且攻击者具有公证服务写入凭据,则它们可以有效访问快照密钥和时间戳密钥,因为服务器会为其生成快照并为其签名并签名。

攻击者可以添加任何恶意内容,从集合中删除任何合法内容,并混淆集合中的目标。他们还可以添加或删除任何顶级代表团键或角色的功能,比如Delegation1Delegation2Delegation3在密钥层次结构图。如果他们完全删除角色,则会将信任链中断到较低的委派角色,例如Delegation4Delegation5

仅解密目标密钥+解密快照密钥
密钥已泄露 恶意内容 回滚,冻结,混合和匹配 拒绝服务
目标键,快照键

攻击者无法访问始终由公证服务持有的时间戳密钥,并且无法设置恶意镜像。

解密目标密钥+解密快照密钥+公证服务可写凭据
密钥已泄露 恶意内容 回滚,冻结,混合和匹配 拒绝服务
目标键,快照键 是的 是的 有限的

公证服务始终持有时间戳记密钥。如果攻击者具有公证服务写凭据,则他们可以有效访问时间戳密钥,因为服务器会为其生成并签名时间戳。

攻击者可以添加任何恶意内容,从集合中删除任何合法内容,并混淆集合中的目标。他们还可以添加或删除任何顶级代表团键或角色的功能,例如Delegation1Delegation2Delegation3在密钥层次结构图。如果他们完全删除角色,则会将信任链中断到较低的委派角色,例如Delegation4Delegation5

解密的根密钥+无或仅解密密钥的任何组合
密钥已泄露 恶意内容 回滚,冻结,混合和匹配 拒绝服务
所有按键 是的 是的 是的

不需要其他密钥,因为攻击者可以任意旋转或将所有密钥转换为它们生成的密钥。有了这些密钥,他们可以访问所有密钥,从而可以设置一个镜像来处理恶意数据-完全是任何恶意数据。

解密的根密钥+无密钥或解密密钥的任何组合+具有公证服务写功能的凭证
密钥已泄露 恶意内容 回滚,冻结,混合和匹配 拒绝服务
所有按键 是的 是的 是的

如果公证服务拥有快照密钥,并且攻击者具有公证服务写入凭据,则它们甚至不需要旋转快照和时间戳密钥,因为服务器会为其生成并签名快照和时间戳。

缓解措施

如果检测到根密钥泄露,则根密钥持有者应联系运行公证服务的任何人,以手动撤消对存储库的任何恶意更改,并立即旋转根密钥。这将创建存储库历史记录的分支,从而破坏下载了任何恶意更改的现有客户端。

如果检测到目标密钥泄露,则根密钥持有者必须旋转受到破坏的密钥,并使用新密钥推送一组干净的目标。

如果检测到委派密钥泄露,则更高级别的密钥持有者必须旋转泄露的密钥,并使用新密钥推送一组干净的目标。

如果检测到公证服务凭据泄露,则应立即更改凭据。

码头工人公证人公证人客户端码头工人内容信任内容信任公证人服务器公证人服务器公证人签名公证人签名公证架构