6

GPG 密钥的几个问题

 2 years ago
source link: https://seo.g2soft.net/2021/11/19/qna-gpg.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在自问自答之前,先说一下 GPG 的用处。

GPG 密钥,就是用来对数据进行加密,解密的。为了不被中间人获取信息内容而设计的。

在使用 GPG 之前有几个问题要理一下。

需要生成多少对密钥?

通常是一对主密钥,具有认证(Certify)功能。

三对子密钥,分别具有签名(sign)功能,加密(Encrypt)功能,身份验证(Authenticate)功能。

平时使用,就只使用子密钥。主密钥只用来生成和吊销子密钥。子密钥可以放到 Yubikey 中。

如何选择加密算法?

通常使用的加密算法有很多,主要就是 RSA 和 ECC两类。

最为常用的就是 RSA 4096 和 curve 25519,这两个目前我用的 Yubikey 5 NFC 已经支持(从 5.2.3 固件开始就支持ECC算法了)

如果可能的话,就选用 curve25519,更快更安全。目前来看 RSA 4096也已经是很安全了。也有的看法是,RSA 4096更加安全一点。

根据 Sectigostore 的一篇文章,来看,差不多。

它的结论就是能用 ECC 就用 ECC,如果考虑兼容性,那么 RSA 也很好。

各种密钥的功能是什么?

  • Certify 认证: 认证其它密钥,给其它证书签名,就类似 SSL/TLS 的根证书。
  • Sign 签名:给文件添加数字签名,给邮件签名,给 Git 签名。
  • Authenticate 身份验证:比如 SSH 登录。
  • Encrypt 加密:加密文件,加密邮件内容等。

带有 Certify 的密钥被称之为主密钥,只有这种密钥才能添加或撤销其它子密钥的 S/A/E 功能,添加或者修改其它子密钥的到期时间。

密钥是怎样的?

密钥,包含了公钥和私钥,这是一对。

公钥是发布出去,分发给公众的,所以称之为公钥。

私钥是拥有者自己使用的,要保证安全,不能泄露给第三方。

OpenPGP的密钥是如何组织的?

一般都是先生成主密钥,具有 Certify ,认证功能。

然后分别生成三个单独的子密钥,包括 Sign,Encrypt,Authenticate,三种。

还有要生成撤销证书。

最后导出下面这些文件。

  • 公钥文件,包含了主密钥和三个子密钥的公钥。
  • 主密钥的私钥文件 (C)只包含主密钥的私钥。
  • 加密子密钥的私钥文件(E)不含主密钥的私钥。
  • 签名子密钥的私钥文件(S)不含主密钥的私钥。
  • 身份认证子密钥的私钥文件(A)不含主密钥的私钥。
  • 三个子密钥合在一起的私钥文件,不含主密钥的私钥。

把上面所有的这些文件都离线保存,两份至少。比如 U 盘,或者打印出来,成方便扫描的格式。

然后在个人电脑上只使用公钥,以及各种子密钥的私钥文件。公钥还需发布到网络上。

我有在用 Thunderbird 邮件客户端,里面已经内置了 openGPG 的管理器,也可以生成加密邮件和签名所需的密钥,这里我还是建议自己手工生成密钥为好,然后只需要在 Thunderbird 中导入上面做的三个子密钥合在一起的私钥文件,以及公钥文件就可以了使用了。

注意:如果只导入子密钥的私钥的话,Thunderbird 中的管理器是无法延长密钥过期时间的,即使再导入主私钥也不行,这里似乎有个顺序问题。先导入主私钥,再导入子私钥是可以完整展示所有的私钥,如果反过来就不行。

邮件的加密与签名是怎么回事?

比如我要发邮件给甲,那么我就用甲的加密公钥对邮件内容加密,然后用我自己的签名私钥给邮件签名。

甲收到邮件后,需要用我的签名公钥来验证是否真的是我发出的邮件,还有就是用他自己的加密私钥对邮件内容进行解密。

加密与签名是独立的事件,并无联系。

加密邮件的目的是只有收信人才能看到邮件的内容。

邮件签名的目的是确认发信人是发信人邮箱地址的持有人,而不是其它的冒名者。

GPG可以用来加密邮件,可以为邮件签名,还可以做什么?

  • 可以用 PGP 为 Gig commit 签名,很高级的做法。
  • 使用 PGP 进行 SSH 验证。
  • 用公钥加密文件,然后丢到任何的云盘,不担心会被偷窥,需要使用的时候,再下载回来,用自己的私钥解密就可以了。
  • 文档的签名与认证,比如很多大型软件的下载包除了有 MD5摘要验证以外,还会有签名文件。
  • 还有很多,我都不会。

怎样使用 GPG?

当然,需要一个 GPG 环境,如果用 Linux,一般已经内置了相关软件,比如我用的 Manjaro, 直接用就是了。

如果是 Windows,我用的是 gitbash 环境,它包含了 GPG 环境。

gitbash-gpg-version.jpg

2021年,用更现代的方法使用PGP


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK