GPG入门

 
摘自https://www.jianshu.com/p/1257dbf3ed8e
 
Nitroethane 关注

2016.07.19 17:36* 字数 1003 阅读 6560评论 2喜欢 13

最近遇到了密钥保存的问题:由于本人有热爱折腾操作系统的习惯,所以我的笔记本一般不超过两个月就要重装系统。重装系统前肯定是要备份重要数据的,比如说vps的登陆密钥,Github的密钥。并且我的移动硬盘在最开始使用的时候没有进行加密,所以简单的把私钥拷贝到移动硬盘上是极度不安全的。
So,想到了GPG这个东西:给自己生成一个密钥,用这个密钥来加密要保存的私钥。这样一来就安全多了。
(本文同步更新在本人的个人Blog上,欢迎访问啦0.0)

1. 简介

从前(1991),有位同行名曰Phil Zimmermann,感觉到政府监控着整个互联网,所以他就想:如果所有的数据就这样不加密传输肯定会被政府看到啊,这样不好不好......So,开发出了加密软件PGP。软件一问世,广受好评,但是呢,PGP是商业软件。所以,自由软件基金会决定开发一款PGP的替代品,GPG(GNU Privacy Guard、GnuPG)由此诞生。
GPG是自由软件基金会的GNU计划的一部分,目前受德国政府资助。

2. 安装

(测试环境为Fedora 24)
可以通过官网提供的源码进行安装,也可以通过各发行版的包管理工具进行安装:

  1. sudo dnf install gnupg # Fedora
  2. sudo apt-get install gnupg # Ubuntu
  3. sudo yum install gnupg # CentOS

3. 生成密钥

使用以下命令生成自己的密钥:

  1. gpg --gen-key

会出现一大段文字:先是关于软件的介绍和一些版权信息,然后询问你选择哪种加密算法,我选择默认的RSA and RSA,因为目前来说,RSA算法是安全性最强的。

 
询问加密算法

然后询问你密钥长度,我选择最长的4096。

 
询问密钥长度

接下来询问你密钥的有效期,默认值0代表永不过期,我选择默认值。

 
询问密钥有效期

接下来会让你确认一下是否正确。
输入y确认之后,要求你输入个人信息,软件通过真实姓名、注释和Email地址来构造用户ID,其中注释可以为空。

 
输入个人信息

然后用户ID就生成了,软件会向你确认信息是否需要修改:输入N修改姓名,C修改注释,E修改Email,O表示确认,Q退出。我输入字母o确认。

 
确认个人信息

之后会要求你输入一个口令用以保护你的私钥,强烈建议添加口令!

 
输入口令

然后软件说“需要生成大量随机字节”,你可以随意进行一些操作,看看网页啊,打打字什么的,“这会得到足够的熵”(熵在物理学中是微观状态混乱度的度量)。

 
生成密钥中

现在,你的公、私钥已经生成并签名!

 
密钥生成并签名

其中CF9AE128是用户ID的hash,可以代替用户ID。
最后,建议再生成一个撤销证书,以便以后密钥作废时,请求公钥服务器撤销你的公钥:

  1. gpg --ken-revoke [用户ID]

4. 密钥管理

4.1 列出密钥

  1. gpg --list-keys
 
列出密钥

第一行是公钥文件路径,第二行是公钥信息,第三行是用户ID,第四行是私钥信息。

4.2 删除密钥

  1. gpg --delete-key [用户ID] # 删除公钥
  2. gpg --delete-secret-keys [用户ID] # 删除私钥

嗯...这里有个问题,删除私钥的时候居然不需要输入口令!难道是我电脑的问题?...

4.3 导出密钥

公钥和私钥都是以二进制形式存储,使用armor参数可以导出为ASCII码形式。

 
导出密钥

4.4 上传公钥

  1. gpg --keyserver hkp://subkeys.pgp.net --send-keys [用户ID]
 
上传公钥

额......这里出现了一点意外,开头的proxychains4是我用的终端代理,因为没用代理的时候也出现了keyserver error,开了代理也有问题。嗯...明天再研究一下...

4.3 导入密钥

  1. gpg --import [密钥文件] # 从密钥文件导入
  2. gpg --keyserver hkp://subkeys.pgp.net --search-keys [用户ID] # 从密钥服务器导入
 
导入公钥和私钥

这里是我把最开始生成的密钥删除,然后用前面导出的密钥导入的。

5. 加解密

5.1 加密

下面用我的公钥来加密我的vps的登陆私钥:

 
加密
  1. gpg --recipient JayceCao --output en_vps --encrypt .ssh/vps

--recipient参数后跟对方的用户ID;--output参数后面跟导出的文件名;--encrypt参数后跟要加密的文件。
这里应该注意一个问题,就是你要确定你使用的公钥的可靠性。

5.2 解密

然后用我自己的私钥解密:

  1. gpg --decrypt en_vps > vps

--decrypt参数后跟要解密的文件,然后我这儿用了重定向将解密结果重定向到名为vps的文件中,否则解密结果会直接输出到屏幕。有的介绍说使用--output参数后跟导出文件名,但是我的笔记本上不可以,不知道为什么嗯...

6. 签名

  1. gpg --clearsign vps

