GPG 使用介绍

发布时间: 更新时间: 总字数:2003 阅读时间:4m 作者: IP上海 分享 网址

GPG(GNU Privacy Guard)是一种基于Open PGP标准的加密方式,本文介绍如何安装和使用 GPG。

什么是 GPG

  • PGP(Pretty Good Privacy) 是一种常用的加密方式,在 1991 年由 Phil Zimmermann 开发,现在归属于 Symantec 公司,付费商业软件

安装客户端工具

Mac 安装 GPG

brew install gnupg
或
brew cask install keybase

Win 安装 GnuPG

$ gpg --version
gpg (GnuPG) 1.4.20
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: ~/.gnupg
Supported algorithms:
Pubkey: RSA, RSA-E, RSA-S, ELG-E, DSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

在一些系统中会使用 gpg2(其实 window 7 并没有使用),信息如下:

$ gpg2 --version
gpg (GnuPG) 2.0.30 (Gpg4win 2.3.3)
libgcrypt 1.6.6
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: C:/Users/Administrator/AppData/Roaming/gnupg
Supported algorithms:
Pubkey: RSA, RSA, RSA, ELG, DSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

ubuntu

sudo apt update
sudo apt install gnupg

CentOS

sudo dnf install gnupg2 # 或 sudo yum install gnupg2

使用

我们可以自己生成 GPG key 并使用,也可以采用 keybase 生成的 GPG Key

常用命令

$ gpg --gen-key
$ gpg --full-generate-key
$ gpg --list-keys
$ gpg --list-secret-keys
$ gpg2 --list-keys
$ gpg2 --list-secret-keys

$ gpg2 --keyserver hkp://pool.sks-keyservers.net --send-keys C6EED57A
$ gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys C6EED57A

# 加密文件
gpg --encrypt --recipient "Your Name" file.txt

# 解密文件
gpg file.txt.gpg

# 签名文件
gpg --sign file.txt
gpg --detach-sign file.txt  # 分离签名

# 验证签名
gpg --verify file.txt.sig file.txt

gpg --verify file.txt.gpg file.txt

生成 GPG key

gpg --gen-key
gpg --full-generate-key

具体步骤如下:

~ xiexianbin$ gpg --gen-key
gpg (GnuPG) 2.2.15; Copyright (C) 2019 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.

注意:使用 “gpg --full-generate-key” 以获得一个功能完整的密钥产生对话框。

GnuPG 需要构建用户标识以辨认您的密钥。

真实姓名: xiexianbin
电子邮件地址: me@xiexianbin.cn
您选定了此用户标识:
    “xiexianbin <me@xiexianbin.cn>”

更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? o
我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘
、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数
发生器有更好的机会获得足够的熵。
gpg: 密钥 8284896418BCC645 被标记为绝对信任
gpg: 目录‘/Users/xiexianbin/.gnupg/openpgp-revocs.d’已创建
gpg: 吊销证书已被存储为‘/Users/xiexianbin/.gnupg/openpgp-revocs.d/11518af49eaa27d86ea01b5c901487ea218aeb1a.rev’
公钥和私钥已经生成并被签名。

pub   rsa2048 2019-05-16 [SC] [有效至:2021-05-15]
      11518af49eaa27d86ea01b5c901487ea218aeb1a
uid                      xiexianbin <me@xiexianbin.cn>
sub   rsa2048 2019-05-16 [E] [有效至:2021-05-15]
  • gpg --full-generate-key 命令会启动一个交互式向导,引导你完成密钥生成过程。关键在于选择推荐的默认选项或较新的安全选项:
  • 请选择您想要的密钥种类:
    • 选择 (1) RSA and RSA (default)。这是推荐的通用选项,它会生成一个 RSA 主密钥(用于签名和认证)和一个 RSA 子密钥(用于加密)。GnuPG 默认会使用 Version 4 格式来存储这些密钥。
    • (2) DSA and Elgamal
    • (3) DSA (仅签名)
    • (4) RSA (仅签名)
    • (7) ECC and ECC (实验性)
    • (8) ECC (仅签名)
    • (9) ECC and Elgamal (实验性)
  • 您想要多大的密钥? (2048):
    • 推荐:输入 4096。4096 位是目前行业推荐的安全长度
  • 密钥的有效期是? (0) (单位:天):根据你的需求设置。0 表示永不过期
  • 真实姓名 (Real name):输入你的名字
  • 电子邮件地址 (Email address):输入你的电子邮件地址
  • 注释 (Comment):可选,你可以添加一个描述
  • 输入您的密码 (Passphrase):为你的私钥设置一个强密码

