PGP
Pretty Good Privacy ( PGP ) 是一款加密程序,为数据通信提供加密 隐私和身份验证。
设计
PGP 加密采用散列算法、数据压缩、对称密钥加密以及公钥加密的一系列组合;每一步都使用几种受支持的算法之一。每个公钥都与一个用户名或电子邮件地址绑定。该系统的第一个版本通常被称为信任网 (Web of Trust),与X.509系统形成对比。X.509系统采用基于证书颁发机构的分层方法,后来被添加到 PGP 实现中。PGP 加密的当前版本包含通过自动密钥管理服务器的选项。
加密解密与签名过程
加密解密过程简单来说就是 我用你给我的锁(你的pubkey)锁门 你用你的钥匙(你的privkey)开门
签名与验证过程就是 我盖了个章(我的privkey) 你对照我公布的章的样子(我的pubkey)验证章是不是我盖的
签名的过程中 先计算文件的摘要 例如哈希值 然后用你的privkey加密哈希值 加密后的哈希值就是签名
对称与非对称
当文件很大时gpg会混用对称与非对称: gpg先使用对称密钥加密文件 然后用非对称密钥加密对称密钥 当使用-c时 仅使用对称加密
签名密钥
对密钥进行签名代表 我验证过这个公钥确实属于该用户 其他人可以信任它
信任等级
定义你对其他用户公钥的信任程度 分为两类
对密钥的信任 你对密钥持有者的信任程度
对签名的信任 你对其他人对该密钥的信任程度 等级 1 未知 2 不信任 3 边际信任 4 完全信任 5 最终信任(仅自己) gpg会验证 一个密钥 1. 是否被足够多你信任的用户签名 2. 这些签名者的信任级别
指纹
公钥指纹是公钥的缩写。通过指纹,人们可以验证对应的公钥是否正确。像 C3A6 5E46 7B54 77DF 3C4C 9790 4D22 B3CA 5B32 FF66 这样的指纹可以印在名片上。 一般为40位16进制
词汇
sec 私钥 sub 子公钥 ssb 子私钥 fingerprint 指纹
功能
公钥部分 验证 加密[E] 私钥部分 认证[C] 签名[S] 解谜
使用
生成密钥
gpg --gen-key
生成吊销证书
gpg --gen-revoke [ID]
列出密钥
gpg --list-keys
删除密钥
gpg --delete-key [ID]
输出密钥 公钥
gpg --armor --output pubkey --export [ID]
私钥
gpg --armor --output privkey --export-secret-keys
6. 公钥服务器
上传
```shell
gpg --send-keys [ID] --keyserver hkp://subkeys.pgp.net
查询
gpg --keyserver hkp://subkeys.pgp.net --search-keys [user ID]
指纹 生成公钥指纹
gpg --fingerprint [ID]
导入密钥
gpg --import [keyfile]
加密解密签名 加密
gpg --recipient [userid] --output outputfile.en --encrypt inputfile
解密
gpg --decrypt inputfile --output outputfile
签名
gpg --sign file # 二进制
gpg --clearsign file # ascii
gpg --detach-sign file # 分开存放签名文件 二进制
gpg --armor --detach-sign file # 分开存放签名文件 ascii
验证签名
gpg --verify asc file
子密钥 实际中 一般主密钥只参与签名[S]与认证[C] 加密[E]由子密钥(sub)执行
选项
-s –sign 签名 –clear-sign 明文签名 -b –detach-sign 分离签名 -e –encrypt 加密 -c –symmetric 仅对称加密 -d –decrypt 解密 –verify 验证签名 -k –list-secret-keys 列出密钥 -K, –list-secret-keys 列出私钥 –generate-key 生成一个新的密钥对 –quick-generate-key 快速生成一个新的密钥对 –quick-add-uid 快速添加一个新的用户标识 –quick-revoke-uid 快速吊销一个用户标识 –quick-set-expire 快速设置一个过期日期 –full-generate-key 完整功能的密钥对生成 –generate-revocation 生成一份吊销证书 –delete-keys 从公钥钥匙环里删除密钥 –delete-secret-keys 从私钥钥匙环里删除密钥 –quick-sign-key 快速签名一个密钥 –quick-lsign-key 快速本地签名一个密钥 –quick-revoke-sig 快速吊销一个密钥签名 –sign-key 签名一个密钥 –lsign-key 本地签名一个密钥 –edit-key 签名或编辑一个密钥 –change-passphrase 更改密码 –export 导出密钥 –send-keys 将密钥导出到一个公钥服务器上 –receive-keys 从公钥服务器上导入密钥 –search-keys 在公钥服务器上搜索密钥 –refresh-keys 从公钥服务器更新所有密钥 –import 导入/合并密钥 –card-status 打印卡片状态 –edit-card 更改卡片上的数据 –change-pin 更改卡片的 PIN –update-trustdb 更新信任数据库 –print-md 打印消息摘要 –server 以服务器模式运行 –tofu-policy VALUE 设置一个密钥的 TOFU 政策