学习使用gpg。
生成密钥
如果生成密钥的时候出现以下错误
1 2
| gpg: agent_genkey failed: No such file or directory Key generation failed: No such file or directory
|
执行以下命令,解决。
1
| gpgconf --kill gpg-agent
|
创建子密钥
1
| gpg --edit-key <user-id>
|
备份密钥
1
| gpg -o gpg_key --export-options backup --export-secret-keys <user-id>
|
会生成一个gpg_key文件,--export-options backup
参数表示导出恢复gpg密钥所需的所有数据,如果有设置密钥口令,还要输入密钥才能导出。导出后,建议放在某个安全的地方保存起来。
备份子密钥
1
| gpg -o gpg_sub_key --export-secret-subkeys <user-id>
|
为了安全,我们应该只使用子密钥来进行加密和签名,而主密钥我们应该将其保存在一个安全的地方。
删除密钥
1 2
| gpg --delete-secret-keys <user-id> gpg --delete-keys <user-id>
|
删除主密钥后,记得要清理生成的吊销证书
1
| rm ~/.gnupg/openpgp-revocs.d/KEYID.rev
|
恢复密钥
1 2 3
| gpg --import-options restore --import gpg_key
gpg --edit-key <user-id> trust quit
|
列出密钥
1 2 3 4
| gpg --list-keys gpg --list-public-keys gpg --list-secure-keys gpg --list-signatures
|
导出公钥
1 2 3 4 5 6 7
| gpg --output public.key --armor --export <user-id>
gpg --send-keys <key-id>
gpg --keyserver --send-keys <key-id>
gpg --fingerprint [user-id]
|
导入公钥
1 2 3 4 5 6 7
| gpg --import public.key
gpg --recv-keys <key-id>
gpg --search-keys <key-id>
gpg --keyserver hkb://a.pgp.net --search-keys <user-id>
|
Warning: 任何人都可以将公钥注册到密钥服务器上,因此不应该完全信任从密钥服务器上所检索到的某人的公钥。你应该通过将你检索到的公钥的指纹与该公钥所有者在可信任的来源(如该公钥所有者的博客或网站)所发布的指纹进行比较,或是直接通过电话或邮件联系该公钥所有者进行确认,以确保你检索到的公钥的真实性。使用多种方式进行验证可以提高你所检索到的公钥的可信度。更多相关信息,请参见Wikipedia:Public key fingerprint.
加密与解密
公钥加密,私钥解密。
1 2
| gpg -r <user-id> -e <file-name> gpg -r <user-id> -d <file-name>
|
比如,你需要发一个保存密码的文件给张三,那你就可以用张三的发布在公钥服务器上的公钥来加密。
1 2
| gpg --recv-keys 张三keyid gpg -r 张三 -e password.txt
|
之后会生成一个password.txt.gpg
文件,你把这个加密过的文件发给张三。张三可以这样解密。
1
| gpg -r 张三 -d password.txt.gpg
|
然后就会要求输入只有张三知道的私钥口令。输入正确后解密完成。如果私钥泄露,那么就要吊销整个密钥。
签名
1 2 3 4 5 6 7 8 9 10
| gpg --sign a.txt gpg --clearsign a.txt gpg --detach-sign a.txt gpg --armor --detach-sith a.txt
gpg -u [user-id] -r [user-id] -a -s -e a.txt
gpg --verify a.txt.asc a.txt
|
参考