OpenPGP 1. 概述 Pretty Good Privacy(PGP)是一个提供加密和认证的计算机程序。 PGP经常被用于签名、加密和解密电子邮件,以增加电子邮件通信的安全性。 提供的安全功能 PGP模块 为了兼容电子邮件(ASCII码格式),加解密的二进制结果将会转换为Radix-64编码(基于Base64编码,增加检测错误的校验和) 2. 加密与解密 2.1 加密 class="ztext-empty-paragraph">
class="ztext-empty-paragraph">
 class="ztext-empty-paragraph">
解释: 2.2 解密 class="ztext-empty-paragraph">
 class="ztext-empty-paragraph">
解释: 2.3 私钥管理 由加密和解密的过程可以看到,解密时需要接收者输入的就是接收者的私钥,但是现在就有以下的问题: 为了解决私钥存储的问题,PGP使用PBE(Password Based Encryption)。 简单的PBE: class="ztext-empty-paragraph">
 class="ztext-empty-paragraph">
这样使用PBE仍然是不安全的,这样很容易遭受口令字典暴力破解攻击。为了对抗这样的安全威胁,最好的办法是随机化hash函数的输入 加盐的PBE: class="ztext-empty-paragraph">
 class="ztext-empty-paragraph">
通过加一个随机的“盐”值,将会增加hash函数输入的熵,使得口令字典暴力破解攻击变得更加困难。 PGP的私钥管理: class="ztext-empty-paragraph">
 class="ztext-empty-paragraph">
解释: 2.4 完整流程图示 class="ztext-empty-paragraph">
 class="ztext-empty-paragraph">
class="ztext-empty-paragraph">
3. 数字签名生成和验证 加密方法满足了信息的保密性要求,但是为了认证发送者的身份,还是需要数字签名的技术。 3.1 签名 图示: class="ztext-empty-paragraph">
 class="ztext-empty-paragraph">
解释: 3.2 验证 图示: class="ztext-empty-paragraph">
 class="ztext-empty-paragraph">
解释: 3.3 完整流程图示 class="ztext-empty-paragraph">
 class="ztext-empty-paragraph">
4. 加解密与数字签名结合 为了同时保证保密性以及验证身份,只需结合加解密与数字签名的过程即可: class="ztext-empty-paragraph">
 class="ztext-empty-paragraph">
class="ztext-empty-paragraph">
 class="ztext-empty-paragraph">
5. 信任网 在PGP协议的加解密和数字签名过程中都是用到了公钥,之前并没有讨论到公钥的合法性问题。按照一般的方法,公钥的认证依赖于一个可以信任的机构,依赖于公钥基础设施PKI。但是PGP假定没有任何机构可以信任,其使用的是一种称为信任网的模式。 5.1 基本原则 通过各个用户的签名以及用户的受信任级别来决定该公钥是否有效。 5.2 具体实施 在阐述信任网的实施方法之前,需要先搞清楚PGP信任级别,因为这个将是信任网的基础: class="ztext-empty-paragraph">
 class="ztext-empty-paragraph">
- 自己签名确认:
如果某个公钥被用户自己签过名,那么则认为这个公钥有效。 例子:用户A与用户B通过某种方式交换了各自的公钥,并且用户A和用户B在交换时就对对方的公钥进行了签名。在之后要使用公钥时,用户A或用户B会发现对方的公钥已经被自己签过名了,所以这个公钥将会被认为是一个合法的公钥。 - 完全信任的用户签名确认:
如果某个公钥被另一个用户签过名,而这个用户的信任级别是完全信任,那么则认为这个公钥有效。 例子:用户A有一个好朋友用户C,用户C为用户B的公钥进行了签名。当用户A要使用用户B的公钥时,用户A会发现用户C签名了这个公钥,那么由于用户A完全信任用户C,那么用户A将会认为用户B的公钥是有效的。这个过程比较类似现实生活中,我的好朋友介绍他的好朋友给我的过程。 - 多个有限信任的用户签名确认:
如果某个公钥被多个用户签过名,且这些用户的信任级别是有限信任,那么则认为这个公钥有效。如果只有一个有限信任的用户签名了这个公钥,那么这个公钥将被认为是无效的。 例子:用户A有两个同时用户D和用户E,用户D和用户E同时为用户B的公钥签了名。当用户A要使用用户B的公钥时,用户A看到有两个用户为B签了名,而这两位同事比较可靠,那么用户A便认为这个公钥是有效的。如果只有一个用户D为用户B签了名,那么由于用户A并不能完全信任用户D,害怕用户D和用户B联合起来作假欺骗自己,于是用户A认为用户B的公钥是无效的。
6. PGP选用的算法 6.1 数字签名 6.2 消息加密
|