
说起 PGP(Pretty Good Privacy) 的工作原理,类似早期的 TLS/HTTPS 的 RSA 密钥交换,只不过它不依赖于第三方的 CA,而是直接在两端以信任的方式直接交换了公钥和私钥。 它是基于以下几点进行工作的
- 用工具(如 PGPTool 或 GnuPG) 生成公钥和私钥对,公钥发给加密方,私钥保存在解密方
- 公钥加密的数据只能用相应的私钥解密,这是非对称加密
- 由于非对称加密解密的计算量较大,通常用一个较小随机 Key 对数据进行对称加密,而只对 Key 用公钥进行非对称加密,再把对称加密的数据与非对称加密的 Key 发给解密方,在解密方用私钥解密出 Key, 再对数据进行解密。-- 这称之为混合加密,也是目前 HTTPS 的工作方式
- 另外,在只持有公钥的一方可以对使用私钥加密的数据进行签名验证,验证数据是否是由持有私钥的一方签发的,这就是数字签名的工作原理
- PGP 也会对生成的私钥用一个口令对其进行加密,防止私钥被盗时进一步保护
- 只用私钥可以做加解密与签名验证,如加密的数据能用相同的私钥解密,私钥签名再私钥验证。但交换私钥是不安全的,所以才有了可公开的公钥,非对称加密
下面用 GnuPG 和 Java 的 Bouncy Castle 包 进行演示加解密的过程。
Read More