【译】PGP Web of Trust: Core Concepts Behind Trusted Communication

公钥加密基础设施(PKI)有两个主要实现。 一种是使用证书和证书颁发机构(CA)完成的,并在X.509标准中进行了描述。 它最适合于具有隐含信任权限的结构化组织层次结构,以保证所有已颁发的证书。 这是SSL / TLS和S / MIME邮件加密的标准。

但是,还有另一个广泛使用的PKI标准,其开发的具体目标是不需要集中的认证机构,而是依赖于常规用户之间的信任关系。 它在1991年首次在原始的PGP软件中实现,并从那时起发展成为一个强大的开放标准,称为OpenPGP。

如果你曾经使用过Linux,你很可能没有意识到使用OpenPGP。 OpenPGP的开源实现称为GnuPG(代表“GNU Privacy Guard”),几乎所有的发行版都依赖GnuPG进行包完整性验证。 下一次运行“yum install”或“yum update”时,每个软件包将在其允许安装到您的系统上之前根据其加密签名进行验证。 这确保软件在主服务器上的分发开发人员加密签名的时间和下载到系统的时间之间没有发生变化。

然而,实际上使用GnuPG的人数远远少于原来的设计 - 在不受信任的媒体(如互联网)中安全地交换信息,甚至更少人对信任关系应该如何工作有很好的理解。

在这个迷你系列文章中,我们将看看信任网络是什么以及如何使用它来建立安全可靠的通信。

需要信任

密码通信涉及两个核心方面:

  • 混淆 - 即使他们可以窃听你的所有通信,你的敌人也不能读取你的消息内容
  • 验证 - 您的朋友必须能够验证邮件是否来自您,并且没有任何改动

为了模糊消息,我们加密它。 为了使消息可验证,我们为其添加密码数字签名。 一条既加密又签名的消息满足我们的安全要求。 然而,在你的朋友可以验证你的数字签名之前,他或她必须非常确定用于签名的密钥实际上是你的,而不是只假装成你的敌人。

这种确定性就是我们所说的“信任”。

核心PKI概念

我们只是在同一页面上,让我们回顾一些核心的PKI概念。 PKI依靠一些非常大素数的整齐数学特性来工作。 这篇文章的细节并不重要,所以我们会直接跳到实际的结果。 在PKI中,您有两个密钥 - 一个只有您可以访问(“私钥”),一个您可以随意发给任何想要与您安全通信的人(“公钥”)。

把它想象成一个奇特的锁和两把钥匙 - 公钥只能锁住它,而私钥只能解锁它。 如果有人想给你发一条消息,他们首先用你的公钥加密它。 使用公钥锁定的消息只能使用相应的私钥解锁,因此,当您收到此类消息时,可以确保没有人能够在传输过程中读取其内容。

但是,由于您的公钥可供所有人使用,任何人都可以向您发送加密邮件。 你怎么知道这个消息实际上来自你的朋友爱丽丝而不是你的敌人夏娃,假装是爱丽丝? 这是数字签名进入的地方。在加密消息之前,Alice用她的私钥签名。 当你收到消息并解密它时,你可以通过将签名与你知道属于Alice的公钥进行比较来验证它是否来自Alice。

只要您和爱丽丝都能很好地保护您的私钥,这种通信就可以保证安全和防篡改。

信任的问题

正如我前面所说的,“信任”是我们对Alice拥有的公钥实际上属于Alice的确定性。 如果你和爱丽丝住在同一栋房子或邻居,建立这样的信任很容易 - 你见面喝咖啡,面对面交换你的公钥。

但是如果你需要与Chloe进行安全沟通呢? 她是爱丽丝的好朋友,但她住在另一个海岸,你们两人从未见过面。 或者如果Chloe邀请Dharma和Ezri,他们又邀请Finn和Gabby? 你怎么能相信你从未见过的人的关键?

这就是X.509和OpenPGP在解决这个问题的方法上存在分歧的地方。 X.509建立了一个可信机构体系。 比如说,西海岸的每个人都必须在爱丽丝验证(签署)它的密钥才能被信任,而东海岸的每个人都必须有克洛伊签署的密钥。 Alice和Chloe交叉签名他们自己的密钥,所以你最终得到一个信任等级。 只要你信任爱丽丝,你就可以安全地与其他人沟通。 这很简单直接,但它有一个重要的缺点。 邪恶的夏娃只需要访问克洛伊的私钥就可以渗透你的整个组织。

OpenPGP决定选择一种不同的方法,而不是像Alice和Chloe那样指定信任当局(CA),他们必须信任CA层次结构才能工作,OpenPGP让您,用户,决定您信任的人,以及多少。

由此产生的框架被称为“信任网”。 让我们看看更详细的工作原理。

Alice,Bob和Anne d'Autriche

密码学家通常使用诸如“爱丽丝,鲍勃和夏娃”之类的标记来描述朋友和窃听者之间的关系,这正是我上面所做的。 但是,如果我们要考虑广泛的信任网络,我们很快就会感到困惑。 为了说明一些事情,我要带上大枪,或者大枪,也就是三剑客。 如果你不完全记得整个情节,请不要担心。 随着我们的进展,我会更新你的记忆。

