• GPG入门


    GPG入门

    96 
    摘自https://www.jianshu.com/p/1257dbf3ed8e
     
    Nitroethane 
    2016.07.19 17:36* 字数 1003 阅读 6560评论 2

    最近遇到了密钥保存的问题:由于本人有热爱折腾操作系统的习惯,所以我的笔记本一般不超过两个月就要重装系统。重装系统前肯定是要备份重要数据的,比如说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)
    可以通过官网提供的源码进行安装,也可以通过各发行版的包管理工具进行安装:

    sudo dnf install gnupg          # Fedora
    sudo apt-get install gnupg      # Ubuntu
    sudo yum install gnupg          # CentOS
    

    3. 生成密钥

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

    gpg --gen-key
    

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

     
    询问加密算法

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

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

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

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

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

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

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

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

    4. 密钥管理

    4.1 列出密钥

    gpg --list-keys
    
     
    列出密钥

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

    4.2 删除密钥

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

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

    4.3 导出密钥

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

     
    导出密钥

    4.4 上传公钥

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

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

    4.3 导入密钥

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

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

    5. 加解密

    5.1 加密

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

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

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

    5.2 解密

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

    gpg --decrypt en_vps > vps
    

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

    6. 签名

    gpg --clearsign vps
    

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

    gpg --verify vps.asc
    
     
    验证签名

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

    结束

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

  • 相关阅读:
    Code基础——2.排序
    设计模式——4.装饰模式
    Shader笔记——1.光照基础
    C#笔记——7.序列化与反序列化
    C#笔记——6.反射与特性
    lua小技巧记录--新建对象时重置元表
    发现的lua小技巧记录--在:方法中使用self的技巧
    lua版pureMVC框架使用分析
    在xlua中使用DoTween动画插件
    Unity工程性能优化学习笔记
  • 原文地址:https://www.cnblogs.com/LiuYanYGZ/p/9435639.html
Copyright © 2020-2023  润新知