GPG 秘钥对生成及简单应用

0.前语

使用 GPG 秘钥对有段时间了, 在使用的过程中发现了一些其不俗之处. 其主秘钥可以通过生成子秘钥来完成一些特定操作, 例如: 签名(Sign) 、 加密(Encrypt) 和 验证(Auth) 操作. 这里只演示主秘钥对的生成以及最简单的应用, 如有需要 我可能会专门再更一篇文章.

0.1 系统环境介绍.

  • 系统: MacOS Big Sur(11.2.3)
  • 终端: ZSH iTerm2

    如有需要我会做 Linux & Windows 下的一些操作.

1. GPG 软件安装

有两种方式可以安装 一种是通过包管理器 另一种是通过二进制文件安装. 大家自选一种即可.

  • 1.1 包管理器安装: brew install gpg
  • 1.2 二进制文件安装
  • 1.3 安装完成后, 使用gpg --version验证一下是否安装成功即可.
    验证安装

2. 主秘钥对生成

  • 2.1 生成主秘钥: gpg --full-generate-key

  • 2.2 选择加密算法:

    这里演示默认算法 RSA. 如果大家希望了解一下这几个算法有什么区别 可以私信我出一篇文章来专门描述.

    • (1) RSA and RSA (default)
    • (2) DSA and Elgamal
    • (3) DSA (sign only)
    • (4) RSA (sign only)
    • (14) Existing key from card
  • 2.3 输入秘钥长度

    秘钥长度越长越安全则相对的计算与验证过程时间越长, 如果秘钥长度越短则与之相反.

    这里长度区间在 1024 ~ 4096 之间, 默认长度 3072. 这里演示 4096.

    1
    2
    3
    Your selection? 1
    RSA keys may be between 1024 and 4096 bits long.
    What keysize do you want? (3072)
  • 2.4 输入过期时间

    这里可以按照自己的需求设置过期时间, 建议时间不要太短. 或者也可以设置为不过期.

    如果要设置 10 天后过期,则输入 10 即可, 如果要设置 4 年后过期, 输入 4y 即可. 在数值后加上相关单位即可, 天数可以不用加. 设置为 0 则为不过期. 这里设置为 1 个月, 大家不要照抄.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    What keysize do you want? (3072) 4096
    Requested keysize is 4096 bits
    Please specify how long the key should be valid.
    0 = key does not expire
    <n> = key expires in n days
    <n>w = key expires in n weeks
    <n>m = key expires in n months
    <n>y = key expires in n years
    Key is valid for? (0)
  • 2.5 确认过期时间

    这里会输出过期时间确认是否正确, 如果输入错误直接回车或者输入 N 即可, 如果正确在输入 y.

    1
    2
    3
    Key is valid for? (0) 1m
    Key expires at Thu May 6 16:06:41 2021 CST
    Is this correct? (y/N)
  • 2.6 输入名称

    这里建议输入英文, 非英文字符可能会存在各种稀奇古怪的问题. 可以输入空格与.字符.

    1
    2
    3
    Is this correct? (y/N) y
    GnuPG needs to construct a user ID to identify your key.
    Real name:
  • 2.7 输入邮箱地址

    务必输入正确的邮箱地址.

    1
    2
    Real name: Test T. William
    Email address:
  • 2.8 输入备注

    这里可以输入也可以不输入. 不输入直接回车即可.

    1
    2
    Email address: test@ora.pub
    Comment:
  • 2.9 最终确认

    核验输入的信息是否有误, 有误则按照提示进行修改, 无误则输入 O 进行确认即可.

    1
    2
    3
    4
    5
    Comment: This is a test GPG Key Chain.
    You selected this USER-ID:
    "Test T. William (This is a test GPG Key Chain.) <test@ora.pub>"

    Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?
  • 2.10 输入主秘钥对密码

    这里的密码务必谨记, 否则丢失密码后则无法找回该主秘钥以及相关子秘钥.

    输入主秘钥对密码

    • 2.10.1 再次确认

      如果输入的密码是弱密码, 则会提示该密码为弱密码, 提醒修改密码, 当然也可以确定继续使用该弱密码.

      确认使用弱密码

  • 2.11 完成流程图
    完成流程图

  • 2.12 查看生成的秘钥对并复制该秘钥对的指纹.

    使用gpg -K可以查看生成的该秘钥对并复制该秘钥对的指纹. 就是 sec 下面的那行长度为 40 的十六进制字符串.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    william ~ gpg -K
    /Users/william/.gnupg/pubring.kbx
    ---------------------------------
    sec rsa4096 2021-04-06 [SC] [expires: 2021-05-06]
    CF9943BD62C52BA54ACF40B8DF4BF13703DED351
    uid [ultimate] Test T. William (This is a test GPG Key Chain.) <test@ora.pub>
    ssb rsa4096 2021-04-06 [E] [expires: 2021-05-06]

    william ~