直接的信任关系

一开始,d'Artagnan以一匹黄马抵达巴黎,然后迅速与另外三个人发起战斗:

  • M. de laFère(阿索斯)
  • M. du Vallon(Porthos)
  • M. d'Aramitz(阿拉米斯)

在决斗中,他们遭到试图逮捕他们进行非法决斗的警卫的伏击,所以四人联合起来,共同对抗守卫,成为这个过程中的亲密朋友。

为了密封他们的友谊,他们决定交换他们的公钥。 他们还签署了对方的公钥,作为一种说法,“我,d'Artagnan,通过添加我的签名证明此密钥属于Porthos。”

以下是命令行中的外观:

  dartagnan [〜] $ gpg --edit-key porthos
 pub 2048R / 51CDD613 created:2014-01-23 expires:永远不会用法:SC
                     信任:未知有效期:未知
 [未知](1)。  M. du Vallon(Porthos)
 gpg>标志
 pub 2048R / 51CDD613 created:2014-01-23 expires:永远不会用法:SC
                     信任:未知有效期:未知
  主要指纹:611C 0C6D 9B61 A091 1439 EE83 B9AE 772F 51CD D613
    M. du Vallon(Porthos)
你确定你想和你签署这个密钥吗?
关键“Charles d'Artagnan(d'Artagnan)”(CD3B1D5E)
真的签名?  (y / N)y

了解关键有效性

现在,如果我们看看属于Porthos的钥匙,它会说明以下内容:

  dartagnan [〜] $ gpg --edit-key porthos
 pub 2048R / 51CDD613 created:2014-01-23 expires:永远不会用法:SC
                     信任:未知有效性:完整
 [未知](1)。  M. du Vallon(Porthos)

理解“信任”和“有效性”之间的区别很重要,因为它们是同一枚硬币的两个不同的面。 用GnuPG的说法,“有效性”代表我们确定他们的关键实际上属于 Porthos。 在上述输出中,“有效性:完整”告诉d'Artagnan他可以绝对确定它是Porthos的关键(在这种情况下,因为d'Artagnan自己签了名)。 但“信任:未知”的含义是什么?

在这种情况下,“信任”(也称为“所有者信任”)是d'Artagnan信任Porthos以验证其他人的身份(通过查看护照,要求他们的共同朋友为他们担保等)。 假设D'Artagnan完全信任Porthos在签署密钥之前做好验证人身份的工作。 他编辑Porthos的关键字并将所有者信任设置为“完整”:

  dartagnan [〜] $ gpg --edit-key porthos
 pub 2048R / 51CDD613 created:2014-01-23 expires:永远不会用法:SC
                     信任:未知有效性:完整
 [未知](1)。  M. du Vallon(Porthos)
 gpg>信任
 pub 2048R / 51CDD613 created:2014-01-23 expires:永远不会用法:SC
                     信任:未知有效性:完整
 [完整](1)。  M. du Vallon(Porthos)
请确定您信任此用户的距离,以便正确验证其他用户的密钥
 (通过查看护照,检查来自不同来源的指纹等)
   1 =我不知道或不会说
   2 =我不信任
   3 =我相当信任
   4 =我完全信任
   5 =我最终信任
   m =回到主菜单
你的决定?  4
 pub 2048R / 51CDD613 created:2014-01-23 expires:永远不会用法:SC
                     信任:完整有效性:完整
 [完整](1)。  M. du Vallon(Porthos)
请注意,显示的密钥有效期不一定是正确的
除非你重新启动程序。
 gpg> q

在D'Artagnan为Athos,Porthos和Aramis签名后,他的信任网络非常直接,可以用简单的图表显示出来。

直接的信任关系

当Porthos送过Planchet成为d'Artagnan的新代客时,d'Artagnan用​​信任网证实Planchet是他自称的人,因为他的钥匙带有Porthos的签名:

  dartagnan [〜] $ gpg --list-sigs planchet
 pub 2048R / 30EA3A2A 2014-01-23
 uid Planchet
 sig 3 30EA3A2A 2014-01-23 Planchet
 sig 51CDD613 2014-01-23 M. du Vallon(Porthos)

GnuPG告诉他关键是完全有效的:

  dartagnan [〜] $ gpg --edit-key planchet
 pub 2048R / 30EA3A2A创建时间:2014-01-23过期时间:永不使用:SC
                     信任:未知有效性:完整
 [完整](1)。 圆片

这是行动中的信任网络。 由于d'Artagnan信任Porthos在签署密钥前验证人的身份,当Planchet出现时,d'Artagnan知道他实际上是Planchet--因为Porthos通过签署密钥为他提供了保证。

设置所有者信任

直接的信任关系

您会注意到我们对Planchet再次有“信任:未知” - 这是因为我们还没有将所有者信任分配给他的钥匙。 作为一般规则, “有效性”是我们根据人的钥匙上的签名计算出来的,而“信任”是我们必须自己分配给每个钥匙的东西,以便它说出“未知”以外的东西(除非信任签名,但我们将在下一篇文章中详细介绍)。

