GpG使用指南,


1.GPG简介

  1991年,程序员Phil Zimmermann为了避开政府的监视,开发了加密软件PGP。因为这个软件非常好用,迅速流传开来成为许多程序员的必备工具。但是,它是商业软不能自由使用。所以,自由软件基金会决定,开发一个PGP的替代品取名为GnuPG,因此GPG就诞生了。GPG是GNU Privacy Guard的缩写,是自由软件基金会的GNU计划的一部分。它是一种基于密钥的加密方式,使用了一对密钥对消息进行加密和解密,来保证消息的安全传输。一开始,用户通过数字证书认证软件生成一对公钥和私钥。任何其他想给该用户发送加密消息的用户,需要先从证书机构的公共目录获取接收者的公钥,然后用公钥加密信息,再发送给接收者。当接收者收到加密消息后,他可以用自己的私钥来解密,而私钥是不应该被其他人拿到的。

2.安装GPG

Linux操作系统

   如今大多数的linux发行版都默认包含了gpg,可用如下命令进行检查:

# gpg --version

 

 

  若看到如图所示的版本信息,就可直接使用了。否则,你需要从你的发行版软件仓库里安装GPG。

(1)Mac操作系统:

安装brew命令

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装gnupg

$ brew install gnupg

 

 

 

 

 

 

(2)Windows操作系统:

  Windows下可以借助gpg4win软件来实现密钥的生成,具体过程自己摸索,下载地址:https://www.gpg4win.org/

3.生成密钥

# gpg --gen-key

 

 

  生成密钥时会出现一大段文字:先是关于软件的介绍和一些版权信息,然后询问你选择哪种加密算法,我选择默认的RSA and RSA,因为目前来说,RSA算法是安全性最强的,它可以用来加密和解密,其他的只能给信息签名。

  这一步会询问密钥长度,默认是2048,直接回车就ok,也可以自己选择长度。如下所示:

  接下来询问你密钥的有效期,默认值0代表永不过期,我选择默认值。然后会让你确认是否正确。选择正确则输入y,下一步要求你输入个人信息,软件通过真实姓名、Email地址和注释来构造用户ID,其中注释可以为空。

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

  接下来系统会要求你输入一个口令用里保护你的私钥,强烈建议添加口令!

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

  如下所示:此时你的公、私钥已经生成并签名!

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

# gpg --ken-revoke [用户ID]

 

 

4.密钥管理

(1)列出密钥

# gpg --list-keys

 

 

(2)上传公钥至密钥服务器

  密钥服务器是用来发布你的公钥,并将其分发到其他人的服务器,这样其他用户可以轻松的根据你数据库中的名字(或者e-mail地址)来获取你的公钥,并给你发送加密信息。避免了把公钥直接拷贝给其他人的过程。

1.上传你的公钥到秘钥服务器:

# gpg --send-keys  [your pubID]  --keyserver [keyservers.address.com]

(需要把keyservers.address.com替换成你选择的服务器(或者用mit.edu,它会跟其他服务器做同步))

加密文件

法一:

# gpg -o encrypted_file.gpg --encrypt -r key-id original.file

命令解释:

(1)-o encrypted_file.gpg = 指定输出文件

(2)--encrypt = 做加密

(3)-r = 接收者的KEY-ID,比如这里就填你朋友的KEY-ID。

(4)original.file = 指定要加密的文件

法二:

# gpg --recipient [your pubID]--output out.file  --encrypt original.file

 

 

 

 

 

 

 

 

 

 

 

 

(3)上传公钥

# gpg  --send-keys [用户ID]  --keyserver hkp://subkeys.pgp.net 

 

 

(4)在另一台服务器上搜索刚才上传的公钥

# gpg --search-keys [用户ID]

 

 

5.加密文件

  加密之前首先得知道对方的公钥,用公钥来加密文件,对方用自己的私钥来解密。可用对方的邮箱搜索他的公钥

# gpg --list-key wangd8836@gmail.com

 

 

加密法一:

# gpg --recipient 49FD19FB --output haha.txt --encrypt haha

 

 

加密法二:

# gpg -o encrypted_520.haha --encrypt -r 49FD19FB  haha 

 

 

将加密后的文件传至另一台服务器

6.解密文件

# gpg --decrypt filename.gpg

 

 

7.删除密钥

(1)查看密钥

# gpg --list-keys

 

 

(2)删除公钥:

# gpg --delete-secret-keys 71FBED38

 

 

(3)查看一次密钥:

# gpg --list-keys

 

 

(4)发现要删除的密钥还在,因为你仅仅删除了私钥而已。此时再删除公钥:

# gpg --delete-key 71FBED38

 

 

(5)再次查看密钥:

# gpg --list-keys

 

 

 

8.签名

# gpg --clearsign haha.txt

 

 

  以上操作会在当前目录下生成一个名为vps.asc的文件,--clearsign参数表示生成ASCII形式的签名文件,而使用--sign参数生成的文件名为vps.gpg,以二进制形式存储。

  通过--verify参数使用对方的公钥进行签名验证:

# gpg --sign haha.txt

 

 

9.验证文件完整性

# gpg --verify haha.txt.asc

 

 

若出现上图所示内容,则说明文件传输过程中没有被修改过

 

相关内容

    暂无相关文章