2010年1月5日星期二

密钥,密钥环,pgp

转自:book.51cto.com的《密码学与网络安全》 马振晗,贾军保

16.2.2 密钥环


16.2.2 密钥环

在以前所有的情景中,我们都假定爱丽丝只需要给鲍勃发送信息。事实并不总是这样。爱丽丝也许需要给许多人发送信息,这样她就要有一个密钥环。这种情 况下,爱丽丝需要一个公钥的环,这个公钥属于爱丽丝要与通信(发送或接收信息)的每一个人。此外,PGP的设计者还列出了一个公钥/私钥的环。一个原因 是,爱丽丝也许希望随时改变她的密钥对;另一个原因是,爱丽丝也许要与不同群中的人(朋友、同事等等)通信。爱丽丝也希望对不同群中的人使用不同的密钥 对。所以,每个用户要有两列环:一个私钥/公钥环和一个别人的公钥环。图16-6表示出了包含四个人的一个人群,每一个人有一个公钥/私钥对的环,同时, 公钥环属于人群中别的人。

例如,爱丽丝有几个私钥/公钥对是属于她自己的,有几个公钥是属于别人的。注意,每人可以具有多于一个的公钥。两种情况都有可能出现。

(1) 爱丽丝需要给人群中的另外一个人发送一个信息。

a. 她用她自己的密钥在摘要上签名。

b. 她用接收者的公钥加密新创建的会话密钥。

c. 她用创建的会话密钥加密信息并在摘要上签名。

图16-6 PGP中的密钥环

(2) 爱丽丝收到人群当中另外一个人的信息。

a. 她用自己的私钥解密这个会话密钥。

b. 她用会话密钥解密信息和摘要。

c. 她用她的公钥确认摘要。

1. PGP算法

PGP所用算法如下。

公钥算法 表16-1所列的公钥算法,用来在摘要上签名和加密信息。

表16-1 公 钥 算 法

ID

1

RSA (加密或签名)

2

RSA (只加密)

3

RSA (只签名)

16

ElGamal (只加密)

17

DSS

18

为椭圆曲线保留

19

ECDSA保留

20

ElGamal (为加密或签名)

21

Diffie-Hellman保留

100~110

私密算法

对称密钥算法 用于传统加密的对称密钥算法如表16-2所示。

表16-2 对称密钥算法

ID

0

不加密

1

IDEA

2

三重DES

3

CAST-128

4

Blowfish

5

SAFER-SK128

6

DES/SK保留

7

AES-128保留

8

AES-192

9

AES-256保留

100-110

私密算法

Hash算法 用于在PGP中创建散列的散列算法如表16-3所示。

表16-3 散 列 算 法

ID

1

MD5

2

SHA-1

3

RIPE-MD/160

(续表)

ID

4

为双重宽度的SHA保留

5

MD2

6

TIGER/192

7

HAVAL保留

100~110

私密算法

压缩算法 用来压缩文本的压缩算法如表16-4所示。

表16-4 压缩算法

ID

0

不压缩

1

ZIP

2

ZLIP

100~110

私密方法


--------------------------------------

16.2.3 PGP证书(1)


16.2.3 PGP证书(1)

PGP和我们目前已了解到的其他协议一样,使用证书验证公钥。不过过程完全不同。

1. X.509证书

使用X.509证书的协议依赖于信任的分级结构。这里有一个预先确定的从根到任意证书的信任链。每一个用户在根这一层上完全相信CA的权威(必备条 件)。在第二层上根给CA发行证书,第二层的CA为第三层发行证书等等。需要被信任的每一方都要提供一个来自树型结构中某个CA的证书。如果爱丽丝不信任 鲍勃提供的证书,她可以向树形结构的上一层权威请求(这是系统所信任的)。也就是说,从一个值得完全依赖的CA到一个证书只有一条路径。

在X.509中,从完全信任权威到证书只有一条路径。

2. PGP证书

对PGP来说,并不需要CA,环中的任何人都可以为环中的其他人的证书签名。鲍勃可以为特德、安妮、约翰等的证书签名。在PGP中,信任是不分级 的,也没有树型结构。分级结构的缺乏也许会导致这样的事实:特德可能有一个来自鲍勃的证书,和另一个来自里兹的证书。如果爱丽丝想跟随在特德的证书之后, 则有两条路径:一条从鲍勃开始,一条从里兹开始,有趣的是,爱丽丝可能完全信任鲍勃但只是部分信任里兹。从一个完全或部分信任的权威到证书也许会有多条路 径。在PGP中,证书的发行者通常称为介绍人。