每次我们签署某人的密钥时,最好还是设置所有者信任,以便将来我们可以使用这种信任关系来验证其他人的密钥的身份。 在Planchet的案例中,d'Artagnan决定只是暂时地相信他,至少在目前这一点上 - 毕竟他们只是刚刚见过面:

  gpg>信任
 pub 2048R / 30EA3A2A创建时间:2014-01-23过期时间:永不使用:SC
                     信任:未知有效性:完整
 [完整](1)。 圆片
请确定您信任此用户的距离,以便正确验证其他用户的密钥
 (通过查看护照,检查来自不同来源的指纹等)
   1 =我不知道或不会说
   2 =我不信任
   3 =我相当信任
   4 =我完全信任
   5 =我最终信任
   m =回到主菜单
你的决定?  3
 pub 2048R / 30EA3A2A创建时间:2014-01-23过期时间:永不使用:SC
                     信任:边际有效性:完整
 [完整](1)。 圆片
请注意,显示的密钥有效期不一定是正确的
除非你重新启动程序。
 gpg> q

他为所有朋友的代言人都做了同样的事情 - 他相信巴赞,格里莫和Mousqueton的关键是“边缘化”。 所以,现在d'Artagnan的信任网络看起来像下面的图表。 盒子的颜色显示了Artagnan对每个键所赋予的信任(红色表示完全信任,而蓝色表示边际信任),箭头表示谁签了谁的键。

直接的信任关系

理解边际信任

当我们发现一个由我们仅仅信任的人签署的密钥时会发生什么? 假设有一天d'Artagnan会见了他的房东M. Bonacieux,并且M. Bonacieux的唯一签名是Planchet? 这是gpg会议:

  dargagnan [〜] $ gpg --list-sigs bonacieux
 pub 2048R / D672573B 2014-01-28
 uid M. Bonacieux
 sig 3 D672573B 2014-01-28 M. Bonacieux
 sigchet 99CCAC09 2014-01-28 Planchet
 dargagnan [〜] $ gpg --edit-key bonacieux
 pub 2048R / D672573B已创建:2014-01-28过期:从未使用过:SC
                     信任:未知有效性:边际
 [边际](1)。  M. Bonacieux

正如你所看到的,有效性被标记为“边际”,这是gpg的说法,只能边际保证这个“M. Bonacieux”实际上是他所说的他是谁。 事实上,如果d'Artagnan从M. Bonacieux收到gpg签名的消息,并对其运行“gpg --verify”,它将返回以下输出:

  dartagnan [〜] $ gpg  - 验证message-from-bonacieux.asc
 gpg:签名使用RSA密钥ID D672573B 2014年1月28日02:10:41 EST
 gpg:来自“M. Bonacieux的好签名
 gpg:警告:此密钥未通过足够可信的签名认证!
 gpg:签名不属于所有者。
主要指纹:BE8B 2FE0 C433 79A4 7A6B C045 F04F 9E3D D672 573B

如果我们将信任关系表示为图表,我们会将M. Bonacieux的方框标记为灰色,因为没有足够的签名来确保完整的有效性。

为了加强关键效度,我们需要有一个我们完全信任的人签署他的密钥,或者我们需要找到另外两个边缘信任的人,所以M. Bonacieux的关键是总共有3个边缘信任签名 当Mousqueton和Bazin都将他们的签名添加到M. Bonacieux的关键字时,会发生以下情况:

  dartagnan [〜] $ gpg  - 验证message-from-bonacieux.asc
 gpg:签名使用RSA密钥ID D672573B 2014年1月28日02:10:41 EST
 gpg:来自“M. Bonacieux”的好签名
主要指纹:BE8B 2FE0 C433 79A4 7A6B C045 F04F 9E3D D672 573B
 dargagnan [〜] $ gpg --edit-key bonacieux
 pub 2048R / D672573B已创建:2014-01-28过期:从未使用过:SC
                     信任:未知有效性:完整
 [完整](1)。  M. Bonacieux

因为M. Bonacieux现在在他的密钥上有三个边缘信任的签名,所以他的密钥有效期现在标记为“满”。

M. Bonacieux现在完全信任

概括

这基本上都是理解OpenPGP的信任网络的核心概念。 回顾一下:

  • 您通过签署密钥来担保某人的身份。
  • 关键的“有效性”是我们确信有问题的关键属于我们想与之交流的人。 它是根据所有者信任和密钥上签名的数量计算得出的。
  • 密钥“信任” 必须由用户为密钥环中的每个密钥设置,然后才能包含在信任度计算网络中。
  • 信任可以是完全的或边缘的。 它只需要一个完全可信的签名将密钥标记为“有效”,但至少需要3个边缘信任的密钥才能执行相同的操作。

信任网很快就会变得非常庞大而复杂。 在下一篇文章中,我们将探讨OpenPGP使用社区开发的一些机制,以帮助简化信任管理 - 即我们将讨论关键服务器和委托信任。


https://www.linux.com/learn/pgp-web-trust-core-concepts-behind-trusted-communication

猜你喜欢

转载自blog.csdn.net/omnispace/article/details/80617551
PGP