Ubuntu18.04
gpg version 2.24html
GnuPGlinux
栗子文档git
阮一峰redis
他人用公钥来加密,本身用私钥来解密chrome
本身用私钥来签名,他人用公钥来验证数据库
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.ubuntu
通讯流程vim
The whole scheme relies on the assumption that public keys are trustworthy安全
简写 | 含义 | |
---|---|---|
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指纹。建议备份这些证书
跟算法有关,有些算法不支持某些功能
有些功能是私钥部分的,例如 认证[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 <usmile@qq.com>” 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
其余
C: certify
主密钥必备能力,且只有主密钥具备
做用
在key id 以后输入!,将强制使用该key
当多个密钥同时具备某个功能的时候,优先使用最新未吊销的密钥
例若有两个具备[S]的子密钥, 在未指定使用哪一个密钥签名的状况下,优先使用最新未被吊销的密钥
密钥的过时时间至关于一个自签名(本身的私钥给公钥签名),公钥能够验证自身的签名
修改过时时间就会给本身新增长一个自签名(覆盖旧签名,但不删除)
公钥、私钥的keyID是相同的,一块儿被建立,每一个公钥对应一个私钥
一个主密钥能够绑定多个子密钥,平时加密解密使用的都是子密钥,主密钥只有在某些特定的状况下才使用的,好比新建一个子密钥,撤销废除一个子密钥,签名认证别人的密钥等。
这样设计的好处的是子密钥遗失和泄漏不影响主密钥的信用,只须要撤销废除子密钥,而后再发布到密钥服务器,告诉其它人这个子密钥已经做废了,主密钥的公钥长久积累下来的多人签名认证能够长久保留下来
若是重建这层信任还要再让别人再签名认证你的新密钥,很麻烦。因此主密钥特别重要的,若是它泄漏了,那这个主密钥下全部子密钥全都报废
正确的使用姿式是导出主私钥备份,删除本机的主私钥,本机只保留子私钥用于平常操做,哪怕子密钥被人盗取,也不影响主密钥,尽最大程度保护你的主密钥。
以ASCII 形式输出
gpg -o file
指定输出文件名
不能缩写,打印版本和许可信息
仅在命令行有效
指定生成的密钥环以及其余数据保存的地方
默认是~/.gnupg
目录
mkdir ~/.gnupg-test gpg --homedir ~/gnupg-test
容许用户执行某些荒谬或“愚蠢”的事情,例如对已过时或已撤销的密钥进行签名,或某些潜在的不兼容的事情,例如生成异常的密钥类型。这还会禁用有关潜在不兼容操做的某些警告消息。顾名思义,此选项仅适用于专家。若是您不彻底了解它容许您执行的操做,请不要进行此操做
在建立具备身份验证功能[A]的子密钥时须要添加此参数,不加此参数,缺乏一些可选项
能够自定义密钥的参数,具备全部的可选项
使用当前默认的参数快速生成密钥
同时会生成密钥的撤销证书
生成的主密钥默认具备[SC] 两项功能
In addition to the key a revocation certificate is created and stored in the ‘openpgp-revocs.d’ directory below the GnuPG home directory
列出公钥,若是没有指定则列出全部
列出私钥,若是没有指定则列出全部
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 <usmile@qq.com> sub rsa4096/0x9B690269F3C16E7B 2020-05-05 [E] # 后面没有日期的是永不过时 sub rsa3072/0x8EF9605115CB7A14 2020-05-05 [S] [有效至:2020-05-12]
为整个密钥(主密钥以及全部子密钥)生成撤销证书,若是仅仅想撤销某个子密钥则经过--edit
命令完成
gpg --gen-revoke keyId --output path/revoke.asc
gpg --edit-key <keyid>
编辑该keyid表明的密钥
gpg --delete-keys <key-id>
从密钥环中删除该密钥的公钥部分,可是须要先删除私钥部分
gpg --delete-secret-keys <key-id>
从密钥环中删除该密钥的私钥部分,公钥部分还存在
gpg --delete-secret-and-public-key <key-id>
从密钥环中删除该密钥对,先删除私钥再删除公钥
gpg --recipient <uid> --output <file-name_en> --encrypt <file-name>
gpg --homedir ~/.gnupg-test -r 0x8EF9605115CB7A14 -o ~/bin/a.en.txt --encrypt ~/bin/a.txt
指定用谁的公钥加密文件,并指定加密后的文件名
gpg --output <fine-name_de> --decrypt <file-name_en>
解密文件,并指定解密后生成的文件名
采用二进制储存,生成[.gpg]文件
默认状况下选择最新未被吊销的具备[S]功能的密钥
能够经过--local-user
和 --default-key
指定
采用ASCII码形式储存,生成[.asc]文件
与文件内容分开存放,生成单独的签名文件[.sig](二进制形式)
gpg --detach-sign --armor
生成单独的签名文件[.asc](ASCII码形式)
gpg --verify [.gpg]
验证签名
gpg --homedir ./gnupg-test --export --armor --o public-keys.gpg 0xD93D03C13478D580
导出全部密钥的公钥部分 (master + subkeys)
能够指定具体某个密钥
gpg --homedir ./gnupg-test --export-secret-keys --armor --o secret-keys.gpg 0xD93D03C13478D580
导出全部密钥的私钥部分 (master + subkeys)
gpg --homedir ./gnupg-test --export-secret-subkeys --armor --o secret-subkey_sign.gpg 0x1ED73636975EC6DE!
导出某个子密钥的私钥部分
hkp(HTTP Keyserver Protocol):http密钥服务器协议
公钥服务器能够经过交换机制同步新上传的公钥
公钥服务器没有检查机制,任何人均可以用你的名义上传公钥,因此没有办法保证服务器上的公钥的可靠性
通常能够经过公钥的指纹来核对,可是指纹也会被伪造
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> = 密钥在 n 天后过时 <n>w = 密钥在 n 周后过时 <n>m = 密钥在 n 月后过时 <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) <heinrichh@duesseldorf.de>" 真实姓名: usmile 电子邮件地址: usmile@qq.com 注释: 您选定了这个用户标识: “usmile <usmile@qq.com>” 更改姓名(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 <usmile@qq.com>
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 <usmile@qq.com>
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 <usmile@qq.com> 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> = 密钥在 n 天后过时 <n>w = 密钥在 n 周后过时 <n>m = 密钥在 n 月后过时 <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 <usmile@qq.com> # 注意必定要保存才能生效 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 <usmile@qq.com> 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 <usmile@qq.com> sub rsa3072/0x6E3823DE57F89766 2020-05-03 [S] [有效至:2020-05-04]
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 <usmile@qq.com> 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> = 密钥在 n 天后过时 <n>w = 密钥在 n 周后过时 <n>m = 密钥在 n 月后过时 <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 <usmile@qq.com> 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 <usmile@qq.com> 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 --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 <usmile@qq.com> gpg> adduid 真实姓名: usmile 电子邮件地址: usmile@wx.com 注释: 您选定了这个用户标识: “usmile <usmile@wx.com>” 更改姓名(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 <usmile@qq.com> [ 未知 ] (2). usmile <usmile@wx.com> # 选择上方 [未知] 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 <usmile@qq.com> [ 未知 ] (2)* usmile <usmile@wx.com> 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 <usmile@qq.com> [ 未知 ] (2)* usmile <usmile@wx.com> 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 <usmile@wx.com> uid [ 绝对 ] usmile <usmile@qq.com> 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 <usmile@wx.com> uid [已过时] usmile <usmile@qq.com> sec rsa4096/0x70105702D00EB8F4 2020-05-04 [C] [已吊销:2020-05-04] 密钥指纹 = 0B19 E909 EB7D 0060 6615 693F 7010 5702 D00E B8F4 uid [已吊销] usmile <usmile@qq.com> # 删除密钥 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 <usmile@qq.com> 要从钥匙环里删除这把密钥吗?(y/N) y 这是一把私钥!――真的要删除吗?(y/N) y pub rsa4096/0x70105702D00EB8F4 2020-05-04 usmile <usmile@qq.com> 要从钥匙环里删除这把密钥吗?(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 <usmile@wx.com> uid [已过时] usmile <usmile@qq.com>
# 没法先删除公钥 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 <usmile@wx.com> 要从钥匙环里删除这把密钥吗?(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 <lfp1024@126.com> pub rsa4096/0x92C4D0C89EAA7333 2020-05-04 [SC] [有效至:2020-05-05] 密钥指纹 = C95B 86BC 7919 F706 8CD6 2B08 92C4 D0C8 9EAA 7333 uid [ 绝对 ] usmile <usmile@qq.com> 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 <usmile@qq.com>”
经过默认配置生成的主密钥具备[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'
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 <usmile@wx.com> uid [ 绝对 ] usmile <usmile@qq.com> 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 <usmile@wx.com>” # 由于有两个uid gpgv: 亦即“usmile <usmile@qq.com>” # 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 <usmile@wx.com>” [已过时] gpg: 亦即“usmile <usmile@qq.com>” [已过时] 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 <lfp1024@126.com> # 没法断定密钥的性质 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 <lfp1024@126.com>” # 经过gpg验证能够检查出密钥是否被吊销 lfp@legion:~/.gnupg$ gpg --verify ~/bin/test.txt.gpg gpg: 签名创建于 2020年05月04日 星期一 19时17分25秒 CST gpg: 使用 RSA 密钥 3142022C68CD0B034DBAA5A0CF8C3097514C5331 gpg: 无缺的签名,来自于“lfp1024 <lfp1024@126.com>” [绝对] 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 <usmile@qq.com>” [未知] 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 <usmile@qq.com>” [绝对] 主钥指纹: 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 <usmile@qq.com> 要为这把密钥创建一份吊销证书吗?(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 <usmile@qq.com>”吊销证书已被导入 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 <lfp1024@126.com> pub rsa4096/0x92C4D0C89EAA7333 2020-05-04 [SC] [有效至:2020-05-05] 密钥指纹 = C95B 86BC 7919 F706 8CD6 2B08 92C4 D0C8 9EAA 7333 uid [ 绝对 ] usmile <usmile@qq.com> 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 <key-ID> # Send the revoked key to the key-server gpg --keyserver <服务器地址> --send-keys <key-ID>
https://superuser.com/questions/1526283/how-to-revoke-a-gpg-key-and-upload-in-gpg-server
吊销某个uid同理,用uid 1
选定某个uid,经过revuid
吊销
-delkey
只删除密钥的公共部分,若是已经上传到公钥服务器,则须要使用-revkey
吊销并上传公钥服务器
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 <usmile@qq.com> # 选定某个子密钥,下标从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 <usmile@qq.com> 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 <usmile@qq.com> ssb rsa3072/0x17B875E5EB1FA9D1 建立于:2020-05-04 已吊销:2020-05-04 可用于:S [ 绝对 ] (1). usmile <usmile@qq.com> gpg> save
终端执行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 <council@ubuntukylin.com> 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 <council@ubuntukylin.com>”已导入 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 <usmile@qq.com> 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 <council@ubuntukylin.com> 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 <council@ubuntukylin.com> 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 <usmile@qq.com>” [绝对] 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 是一个 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
指定用来验证的密钥环
gpgv 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]
对commit进行签名
-----END-----
有不正确的地方,欢迎留言指正,谢谢大佬!