原网址:http://blog.csdn.net/xianghongai/article/details/52861698
GnuPG 是一个开放源程序的与OpenPGP 标准兼容的非对称信息加密系统。
GnuPG四类组成
- 私钥文件
- 公钥文件
- 公钥回收证书
- 私钥密码
私钥和公钥运用
发件人
明文—->[发件人私钥-数字签名]—->文件签名密文
明文—->[收件人公钥-加密]—->密文收件人
密文—->[收件人私钥-解密]—->明文
明文、文件签名密文—->[发件人公钥-验证签名]
公钥签认
- 存在伪造公匙信息,对公匙进行有效确认
- 为了安全起见,获取你朋友的公钥之后,还需要跟对方核对一下这个公钥(指纹值)是否真的为他所拥有(以防止得到伪造的密钥)
- 导入公钥、核对公钥的指纹值、签名认可公钥、用这把绝对确信的公钥加密
生成钥匙
新建钥匙对(钥匙对,包括一把解密用私密钥匙和一把配对的加密用公开钥匙) gpg --gen-key
公钥指纹采样
gpg --fingerprint [用户ID]
列出密钥
gpg -k/--list-keys
列出所有公钥 gpg -K/--list-secret-keys
列出所有私钥 gpg --list-sigs
列出签认的密钥 gpg --fingerprint
列出密钥和指纹
编辑密钥
可以修改钥匙的失效日期,加进一个指纹,对钥匙签名 gpg --edit-key
删除密钥
删除公钥:gpg --delete-key [用户ID]
删除私钥:gpg --delete-secret-key [用户ID]
公钥回收证书
忘记了私钥口令、私钥丢失、私钥被盗窃,发布这个证书来声明以前的公钥不再有效 gpg -o/--output revoke.asc --gen-revoke [用户ID]
生成回收证书 gpg --import revoke.asc
导入回收证书 gpg --keyserver keyserverAddress --send [用户ID]
发送回收证书到服务器,声明原 GPG Key 作废
输出密钥
公钥(别人用):gpg -a/--armor -o/--output public.key --export [用户ID]
私钥(自己用):gpg -a/--armor -o/--output private.key --export-secret-keys [用户ID]
- -o 选项,可以放到一个文件里
- -a 选项,来把钥匙写进一个7位的文件,而不是一个二进制文件
输入密钥
收到一把别人的公钥,加进钥匙数据库 gpg --import [密钥文件]
gpg --keyserver hkp://subkeys.pgp.net --search-keys [用户ID]
上传公钥
gpg --keyserver hkp://subkeys.pgp.net --send-keys [用户ID]
公钥签认
gpg --sign-key [用户ID]
gpg --lsign-key [用户ID]
加密
gpg [options] --encrypt [filename]
gpg -r/--recipient [用户ID] -o/--output doc.en -e/--encrypt doc
- –recipient参数,指定接收者的公钥
- –output参数,指定加密后的文件名
- –encrypt参数,指定需要加密的源文件
- demo.en,加密后的文件
- doc,源文件
解密
gpg [options] --decrypt [filename]
gpg -o/--output doc.de -d/--decrypt doc.en
- –output参数,指定解密后生成的文件
- –decrypt参数,指定需要解密的文件
- demo.de,解密后的文件
对称加密与解密
加密:gpg --symmetric doc
会提示输出临时用的对称密钥/密码,不是私钥密码!
eg. gpg -o doc.gpg -c doc
解密:gpg -d doc.gpg
文件签名
[发件人] 为了保证文件传输的完整性,[收件人] 为了验证文件来源的可靠性,
防止恶意篡改、欺诈钓鱼;
[发件人] 用自己的 [私钥] 对私密文件数字签名,再用 [收件人] 的 [公钥] 对文件加密;
[收件人] 用自己的 [私钥] 对加密文件解密,再用 [发件人] 的 [公钥] 对私密文件验证签名。
- 数字签名,二进制储存:
gpg -s/--sign doc
eg.gpg -o doc.sig -s doc
文本签名,ASCII码:
gpg --clearsign doc
eg.gpg -o doc.sig --clearsign doc
当前目录下生成 doc.gpg/doc.asc 文件,这就是签名后的文件(包含了原文件和签名)分离式签名,生成单独的签名文件,与文件内容分开存放
二进制储存:gpg -b/--detach-sign doc
ASCII码:gpg -a/--armor -b/--detach-sign doc
eg.gpg -o doc.sig -ab doc
当前目录下生成一个单独的签名文件doc.sig
签名+加密
gpg -u/--local-user [发件人ID] -r/--recipient [收件人ID] -a/--armor -s/--sign -e/--encrypt doc
eg. gpg -o doc.sig -ser name doc
- local-user参数,表示用(自己)发件人的私钥签名
- recipient参数,表示用(对方)收件人的公钥加密
- armor参数,表示采用ASCII码形式显示
- sign参数,表示需要签名
- encrypt参数,表示指定源文件
验证签名
收到别人签名后的文件,需要用对方的公钥验证签名是否为真 gpg --verify doc.asc [doc]
分离式签名,加上原文件
GPG 配置文件目录
~/.gnupg/gpg.conf – 配置文件
~/.gnupg/trustdb.gpg – 信任库
~/.gnupg/pubring.gpg – 公钥库
~/.gnupg/secring.gpg – 私钥库