PGP(Pretty Good Privacy) 优良保密协议

492 阅读7分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第31天,点击查看活动详情

PGP

  • PGP(Pretty Good Privacy) 1991年发布V1.0 PGP成功很大程度上归功于Phil Zimmermann.Phil Zimmermann做了如下工作: 选择了可用的、最好的加密算法作为构件块 将这些算法集成一个通用应用程序中,该应用程序独立于OS和CPU,仅依赖于一组易用的命令。 将其封装成包括源代码的包和文档,可通过互联网在BBS和商用网络上FREE使用 与Network Associate达成协议,提供完全兼容、低成本的商用PGP版本。
  • PGP广泛使用的原因 各种平台都有FREE版本 使用算法经过公开检验 。如RSA、DSS、DH,及CAST-128、IDEA、3DES、SHA-1 企业和个人均可使用。 PGP已成互联网标准(RFC3156)
  • 是个完整的安全电子邮件软件包,提供5种服务: 保密性:使用IDEA、3DES等算法和发送者产生的一次性会话密钥加密消息,使用DH、RSA等算法和接收者的公钥加密会话密钥,然后将结果附加到消息中。 数字签名:使用MD5、SHA-1算法创建HASH代码;使用RSA、DSS等算法和发送者的私钥加密消息摘要,然后将结果附在消息中。 压缩:使用ZIP算法,方便保存与传输。 邮件兼容性:使用radix 64转换将加密后的消息从二进制数据流转换为ASCII字符流 数据分段:PGP执行数据分段与重组服务以便满足最大消息大小的限制

数字签名

  • 发送方生成所要发送的消息
  • 发送方使用MD5算法产生消息的128位HASH编码
  • 发送方采用RSA算法和发送方的私钥对HASH编码进行加密,将加密后的HASH编码附在原始消息的头部
  • 接收方使用RSA算法和发送方的公钥对加密的HASH编码进行解密
  • 接收方产生所接收消息的新的HASH编码,并与解密的HASH编码进行比较。如果两者相同,则认为消息是可信任的。

保密性

  • 发送方生成所要发送的消息
  • 发送方产生仅仅适用于该消息的随机数字作为会话密钥
  • 发送方使用会话密钥和IDEA(或3DES、CAST-128等)算法加密消息;
  • 用接收方的公钥和RSA算法加密会话密钥,并将结果附在加密消息的头部;
  • 接收方使用自己的私钥和RSA算法解密会话密钥。
  • 接收方使用会话密钥解密消息。

数据压缩

在缺省情况下,PGP在数字签名服务和保密性服务之间提供数据压缩服务,即先对消息签名,然后压缩,最后对压缩消息加密。 在加密前压缩,压缩后的消息比最初的明文具有更少的冗余,这样增加了密码分析的难度,提高了邮件安全性。

邮件兼容性

在PGP中部分或全部的结果块将由任意的8位二进制字节流组成。 由于很多电子邮件系统只允许使用纯ASCII文本构成的块 PGP提供了将原始的8位二进制字节流转换成可打印的ASCII字符串的服务。 采用radix 64转换的方案:每个二进制数据块(6位长)被映射为ASCII字符,同时也使用了CRC来检测传送中的错误。

PGP消息的发送与接收

  • PGP在发送时,如需要签名,则发送方使用未压缩明文的hash编码产生签名。然后压缩明文与签名。接着如果需要保密性,则加密压缩后的明文或是压缩后的签名和明文,并在结果上附加使用接收方的公钥加密后的对称密钥。最后,将整个数据块转换成radix 64 编码格式。
  • 接收消息时,接收方首先将接收到的数据块从radix64格式转换成二进制格式。如果消息是加密的,则接收方恢复会话密钥并解密消息,然后解压结果压缩数据块。如果发送方已经对消息进行了签名,则接收方恢复传输的Hash编码,并与自己计算出的Hash编码进行比较。

PGP工作原理

  • 密钥管理 PGP使用四种类型的密钥: 分组加密算法的一次性会话密钥 分组加密算法的基于通行字短语的密钥 公钥加密算法所用的公钥 私钥加密算法所用的私钥。
  • 密钥需求: 需要产生不可预测的会话密钥 允许用户拥有多个公钥/私钥对 每个PGP实体必须管理一个自己的公钥/私钥对文件和一个其他用户的公钥文件。

密码块链接CBC

需要共同的初始化向量IV 相同明文不同密文 初始化向量IV可以用来改变第一块 安全性好于ECB

3.jpg

密码反馈方式CFB

CFB:分组密码流密码 需要共同的移位寄存器初始值IV 对于不同的消息,IV必须唯一 一个单元损坏影响多个单元: (W+j-1)/j W为分组加密块大小,j为流单元位数

4.jpg

5.jpg

密钥环

  • PGP中每个节点要维护的两个文件:私钥环(Privacy Key Ring)和公钥环(Public Key Ring).
  • 私钥环存储当前节点用户自己的公钥、私钥对,其中包含: Timestamp:指明密钥对产生的时间、日期 密钥标识符(Key ID):公钥的低64位。 公钥 私钥:该字段被加密。 用户标识符(User ID):通常是用户的邮件地址,也可以是一个不同的名字与每个密钥对关联,或者不止一次地重用同一个用户标识符。
  • 发送方将公钥标识与消息捆绑在一起传送,将一个标识符与一个公钥关联起来,对一个用户来说,做到一一对应,使接收方知道应该用那一个公开密钥进行解密。
  • 公钥环存储当前节点知道的其它用户一些经常通信对象的公钥。其中,用户标识符是公钥拥有者的邮件地址或名字。公钥环可以用用户标识符或密钥标识符进行索引。

私钥加密存储

对消息进行加密可使用IDEA、3DES、CAST-128等对称加密算法。

以IDEA为例,其过程如下:当系统用RSA生成一个新的公钥、私钥对时,要求用户输入口令短语,对该口令短语用MD5生成一个128位的Hash编码,然后销毁该短语。利用这128位编码作为密钥,用IDEA算法加密私钥,然后销毁这个Hash编码,并将加密后的私钥存储在私钥环中。当用户要访问私钥时,必须提供口令短语。PGP将检索出加密的私钥,生成Hash编码,并解密私钥。 E(IDEA)MD5(口令短语)(私钥)

消息格式

  • Classic PGP消息包括3部分:密钥部分、签名部分、消息部分。 密钥部分:密钥和密钥标识符。由于PGP允许每个用户有多个公钥。 签名部分:头\Timestamp\发送方公钥标识符\类型信息\加密的Hash编码本身。其中公钥标识符指明了用于解密签名Hash编码的公钥,类型信息标识了所使用的算法。 消息部分:头和缺省文件名。如果接收方要将文件写入DISK中,则可以使用该缺省文件名。另外,消息部分还包含了一个用来标识该消息被创建时间的Timestamp,最后是消息本身。

PGP消息的处理

  • 接收消息的PGP实体执行下列步骤:

    • 解密消息 PGP用消息的会话密钥部分的密钥ID字段作为索引,从私钥环中查找接收方(用户B)的私钥。提示用户输入口令短语来恢复私钥。然后恢复会话密钥,并解密信息。
    • 消息认证 PGP使用消息签名部分的密钥ID字段作为索引,从公钥环中查找发送方(用户A)的公钥KUa.恢复所传输的消息摘要。对接收的消息计算消息摘要,并与所传输的消息摘要进行比较,从而实现认证。