OpenPGP(PGP/GPG)深入浅出,完全入门指南

OpenPGP(PGP/GPG)深入浅出,完全入门指南

  PGP(Pretty Good Privacy)是一个加密程序,为数据通信提供了加密和验证功能。PGP通常用于签名、加密和解密文本、电子邮件和文件。OpenPGP是一种非专有协议,为加密消息、签名、私钥和用于交换公钥的证书定义了统一标准。

OpenPGP的发展历史

  PGP由Phil Zimmermann在1991年开发,在发布后不久便上传到了互联网,迅速在全球范围内吸引了大量关注着。1993年2月Phil Zimmermann被美国联邦政府以“未经许可出口军需品”为由调查(当时的美国出口法中将使用大于40位密钥的密码系统视为军需品)。Phil Zimmermann以极具想象力的方法绕过了这些规定,他将全部的源码印刷成书籍通过MIT出版社发行,用户使用OCR扫描成文本文件,再使用GCC编译器来编译PGP程序。尽管缺少资金,缺少有薪工作人员,缺乏支持它的公司,并且尽管受到了政府的迫害,但PGP还是成为了世界上使用最广泛的电子邮件加密软件。联邦政府在1996年初撤诉后,Zimmermann和他的团队成立了一家公司:PGP Inc.,开发新版本的PGP。1997年7月,PGP Inc.向IETF提议制定一项名为OpenPGP的统一的标准,IETF接受了该提议,并成立了OpenPGP工作组。该公司及其知识产权于1997年12月被Network Associates Inc(NAI)收购。NAI继续拥有和开发用于商业和免费软件的PGP产品。2002年,NAI停止了PGP的开发和销售,并将其所有权出售给了新公司PGP Corporation(PGP Corporation是由几位前PGP团队成员创办,并由Zimmermann担任特别顾问)。2010年4月29日Symantec Corp.(赛门铁克)宣布以3亿美元收购PGP。

到目前为止,情报机构尚无法打破OpenPGP加密标准。

PGP、OpenPGP和GPG(GnuPG)三者之间的关系

  • PGP:由Phil Zimmermann开发,最终被赛门铁克收购,是一个商业软件,需要付费。
  • OpenPGP:一种协议,定义了加密消息、签名、私钥和用于交换公钥的证书统一标准。
  • GPG(GnuPG):符合OpenPGP标准的开源加密软件,PGP的开源实现。

OpenPGP与对称/非对称密码学

  在对称密码学中,加密和解密使用同一个私钥,如果Bob使用对称加密算法将邮件加密发送给Alice,那么Bob需要将用于解密的私钥一起发送给Alice,如何保证这个私钥的安全性是一个难题。
  非对称密码学完美解决了这个问题,在非对称密码学(公钥密码学)中,使用成对的密钥:公钥(用于加密,可以广泛传播且不会影响私钥的安全性)和私钥(用于解密,仅所有者持有)。
  由于对称加密算法比非对称加密算法的加密速度快很多,在实际应用中,我们通常使用对称加密算法加密数据,再用非对称加密算法加密前者的私钥,这样做即拥有了对称加密的加密速度,又保障了私钥的安全性,在OpenPGP中亦是如此。

OpenPGP的加密与解密原理

  OpenPGP加密过程:随机生成一个的Key,并通过对称加密算法使用这个Key加密数据,最后通过非对称加密算法(RSA)用接收者的公钥加密前者的Key,得到加密的数据。

OpenPGP的加密与解密原理

OpenPGP的数字签名

  数字签名是OpenPGP的重要组成部分,数字签名是一个数学过程,与现实世界的签名功能相似,但更严谨、更安全且容易验证。数字签名保证了以下情况:

  • 验证发送者身份:确认发送者确实是他声称的身份。
  • 完整性:文件/邮件传输过程中未被更改。
  • 不可否认:发送者不可否认已发送的文件/邮件。

  数字签名的原理:发送者先通过加密散列函数获取数据的哈希,然后使用发送者的私钥加密哈希,得到数字签名。接收者使用发送者的公钥解密数字签名得到一个哈希,并与自己计算的数据的哈希值对比,一致则数字签名有效且数据完整。

OpenPGP的签名与验证原理

OpenPGP的公钥发布与吊销证书

  我们知道公钥用于加密,可以公开发布,公钥可以点对点发送,也可以上传到密钥服务器。需要格外注意的是公钥中包含邮箱信息,如果你将公钥发布到密钥服务器(各个公钥服务器会互相同步),那么你将永远无法从密钥服务器上删除你的公钥信息。在某天你忘记密码口令或丢失私钥,你想要从密钥服务器上吊销你的公钥,唯一的补救措施是:你事先生成了吊销证书,使用吊销证书可以吊销公钥证书,使公钥其显示“吊销”字样,但依然无法从密钥服务器上删除公钥信息!所以务必要谨慎上传公钥,务必生成吊销证书备用!

OpenPGP的灵魂拷问

Q:数字签名为什么使用私钥加密?
A:通常我们对非对称加密算法的工作方式的理解是公钥加密、私钥解密,这种理解是正确的,但只是对于加密数据/消息。在数字签名中则相反,私钥是数字签名的信任源(签名者是唯一拥有私钥的人),如果使用公钥签名很明显是不可行的。
Q:私钥可以加密吗?
A:公钥和私钥是互相工作的,即其中一个加密另个一则可以解密。公钥加密、私钥解密,私钥解密、公钥解密,这便是非对称加密的本质。
Q:密钥长度对加密速度的影响?
A:在RSA(非对称加密算法)中,加密的模数通常是2次方,解密的模数通常是3次方,这意味着如果将密码长度增加一倍(比如从2048增加至4096),加密成本增加4倍,解密成本增加8倍,但在现在计算机的算力下,这只是毫秒级别的差别。笔者为了验证这一理论,亲测了用2048位和4096位的密钥加密了一个1GB的文件,所需时间基本一致(70秒左右)。
Q:密钥长度是不是越长越好?
A:这是一个保持前瞻的安全性与足够安全之间的选择,目前RSA破解记录为768位,1024位密钥正处于危险的边缘,而2048位的密钥已经足够安全。在OpenPGP的实践中,通常建议创建一个专门用于加密的子密钥,主密钥选用4096位,而用于加密的子密钥可以使用2048位,当然,如果你想保持前瞻的安全性,使用4096位的密钥没有任何问题。

OpenPGP的实践方案:

参考:

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×