3. 增加相关子秘钥并添加功能

  • 3.1 编辑主秘钥

    这里输入 gpg --edit-key 加上刚刚复制的指纹.

    gpg --edit-key CF9943BD62C52BA54ACF40B8DF4BF13703DED351

  • 3.2 增加子秘钥

    输入 addkey , 详细一些或者其他命令可以输入 help 进行查看.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    william ~ gpg --edit-key CF9943BD62C52BA54ACF40B8DF4BF13703DED351
    gpg (GnuPG/MacGPG2) 2.2.24; Copyright (C) 2020 Free Software Foundation, Inc.
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.

    Secret key is available.

    sec rsa4096/DF4BF13703DED351
    created: 2021-04-06 expires: 2021-05-06 usage: SC
    trust: ultimate validity: ultimate
    ssb rsa4096/CD920472747844AF
    created: 2021-04-06 expires: 2021-05-06 usage: E
    [ultimate] (1). Test T. William (This is a test GPG Key Chain.) <test@ora.pub>

    gpg>
  • 3.3 选择该子秘钥的功能及算法

    sign 是签名, encrypt是加密, 按需输入即可. 老样子, 这里选择 RSA.

    1
    2
    3
    4
    5
    6
    7
    8
    gpg> addkey
    Please select what kind of key you want:
    (3) DSA (sign only)
    (4) RSA (sign only)
    (5) Elgamal (encrypt only)
    (6) RSA (encrypt only)
    (14) Existing key from card
    Your selection?
  • 3.4 输入子秘钥的长度

    与上文一样, 不再赘述.

    1
    2
    3
    Your selection? 6
    RSA keys may be between 1024 and 4096 bits long.
    What keysize do you want? (3072)
  • 3.5 输入子秘钥的过期时间

    没错, 子秘钥也可以设置过期时间.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    What keysize do you want? (3072) 4096
    Requested keysize is 4096 bits
    Please specify how long the key should be valid.
    0 = key does not expire
    <n> = key expires in n days
    <n>w = key expires in n weeks
    <n>m = key expires in n months
    <n>y = key expires in n years
    Key is valid for? (0)
  • 3.6 确认子秘钥信息.

    确认信息

    1
    2
    3
    Key is valid for? (0) 1m
    Key expires at Thu May 6 16:40:17 2021 CST
    Is this correct? (y/N)
  • 3.7 再次确认

    1
    2
    Is this correct? (y/N) y
    Really create? (y/N)
  • 3.8 输入主秘钥的密码进行操作.
    输入主秘钥的密码进行操作.

  • 3.9 保存并退出

    输入save即可保存.

  • 3.10 查看该秘钥

    gpg -K 发现在原来的主秘钥下新增了一个ssb, 即子秘钥. 这里我是重新生成了一个签名功能的子秘钥, 故而与上文不一致.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    william ~ gpg -K
    /Users/william/.gnupg/pubring.kbx
    ---------------------------------
    sec rsa4096 2021-04-06 [SC] [expires: 2021-05-06]
    CF9943BD62C52BA54ACF40B8DF4BF13703DED351
    uid [ultimate] Test T. William (This is a test GPG Key Chain.) <test@ora.pub>
    ssb rsa4096 2021-04-06 [E] [expires: 2021-05-06]
    ssb rsa4096 2021-04-06 [S] [expires: 2021-05-06]

    william ~
  • 3.11 生成验证功能的子秘钥.

    这里的验证功能可以使用在 SSH 服务上, 比如说使用 SSH 登录 vps 或者验证 SSH 协议的 Git.

    不一步一步演示了, 直接展示操作流程.

    在编辑主秘钥时需要加入 --expert , 否则无法增加验证功能.

    在选择功能那里时需要注意, 需要根据自己的需求来选择. 我只想要这个子秘钥有验证功能, 但它默认选中了 签名 和 加密 功能, 故而我分别输入了 S 和 E 取消选中该功能, 并输入 A 选中验证功能.

    生成验证子秘钥
    生成验证子秘钥2
    生成验证子秘钥3

    • 3.11.1 查看秘钥对

      gpg -K发现多了个 A 功能的子秘钥.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    william ~ gpg -K
    /Users/william/.gnupg/pubring.kbx
    ---------------------------------
    sec rsa4096 2021-04-06 [SC] [expires: 2021-05-06]
    CF9943BD62C52BA54ACF40B8DF4BF13703DED351
    uid [ultimate] Test T. William (This is a test GPG Key Chain.) <test@ora.pub>
    ssb rsa4096 2021-04-06 [E] [expires: 2021-05-06]
    ssb rsa4096 2021-04-06 [S] [expires: 2021-05-06]
    ssb rsa4096 2021-04-06 [A] [expires: 2021-05-06]

    william ~

