环境
Ubuntu18.04
gpg version 2.24
参考文档
GnuPG
栗子文档
阮一峰
key Management
简介
他人用公钥来加密,自己用私钥来解密
自己用私钥来签名,他人用公钥来验证
The public key is given out to the world; the private key must be kept a secret. Anyone possessing the public key can encrypt a message so that it can only be read by someone possessing the private key. It's also possible to use a private key to sign a file, not encrypt it. If a private key is used to sign a file, then anyone who has the public key can check that the file was signed by that key. Anyone who doesn't have the private key can't forge such a signature.
通信流程
- Say S wants to send a message to G. To do that:
- S looks for G's public key.
- S encrypts the message using G's public key.
- S signs the encrypted message with his own private key.
- G receives an encrypted signed message. The untrusted email header says it is from S.
- G looks for S's public key.
- G verifies the signature using S's public key. Now, G is convinced message is from S.
- G decrypts message using his own private key.
The whole scheme relies on the assumption that public keys are trustworthy
https://security.stackexchange.com/a/133393
词汇
简写 | 含义 | |
---|---|---|
key pair | 密钥对(包含两部分) | |
primary key [master key] | 主密钥(包括主公钥,主私钥) | |
public key | pub | 公钥 |
secret key | sec | 私钥 |
sub-key | sub | 子公钥 |
secret sub-key | ssb | 子私钥 |
key fingerprint | 密钥指纹 |
文件/目录
/private-keys-v1.d/
私钥存放的地方
/pubring.kbx
以其他格式存放的公钥环,与gpgsm
共享
/trustdb.gpg
存放信任数据
/openpgp-revocs.d/
gpg存储预先生成的吊销证书的目录。文件名对应于相应密钥的OpenPGP指纹。建议备份这些证书
GnuPG 功能
-
跟算法有关,有些算法不支持某些功能
-
有些功能是私钥部分的,例如 认证[C]、签名[S]、解密
删除私钥部分则无法完成操作
-
有些功能是公钥部分的,例如 验证签名、加密[E]
删除私钥部分可以完成操作
# 解密 lfp@legion:~$ gpg --homedir ~/.gnupg-test -o ~/bin/a.de.txt --decrypt ~/bin/a.en.txt gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test' gpg: 由 4096 位的 RSA 密钥加密,钥匙号为 0x9B690269F3C16E7B、生成于 2020-05-05 “usmile
” gpg: 解密失败:没有秘匙 # 签名 lfp@legion:~$ gpg --homedir ~/.gnupg-test --sign ~/bin/test.txt gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test' gpg: no default secret key: 没有秘匙 gpg: signing failed: 没有秘匙
S: sign
签名功能
E: encrypt
加密功能
A: authenticate
作用
-
身份验证功能
-
在其他协议中用于身份验证,例如SSH TLS
https://superuser.com/a/1286352
其他
- 只能通过 --expert 选项制作具有该功能的子公钥
C: certify
主密钥必备能力,且只有主密钥具有
作用
- 认证具有不同功能的子密钥)
特性
-
在key id 之后输入!,将强制使用该key
-
当多个密钥同时具有某个功能的时候,优先使用最新未吊销的密钥
例如有两个具有[S]的子密钥, 在未指定使用哪个密钥签名的情况下,优先使用最新未被吊销的密钥
-
密钥的过期时间相当于一个自签名(自己的私钥给公钥签名),公钥可以验证自身的签名
修改过期时间就会给自己新增加一个自签名(覆盖旧签名,但不删除)
Updating a key's expiration time
-
公钥、私钥的keyID是相同的,一起被创建,每个公钥对应一个私钥
-
一个主密钥可以绑定多个子密钥,平时加密解密使用的都是子密钥,主密钥只有在某些特定的情况下才使用的,比如新建一个子密钥,撤销废除一个子密钥,签名认证别人的密钥等。
这样设计的好处的是子密钥遗失和泄漏不影响主密钥的信用,只需要撤销废除子密钥,然后再发布到密钥服务器,告诉其它人这个子密钥已经作废了,主密钥的公钥长久积累下来的多人签名认证可以长久保留下来
如果重建这层信任还要再让别人再签名认证你的新密钥,很麻烦。所以主密钥特别重要的,如果它泄漏了,那这个主密钥下所有子密钥全都报废
-
正确的使用姿势是导出主私钥备份,删除本机的主私钥,本机只保留子私钥用于日常操作,哪怕子密钥被人盗取,也不影响主密钥,尽最大程度保护你的主密钥。
https://www.zhihu.com/question/53042506/answer/306354115
命令
gpg --armor
以ASCII 形式输出
gpg --output
gpg -o file
指定输出文件名
gpg --version
不能缩写,打印版本和许可信息
gpg --homedir
仅在命令行有效
指定生成的密钥环以及其他数据保存的地方
默认是~/.gnupg
目录
mkdir ~/.gnupg-test
gpg --homedir ~/gnupg-test
gpg --expert
允许用户执行某些荒谬或“愚蠢”的事情,例如对已过期或已撤销的密钥进行签名,或某些潜在的不兼容的事情,例如生成异常的密钥类型。这还会禁用有关潜在不兼容操作的某些警告消息。顾名思义,此选项仅适用于专家。如果您不完全了解它允许您执行的操作,请不要进行此操作
在创建具有身份验证功能[A]的子密钥时需要添加此参数,不加此参数,缺少一些可选项
gpg --full-gen-key
可以自定义密钥的参数,具有所有的可选项
gpg --gen-key
使用当前默认的参数快速生成密钥
同时会生成密钥的撤销证书
生成的主密钥默认具有[SC] 两项功能
In addition to the key a revocation certificate is created and stored in the ‘openpgp-revocs.d’ directory below the GnuPG home directory
gpg --list-keys
gpg -k
列出公钥,如果没有指定则列出所有
gpg --list-secret-keys
gpg -K
列出私钥,如果没有指定则列出所有
lfp@legion:~$ gpg --homedir ~/.gnupg-test -k
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
/home/lfp/.gnupg-test/pubring.kbx
---------------------------------
pub rsa4096/0x5AF8B6B68CC7F785 2020-05-05 [SC] # 后面没有日期的是永不过期
密钥指纹 = 0298 F65F 32F5 A7CA D764 A941 5AF8 B6B6 8CC7 F785
uid [ 绝对 ] usmile
sub rsa4096/0x9B690269F3C16E7B 2020-05-05 [E] # 后面没有日期的是永不过期
sub rsa3072/0x8EF9605115CB7A14 2020-05-05 [S] [有效至:2020-05-12]
gpg --gen-revoke
为整个密钥(主密钥以及所有子密钥)生成撤销证书,如果仅仅想撤销某个子密钥则通过--edit
命令完成
gpg --gen-revoke keyId --output path/revoke.asc
gpg --edit-key
gpg --edit-key
编辑该keyid代表的密钥
gpg --delete-keys
gpg --delete-keys
从密钥环中删除该密钥的公钥部分,但是需要先删除私钥部分
gpg --delete-secret-keys
gpg --delete-secret-keys
从密钥环中删除该密钥的私钥部分,公钥部分还存在
gpg --delete-secret-and-public-key
gpg --delete-secret-and-public-key
从密钥环中删除该密钥对,先删除私钥再删除公钥
gpg --encrypt
gpg --recipient
gpg --homedir ~/.gnupg-test -r 0x8EF9605115CB7A14 -o ~/bin/a.en.txt --encrypt ~/bin/a.txt
指定用谁的公钥加密文件,并指定加密后的文件名
gpg --decrypt
gpg --output
解密文件,并指定解密后生成的文件名
gpg --sign
采用二进制储存,生成[.gpg]文件
默认情况下选择最新未被吊销的具有[S]功能的密钥
可以通过--local-user
和 --default-key
指定
gpg --clearsign
采用ASCII码形式储存,生成[.asc]文件
gpg --detach-sign
与文件内容分开存放,生成单独的签名文件[.sig](二进制形式)
gpg --detach-sign --armor
生成单独的签名文件[.asc](ASCII码形式)
gpg --verify
gpg --verify [.gpg]
验证签名
gpg --export
gpg --homedir ./gnupg-test --export --armor --o public-keys.gpg 0xD93D03C13478D580
导出所有密钥的公钥部分 (master + subkeys)
可以指定具体某个密钥
gpg --export-secret-keys
gpg --homedir ./gnupg-test --export-secret-keys --armor --o secret-keys.gpg 0xD93D03C13478D580
导出所有密钥的私钥部分 (master + subkeys)
gpg --export-secret-subkeys
gpg --homedir ./gnupg-test --export-secret-subkeys --armor --o secret-subkey_sign.gpg 0x1ED73636975EC6DE!
导出某个子密钥的私钥部分
公钥服务器
hkp(HTTP Keyserver Protocol):http密钥服务器协议
公钥服务器可以通过交换机制同步新上传的公钥
公钥服务器没有检查机制,任何人都可以用你的名义上传公钥,所以没有办法保证服务器上的公钥的可靠性
一般可以通过公钥的指纹来核对,但是指纹也会被伪造
key server
hkp://keyserver.ubuntu.com:80
hkp://keyserver.ubuntu.com
hkp://pgp.mit.edu:80
hkps://pgp.mit.edu
配置文件
默认的配置文件是 ~/.gnupg/gpg.conf
和 ~/.gnupg/dirmngr.conf
.
不会自动创建,需要手动创建并添加需要的配置
Those files are not there by default, create blank files instead, then use gpg(1) and see the FILES section to configure what you want.
You do not need any sort of default files.
创建配置文件
# 创建配置文件
gpg.conf
# 添加如下内容
################################################################################
# GnuPG View Options
# 显示keyId 16位 16进制数字
# Select how to display key IDs. "long" is the more accurate (but less
# convenient) 16-character key ID. Add an "0x" to include an "0x" at the
# beginning of the key ID.
keyid-format 0xlong
# 显示指纹标识
# List all keys with their fingerprints. This is the same output as --list-keys
# but with the additional output of a line with the fingerprint. If this
# command is given twice, the fingerprints of all secondary keys are listed too.
with-fingerprint
# 保存退出
生成主密钥
lfp@legion:~$ mkdir ~/.gnupg-test
lfp@legion:~$ vim ~/.gnupg-test/gpg.conf
lfp@legion:~$ gpg --homedir ~/.gnupg-test --expert --full-gen-key
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg (GnuPG) 2.2.4; Copyright (C) 2017 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: keybox '/home/lfp/.gnupg-test/pubring.kbx' created
请选择您要使用的密钥种类:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (仅用于签名)
(4) RSA (仅用于签名)
(7) DSA (自定义用途)
(8) RSA (自定义用途)
(9) ECC and ECC
(10) ECC (sign only)
(11) ECC (set your own capabilities)
(13) Existing key
您的选择? 8
RSA 密钥可能的操作: 签名 验证 加密 认证
目前允许的操作: 签名 验证 加密
(S) 选择是否用于签名
(E) 选择是否用于加密
(A) 选择是否用于认证
(Q) 已完成
您的选择? s
RSA 密钥可能的操作: 签名 验证 加密 认证
目前允许的操作: 验证 加密
(S) 选择是否用于签名
(E) 选择是否用于加密
(A) 选择是否用于认证
(Q) 已完成
您的选择? e
RSA 密钥可能的操作: 签名 验证 加密 认证
目前允许的操作: 验证
(S) 选择是否用于签名
(E) 选择是否用于加密
(A) 选择是否用于认证
(Q) 已完成
您的选择? q
RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(3072) 4096
您所要求的密钥尺寸是 4096 位
请设定这把密钥的有效期限。
0 = 密钥永不过期
= 密钥在 n 天后过期
w = 密钥在 n 周后过期
m = 密钥在 n 月后过期
y = 密钥在 n 年后过期
密钥的有效期限是?(0) 1
密钥于 2020年05月04日 星期一 19时53分23秒 CST 过期
以上正确吗?(y/n) y
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) "
真实姓名: usmile
电子邮件地址: [email protected]
注释:
您选定了这个用户标识:
“usmile ”
更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? o
# 此时需要输入一个口令,一定要记住,后面编辑该密钥时需要用到
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
gpg: /home/lfp/.gnupg-test/trustdb.gpg:建立了信任度数据库
gpg: 密钥 0x2954C91DEAE3C032 被标记为绝对信任
gpg: directory '/home/lfp/.gnupg-test/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/lfp/.gnupg-test/openpgp-revocs.d/76D139A8F9172972195CF33C2954C91DEAE3C032.rev'
公钥和私钥已经生成并经签名。
pub rsa4096/0x2954C91DEAE3C032 2020-05-03 [C] [有效至:2020-05-04]
密钥指纹 = 76D1 39A8 F917 2972 195C F33C 2954 C91D EAE3 C032
uid usmile
检查是否成功
lfp@legion:~$ gpg --homedir ~/.gnupg-test -K
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg: 正在检查信任度数据库
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: 深度:0 有效性: 1 已签名: 0 信任度:0-,0q,0n,0m,0f,1u
gpg: 下次信任度数据库检查将于 2020-05-04 进行
/home/lfp/.gnupg-test/pubring.kbx
---------------------------------
sec rsa4096/0x2954C91DEAE3C032 2020-05-03 [C] [有效至:2020-05-04]
密钥指纹 = 76D1 39A8 F917 2972 195C F33C 2954 C91D EAE3 C032
uid [ 绝对 ] usmile
创建子密钥[S]
lfp@legion:~$ gpg --homedir ~/.gnupg-test --expert --edit-key 0x2954C91DEAE3C032
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg (GnuPG) 2.2.4; Copyright (C) 2017 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.
私钥可用。
sec rsa4096/0x2954C91DEAE3C032
创建于:2020-05-03 有效至:2020-05-04 可用于:C
信任度:绝对 有效性:绝对
[ 绝对 ] (1). usmile
gpg> addkey
请选择您要使用的密钥种类:
(3) DSA (仅用于签名)
(4) RSA (仅用于签名)
(5) ElGamal (仅用于加密)
(6) RSA (仅用于加密)
(7) DSA (自定义用途)
(8) RSA (自定义用途)
(10) ECC (sign only)
(11) ECC (set your own capabilities)
(12) ECC (encrypt only)
(13) Existing key
您的选择? 4
RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(3072)
您所要求的密钥尺寸是 3072 位
请设定这把密钥的有效期限。
0 = 密钥永不过期
= 密钥在 n 天后过期
w = 密钥在 n 周后过期
m = 密钥在 n 月后过期
y = 密钥在 n 年后过期
密钥的有效期限是?(0) 1
密钥于 2020年05月04日 星期一 19时57分58秒 CST 过期
以上正确吗?(y/n) y
真的要建立吗?(y/N) y
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
sec rsa4096/0x2954C91DEAE3C032
创建于:2020-05-03 有效至:2020-05-04 可用于:C
信任度:绝对 有效性:绝对
ssb rsa3072/0x6E3823DE57F89766
创建于:2020-05-03 有效至:2020-05-04 可用于:S
[ 绝对 ] (1). usmile
# 注意一定要保存才能生效
gpg> save
查看是否创建成功
lfp@legion:~$ gpg --homedir ~/.gnupg-test -K
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
/home/lfp/.gnupg-test/pubring.kbx
---------------------------------
sec rsa4096/0x2954C91DEAE3C032 2020-05-03 [C] [有效至:2020-05-04]
密钥指纹 = 76D1 39A8 F917 2972 195C F33C 2954 C91D EAE3 C032
uid [ 绝对 ] usmile
ssb rsa3072/0x6E3823DE57F89766 2020-05-03 [S] [有效至:2020-05-04]
lfp@legion:~$ gpg --homedir ~/.gnupg-test -k
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
/home/lfp/.gnupg-test/pubring.kbx
---------------------------------
pub rsa4096/0x2954C91DEAE3C032 2020-05-03 [C] [有效至:2020-05-04]
密钥指纹 = 76D1 39A8 F917 2972 195C F33C 2954 C91D EAE3 C032
uid [ 绝对 ] usmile
sub rsa3072/0x6E3823DE57F89766 2020-05-03 [S] [有效至:2020-05-04]
创建子密钥[A]
lfp@legion:~$ gpg --homedir ~/.gnupg-test --expert --edit-key 0x2954C91DEAE3C032
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg (GnuPG) 2.2.4; Copyright (C) 2017 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.
私钥可用。
sec rsa4096/0x2954C91DEAE3C032
创建于:2020-05-03 有效至:2020-05-04 可用于:C
信任度:绝对 有效性:绝对
ssb rsa3072/0x6E3823DE57F89766
创建于:2020-05-03 有效至:2020-05-04 可用于:S
[ 绝对 ] (1). usmile
gpg> addkey
请选择您要使用的密钥种类:
(3) DSA (仅用于签名)
(4) RSA (仅用于签名)
(5) ElGamal (仅用于加密)
(6) RSA (仅用于加密)
(7) DSA (自定义用途)
(8) RSA (自定义用途)
(10) ECC (sign only)
(11) ECC (set your own capabilities)
(12) ECC (encrypt only)
(13) Existing key
您的选择? 8
RSA 密钥可能的操作: 签名 加密 认证
目前允许的操作: 签名 加密
(S) 选择是否用于签名
(E) 选择是否用于加密
(A) 选择是否用于认证
(Q) 已完成
您的选择? s
RSA 密钥可能的操作: 签名 加密 认证
目前允许的操作: 加密
(S) 选择是否用于签名
(E) 选择是否用于加密
(A) 选择是否用于认证
(Q) 已完成
您的选择? e
RSA 密钥可能的操作: 签名 加密 认证
目前允许的操作:
(S) 选择是否用于签名
(E) 选择是否用于加密
(A) 选择是否用于认证
(Q) 已完成
您的选择? a
RSA 密钥可能的操作: 签名 加密 认证
目前允许的操作: 认证
(S) 选择是否用于签名
(E) 选择是否用于加密
(A) 选择是否用于认证
(Q) 已完成
您的选择? q
RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(3072)
您所要求的密钥尺寸是 3072 位
请设定这把密钥的有效期限。
0 = 密钥永不过期
= 密钥在 n 天后过期
w = 密钥在 n 周后过期
m = 密钥在 n 月后过期
y = 密钥在 n 年后过期
密钥的有效期限是?(0) 1
密钥于 2020年05月04日 星期一 19时59分46秒 CST 过期
以上正确吗?(y/n) y
真的要建立吗?(y/N) y
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
sec rsa4096/0x2954C91DEAE3C032
创建于:2020-05-03 有效至:2020-05-04 可用于:C
信任度:绝对 有效性:绝对
ssb rsa3072/0x6E3823DE57F89766
创建于:2020-05-03 有效至:2020-05-04 可用于:S
ssb rsa3072/0x2CA24BFA9B038328
创建于:2020-05-03 有效至:2020-05-04 可用于:A
[ 绝对 ] (1). usmile
gpg> save
查看是否创建成功
lfp@legion:~$ gpg --homedir ~/.gnupg-test -K
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
/home/lfp/.gnupg-test/pubring.kbx
---------------------------------
sec rsa4096/0x2954C91DEAE3C032 2020-05-03 [C] [有效至:2020-05-04]
密钥指纹 = 76D1 39A8 F917 2972 195C F33C 2954 C91D EAE3 C032
uid [ 绝对 ] usmile
ssb rsa3072/0x6E3823DE57F89766 2020-05-03 [S] [有效至:2020-05-04]
ssb rsa3072/0x2CA24BFA9B038328 2020-05-03 [A] [有效至:2020-05-04]
添加uid
lfp@legion:~$ gpg --homedir ~/.gnupg-test --expert --edit-key 0x2954C91DEAE3C032
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg (GnuPG) 2.2.4; Copyright (C) 2017 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.
私钥可用。
sec rsa4096/0x2954C91DEAE3C032
创建于:2020-05-03 有效至:2020-05-04 可用于:C
信任度:绝对 有效性:绝对
ssb rsa3072/0x6E3823DE57F89766
创建于:2020-05-03 有效至:2020-05-04 可用于:S
ssb rsa3072/0x2CA24BFA9B038328
创建于:2020-05-03 有效至:2020-05-04 可用于:A
[ 绝对 ] (1). usmile
gpg> adduid
真实姓名: usmile
电子邮件地址: [email protected]
注释:
您选定了这个用户标识:
“usmile ”
更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? o
sec rsa4096/0x2954C91DEAE3C032
创建于:2020-05-03 有效至:2020-05-04 可用于:C
信任度:绝对 有效性:绝对
ssb rsa3072/0x6E3823DE57F89766
创建于:2020-05-03 有效至:2020-05-04 可用于:S
ssb rsa3072/0x2CA24BFA9B038328
创建于:2020-05-03 有效至:2020-05-04 可用于:A
[ 绝对 ] (1) usmile
[ 未知 ] (2). usmile
# 选择上方 [未知] uid 的编号
gpg> uid 2
sec rsa4096/0x2954C91DEAE3C032
创建于:2020-05-03 有效至:2020-05-04 可用于:C
信任度:绝对 有效性:绝对
ssb rsa3072/0x6E3823DE57F89766
创建于:2020-05-03 有效至:2020-05-04 可用于:S
ssb rsa3072/0x2CA24BFA9B038328
创建于:2020-05-03 有效至:2020-05-04 可用于:A
[ 绝对 ] (1) usmile
[ 未知 ] (2)* usmile
gpg> primary
sec rsa4096/0x2954C91DEAE3C032
创建于:2020-05-03 有效至:2020-05-04 可用于:C
信任度:绝对 有效性:绝对
ssb rsa3072/0x6E3823DE57F89766
创建于:2020-05-03 有效至:2020-05-04 可用于:S
ssb rsa3072/0x2CA24BFA9B038328
创建于:2020-05-03 有效至:2020-05-04 可用于:A
[ 绝对 ] (1) usmile
[ 未知 ] (2)* usmile
gpg> save
查看是否添加成功
lfp@legion:~$ gpg --homedir ~/.gnupg-test -K
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
/home/lfp/.gnupg-test/pubring.kbx
---------------------------------
sec rsa4096/0x2954C91DEAE3C032 2020-05-03 [C] [有效至:2020-05-04]
密钥指纹 = 76D1 39A8 F917 2972 195C F33C 2954 C91D EAE3 C032
uid [ 绝对 ] usmile
uid [ 绝对 ] usmile
ssb rsa3072/0x6E3823DE57F89766 2020-05-03 [S] [有效至:2020-05-04]
ssb rsa3072/0x2CA24BFA9B038328 2020-05-03 [A] [有效至:2020-05-04]
删除密钥
删除整个密钥,而非子密钥
lfp@legion:~$ gpg --homedir ~/.gnupg-test/ -K
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
/home/lfp/.gnupg-test/pubring.kbx
---------------------------------
sec rsa4096/0x2954C91DEAE3C032 2020-05-03 [C] [已过期:2020-05-04]
密钥指纹 = 76D1 39A8 F917 2972 195C F33C 2954 C91D EAE3 C032
uid [已过期] usmile
uid [已过期] usmile
sec rsa4096/0x70105702D00EB8F4 2020-05-04 [C] [已吊销:2020-05-04]
密钥指纹 = 0B19 E909 EB7D 0060 6615 693F 7010 5702 D00E B8F4
uid [已吊销] usmile
# 删除密钥
lfp@legion:~$ gpg --homedir ~/.gnupg-test/ --delete-secret-and-public-key 0x70105702D00EB8F4
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg (GnuPG) 2.2.4; Copyright (C) 2017 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.
sec rsa4096/0x70105702D00EB8F4 2020-05-04 usmile
要从钥匙环里删除这把密钥吗?(y/N) y
这是一把私钥!――真的要删除吗?(y/N) y
pub rsa4096/0x70105702D00EB8F4 2020-05-04 usmile
要从钥匙环里删除这把密钥吗?(y/N) y
# 已经删除
lfp@legion:~$ gpg --homedir ~/.gnupg-test/ -K
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
/home/lfp/.gnupg-test/pubring.kbx
---------------------------------
sec rsa4096/0x2954C91DEAE3C032 2020-05-03 [C] [已过期:2020-05-04]
密钥指纹 = 76D1 39A8 F917 2972 195C F33C 2954 C91D EAE3 C032
uid [已过期] usmile
uid [已过期] usmile
公私钥单独删除
# 无法先删除公钥
lfp@legion:~$ gpg --homedir ~/.gnupg-test/ --delete-keys 0x2954C91DEAE3C032
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg (GnuPG) 2.2.4; Copyright (C) 2017 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: 公钥“0x2954C91DEAE3C032”有对应的私钥!
gpg: 请先使用“--delete-secret-keys”选项来删除它。
# 先删除私钥部分才能删除公钥部分
lfp@legion:~$ gpg --homedir ~/.gnupg-test/ --delete-secret-keys 0x2954C91DEAE3C032
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg (GnuPG) 2.2.4; Copyright (C) 2017 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.
sec rsa4096/0x2954C91DEAE3C032 2020-05-03 usmile
要从钥匙环里删除这把密钥吗?(y/N) y
这是一把私钥!――真的要删除吗?(y/N) y
加密、解密
lfp@legion:~/bin$ gpg -k
/home/lfp/.gnupg/pubring.kbx
----------------------------
pub rsa3072/0x16A3B99FBAC538AE 2020-05-01 [SC] [已吊销:2020-05-04]
密钥指纹 = 1256 45C3 0AAB 72BB D113 4A5F 16A3 B99F BAC5 38AE
uid [已吊销] lfp1024
pub rsa4096/0x92C4D0C89EAA7333 2020-05-04 [SC] [有效至:2020-05-05]
密钥指纹 = C95B 86BC 7919 F706 8CD6 2B08 92C4 D0C8 9EAA 7333
uid [ 绝对 ] usmile
sub rsa4096/0x918087E1E6101F9D 2020-05-04 [E] [有效至:2020-05-05]
lfp@legion:~/bin$ gpg --recipient 0x918087E1E6101F9D --output ~/bin/test.en.txt --encrypt test.txt
lfp@legion:~/bin$ gpg --decrypt test.en.txt --output test.de.txt
gpg: Note: '--output' is not considered an option
usage: gpg [options] --decrypt [filename]
lfp@legion:~/bin$ gpg --output test.de.txt --decrypt test.en.txt
gpg: 由 4096 位的 RSA 密钥加密,钥匙号为 0x918087E1E6101F9D、生成于 2020-05-04
“usmile ”
签名
通过默认配置生成的主密钥具有[SC]两种功能,如果同时存在一个具有[S]功能的子密钥,则会通过子密钥去签名
实际是通过密钥的私钥部分去签名,然后通过该密钥的公钥部分去验证签名
# 在当前目录生成一份包含文件内容的签名文件 sign-test.Release.gpg
lfp@legion:~$ gpg --homedir ~/.gnupg-test --sign sign-test.Release
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
# 在当前目录生成一份包含文件内容的签名文件 sign-test.Release.asc
lfp@legion:~$ gpg --homedir ~/.gnupg-test --clearsign sign-test.Release
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
# 在当前目录生成一份【不包含】文件内容的签名文件 sign-test.Release.sig
lfp@legion:~$ gpg --homedir ~/.gnupg-test --detach-sign sign-test.Release
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
# 在当前目录生成一份【不包含】文件内容的签名文件 sign-test.Release.asc
lfp@legion:~$ gpg --homedir ~/.gnupg-test --detach-sign --armor sign-test.Release
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
# 可以通过 --output 指定路径及文件名,但是需要注意参数的位置,要放在 --sign 之前
lfp@legion:~$ gpg --homedir ~/.gnupg-test --output ~/bin/sign-test.Release.gpg --sign sign-test.Release
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
lfp@legion:~$ gpg --homedir ~/.gnupg-test --output ~/bin/sign-test.Release.asc --clearsign sign-test.Release
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
验证
- 通过 gpgv 工具
- 通过 gpg
lfp@legion:~$ gpg --homedir ~/.gnupg-test -k
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
/home/lfp/.gnupg-test/pubring.kbx
---------------------------------
pub rsa4096/0x2954C91DEAE3C032 2020-05-03 [C] [有效至:2020-05-04]
密钥指纹 = 76D1 39A8 F917 2972 195C F33C 2954 C91D EAE3 C032
uid [ 绝对 ] usmile
uid [ 绝对 ] usmile
sub rsa3072/0x6E3823DE57F89766 2020-05-03 [S] [有效至:2020-05-04]
sub rsa3072/0x2CA24BFA9B038328 2020-05-03 [A] [有效至:2020-05-04]
# gpgv 需要通过 --keyring 指定密钥环
lfp@legion:~$ gpgv --keyring ~/.gnupg-test/pubring.kbx sign-test.Release.gpg
gpgv: 签名建立于 2020年05月04日 星期一 19时01分58秒 CST
# 后16位即使用的密钥ID 0x6E3823DE57F89766
gpgv: 使用 RSA 密钥 92E43802C92A69A4F7B069E86E3823DE57F89766
gpgv: 完好的签名,来自于“usmile ”
# 因为有两个uid
gpgv: 亦即“usmile ”
# gpg 只需要指出homedir 即可
# 通过gpg验证可以检查出密钥是否过期
lfp@legion:~$ gpg --homedir ~/.gnupg-test/ --verify sign-test.Release.gpg
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg: 签名建立于 2020年05月04日 星期一 19时01分58秒 CST
gpg: 使用 RSA 密钥 92E43802C92A69A4F7B069E86E3823DE57F89766
gpg: 完好的签名,来自于“usmile ” [已过期]
gpg: 亦即“usmile ” [已过期]
gpg: 注意:这把密钥已经过期了!
主钥指纹: 76D1 39A8 F917 2972 195C F33C 2954 C91D EAE3 C032
子钥指纹: 92E4 3802 C92A 69A4 F7B0 69E8 6E38 23DE 57F8 9766
########################################################################
lfp@legion:~/.gnupg$ gpg -k
/home/lfp/.gnupg/pubring.kbx
----------------------------
pub rsa3072/0x16A3B99FBAC538AE 2020-05-01 [SC] [已吊销:2020-05-04]
密钥指纹 = 1256 45C3 0AAB 72BB D113 4A5F 16A3 B99F BAC5 38AE
uid [已吊销] lfp1024
# 无法判定密钥的性质
lfp@legion:~/.gnupg$ gpgv --keyring ~/.gnupg/pubring.kbx ~/bin/test.txt.gpg
gpgv: 签名建立于 2020年05月04日 星期一 19时17分25秒 CST
gpgv: 使用 RSA 密钥 3142022C68CD0B034DBAA5A0CF8C3097514C5331
gpgv: 完好的签名,来自于“lfp1024 ”
# 通过gpg验证可以检查出密钥是否被吊销
lfp@legion:~/.gnupg$ gpg --verify ~/bin/test.txt.gpg
gpg: 签名建立于 2020年05月04日 星期一 19时17分25秒 CST
gpg: 使用 RSA 密钥 3142022C68CD0B034DBAA5A0CF8C3097514C5331
gpg: 完好的签名,来自于“lfp1024 ” [绝对]
gpg: 警告:这把密钥已经被它的持有者吊销了!
gpg: 这表明这个签名有可能是伪造的。
gpg: 吊销原因: 密钥不再使用
主钥指纹: 1256 45C3 0AAB 72BB D113 4A5F 16A3 B99F BAC5 38AE
子钥指纹: 3142 022C 68CD 0B03 4DBA A5A0 CF8C 3097 514C 5331
通过gpg --keyring
验证,测试不行
# 测试发现,不能正确验证,无法识别密钥
lfp@legion:~/.gnupg-test$ gpg --keyring ~/.gnupg-test/pubring.kbx --no-default-keyring --verify ~/sign-test.Release.asc
gpg: assuming signed data in '/home/lfp/sign-test.Release'
gpg: 签名建立于 2020年05月04日 星期一 21时45分27秒 CST
gpg: 使用 RSA 密钥 5C886AA3B13C8CD76A453E6517B875E5EB1FA9D1
gpg: 完好的签名,来自于“usmile ” [未知]
gpg: 警告:这把密钥未经受信任的签名认证!
gpg: 没有证据表明这个签名属于它所声称的持有者。
主钥指纹: 0B19 E909 EB7D 0060 6615 693F 7010 5702 D00E B8F4
子钥指纹: 5C88 6AA3 B13C 8CD7 6A45 3E65 17B8 75E5 EB1F A9D1
lfp@legion:~/.gnupg-test$ gpg --homedir ~/.gnupg-test/ --verify ~/sign-test.Release.asc
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg: assuming signed data in '/home/lfp/sign-test.Release'
gpg: 签名建立于 2020年05月04日 星期一 21时45分27秒 CST
gpg: 使用 RSA 密钥 5C886AA3B13C8CD76A453E6517B875E5EB1FA9D1
gpg: 完好的签名,来自于“usmile ” [绝对]
主钥指纹: 0B19 E909 EB7D 0060 6615 693F 7010 5702 D00E B8F4
子钥指纹: 5C88 6AA3 B13C 8CD7 6A45 3E65 17B8 75E5 EB1F A9D1
吊销整个密钥
生成吊销证书
# 生成吊销证书
# 通过 --output 配置项指定生成文件目录及名称,注意顺序在前
lfp@legion:~$ gpg --homedir ~/.gnupg-test/ --output ~/.gnupg-test/rev.asc --gen-revoke 0x70105702D00EB8F4
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
sec rsa4096/0x70105702D00EB8F4 2020-05-04 usmile
要为这把密钥建立一份吊销证书吗?(y/N) y
请选择吊销的原因:
0 = 未指定原因
1 = 密钥已泄漏
2 = 密钥被替换
3 = 密钥不再使用
Q = 取消
(也许您会想要在这里选择 1)
您的决定是什么? 3
请输入描述(可选);以空白行结束:
>
吊销原因:密钥不再使用
(不给定描述)
这样可以吗? (y/N) y
已强行使用 ASCII 封装过的输出。
已建立吊销证书。
请把这个文件转移到一个可隐藏起来的介质(如软盘)上;如果坏人能够取得这
份证书的话,那么他就能让您的密钥无法继续使用。把这份凭证打印出来再藏
到安全的地方也是很好的方法,以免您的保存媒体损毁而无法读取。但是千万
小心:您的机器上的打印系统可能会在打印过程中把这些数据临时在某个其他
人也能够看得到的地方!
导入吊销证书
# 导入并吊销整个密钥
lfp@legion:~$ gpg --homedir ~/.gnupg-test/ --import ~/.gnupg-test/rev.asc
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg: 密钥 0x70105702D00EB8F4:“usmile ”吊销证书已被导入
gpg: 合计被处理的数量:1
gpg: 新的密钥吊销:1
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: 深度:0 有效性: 2 已签名: 0 信任度:0-,0q,0n,0m,0f,2u
gpg: 下次信任度数据库检查将于 2020-05-06 进行
使用预先生成的吊销证书
lfp@legion:~$ gpg -k
/home/lfp/.gnupg/pubring.kbx
----------------------------
pub rsa3072/0x16A3B99FBAC538AE 2020-05-01 [SC] [已吊销:2020-05-04]
密钥指纹 = 1256 45C3 0AAB 72BB D113 4A5F 16A3 B99F BAC5 38AE
uid [已吊销] lfp1024
pub rsa4096/0x92C4D0C89EAA7333 2020-05-04 [SC] [有效至:2020-05-05]
密钥指纹 = C95B 86BC 7919 F706 8CD6 2B08 92C4 D0C8 9EAA 7333
uid [ 绝对 ] usmile
sub rsa4096/0x918087E1E6101F9D 2020-05-04 [E] [有效至:2020-05-05]
# 找不到。。。
lfp@legion:~$ gpg --import ~/.gnupg/openpgp-revocs.d/C95B86BC7919F7068CD62B0892C4D0C89EAA7333.rev
gpg: 找不到有效的 OpenPGP 数据。
gpg: 合计被处理的数量:0
上传至公钥服务器
# Search your key on the key-server
gpg --keyserver <服务器地址> --search-keys
# Send the revoked key to the key-server
gpg --keyserver <服务器地址> --send-keys
https://superuser.com/questions/1526283/how-to-revoke-a-gpg-key-and-upload-in-gpg-server
吊销子密钥
吊销某个uid同理,用uid 1
选定某个uid,通过revuid
吊销
-delkey
只删除密钥的公共部分,如果已经上传到公钥服务器,则需要使用-revkey
吊销并上传公钥服务器
https://www.gnupg.org/gph/en/manual/c235.html
lfp@legion:~/.gnupg-test$ gpg --homedir ~/.gnupg-test/ --expert --edit-key 0x70105702D00EB8F4
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg (GnuPG) 2.2.4; Copyright (C) 2017 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.
私钥可用。
sec rsa4096/0x70105702D00EB8F4
创建于:2020-05-04 有效至:2020-05-06 可用于:C
信任度:绝对 有效性:绝对
ssb rsa3072/0x17B875E5EB1FA9D1
创建于:2020-05-04 有效至:2020-05-06 可用于:S
[ 绝对 ] (1). usmile
# 选定某个子密钥,下标从1开始
gpg> key 1
sec rsa4096/0x70105702D00EB8F4
创建于:2020-05-04 有效至:2020-05-06 可用于:C
信任度:绝对 有效性:绝对
# 选定该子密钥
ssb* rsa3072/0x17B875E5EB1FA9D1
创建于:2020-05-04 有效至:2020-05-06 可用于:S
[ 绝对 ] (1). usmile
gpg> revkey
您真的要吊销这把子钥吗?(y/N) y
请选择吊销的原因:
0 = 未指定原因
1 = 密钥已泄漏
2 = 密钥被替换
3 = 密钥不再使用
Q = 取消
您的决定是什么? 3
请输入描述(可选);以空白行结束:
>
吊销原因:密钥不再使用
(不给定描述)
这样可以吗? (y/N) y
sec rsa4096/0x70105702D00EB8F4
创建于:2020-05-04 有效至:2020-05-06 可用于:C
信任度:绝对 有效性:绝对
The following key was revoked on 2020-05-04 by RSA key 0x70105702D00EB8F4 usmile
ssb rsa3072/0x17B875E5EB1FA9D1
创建于:2020-05-04 已吊销:2020-05-04 可用于:S
[ 绝对 ] (1). usmile
gpg> save
apt-key测试
测试apt-key保存的密钥
终端执行apt-key list
的时候会列出apt密钥环中保存的密钥,包括/etc/apt/trusted.gpg
以及/etc/apt/trusted.gpg.d/
中的密钥
发现公钥具有[SC]功能,而[C]功能具有认证子密钥的能力,怎么能公开呢?测试如下
查看第三方密钥
lfp@legion:/etc/apt/trusted.gpg.d$ gpg sogou-archive-keyring.gpg
gpg: WARNING: no command supplied. Trying to guess what you mean ...
pub rsa4096/0xD259B7555E1D3C58 2014-04-09 [SC]
密钥指纹 = 6CE3 5A4E BAB6 7609 4476 BE7C D259 B755 5E1D 3C58
uid Ubuntu Kylin Archive Automatic Signing Key
sub rsa4096/0xFED969A4DF6E30B5 2014-04-09 [E]
导出到文件
lfp@legion:~$ apt-key export 0xD259B7555E1D3C58 > ~/sogou-pub.asc
Warning: apt-key output should not be parsed (stdout is not a terminal)
导入本地gpg密钥环
lfp@legion:~$ gpg --homedir ~/.gnupg-test --import ~/sogou-pub.asc
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg: 密钥 0xD259B7555E1D3C58:公钥“Ubuntu Kylin Archive Automatic Signing Key ”已导入
gpg: 合计被处理的数量:1
gpg: 已导入:1
# 查看
lfp@legion:~$ gpg --homedir ~/.gnupg-test -k
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
/home/lfp/.gnupg-test/pubring.kbx
---------------------------------
pub rsa4096/0x5AF8B6B68CC7F785 2020-05-05 [SC]
密钥指纹 = 0298 F65F 32F5 A7CA D764 A941 5AF8 B6B6 8CC7 F785
uid [ 绝对 ] usmile
sub rsa4096/0x9B690269F3C16E7B 2020-05-05 [E]
# 导入成功
pub rsa4096/0xD259B7555E1D3C58 2014-04-09 [SC]
密钥指纹 = 6CE3 5A4E BAB6 7609 4476 BE7C D259 B755 5E1D 3C58
uid [ 未知 ] Ubuntu Kylin Archive Automatic Signing Key
sub rsa4096/0xFED969A4DF6E30B5 2014-04-09 [E]
编辑该密钥
发现虽然公钥显示[SC],但是缺少私钥部分,没有认证[C]权限
lfp@legion:~$ gpg --homedir ~/.gnupg-test --expert --edit-key 0xD259B7555E1D3C58
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg (GnuPG) 2.2.4; Copyright (C) 2017 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.
pub rsa4096/0xD259B7555E1D3C58
创建于:2014-04-09 有效至:永不过期 可用于:SC
信任度:未知 有效性:未知
sub rsa4096/0xFED969A4DF6E30B5
创建于:2014-04-09 有效至:永不过期 可用于:E
[ 未知 ] (1). Ubuntu Kylin Archive Automatic Signing Key
gpg> addkey
要有私钥才能这么做。
gpg> adduid
要有私钥才能这么做。
gpg> revkey
要有私钥才能这么做。
gpg> expire
要有私钥才能这么做。
gpg> quit
测试子密钥过期/吊销后的验证功能
因为apt管理的本地密钥过期之后出现无法验证签名的情况
本地测试无法通过--edit-key expire
立刻将子密钥过期,所以测试将一把子密钥吊销
步骤
-
使用默认子密钥签名一个文件
同时生成两个具有[S]功能的子密钥
测试无法通过'--default-key' 指定使用哪个密钥签名
默认选择最新生成的具有[S]功能的有效密钥签名
-
将该子密钥吊销
-
用具有[S]功能的其他子密钥验证
结果
# 此时仍有一把具有[S]功能的子密钥
lfp@legion:~$ gpg --homedir ~/.gnupg-test --verify ~/a.txt.asc
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg: 签名建立于 2020年05月07日 星期四 18时43分49秒 CST
gpg: 使用 RSA 密钥 200AA10D5E17D1CAD1FF9B1FCCA5416788D7F49C
gpg: 完好的签名,来自于“usmile ” [绝对]
gpg: 警告:这把子钥已经被它的持有者吊销了!
gpg: 吊销原因: 密钥不再使用
主钥指纹: FABD 2A75 6CF5 983C 9655 7FA0 0FC1 D26E D395 4622
子钥指纹: 200A A10D 5E17 D1CA D1FF 9B1F CCA5 4167 88D7 F49C
gpg: WARNING: not a detached signature; file '/home/lfp/a.txt' was NOT verified!
gpgv
gpgv 是一个 OpenPGP 签名验证工具,没有配置文件,只有简单的选项
gpgv 默认所有的密钥都是可信赖的,不会检查其是否过期或被吊销
This program is actually a stripped-down version of gpg which is only able to check
signatures. It is somewhat smaller than the fully-blown gpg and uses a different (and
simpler) way to check that the public keys used to make the signature are valid. There are
no configuration files and only a few options are implemented.
gpgv assumes that all keys in the keyring are trustworthy. That does also mean that it
does not check for expired or revoked keys
选项
-v
显示更多验证信息
--keyring file
- file 可以是 trustedkeys.kbx 或 trustedkeys.gpg
指定用来验证的密钥环
格式
gpgv pgpfile
- pgpfile 包含数据的签名文件
用来验证包含数据的签名
lfp@legion:~$ gpgv --keyring [~/.gnupg-test/pubring.kbx] [sign-test.Release.gpg ]
gpgv sigfile [datafile]
-
sigfile 签名文件
-
datafile 数据文件,如果不指定,则会把 sigfile 后缀(.asc .sig .sign)去掉,当做数据文件
例如谷歌
签名文件 dl.google.com_linux_chrome_deb_dists_stable_Release.gpg
数据文件 dl.google.com_linux_chrome_deb_dists_stable_Release
用来验证不包含数据的签名(签名文件和数据文件分离)
lfp@legion:/var/lib/apt/lists$ gpgv --keyring [/etc/apt/trusted.gpg ] [dl.google.com_linux_chrome_deb_dists_stable_Release.gpg] [dl.google.com_linux_chrome_deb_dists_stable_Release]
其他用途
git
对commit进行签名
-----END-----
有不正确的地方,欢迎留言指正,谢谢大佬!