在PGP中,从完全或部分信任权威到别的目标有多条路径。

3. 信任和合法性

PGP的全部操作都基于对介绍人的信任、对证书的信任和公钥的合法性。

介绍人信任级别 由于中心权威的缺乏,显然,如果PGP环中的每一个用户对其它用户完全信任,环就不能非常大。(即使在现实生活中,我们也不能完全信任我们认识的每一个 人。)为了解决这个问题,PGP允许有不同级别的信任。级别的高低通常依赖于执行,但是,为了简洁,我们把信任的三个级别分配给任意一个介绍人:不信任、 部分信任、完全信任。介绍人信任级别确定由介绍人发布的对环里别的人的信任级别。例如,爱丽丝也许完全信任鲍勃,部分信任安妮,完全不信任约翰。在PGP 中,对如何确定介绍人的确实性,还没有一个能够做出决定的机制,不过用户有能力做这个决定。

证书信任级别 当爱丽丝收到一个来自介绍人的证书时,她就把这个证书储存在目标的名字下(鉴定过的实体 )。她分配一个信任级别给这个证书。证书信任级别通常和发行证书的介绍人的信任级别是相同的。假定爱丽丝完全信任鲍勃,部分信任安妮和简尼特,不信任约 翰。下面的情景就可以发生。

(1) 鲍勃发行两个证书,一个给林达(带有公钥K1)。一个给莱斯利(带有公钥K2)。爱丽丝把林达的公钥和证书储存在林达的名字下,并且给这个证书分配一个完全信任级别。爱丽丝也把莱斯利的证书和公钥储存在莱斯利的名字下,也给这个证书分配一个完全信任级别。

(2) 安妮给约翰(带有公钥K3)发行一个证书。爱丽丝把这个公钥和证书储存在约翰的名字下,但是,只给这个证书分配一个部分信任级别。

(3) 简尼特发行两个证书,一个给约翰(带有公钥K3),一个给李(带有公钥K4)。爱丽丝把约翰和李的证书分别储存在他们自己的名字下,并给每个证书分配一个部分信任级别。注意,现在约翰有两个证书,一个来自安妮一个来自简尼特,每个都是部分信任级别的。

(4) 约翰给利兹发一个证书。爱丽丝可以丢弃这个证书,也可以加上一个不信任的签名再保存起来。

密钥合法性 运用介绍人和证书信任的目的是确定公钥的合法性。爱丽丝需要知道鲍勃、利兹、安妮等的公钥是不是合法。PGP定出了一个非常清楚的确定密钥合法性的程序。用户密钥合法性的级别是用户加了权重的信任级别。例如,假设我们给证书信任级别分配下列权重:

(1) 一个0的权重给一个不信任的证书

(2) 一个1/2的权重给一个部分信任的证书

(3) 一个1的权重给一个完全信任的证书

那么要完全信任一个实体,爱丽丝就要有这个实体的一个完全信任证书,或两个部分信任证书。例如,在前面的情景中爱丽丝可以使用约翰的公钥,因为安妮 和简尼特已经给约翰发了证书,每个证书都是1/2信任级别的。注意,属于一个实体的公钥的合法性和某人的信任级别没有任何联系。虽然鲍勃可以用约翰的公钥 给他发送一个信息,但是因为对爱丽丝来说,约翰的信任级别是不信任,爱丽丝不能接收鲍勃发行的任何证书。

4. 环的开始

通过以上讨论你可能已经意识到一个问题:如果任何人都不给一个完全信任或者部分信任的实体发送证书,会怎么样呢?例如,如果没有一个人给鲍勃发送证书,怎样才能确定鲍勃公钥的合法性呢?在PGP中,信任或部分信任实体的公钥的合法性地可以通过别的方法确定。

(1) 爱丽丝可以用人工的方法得到鲍勃的公钥。例如,爱丽丝和鲍勃私下见面,并交换写在纸片或磁盘上的公钥。

(2) 如果爱丽丝可以听出鲍勃的声音,爱丽丝就可以给鲍勃打电话,从电话里得到鲍勃的公钥。

(3) PGP提出一个较好的解决办法,就是让鲍勃通过电子邮件把他的公钥发送给爱丽丝。鲍勃和爱丽丝都从密钥中制作了一个16字节的MD5(或20字节的 SHA-1)摘要。摘要通常显示为十六进制数的8组4位数(或10组4位数),并称为指纹。然后爱丽丝可以打电话给鲍勃来验证这个指纹。如果密钥在电子邮 件传送过程中已经被改变或更换,两个指纹就不匹配。为了使这个过程更方便,PGP创建了一个词语表,每个词代表一个4位数的组合。当爱丽丝给鲍勃打电话 时,鲍勃可以发出8个词(或10个)的音。为了避免那些发音相近的词,这些词都是经过PGP仔细选择的。例如,如果表中有sword,就不能有word。