验证密钥版本

gpg --export --export-options export-minimal <pub GPG key ID> | gpg --list-packets

查看 GPG key

gpg --list-keys
gpg --list-secret-keys

示例:

~ xiexianbin$ gpg --list-keys
/Users/xiexianbin/.gnupg/pubring.kbx  # 备份该文件即备份公、私钥
------------------------------------
pub   rsa2048 2019-05-16 [SC] [有效至:2021-05-15]
      11518af49eaa27d86ea01b5c901487ea218aeb1a
uid           [ 绝对 ] xiexianbin <me@xiexianbin.cn>
sub   rsa2048 2019-05-16 [E] [有效至:2021-05-15]

~ xiexianbin$

注意:

  • pub:行显示主密钥信息,包括密钥类型、长度、创建日期以及密钥指纹 (fingerprint)。SC 表示此主密钥可用于签名 (Sign) 和证书 (Certify)。
  • uid 行显示用户 ID
  • sub:行显示子密钥信息,E 表示此子密钥可用于加密 (Encrypt)
  • 11518af49eaa27d86ea01b5c901487ea218aeb1apub GPG key ID

导出公钥

# 导出为二进制 (.gpg) 文件
gpg --export <pub GPG key ID> > my_public_key.gpg
gpg --export "你的名字 <你的邮箱@example.com>" > my_public_key.gpg

# 导出为 ASCII armored (.asc) 文件 (推荐,更易于分享)
gpg --armor --export <pub GPG key ID>
gpg --armor --export <pub GPG key ID> > my-public-key.asc

示例:

~ xiexianbin$ gpg --armor --export 11518af49eaa27d86ea01b5c901487ea218aeb1a
-----BEGIN PGP PUBLIC KEY BLOCK-----
...
-----END PGP PUBLIC KEY BLOCK-----

$ gpg --armor --export B5A1B728A2FD170FE0E6C4E2D6B71988603A67D2 > x.asc
$ file x.asc
x.asc: PGP public key block Public-Key (old)

$ gpg --export B5A1B728A2FD170FE0E6C4E2D6B71988603A67D2 > x2.asc
$ file x2.asc
x2.asc: OpenPGP Public Key Version 4, Created Sun May 26 06:37:06 2019, RSA (Encrypt or Sign, 4096 bits); User ID; Signature; OpenPGP Certificate

GPG key 格式:

-----BEGIN PGP PUBLIC KEY BLOCK-----
...
-----END PGP PUBLIC KEY BLOCK-----

生成撤销证书

撤销证书用于在私钥丢失、泄露或不再使用时,向 GnuPG 社区声明该密钥无效,将 revoke.asc 文件安全地存储在离线位置,绝不能让其他人获取你的撤销证书

gpg --output revoke.asc --gen-revoke "Your Name <your.email@example.com>"

删除 GPG key

gpg --delete-keys <pub GPG key ID>
gpg --delete-secret-keys <pub GPG key ID>

常见的 keyserver 服务器

F&Q

file x.gpg 提示 (PGP) signature Signature (old)

  • 一个无关紧要的信息提示,只要签名验证成功,通常可以安全地继续使用文件。关键在于验证签名是否是 Good signature
  • GnuPG 实现了 OpenPGP 标准 (RFC 4880),而这个标准是随着时间演进而发展的。早期的 PGP 版本和后来的 OpenPGP 标准之间可能存在一些差异,导致旧格式的签名在现代 GPG 工具中被标记为 old,这通常不是一个错误,而是一个提示信息。

参考

  1. https://en.wikipedia.org/wiki/Pretty_Good_Privacy
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数