邮件加密PGP(Pretty Good Privacy
GPG(Pretty Good Privacy)
GPG简介
- PGP的开发背景是当时电子邮件和其他形式的电子通信缺乏安全措施,个人信息和通信内容容易受到第三方的监视和篡改。Zimmermann希望通过PGP提供一种简单易用的方式,让普通用户也能享受到高水平的通信安全。
-
PGP(Pretty Good Privacy)最初是由菲利普·齐默尔曼( Philip Zimmermann )在1991年开发的密码软件。它是一种强大的加密和数字签名工具,旨在保护电子邮件和其他通信的隐私和完整性。
-
PGP结合了对称加密和非对称加密技术,以及数字签名,为用户提供了一个全面的解决方案来确保通信的安全。
-
随着时间的推移,PGP成为了一种广泛认可的加密标准(一种广泛使用的加密和数字签名算法),并被许多个人、企业和组织用于保护敏感信息。PGP现已成为加密电子邮件和文件的行业标准。
GPG背后的故事
-
齐默尔曼于 20 世纪 70 年代中期在佛罗里达的亚特兰大大学就读,学习物理和计算机,毕业后投身于计算机行业。
-
1991年,美国参议院提出第266号法案,要求在所有的加密工具中为政府提供后门,以便政府能够访问加密信息。菲尔·齐默尔曼意识到这将严重威胁个人隐私。他决定在法案通过前开发并发布PGP(Pretty Good Privacy)软件。
-
齐默尔曼于1991年6月发布了PGP,并通过朋友将其分发到各种BBS论坛和互联网。最初,PGP仅在密码学爱好者中流行,但很快扩散到更广泛的互联网用户群体,媒体也开始广泛报道。PGP迅速成为保护个人隐私的工具。
-
然而,齐默尔曼面临RSA数据安全公司的侵权指控,因PGP使用了未授权的RSA加密算法。尽管齐默尔曼希望获得免费授权,但更大的麻烦来自政府。1993年,FBI指控齐默尔曼非法出口武器,开始对其展开刑事调查。美国政府将高强度加密工具视为对国家安全的威胁,将其列为受出口管制的战争武器。
- 美国政府认为高强度加密工具对国家安全构成严重威胁,《武器出口管制法》将加密工具列为战争武器,受到出口管制,在机械化加密时代,加密工具是一台有形的机械设备(比如恩尼格码密码机),但到了数字化时代,加密工具就是一个计算机程序,所以出口包括 PGP 在内的加密软件需要获得专门许可。
-
为避开出口管制,齐默尔曼在1995年通过麻省理工学院出版社出版了《PGP Source Code and Internals》一书,以书籍形式发布PGP源代码。书籍被视为知识而非软件,成功绕过了出口限制。
-
这场调查引发了关于加密技术在信息时代的作用的广泛争论。一方认为PGP保护了个人隐私,另一方担心其被犯罪分子利用。最终,支持加密自由的人占了上风,更多人愿意掌握自己的隐私。随着调查的进行,越来越多的人支持齐默尔曼,包括许多密码学家,他们成立基金会资助其律师费用。FBI的调查反而加速了PGP的传播,许多人下载PGP以了解其内容。
-
案件变得复杂,政府最终放弃了诉讼。FBI意识到PGP已经广泛传播,且未找到齐默尔曼非法出口的确凿证据。1996年,调查结束,齐默尔曼成为计算机界的英雄,PGP获得了广泛关注。
-
1996 年,齐默尔曼成立 PGP 公司,并顺利从 RSA 公司取得了RSA 算法授权,从而解决了专利问题,PGP 成为合法的商业软件。
-
1997 年,PGP 公司被 Network Associates (NAI)收购,齐默尔曼作为高级研究员留任三年。
-
2002 年,PGP 被一家名为 PGP Corporation 的新公司从 NAI 手中收购,齐默尔曼一直担任该公司的特别顾问
-
2010 年,PGP Corporation 被 Symantec 收购。
OpenPGP
OpenPGP简介
-
因为 PGP 使用受专利保护的 RSA 和 IDEA 加密技术,任何想在商业上使用 PGP 的人都需要向专利的持有者支付许可费用,人们需要一个对公众和企业都能免费的加密系统。
-
齐默尔曼在 1998 年提出了一个解决方案,他的公司向负责互联网标准的机构互联网工程任务组(IETF)提交了一份名为 OpenPGP 的设计。 OpenPGP 定义标准,任何人都可以遵循这套标准来开发加密软件,可以选择不同的加密算法,这样,遵循 OpenPGP 标准的软件之间可以自由安全的通信。
OpenPGP 标准的主要功能包括:
- 加密和解密:OpenPGP 使用对称加密算法(如 AES、Triple DES、Blowfish 等)来加密数据,确保只有拥有密钥的人才能解密和阅读信息。
- 数字签名:OpenPGP 允许用户使用非对称加密算法(如 RSA、ElGamal、ECDH 等)生成数字签名,以验证数据的完整性和发送者的身份。
- 密钥管理:OpenPGP 提供了一套完整的密钥生成、存储和分发机制。用户可以生成自己的公钥和私钥对,并通过密钥服务器与其他用户交换公钥。
- 支持多种加密算法:OpenPGP 支持多种加密和哈希算法,用户可以根据需要选择合适的算法。
- 兼容性:OpenPGP 标准确保了不同软件之间的兼容性,使得用户可以使用不同的 OpenPGP 兼容软件进行加密和解密。
GPG(GNU Privacy Guard)
-
GPG(GNU Privacy Guard)是一个免费的开源加密软件,它是PGP(Pretty Good Privacy)的一个替代品。GPG遵循OpenPGP标准(RFC 4880)。
-
GPG的开发始于1997年,由德国程序员Werner Koch主导,目的是提供一个完全符合自由软件基金会(Free Software Foundation)原则的PGP替代品。当时,PGP的商业版本受到版权和专利的限制,而GPG则提供了一个自由且开放的解决方案,使得用户可以不受限制地使用加密技术。
GPG的主要特性:
- 加密和解密:使用对称加密算法(如AES)来加密数据,确保只有拥有密钥的人才能解密和阅读信息。
- 数字签名:允许用户使用非对称加密算法(如RSA或ECDH)生成数字签名,以验证数据的完整性和发送者的身份。
- 密钥管理:提供一套完整的密钥生成、存储和分发机制,用户可以生成自己的公钥和私钥对,并通过密钥服务器与其他用户交换公钥。
- 支持多种加密算法:GPG支持多种加密和哈希算法,用户可以根据需要选择合适的算法。
- 跨平台:可以在多种操作系统上运行,包括Linux、Windows和macOS,使得它成为一个广泛使用的加密工具。
PGP算法
PGPG算法介绍
-
PGP算法结合多种加密技术,包括对称加密、非对称加密、散列函数和数字签名,以提供数据的保密性、完整性和身份验证。
-
PGP算法的主要组成部分:
-
对称加密:PGP使用对称加密算法(如AES或IDEA)来加密实际数据。对称加密速度快,适合加密大量数据,但需要一个共享密钥。
-
非对称加密:PGP使用非对称加密算法(如RSA)来安全地交换对称加密的密钥。非对称加密涉及一对密钥:公钥和私钥。公钥用于加密数据,而私钥用于解密数据。
-
密钥交换:在PGP中,发送者使用接收者的公钥来加密对称密钥,加密后的对称密钥随加密数据一起发送。接收者使用自己的私钥解密得到对称密钥,然后使用该对称密钥解密数据。
-
散列函数:PGP使用散列函数(如SHA-256)来生成数据的唯一摘要,确保数据在传输过程中没有被篡改。
-
数字签名:PGP允许用户创建数字签名,以证明数据的真实性和完整性。发送者使用自己的私钥对数据摘要进行加密(签名),接收者使用发送者的公钥来验证签名。
-
密钥管理:PGP还包括一个密钥管理组件,用于生成、存储和分发密钥。PGP用户可以创建自己的密钥对,并将公钥发布到公共密钥服务器上,以便其他人可以找到并使用它来加密信息。
- PGP算法的设计使其能够灵活地适应不同的安全需求和环境。它不仅用于电子邮件加密,还广泛应用于文件加密、即时通讯和其他需要安全通信的场合。
PGP工作流程
OpenPGP 的工作流程通常包括以下步骤:
- 密钥生成:用户生成一对公钥和私钥。
- 密钥交换:用户将自己的公钥发送给其他用户,或者上传到公钥服务器。
- 加密:发送者使用接收者的公钥来加密数据。
- 数字签名:发送者使用私钥对数据进行签名。
- 验证:接收者使用发送者的公钥来验证签名的有效性。
- 解密:接收者使用私钥解密加密的数据。
- 这里提供两个背景的流程图
PGP密钥交换
- 在PGP加密通信中,密钥交换确保只有预期的接收者能够解密和阅读发送的信息。
-
生成对称密钥:当发送者想要发送加密信息时,首先生成一个对称密钥(例如,一个AES密钥)。这个对称密钥将用于加密实际的通信数据。对称加密算法速度快,适合加密大量数据。
-
使用接收者的公钥加密对称密钥:发送者使用接收者的公钥来加密这个对称密钥。公钥是公开的,任何人都可以获得它,但只有接收者拥有对应的私钥。
-
发送加密的对称密钥和加密数据:加密后的对称密钥与使用该对称密钥加密的实际数据一起发送给接收者。由于对称密钥是用接收者的公钥加密的,所以只有拥有对应私钥的接收者才能解密它。
-
接收者使用私钥解密对称密钥:接收者收到加密信息后,使用自己的私钥解密得到对称密钥。这个过程确保了只有接收者能够访问对称密钥,因为私钥是保密的。
-
使用对称密钥解密数据:一旦接收者获得了对称密钥,就可以使用它来解密加密的数据,从而读取原始信息。
这个过程的关键:对称密钥的加密和解密分别使用不同的密钥:发送者使用接收者的公钥加密对称密钥,而接收者使用自己的私钥解密对称密钥。这样,即使加密的对称密钥在传输过程中被截获,没有接收者的私钥,第三方也无法解密得到对称密钥,从而保证了通信的安全性。
PGP数字签名和验证
- 在PGP中,数字签名和验证的过程是确保数据完整性和发送者身份验证的关键步骤。
数字签名过程
- 生成消息摘要:发送者首先使用散列函数(如SHA-256)对要发送的消息生成一个唯一的摘要。摘要是消息内容的紧凑表示,任何对消息的微小改动都会导致摘要的显著变化。
- 使用私钥加密摘要:发送者使用自己的私钥对生成的消息摘要进行加密。加密后的摘要就是数字签名。
- 附加签名到消息:发送者将数字签名附加到原始消息上,然后将这个带有签名的消息发送给接收者。
数字签名算法
- 创建数字签名的算法通常涉及非对称加密和散列函数。常用的数字签名算法:
-
RSA (Rivest-Shamir-Adleman):RSA是最早的非对称加密算法之一,也广泛用于数字签名。它基于大整数分解的数学难题。RSA签名通常与SHA系列散列函数结合使用。
-
DSA (Digital Signature Algorithm):DSA是专门为数字签名设计的算法,它是美国联邦信息处理标准(FIPS)的一部分。DSA通常与SHA-1或更安全的散列函数如SHA-256结合使用。
-
ECDSA (Elliptic Curve Digital Signature Algorithm):ECDSA是DSA的椭圆曲线版本,它使用椭圆曲线密码学来提供与RSA相似的安全性,但使用更短的密钥。ECDSA也常与SHA系列散列函数结合使用。
-
EdDSA (Edwards-curve Digital Signature Algorithm):EdDSA是一种基于椭圆曲线的数字签名算法,它使用扭曲爱德华兹曲线。EdDSA以其安全性和性能而受到青睐,通常与特定的散列函数如SHA-512结合使用。
-
SPHINCS:SPHINCS是一种无状态的散列基签名方案,它不依赖于椭圆曲线或整数分解难题。SPHINCS旨在提供高安全性,同时避免依赖于传统的公钥密码学难题。
-
RSA-PSS (Probabilistic Signature Scheme):RSA-PSS是RSA签名的一种变体,它使用概率方法来增强安全性。RSA-PSS通常与SHA系列散列函数结合使用。
数字签名编码格式
-
PEM(Privacy-Enhanced Mail)通常不是指一个算法,而是一种编码格式。
-
PEM格式用于存储和传输加密的密钥、证书和其他安全相关的数据。
-
它使用Base64(Base64算法原理)编码将二进制数据转换为ASCII字符,以便于通过电子邮件或其他文本传输机制安全地发送。
-
数字签名通常涉及使用非对称加密算法(如RSA或ECDSA)和散列函数(如SHA-256)来创建。在PGP或OpenPGP标准中,数字签名是使用这些算法创建的,然后可以以PEM格式存储或传输。
-
例如,一个使用RSA算法和SHA-256散列函数创建的数字签名可以存储在一个PEM格式的文件中,该文件可能包含以下内容:
-----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQC...(Base64编码的私钥数据)... -----END RSA PRIVATE KEY-----
- 或一个包含数字签名的证书可能以PEM格式存储,如下所示:
-----BEGIN CERTIFICATE----- MIICDjCCA...(Base64编码的证书数据)... -----END CERTIFICATE-----
-
PEM是一种常用的格式,用于存储和传输使用特定算法创建的数字签名及其相关密钥和证书。在实际应用中,数字签名和PEM格式经常一起使用,以确保安全性和兼容性。
验证过程
- 分离签名和消息:接收者从收到的消息中分离出数字签名和原始消息。
- 使用公钥解密签名:接收者使用发送者的公钥对数字签名进行解密,得到原始的消息摘要。
- 重新生成消息摘要:接收者使用与发送者相同的散列函数对收到的消息内容生成一个新的摘要。
- 比较两个摘要:接收者比较自己生成的摘要和从签名中解密得到的摘要。如果两个摘要完全一致,则证明消息在传输过程中没有被篡改,并且确实是由拥有相应私钥的发送者发送的。