(4) 在PGP中,任何事情都不能阻止爱丽丝在一个单独的过程中,从CA获得鲍勃的公钥。然后她就把获得的公钥插入到公钥环中。

5. 密钥环表

每个用户如爱丽丝都要保存两个密钥环的轨道:一个私钥环和一个公钥环。PGP以表格的形式为每一个密钥环定义一个结构。

私钥环表 图16-7所示,就是私钥环表的格式。

图16-7 私钥环表的格式

●用户ID 用户ID通常就是用户电子邮件的地址。不过,用户也许会为每个密钥对指定一个唯一的电子邮件地址,或别名。这个表列出了与每一个密钥对有关的用户ID。

●密钥ID 这一列只确定用户公钥当中的一个公钥。在PGP中,每一个对的密钥ID是公钥的第一个(最不重要的)64位。也就是说,密钥ID按(key mod 264)计算。因为鲍勃在他的公钥环中,也许有几个属于爱丽丝的公钥,所以在PGP的操作中需要有密钥ID。当鲍勃收到一个爱丽丝的信息,他必须要知道, 用哪一个密钥ID来验证信息。与信息一起发送的密钥ID,就像我们马上要了解到的那样,可以使鲍勃使用一个他公钥环中的爱丽丝的特殊公钥。你可能要问,为 什么不把整个的公钥都发送出去。答案就是在公钥加密中,公钥的长度也许是非常长的。只发送8比特就把信息的大小缩小了。

●公钥 这一列只列出了属于特殊私钥/公钥对的公钥。

●加密的私钥 这一列表示在公钥/私钥对中加密私钥的值。虽然爱丽丝是唯一的访问她自己私钥环的人,PGP只是保存了私钥的加密版。以后我们会了解私钥是如何进行加密和解密的。

●时间戳 这一列保存了创建密钥对的时间和日期。它可以帮助用户决定什么时候清洗旧的密钥对,什么时候创建新的密钥对。

例16.1

现在我们来看爱丽丝的一个私钥环表。假定爱丽丝只有两个用户ID,alice@some.comalice@anet.net。也假定爱丽丝有两副公钥/私钥,每一副都对应一个用户ID。表16-5所示,就是爱丽丝的公钥环表。

表16-5 例1中的私钥环表

注意,虽然密钥ID、公钥和私钥的值都显示为十六进制,时间戳的格式是ddmmyy-time,但这些格式只是为了方便表述,实际操作中的格式也许会不同。

公钥环表 图16-8所示,就是公钥环表的格式。

图16-8 公钥环表的格式

16.2.3 PGP证书(2)


16.2.3 PGP证书(2)

●用户ID 就像私钥环表一样,用户ID通常是实体的电子邮件地址。

●密钥ID 就像私钥环表一样,密钥ID是公钥的第一个(最不重要的)64位.

●公钥 这是实体的公钥.

●生产者信任 这个列确定生产者的信任级别。在多数执行过程中,这个信任级别只有三个值:不信任、部分信任、或完全信任。

●证书 这个列保存证书或别的实体为该实体签过名的证书。一个用户ID也许具有多于一个的证书。

●证书信任 这个列描述证书信任或信任。如果安妮给约翰发送一个证书,PGP就搜索安妮那个行中的条目,找出安妮的生产者信任值,复制这个值,并把它插入到约翰那个条目的证书信任域内。

●密钥合法性 这个值是由PGP基于证书信任值和预先为每个证书信任确定的权重算出来的。

●时间戳 这个列保存列创建的日期和时间。

例16.2

按步骤表明爱丽丝的公钥环表是怎样形成的。

(1) 爱丽丝本人从某一行开始,如表16-6所示。用N(不信任),P(部分信任)和F(完全信任)表示信任级别。为了简便,每个人(包括爱丽丝)只有一个用户ID。

表16-6 例2起始表

注意,基于这个表,我们假定爱丽丝已经为她自己发了一个证书,爱丽丝当然对她自己是完全信任的。生产者信任级别也是完全的,所以这个密钥是合法的。虽然爱丽丝从来不用这个第一行,但第一行在PGP的操作上是需要的。

(2) 现在爱丽丝把鲍勃加在这个表中。爱丽丝完全信任鲍勃,但是为了得到他的公钥,她请求鲍勃通过电子邮件发送公钥和他的指纹。然后爱丽丝就打电话核对这个指纹。如表16-7所示。