这会在当前目录下生成一个名为vps.asc的文件,--clearsign参数表示生成ASCII形式的签名文件,而使用--sign参数生成的文件名为vps.gpg,以二进制形式存储。
通过--verify参数使用对方的公钥进行签名验证:

  1. gpg --verify vps.asc
 
验证签名

如果和图示回显相同,说明文件在传输过程中没有被修改过。

结束

现在可以愉快地将重要数据统统加密,然后扔到移动硬盘里去了。

GPG入门的更多相关文章

  1. GPG入门 - 练习笔记

     GPG入门练习笔记  参考阮一峰的GPG入门教程http://www.ruanyifeng.com/blog/2013/07/gpg.html 1.加密     1)刘言机器: 用王老师公钥加密gp ...

  2. GPG入门尝试

    GPG入门尝试 参考:阮一峰的网络日志 在所附链接中,对大多数信息的解释说明已经较为详细,在此只补充实际操作中的一些问题和解决方法 gpg --decrypt demo.en.txt --output ...

  3. GPG入门教程

    原文地址:http://www.ruanyifeng.com/blog/2013/07/gpg.html 作者: 阮一峰 日期: 2013年7月12日 前两篇文章,我介绍了RSA算法. 今天,就接着来 ...

  4. 我的qq邮箱的GPG公钥

    呵呵,赶一波潮流,我的邮箱 175420840@qq.com 的GPG公钥如下,也可以在这里直接下载.具体可参见阮一峰的<GPG入门教程>. -----BEGIN PGP PUBLIC K ...

  5. gpg 的使用

    GPG入门教程 GpG使用指南 1. 安装 源码编译安装:源码下载地址 ./configure make make install 直接安装编译好的二进制文件 # Debian / Ubuntu 环境 ...

  6. 记一次向maven中央仓库提交依赖包

    Maven是Java中最常用的依赖管理工具,Maven的中央仓库保罗万象,涵盖了各个领域的框架.工具和文档,也是Java生态强大生命力的体现.我们自己开发的一些有用有趣的代码也可以通过打包上传到mav ...

  7. Linux管理日记(二)

    14  启动内网端口转发 ### 2. 查看IP以及网卡信息 # 可以发现, eth0 的地址 inet addr:10.144.7.195, 此为内网网卡 # 公网网卡, eth1 的地址 inet ...

  8. 最简单的教程:在Ubuntu操作系统里安装Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...

  9. 如何创建一个简单 APT 仓库

    0. 无废话版本 需求: 有一堆 .deb 包,想把它们做成一个 APT 仓库,这样就可以用apk install pkgname进行安装了,这样一方面自己可以规避 dpkg -i xxx.deb 时 ...

随机推荐

  1. boost开发指南

    C++确实很复杂,神一样的0x不知道能否使C++变得纯粹和干爽? boost很复杂,感觉某些地方有过度设计和太过于就事论事的嫌疑,对实际开发工作的考虑太过于理想化.学习boost本身就是一个复杂度,有 ...

  2. Jenkins之构建触发器配置(转载)

    构建触发器配置,当你在文本框中输入配置的时间后,文本框下方会有时间解释,这样可以很好的看到自己配置的时间对不对. 可以清晰看到我的配置第一个运行时间是周五上午10点执行,第二次是星期六上午10点.   ...

  3. 消息队列mq总结(重点看,比较了主流消息队列框架)

    转自:http://blog.csdn.net/konglongaa/article/details/52208273 http://blog.csdn.net/oMaverick1/article/ ...

  4. Unity4.6 UGUI 图片打包设置(小图打包成图集 SpritePacker)

    版权声明:本文转自http://blog.csdn.net/huutu 转载请带上 http://www.liveslives.com/ 在学习UGUI的过程中,一直使用小图也就是散图,一个按钮一个图 ...

  5. FS系统开发设计(思维导图)

      FS系统开发设计(思维导图) 最近做了一个小系统,公司应急,要对各个部门进行费用成本核算分摊,做运维,苦于无奈,简简单单的设计了一下,模仿用友ERP软件,首先对DB进行了初步设计,总体如下: 未完 ...

  6. mysql之 MySQL 主从基于position复制原理概述

    1 .主从复制简介MySQL 主从复制就是将一个 MySQL 实例(Master)中的数据实时复制到另一个 MySQL 实例(slave)中,而且这个复制是一个异步复制的过程.实现整个复制操作主要由三 ...

  7. angular 的杂碎报错小知识

    1:[ng:areq] Angular出现这种错误的原因,是由于没有在页面中使用模块引入controller导致的 所以 请确保你定义了这个controller后也引用了它. 2:Failed to ...

  8. 容器中跨主机的网络方案-flannel

    容器中的网络是建立docker集群的重要内容. 本文将介绍如何用flannel实现容器的多节点互通. 下图是flannel的实现原理,摘自: http://docker-k8s-lab.readthe ...

  9. CS231n笔记列表

    课程基础1:Numpy Tutorial 课程基础2:Scipy Matplotlib 1.1 图像分类和Nearest Neighbor分类器 1.2 k-Nearest Neighbor分类器 1 ...

  10. java代码----方法类练习中~~~未领会

    总结:今天我很失败,问了老师继承的问题还是没弄懂.因为,技术宅的能力,我好怕啊.太强了. package com.da.ima2; public class yut {// 使用substring方法 ...