GPG usage

1. Documents

http://www.ruanyifeng.com/blog/2013/07/gpg.html
http://wiki.ubuntu.org.cn/GPG/PGP
使用subkey
https://wiki.debian.org/Subkeys
相关post:
Android ROM用的key
http://cfig.github.io/2015/10/15/signing-keys-in-android/

2. GUI tools

http://gnupg.archive.sunet.se/related\_software/frontends.html
‘seahorse’ for GNOME is sufficient.

3. 命令行工具

3.1 密钥管理

生成密钥

gpg --gen-key

Tips: To use a shorter name(uid) which is less than 5 characters, need to add --allow-freeform-uid to the command line.

添加签名用的subkey

gpg --edit-key <keyid>
> addkey
> (4) RSA (sign only)

Tips: 同样办法可以添加用于加密的subkey

添加不同email的uid

gpg --edit-key <keyid>
> adduid
Real Name: <name>
Email address: <email>
Comment: <comment or Return to none>
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
Enter passphrase: <password>
gpg> uid <uid>
gpg> trust
Your decision? 5
Do you really want to set this key to ultimate trust? (y/N) y
> save

删除key

gpg --delete-keys

查看公钥

gpg -K
gpg -k

查看私钥

gpg --list-keys

导出公钥

gpg --armor --export <uid>
gpg --armor --export <name>@gmail.com

导入公钥

gpg --import <pub.key>

导出私钥

gpg --armor --export-secret-keys <uid>
gpg --armor --export-secret-keys <name>@gmail.com

仅导出subkey私钥

gpg --export-secret-subkeys

导入私钥

gpg --allow-secret-key-import --import <private.key>
gpg --fingerprint

信任公钥

gpg --edit-key <uid>
gpg > trust
gpg > 5

上传公钥

gpg --keyserver hkp://pgp.mit.edu --send-keys 72355772

下载公钥

gpg --keyserver pgp.mit.edu --recv-key 72355772

召回公钥

gpg --gen-revoke FD9D429D
gpg --import revoke.2016.pubkey.txt
gpg --keyserver pgp.mit.edu --send-keys  FD9D429D

Tips: 把--gen-revoke的结果存入文件,然后导入,最好把导入的key上传

3.2 密钥使用

加密文件

gpg -e -r <name>@gmail.com <file>

解密文件

gpg -d <file.gpg>

加密解密

gpg --recipient <name>@gmail.com --output <file.en> --encrypt <file>
gpg --output <file.dec> --decrypt <file.en>
gpg <file.en>

签名

gpg --sign <file>
gpg --clearsign <file>
gpg --detach-sign <file>
gpg --armor --detach-sign <file>

验证签名

gpg --verify <file.asc> <file>

签名并加密

gpg --local-user <name>@gmail.com --recipient <name>@gmail.com --armor --sign --encrypt aa.py

4. misc

可以export GNUPGHOME临时改变GPGHOME目录

如果碰到下面问题

gpg: signing failed: Inappropriate ioctl for device
可以这样解决
export GPG_TTY=$(tty)

如果在gpg2上碰到导入问题, 可以尝试杀掉gpg agent,