表16-7 例2,鲍勃加到表中以后

注意,因为爱丽丝完全信任鲍勃,鲍勃的生产者信任值是完全。证书域的值为空,这就表明这个密钥已经间接地收到了,并且不是通过证书。

(3) 现在爱丽丝把特德加在这个表中。特德是完全信任的。不过因为他是个特殊用户,爱丽丝不能给特德打电话。而是鲍勃发送给爱丽丝一个包含特德公钥的证书,因为鲍勃知道特德的公钥,如表16-8所示。

表16-8 例 2, 把特德加入表中之后

注意,证书域的值表明了证书是来自鲍勃的。证书可信性的值是由PGP从鲍勃的生产者信任域中复制的。密钥合法性域的值就是证书可信性的值乘以1(权重)。

(4) 现在爱丽丝把安妮加到表中。爱丽丝部分信任安妮,但是,完全信任的鲍勃为安妮发送一个证书。如表16-9所示。

表16-9 例2, 把安妮加入表中之后

注意,安妮的生产者信任值是部分的,但是证书信任值和密钥合法性是完全的。

(5) 现在安妮向爱丽丝介绍不被她信任的约翰。表16-10表明了这个新的事件。

表16-10 例2,约翰加入到表中以后

注意,PGP 已经把安妮的生产者信任值(P)复制到约翰的证书信任域了。约翰的密钥合法性域的值现在是1/2(P),这就表明直到密钥的值变为1(F),爱丽丝才能用约翰的密钥。

(6) 现在爱丽丝不认识的简尼特把一个证书发送给李。因为爱丽丝并不认识简尼特,她完全忽略了这个证书。

(7) 现在特德发送一个证书给约翰(特德是信任约翰的,约翰也许会要求特德发送证书)。爱丽丝查看这个表以后,找出带有约翰相关密钥ID和公钥的用户ID。爱丽丝不是把另外一行加在这个表上,她只是如表16-11所示那样,对该表作一些修改。

表16-11 例2, 收到多于一个约翰的证书之后

(续表)

因为在爱丽丝的表中,约翰有两个证书,并且他的密钥合法性值是1,所以爱丽丝就可以使用他的密钥。但是约翰还是不信任的。注意,爱丽丝可以继续在表中增加条目。

6. PGP的信任模式

就像Zimmermann提出的那样,我们就可以和活动中心的用户一起,为环中的每一个用户创建一个信任模式。这个模式看上去和图16-9中的模式差不多。该图表明了爱丽丝在某时的信任模式。随着公钥环表的改变,该图也许会有变化。

(点击查看大图)图16-9 信任模式

我们详细说明一下这个图。图16-9表明,在爱丽丝完全信任的环中,有三个实体(爱丽丝自己、鲍勃和特德)。本图也表明了部分信任的三个实体(安 妮、马克和布鲁斯)。不信任的实体有六个。有九个实体具有合法的密钥。爱丽丝可以加密发给这些实体中任意一个实体的信息,或验证所收到的这些实体的签名 (爱丽丝的密钥从不在这个模式中使用)。也有三个实体没有任何爱丽丝的合法密钥。

鲍勃、安妮和马克通过使用电子邮件发送其密钥,并通过电话验证其指纹,来制作他们的密钥合法性。另一方面,因为爱丽丝不信任海伦,用电话验证也不可 能,海伦就发送了一个来自CA的证书。虽然特德是完全信任的,他还是发给爱丽丝一个由鲍勃签名的证书。约翰已经给爱丽丝发了两个证书,一个是由特德签名 的,一个是由安妮签名的。凯文也已经给爱丽丝发送了两个证书,一个是由安妮签名的,一个是由马克签名的。每个证书给予凯文半点的合法性,所以凯文的密钥是 合法的。杜克给爱丽丝发送了两个证书,一个是由马克签名的,另一个是海伦签名的。因为马克是半信任的,海伦是不信任的,杜克没有合法的密钥。詹妮发送了四 个证书,一个是由半信任实体签名的,两个是由不信任实体签名的,还有一个是由不认识的实体签名的。因此,詹妮没有足够的点使她的密钥具有合法性。路易丝发 送了一个由不认识的实体签名的证书。注意,爱丽丝也许要在表中保存路易丝的名字,以防将来会收到路易丝的证书。

7. 信任网

PGP最终可以在一群人之间制作一个信任网。如果每一个实体都给其他实体介绍更多的实体,每个实体的公钥环就会越来越大,环中的实体之间就可以发送安全电子邮件了。

没有评论: