当我导出 gpg 私钥或公钥,并指定装甲作为交换机时,我得到纯文本密钥,但是,gnupgp 网站似乎声明这些密钥实际上是加密的。如果它只是纯文本,那么称其为装甲有什么意义?我不明白。
密钥以二进制格式导出,但是当密钥通过电子邮件发送或在网页上发布时,这可能会很不方便。因此 GnuPG 支持命令行选项
--armor
这会导致以类似于 uuencoded 文档的 ASCII 装甲格式生成输出。一般来说,GnuPG 的任何输出(例如密钥、加密文档和签名)都可以通过添加 --armor 选项进行 ASCII 防护。
答案1
gpg --export
输出二进制数据。这不能直接显示为文本,但在base16(即十六进制)编码中,它看起来像:
f53e9c4b013d3c6554c3161116face55f11db56dab1a941fe3a6e5ad246d4eb7
gpg --export --armor
输出64位基数编码数据,以及纯文本页眉和页脚:
-----BEGIN PGP PUBLIC KEY BLOCK-----
9T6cSwE9PGVUwxYRFvrOVfEdtW2rGpQf46blrSRtTrc=
-----END PGP PUBLIC KEY BLOCK-----
这是在电子邮件和其他面向文本的媒体中共享密钥时使用的更传统的格式。使用它是因为二进制数据不能作为 ASCII 文本传输。此外,base64 比其他将二进制数据表示为文本的传统方法(例如16进制(即十六进制)。
笔记:出于教学原因,这些示例已被简化。
答案2
PGP(包括GPG)“装甲”不是加密。加密通过使其不可读取(只有拥有密钥的人才能逆转)来防止未经授权的数据使用(正式而言,提供机密性)。 Armoring 是一个简单的过程(主要是 Base64,尽管与 uuencode 使用的 Base64 不同),任何阅读规范的人都可以轻松逆转。装甲好像文本,而非装甲(二进制)数据好像对于使用不适当工具(例如文本编辑器)的人来说是垃圾cat
,但有能力的人同样可以阅读它们。
特别是,任何有能力的人都可以读取已签名但未加密的 PGP 消息,无论是否有装甲。 PGP 公钥同上。加密的 PGP 消息只能由拥有密钥的人读取——根据消息的加密方式,这可能是私钥、密码或两者兼而有之——而且无论是否装甲,这都是相同的。 PGP 私钥始终是加密的,并且只能由拥有 (KEK) 密钥(在本例中始终是密码)的人完全读取;但是,那民众部分任何有能力的人仍然可以读取私钥,无论装甲如何。
这目的装甲的作用是协助正确加工。在 PGP 被创建用于电子邮件的时代,大多数电子邮件系统只能处理文本,并且会损坏、破坏或完全丢弃二进制数据。为了成功传输本质上是二进制的 PGP 消息和密钥块,它们被“装甲”成文本形式,并在接收和处理时解除装甲。如今,几乎所有电子邮件系统都处理二进制数据,这很少需要,但是如果您想使用专为文本设计的工具(例如剪切和粘贴)或您的引用建议的网页来处理数据,那么装甲仍然很有用( HTML 处理文本但不处理二进制)。它还具有无需使用任何工具即可轻松被人们识别的优点。