pgp/gpg相关 ================ PGP:: 信任网(web of trust) 要点: 不依赖认证机构,而是建立每个人间的信任关系 场景: * 1. 通过自己的数字签名确认 * 2. 通过自己完全信任的人的数字签名确认 * 3. 通过自己有限信任的多个人的数字签名确认 其他命令:: gpg --version // 生成密钥 > gpg --gen-key 基本命令使用 '''''''''''''' 1.生成key:: $> gpg --gen-key //之后会要求输入一些个人信息 显示:: gpg: key A250EE4B marked as ultimately trustedpublic and secret key created and signed.gpg: checking the trustdbgpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust modelgpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1upub 2048R/A250EE4B 2018-07-20 Key fingerprint = D619 878B 3657 16EC ECC9 D72C DB76 2EDA A250 EE4B uid Gordon (This just a test gpg) sub 2048R/FA6A273C 2018-07-20 说明:: A250EE4B: 用户ID的hash,可以代替用户ID 2.列出key列表:: $> gpg --list-keys 显示:: /home/pzsh/.gnupg/pubring.gpg ----------------------------- pub 2048R/A250EE4B 2018-07-20 uid Gordon (This just a test gpg) sub 2048R/FA6A273C 2018-07-20 说明:: 第一行显示公钥文件名(pubring.gpg) 第二行显示公钥特征(2048位,Hash字符串和生成时间) 第三行显示"用户ID" 第四行显示私钥特征 3.生成一个撤销证书,以便以后密钥作废时,请求公钥服务器撤销你的公钥:: $> gpg --gen-revoke [用户ID] 4.删除密钥:: // 删除私钥 $> gpg --delete-secret-keys [用户ID] // 删除公钥 $> gpg --delete-key [用户ID] 5.签名:: 5.1对文件签名: // 在当前目录下生成一个名为.asc的文件 // --clearsign参数表示生成ASCII形式的签名文件 $> gpg --clearsign filename // 在当前目录下生成一个名为.gpg的文件 // 使用--sign参数表示以二进制形式存储 $> gpg --sign haha.txt // 生成单独的签名文件,与文件内容分开存放,可以使用detach-sign参数 gpg --detach-sign demo.txt // 如果想采用ASCII码形式,要加上armor参数 gpg --armor --detach-sign demo.txt 5.2签名+加密 gpg --local-user [发信者ID] --recipient [接收者ID] --armor --sign --encrypt demo.txt 5.3验证签名 gpg --verify demo.txt.asc demo.txt 6.输出密钥:: // 公钥文件(.gnupg/pubring.gpg)以二进制形式储存,armor参数可以将其转换为ASCII码显示 // --output: 参数指定输出文件名(public-key.txt) // --export: 指定哪个用户的公钥 gpg --armor --output public-key.txt --export [用户ID] // 输出私钥 gpg --armor --output private-key.txt --export-secret-keys 7.上传公钥:: // 公钥服务器是网络上专门储存用户公钥的服务器 // 通过交换机制,所有的公钥服务器最终都会包含你的公钥 gpg --send-keys [用户ID] --keyserver hkp://subkeys.pgp.net // 生成公钥指纹 gpg --fingerprint [用户ID] 8.导入密钥:: gpg --import [密钥文件] 为了获得他人的公钥,可以让对方直接发给你,或者到公钥服务器上寻找: $> gpg --search-keys [用户ID] 9.加密文件:: --recipient: -r --output: -o --encrypt: -e $> gpg --recipient [用户ID] --output --encrypt 10.解密文件:: $> gpg --decrypt --output // GPG允许省略decrypt参数(下面2句相同) $> gpg --decrypt $> gpg // 解密后的文件内容直接显示在标准输出 11.验证文件完整性:: # gpg --verify haha.txt.asc 实例1验证加密文件完事性:: 1.下载安装文件: curl -LO https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-3.4.9.tgz 2.下载public signature文件: curl -LO https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-3.4.9.tgz.sig 3.下载并导入key文件: curl -LO https://www.mongodb.org/static/pgp/server-3.4.asc gpg --import server-3.4.asc 4.验证: gpg --verify mongodb-osx-ssl-x86_64-3.4.9.tgz.sig mongodb-osx-ssl-x86_64-3.4.9.tgz 实例2:生成验证公私钥并签名:: @todo 历史::   1991年,程序员Phil Zimmermann为了避开政府的监视,开发了加密软件PGP 因为这个软件非常好用,迅速流传开来成为许多程序员的必备工具 但是,它是商业软不能自由使用 所以,自由软件基金会决定,开发一个PGP的替代品取名为GnuPG,因此GPG就诞生了 GPG是GNU Privacy Guard的缩写,是自由软件基金会的GNU计划的一部分 它是一种基于密钥的加密方式,使用了一对密钥对消息进行加密和解密,来保证消息的安全传输 一开始,用户通过数字证书认证软件生成一对公钥和私钥 任何其他想给该用户发送加密消息的用户,需要先从证书机构的公共目录获取接收者的公钥 然后用公钥加密信息,再发送给接收者 当接收者收到加密消息后,他可以用自己的私钥来解密,而私钥是不应该被其他人拿到的 参考 ==== * 官网: https://gnupg.org/index.html