Pretty Good Privacy——很好的隐私
PGP是为了保护处于极端状况下的人们的隐私而开发的密码软件。
OpenPGP是对密文和数字签名格式进行定义的标准规格(RFC1991、RFC2440、RFC4880、RFC5581、RFC6637)。
GnuPG(GNU Privacy Guard,GPG)是一款基于OpenPGP标准开发的密码学软件,支持加密、数字签名、密钥管理、S/MIME、ssh等多种功能。GnuPG本身是一款命令行工具,但它经常被集成到其他应用软件中。
GnuPG分为stable、modern 和 classic三个系列。
9.PGPPGP的功能生成密钥对加密与解密加密生成和加密会话密钥压缩和加密消息解密解密私钥生成和验证数字签名生成数字签名验证数字签名生成数字签名并加密以及解密并验证数字签名用PGP生成数字签名并加密用PGP解密并验证数字签名散列值、会话密钥和消息的变化信任网
PGP具有现代密码软件所必需的几乎全部功能
对称密码
可使用的对称密码算法包括AES、IDEA、CAST、三重DES、Blowfish、Twofish、Camellia等
公钥密码
支持生成公钥密码的密钥对,以及用公钥密码进行加密和解密。实际上是使用混合密码系统进行加密操作。
可使用的公钥密码算法包括RSA和ElGamal等
数字签名
支持数字签名的生成和验证,也可以将数字签名附加到文件中,或者从文件中分离出数字签名。
可使用的数字签名算法包括RSA、DSA、ECDSA(椭圆曲线DSA)、EdDSA(爱德华兹曲线DSA)等。
单向散列函数
可以用单向散列函数计算和显示消息的散列值
可使用的单向散列函数算法包括SAH-1、SHA-224、SHA-256、SHA-384、SHA-512和RIPEMD-160等。
MD5依然可以使用,但并不推荐。
证书
PGP可以生成OpenGPG中规定格式的证书,以及与X.509规范兼容的证书。
还可以颁发公钥的作废证明(revolution certificate),并可以使用CRL和OSCP对证书进行校验。
压缩
PGP支持数据的压缩和解压缩,压缩采用ZIP、ZLIB、BZIPZ等格式。
文本数据
PGP可以将二进制数据和文本数据互相转换。
radix-64格式是在邮件的场合中经常使用的base64编码的基础上,增加了检测数据错误的校验和的版本。
base64编码是一种可以将任何二进制数据都用【A~Z、a~z、0~9、+、/】共64个字符再加上【=】(用于末尾填充)来表示的格式。
大文件的拆分和拼合
可以将一个大文件拆分成多个文件,也可以将多个文件拼合成一个文件。
钥匙串管理
PGP可以管理所生成的密钥对以及从外部获取的公钥。用于管理密钥的文件称为 钥匙串 (key ring)。
加密和数字签名的前导步骤是生成密钥对。
在debian系中,使用 gpg2 --full-gen-key
命令生成密钥对。
使用 gpg2 --export --armor A57FF192
命令显示公钥A57FF192的内容(文本格式)。
加密过程如下:
消息经过混合密码系统进行加密,然后转换成报文数据(文本数据)。此处还包括了消息的压缩以及二进制到文本转换(转换为ASCII radix-64格式)。
混合密码系统的特点: 用公钥密码加密会话密钥,用对称密码加密消息 。
解密过程如下:
PGP的私钥是保存在用户的钥匙串中的。为了防止钥匙串被盗,私钥都是以加密状态保存的,并在保存时使用了基于口令的秘密(PBE)。口令由多个单词组成,没有正确的口令就无法使用相应的私钥。
解密的步骤如下
下图展示了加密和解密的过程中,会话密钥和消息经过了哪些变化:
PGP中生成数字签名的过程如下图所示:
消息与对应的签名进行拼合,并最终转换成报文数据(文本数据)。
在PGP中,可以选择是否要将报文数据转换成文本数据。
生成数字签名步骤如下:
PGP验证数字签名的过程如下图所示:
验证数字签名的过程步骤如下:
下图展示了生成和验证数字签名的过程中,散列值和消息经过了怎样的变化:
过程如下图所示:
过程如下图所示:
如下图所示:
信任网是PGP采用的一种确认公钥合法性的方法,解决公钥合法性问题。
【公钥合法性】,即,确认自己所得到的公钥是否真的属于正确的人。
公钥可能会通过中间人攻击被替换。
证书是确认公钥合法性的方法之一。证书由认证机构对公钥施加数字签名,通过验证这个数字签名就可以确认公钥合法性。
PGP中没有使用认证机构,而是采用了 信任网 (web of trust)方法。在此方法中,PGP用户会 互相对对方的公钥进行数字签名 。
信任网的要点是:【不依赖认证机构,而是建立每个人之间的信任关系】。即,能够自己决定要信任哪些公钥。
根据 《TLS Mastery》第一章:TLS密码学 所述,【信任网】和【证书颁发机构】,是两种信任公钥的通用模型。信任网模型要求用户做出初始信任决策,然后用可传递的信任来评估世界。信任网令人困惑、难以使用、容易被玩弄。
建立信任网的三个场景:
通过自己的数字签名进行确认
通过自己完全信任的人的数字签名进行确认
PGP中,用户可以设置对每个公钥所有者的 所有者信任 (owner trust)级别:
级别 | 说明 |
---|---|
Ultimately trusted | 绝对信任(是持有私钥的本人) |
Fully trusted | 完全信任 |
Marginally trusted | 有限信任 |
Never trust this key | 不信任 |
Not enough information | 未知密钥 |
No owner trust assigned | 未设置 |
通过自己有限信任的多个人的数字签名进行确认
公钥合法性与所有者信任是不同的
所有者信任级别因人而异