4.给 Git 项目添加 GPG 签名.

  • 4.1 导出该 GPG 主秘钥公钥

    gpg --armor --export加上主秘钥的指纹.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    william ~ gpg --armor --export CF9943BD62C52BA54ACF40B8DF4BF13703DED351
    -----BEGIN PGP PUBLIC KEY BLOCK-----

    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
    3s6PIdyYUjBRs04QwcwSt5NweJoLz399dzA=
    =K177
    -----END PGP PUBLIC KEY BLOCK-----
    william ~
  • 4.2 添加该主秘钥到 GitHub

    GitHub -> 设置 -> SSH and GPG Keys -> New GPG key

    码云同理.

    输入 GPG 主秘钥公钥

    • 4.2.2 添加完成后可以在 GitHub 上查看到该秘钥的相关信息.
      主秘钥相关信息
  • 4.3 为 Git 项目增加 GPG 签名

    添加签名有两种, 一种是为当前 git 项目添加 GPG 签名, 还有一种是为本地所有的 git 项目都添加 GPG 签名. 这里演示为当前项目添加 GPG 签名, 全局命令加上--global即可.

    • 4.3.0 git 全局配置命令

      git config --global

      • 例如配置全局提交昵称:
        1
        git config --global user.name "Test T. William"
    • 4.3.1 设置 git 提交昵称.

      1
      git config user.name "Test T. William"
    • 4.3.2 设置 git 提交邮件

      1
      git config user.email "test@ora.pub"
    • 4.3.3 设置 git 签名秘钥指纹

      1
      git config user.signingkey CF9943BD62C52BA54ACF40B8DF4BF13703DED351
    • 4.3.4 开启 git 提交 GPG 签名

      1
      git config commit.gpgsign true
    • 4.3.5 验证该签名

      任意 commit 一个文件并 push, 在 GitHub 的提交记录中均可以看到验证记录.

      在执行第3步时理论上是要输入主秘钥密码的.

      1
      2
      3
      4
      touch test
      git add test
      git commit
      git push

      Commit 签名

5. 使用 GPG 的 SSH 验证功能

