广告

本站里的文章大部分经过自行整理与测试

2017年1月10日星期二

GnuPG - 邮件加密与解密

创建公钥与私钥后, 查看 uid, 然后就可以将公钥上传到 keyserver
以后别人通过 keyserver 知道你的公钥, 他就可以用加密的形式将邮件寄给你
你通过自己的私钥, 可将邮件解密

相反, 如果你要加密寄邮件给别人, 你就需要别人的公钥
他也需要自己的私钥来解密

1. 安装

Ubuntu - $ apt install gnupg2
Fedora - $ dnf install gnupg2
Centos - $ yum install gnupg2
OpenSUSE - $ zypper install python-gnupg

如果安装的是 gnupg 则用命令 gpg,
但安装的是 gnupg2 则用命令 gpg2

$ gpg2 --version

2. 创建

2.1) 主 Key - 关闭签名(sign) 与加密(encrypt) 功能, 留下认证(certify) 功能

Possible actions for a RSA key: Sign Certify Encrypt Authenticate
Current allowed actions: Sign Certify Encrypt

$ gpg2 --expert --gen-key

选 (8) RSA (set your own capabilities)
选 (S) Toggle the sign capability - 关闭签名
选 (E) Toggle the encrypt capability - 关闭加密
选 (Q) Finished

Possible actions for a RSA key: Sign Certify Encrypt Authenticate
Current allowed actions: Certify

2.2) 加入 2个副 Keys

Possible actions for a RSA key: Sign Certify Encrypt Authenticate
Current allowed actions: Sign Encrypt

$ gpg2 --expert --edit-key '<email>'

2.2.1) 关闭签名(sign)功能, 用于加密(encrypt)
gpg> addkey
选 (8) RSA (set your own capabilities)
选 (S) Toggle the sign capability
选 (Q) Finished

Possible actions for a RSA key: Sign Certify Encrypt Authenticate
Current allowed actions: Encrypt

2.2.2) 关闭加密(encrypt), 用于签名(sign)
gpg> addkey
选 (8) RSA (set your own capabilities)
选 (E) Toggle the encrypt capability
选 (Q) Finished

Possible actions for a RSA key: Sign Certify Encrypt Authenticate
Current allowed actions: Sign

gpg> save

需要 Name, Email 与密码

3. 列出

pub 4096R/A1B1A71A 2017-01-10 [C]
uid                [ultimate] Jason Mun <member@email.com>
sub 4096R/B2B1A71A 2017-01-10 [E]
sub 4096R/C3B1A71A 2017-01-10 [S]


公钥
$ gpg2 -k 或 gpg2 --list-keys
私钥
$ gpg2 -K 或 gpg2 --list-secret-keys

$ gpg2 --list-sigs
$ gpg2 --fingerprint

4. 编辑

建议先输出与备份
尤其是自己的私钥文件 (步骤 8), 以后可以输入回去

$ gpg2 --edit-key <uid / email>

trust: unknown
gpg> trust
gpg> save / quit

延长期限 / 撤子私钥
gpg> key 1
gpg> expire / delkey
gpg> save / quit

5. 撤除 (-o/--output, -a/--armor:一种7位文件)

私钥
$ gpg2 --delete-secret-key <uid>
公钥
$ gpg2 --delete-key <uid>

如果公私钥是一对的, 要先撤了私钥, 再撤公钥

6. 加密与解密 (-u/--local-user [寄件人ID], -r/--recipient [收件人ID],
-a/--armor, -s/--sign, 
-e/--encrypt, -d/--decrypt)

a.txt >> a.txt.encrypt
$ gpg2 -r <uid> -o a.txt.encrypt -e a.txt

a.txt.encrypt >> a.txt
$ gpg2 -o a.txt -d a.txt.encrypt

7. keyserver - 公钥搜索 / 上传 / 下载 / 吊销

搜索
$ gpg2 --keyserver keyserver.ubuntu.com --search-keys <uid / email>
$ gpg2 --keyserver keys.gnupg.net --search-keys <uid / email>

上传
$ gpg2 --keyserver keys.gnupg.net --send-keys <uid>

下载
gpg2 --keyserver keys.gnupg.net --recv-keys <uid>

回收在 keyserver 的公钥需先生成吊销文件, 然后输入上传
$ gpg2 -o revoke.asc --gen-revoke <uid>
$ gpg2 --import revoke.asc
$ gpg2 --keyserver keys.gnupg.net --send-keys <uid>

8. 输入与输出

输入
$ gpg2 --import <公钥或私钥文件名>

输出
$ gpg2 -a -o 公钥.asc --export <uid>
$ gpg2 -a -o 所有公钥.asc --export
$ gpg2 -a -o 所有私钥.asc --export-secret-keys
$ gpg2 -a -o 私钥.asc --export-secret-keys '<email>'
$ gpg2 -a -o 子私钥.asc --export-secret-subkeys <uid>

9. 数字签名

会生成一个 asc 签名文件 (不包含原文件内容)
$ gpg2 -ab <文件名>
$ gpg2 --verify <文件名.asc>

会生成一个 asc 签名文件 (包含原文件内容), 内容 / 签名可以分离出来
$ gpg2 -a -o <文件名.txt.asc> --clearsign <文件名>
$ gpg2 --verify <文件名.txt.asc>

分离内容
$ gpg2 -o <文件名2.txt> -d <文件名.txt.asc>
分离签名 
$ gpg2 -a -o <文件名2.asc> --detach-sign <文件名.txt.asc>

没有评论:

发表评论