GnuPG使用探索

Table of Contents

1. 生成密钥

gpg --gen-key

更全面的生成

gpg --full-generate-key

2. 查看保存的密钥

2.1. 查看保存的公钥

gpg --list-keys

2.2. 查看保存的私钥

gpg --list-secret-keys

3. 术语相关解释

3.1. keyid

3.1.1. short版本

你的公钥fingerprint的末尾8位数字,当然是ascii版本。

3.1.2. long版本

你的公钥fingerprint的末尾16位数字。

3.2. user-id

pub   rsa3072 2022-12-21 [SC]
      FE9DAF93927CECCDCF0F1EDDCBD2D53485843602
uid           [ 绝对 ] testa (comment) <aaa@mail.com>
sub   rsa3072 2022-12-21 [E]

这里testa可以认为是user-id,括号里的东西是在gen-key的时候输入的注释。

3.3. fingerprint

其实是缩短版本的公钥,因为他的传播更简单,更方便你向其他人展示,比如在ppt上放,其他人可以对拿到的你的公钥进行指纹计算,再把结果和你的指纹对比,就可以确认公钥的真实性。

4. 功能

其实大体上有两个主要功能,其他如Certify和Auth用的无感或者比较少。

4.1. 签名和验证

4.1.1. 签名

gpg --sign file

如果要生成可打印的ascii版本,可以用

gpg --clearsign file

如果需要单独分离出来的签名文件,可以用

gpg --detach-sign file

如果需要单独分离出来的可打印的ascii版本的签名文件,可以用

gpg --detach-sign --armor file

4.1.2. 验证

首先确保你导入了签名者的公钥 其次请查看对比导入的公钥的指纹,以及你从可信渠道获得的签名者的指纹是否一致 之后再进行验证

gpg --verify sig_file

4.1.3. 加密和解密

  1. 加密
    gpg --recipent/-r user_id --encrypt/-e file
    

    如果要加密成可打印的ascii文本,可以用

    gpg --armor/-a --recipent/-r user_id --encrypt/-e file
    

    可以指定多个接受者

    gpg --armor/-a --recipent/-r user_id1 user_id2 --encrypt/-e file
    
  2. 解密
    gpg --decrypt/-d encrypted_file --output decrypted_file
    

    这时候会用你的私钥去解密,如果不加 --output 选项的话,就会把解密结果输出到stdout

5. 待了解方面 [75%]

  • [ ] 子密钥如何和主密钥绑定的
    • 交叉验证
  • [X] 在有多个子钥情况下,是否只需要公布主密钥的公钥部分和其指纹即可
    • 实际上,当你添加一个子钥之后,主密钥的导出公钥是会增长的,包含了你的子密钥的公钥,但是指纹是你主公钥的指纹,这个不会改变。 我猜测,应该是gpg导入公钥后自动解析,分离出主公钥和子公钥,然后单独计算主公钥的指纹并告诉你。 实际上,经过我自己对比发现,导出公钥会存在一些空格,这些空格分割开不同含义的字段。
  • [X] 理解撤销证书是如何起作用的
    • 生成撤销证书是不会改变原本的密钥信息的
    • 生成撤销证书需要使用相应密钥的私钥
    • 猜测:撤销证书不过是一句话的签名,这句话可以是“我是a,我不用ABC这个密钥了”,然后把这句话的文本编码用ABC这个密钥的私钥签名,之后发布出去, 其他人再搜索a的公钥的时候会获取这个证书,他可以用得到的a的公钥来验证这句话就是a说的,然后就不再相信这个密钥。
    • 实际上这是一种自我放弃,当你的密钥泄露的时候,你有你的私钥,还有其他人有,然后你高呼:“大家快跑,别再相信这里了!”很显然,其他也有你私钥的人是不会这么说的, 如此一来就相当于撤销了这个密钥的真实性。
  • [X] 理解web of trust是如何具体实现的,比如我如何通过签名一个公钥来告诉别人我信任它
    • 是通过签名来实现的,比如我可以把“a拥有ABC这个密钥,我是b我说的”这句unicode编码或者英文的ascii编码的话用我的私钥签名,生成一个sig文件 然后别人搜索a这个人的时候,也会获得这个sig,然后他就会找b的公钥来验证这个签名,验证通过后他就知道,这个a的公钥b已经担保过了。1

Footnotes:

Author: e0dZTBk

Created: 2022-12-22 四 21:21