使用 ssh 的服务有很多种, 这里举例最常用的两种, 一种是 ssh 登录 vps, 一种是使用 ssh 提交代码到 GitHub.

  • 5.1 导出 ssh 公钥

    gpg --export-ssh-key 加上主秘钥的指纹即可

    1
    2
    3
    william ~ gpg --export-ssh-key CF9943BD62C52BA54ACF40B8DF4BF13703DED351
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCa789czkPwlftgCBAJubAsdWMipCVL68ID7DWJoSn+O0gJYwyvpUgkymzJuNCISJeM3CVOkyKU2IV3ANRzHqFkguwWIT2WZl7bJm3odKUnsNjYJGLaXPdL5O+u0+4tkLJsDWzC8RL4y0RBy1KT/JKC0tKZTgAFGMJtOGFur3v6fTWmTiEcvAskcmwXjHFbIdpgUKitH1uDYeK6C/09rSuJA3udarYAxRgZ3jHw6XOgbaOIL8G/HW9gineeuIt8PzIsfEZkD5wM9NWcsEqRAQ8tj13MbbKhAw09+/e8HVzSfdIiswkQWWzVeE9Zv/ES+dh1cgSSBncM/hufyxXrbgDOfYoV9tYtIt7gixGBV76Th0zbtkordiOMv6dul2W/KN2Y/qMuquNy3kUmP/JQJyDoZ00NZ4jkfYYoT/9a+xf1y4SVTZtWLPtMr8Eaw8AGGtwqx/LZyND0S9AqroqyaWHgbcIJcK1bF+daPK/APaaPeLyuIhUYDMy/RKmgtDJGJavmd++HEiLaCDxYlXjgCckoCZ9+wpx4GJD4MKppeI/VJEKn3XzVx+En81XlKP8spft+GkXe5naQg2kxBD5Ja2r02EznsD12cXUecMbsqNQjAgvclwjfifRt+J4rZ2hEbIKb1vq1NVfR9fUa/P1GTTi3qusSLycSSWKxV+/jeQZPMw== openpgp:0x259A1365
    william ~
  • 5.2 添加 SSH 公钥到 vps 和 GitHub 中

    • 5.2.1 添加至 vps

      使用原始登录方式登录到 vps 中, 进入用户主目录下的 ssh 配置目录(cd ~/.ssh), 将上文中导出的 ssh 公钥添加至authorized_keys中, 注意: 每行只能包含一个公钥!

    • 5.2.2 添加至 GitHub

      登录GitHub. GitHub->设置->SSH and GPG keys->SSH keys->New SSH key

  • 5.3 开启 GPG 的 SSH 验证功能

    注: 这里我使用的是ZSH, 使用bash的话需要进行更改, 不能照搬.

    • 5.3.1 开启 GPG 的 SSH 验证功能

      enable-ssh-support添加到~/.gnupg/gpg-agent.conf文件中

    • 5.3.2 指定用于 SSH 的主秘钥指纹

      将主秘钥指纹添加到~/.gnupg/sshcontrol

    • 5.3.3 使用gpg-agent替代ssh-agent服务

      将以下两行添加至~/.zshrc, 如果是 bash 则添加至~/.bashrc, 并执行source ~/.zshrc或重启命令行生效即可.

      1
      2
      # GPG Agent Sock
      export SSH_AUTH_SOCK="${HOME}/.gnupg/S.gpg-agent.ssh"
  • 5.4 验证 SSH 功能.

    由于篇幅关系, 这里直接验证 github, 不再演示登录 vps 操作.

    1
    2
    3
    william ~ ssh -T git@github.com
    Hi orangejx! You've successfully authenticated, but GitHub does not provide shell access.
    william ~

6. 结束语

  • 使用 GPG 应该有一段时间了, 验证功能是真的方便, 只有有个主秘钥对就能满地跑了. 验证 vps 和 GitHub 都不用再生成新的秘钥, 有这个主秘钥对管理很方便.
  • 还有这个签名功能, 每个项目还可以分开来设置签名秘钥.
  • 加密功能我一般是用在邮件通信, 在Mail.app上配置下 GPG 就可以收发经过加密和签名的邮件了, 不过这个功能我用的比较少, 很少会用到需要加密的邮件, 在实际应用场景中就更少了, 只有Facebook的通知邮件是支持的. 目前我知道的是这样的, 也许还有别的, 欢迎补充.