PGP与GPG的比较
PGP么,简单的说,是一款以利用公钥和密钥技术的加密和身份验证软件。
而GPG呢,就是开源的PGP。

公钥和密钥

公钥和密钥,是现在密码学的一个发明。以我们生活中的例子来说,公钥相当于你的银行帐号,私钥相当于你的银行存折和银行卡。
公钥,也就是银行帐号,是公开的,让大家都知道,这样可以让别人向你汇钱。
而私钥这个存折呢,是要小心的藏好的,绝对不能满世界乱丢,因为凭它就可以去银行取你的钱呢。

在非对称加密体系中,私钥是由用户保管,而公钥是对外公开的。用户在生成密钥对后,需要把其中的公钥导出到一个文件中,然后将其分发给其它用户。

GPG即GNU Privacy Guard,它是加密工具PGP(Pretty Good Privacy )的非商业化版本,用于对Email、文件及其他数据的收发进行加密与验证,确保通信数据的可靠性和真实性。

GPG作为一个开源并且免费的加密和数字签名软件已经存在多年。它不但可以为企业、个人之间的重要信息提供加密保护,还可以为出版的软件、内核等电子产品进行数字签名,防止产品被篡改,最大程度地保障信息安全。

加密和数字签名作为保护信息机密性、完整性和不可抵赖性的重要手段在各种信息通信场合得到广泛的应用。目前,已有不少商业加密和数字签名产品,比如商业软件PGP(Pretty Good Privacy)。

另外,在开放源代码库中也有一些免费的加密和数字签名软件,其中最被认可的是GPG(GNU Privacy Guard)。GPG是一个完全免费、源代码公开,并且与PGP完全兼容的软件产品。今天,GPG已经拥有众多的企业和个人用户。

在我国,由于信息安全及隐私保护意识还比较薄弱,PGP或GPG在商业和个人用户中的使用并不普遍。随着信息安全及隐私带来的问题甚至诉讼的增加,更多企业和个人开始把眼光投向安全问题的解决。

但是,由于非专业用户对签名和加密等概念的畏难情绪,GPG的应用还多局限于IT技术人员。本文将对Linux环境下如何应用GPG进行讲解,为企业和个人用户应用GPG提供帮助。

建立GPG环境

GPG软件作为用于加密和数字签名的开放源码工具,许多Linux发行版本都自带了该软件。在默认安装的情况下,gpg会作为一个基本命令事先安装好。

如果选用的Linux发行版默认没有安装GPG,可以通过tar包或RPM包进行安装,可从http://www.gnupg.org/download/下载安装包。安装过程比较简单,这里省略了。

判断是否安装有GPG的方法也很简单。直接在命令行下输入"gpg -h"命令,如果系统已经安装有GPG,就会显示关于GPG用法的信息。

确定Linux系统中已经安装了GPG后,就可以开始下面加密和签名的工作了。

生成密钥

用户应用GPG,首先要有一对自己的密钥。所以,第一步就是产生一对密钥。gpg命令通过大量参数提供所需要的几乎所有操作。其中,参数"-gen-key"就是用来产生一对密钥的。在安装了GPG的Linux系统上可以运行以下命令:

#gpg --gen-key

如果想对产生密钥的操作进行一些个性化设置,还可以加上其它参数。比如,要指定生成密钥存放的位置,可以运行以下命令:

#gpg --gen-key --homedir /mygnupg

命令开始运行后,首先,会看到版本和路径信息如下:

gpg (GnuPG) 1.2.1; Copyright (C) 2002 Free Software Foundation, Inc.This program comes with ABSOLUTELY NO WARRANTY.This is free software, and you are welcome to redistribute itunder certain conditions. See the file COPYING for details.gpg: /home/terry/.gnupg: directory createdgpg: new configuration file `/home/terry/.gnupg/gpg.conf' createdgpg: keyblock resource `/home/terry/.gnupg/secring.gpg': file open errorgpg: keyring `/home/terry/.gnupg/pubring.gpg' created

随后需要回答一系列问题,以帮助产生一对密钥。首先遇到的问题是要求选择密钥使用的算法:

Please select what kind of key you want:(1) DSA and ElGamal (default)(2) DSA (sign only)(5) RSA (sign only)Your selection? 1

其中,DSA是数字签名算法,RSA和ElGamal是两种不同原理的非对称密钥算法。通常可以选择"1",这样生成的密钥可以同时用作签名和加密两种用途。

接着,会要求选择密钥的长度:

DSA keypair will have 1024 bits.About to generate a new ELG-E keypair.minimum keysize is  768 bitsdefault keysize is 1024 bitshighest suggested keysize is 2048 bitsWhat keysize do you want? (1024) 1024Requested keysize is 1024bits

这里的密钥长度有768、1024和2048位三种。显然,密钥越长越安全,但太长又会影响使用的速度。所以,可以根据不同的需要选择适合的长度。一般我们选择1024位密钥。

另外,还需要设定密钥过期的时间:

Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 1y
Key expires at Tue 16 Mar 2010 01:48:07 PM CST

Is this correct? (y/N) y

原则上,密钥使用的频率越高,密钥有效的时间越长,被***的可能性就越大。所以,要根据应用的实际情况综合考虑,确定一个适当的时间长度。需要注意的是,密钥要定期更换,建议绝对不要永远使用同一对密钥。

最后,需要输入一些个人信息,包括真实姓名、电子邮件地址等,用来识别密钥,最好是如实填写。比如:

Real name: Jonny Xu
Email address: 
Comment: for test                       
You selected this USER-ID:
       "Jonny Xu (for test) <>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o

然后,必须输入一个密码。密码用来保护密钥,没有这个密码,任何人都不能看到密钥本身的内容。密码是在密钥文件泄露后惟一的保密措施,它的最大敌人是暴力破解和字典***。所以,一定要选择一个强壮的密码,来有效地对抗这些***。

密码确定以后,系统开始运算:

We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks)during the prime generation; this gives the random number generator a better chance to gain enough entropy...+++++.+++++.+++++.+++++..++++++++++.++++++++++++++

这时需要随便地敲击键盘或是移动鼠标,以产生一些随机数,协助密钥的顺利生成。注意,如果没有以上动作,很可能最终不能产生密钥。

系统运算完成后,会出现类似以下的信息:

gpg: /home/jonny/.gnupg/trustdb.gpg: trustdb createdpublic and secret key created and signed.key marked as ultimately trusted.pub  1024D/880C18D5 2009-03-16 Jonny Xu (for test) <>
        Key fingerprint = 6DE2 21AB C695 2221 402E  1498 15E4 2B96 880C 18D5
sub  1024g/133B44E7 2009-03-16

以上信息表示已经成功地为"Jonny Xu"生成并签名了一对密钥,密钥过期时间为"2010-03-16"。在生成密钥的同时,默认用户目录的.gnupg目录中也存放了与该用户相关的GPG配置及密钥存储文件。这些文件控制了用户的GPG环境,用户不能直接修改这些文件,所有改动都将通过"gpg"命令实现。

查看密钥

密匙生成后,可以随时用以下命令查看。

查看所有密钥:

#gpg --list-key

查看所有公钥:

gpg --list-public-key

查看所有私钥:

gpg --list-secret-key

列出所有签名:

gpg --list-sig

导出公钥


导出公钥的方法很简单,通过gpg命令的"-export"参数就可完成。为了使导出文件是ASCⅡ编码的,还需要加上参数"-a"。比如,导出Jonny Xu ASCⅡ编码的公钥文件,可以使用以下命令:


#gpg --export -a  > jonny.asc


该命令最终生成ASCⅡ编码的公钥文件:jonny.asc


导出密钥

#gpg --export-secret-key -a  > jonny.gpg


分发公钥


这个包含公钥信息的文件需要对外分发,可以通过各种方式将jonny.acs文件分发给所有与用户有信息通信需求的人。 
最简单的分发方式是,将该文件放到互联网上供人下载。这种方式需要注意的问题是,所发布公钥文件的网站一定要是一个可以信赖的站点。实际应用中,类似的做法很普遍。


比如,Red Hat的公钥就是在它的官方网站上发布的,任何人都可以下载获得,并用来验证Red Hat所发布软件的签名的正确性。



导入公钥


1.导入


比如,jonny收到朋友john的公钥文件john.gpg,可以使用以下命令导入文件:


#gpg --import john.gpg  


2.核对"指纹"


公钥是可以伪造的。James可以伪造一个john的公钥,然后想办法让jonny得到。如果jonny对收到的公钥不加验证,那么他发给john的加密邮件就可能被James解密。GPG的架构中并没有一个PKI这样的证书管理系统,GPG的公钥信任是通过"Truth Web"实现的。


生成jonny公钥的"指纹":


#gpg --fingerprint .orgpub  1024D/7234E374 2009-03-16 jonnyYu (for test)      Key fingerprint = A58F D71A 28BA  499D 805B  588E 82FB CD0F 7234 E374sub  1024g/4907EA0A 2009-03-16  


这个"指纹"是惟一的。可以通过与对方核对"指纹"是否一致,来确定这个公钥是否可信和合法。



3.签名


在成功导入,并确定这个公钥是可以相任之后,要立即对这个公钥进行签名。这样,就可以验证来自对方邮件的真实性了。


对公钥进行签名可以使用如下命令:


#gpg --sign-key 或者#gpg --edit-key name#command > sign  


检查对方邮件,比如john的签名:


#gpg --check-sigs  


现在,有了john签名的公钥,通过这个公钥就可以和john进行非对称加密通信了。



应用GPG



非对称的密钥可以用来加密和做数字签名。当用户关心信息保密性时,使用加密功能;当用户关注信息完整性及不可抵赖性时,使用数字签名功能;当用户需要同时关注信息的机密性、完整性及不可抵赖性时,可以将加密和数学签名混合使用。


简单了解这些密码学概念后,就可以开始真正的应用实践了。

五、使用GPG收发数据

下面我们开始讨论如何使用GPG收发数据,这是日复一日的工作,一定要理解并熟练。在本文开始的PGP概述部分,我们提到了数据交换的两种方式,现在我们对其分类概念化:

●数据签名传输(Signed data):发送者使用私匙对数据加密,接收者使用公匙对数据解密。 
●数据加密传输(Encrypted data):发送者使用公匙对数据加密,接收者使用私匙对数据解密。

以下分别详细介绍。

1、数据签名传输

发送者使用私匙对数据进行签名,接收者拥有发送者的公匙,对之信任并使用它验证接收数据的完整性。对数据进行签名的最简单的方法是使用clearsign命令,这将使GPG创建一个易读的签名,很适于发送Email。

具体命令及执行情况如下:

$ gpg --clearsign mymessage.txt

You need a passphrase to unlock the secret key foruser: Ima User (I'm just ME) 1024-bit DSA key, ID D9BAC463, created 2001-01-15Enter passphrase:$

输入passphrase后,就将生成一个扩展名为.asc的新文件,这里就是mymessage.txt.asc。这个文件包含了mymessage.txt文件的原始内容以及一个如下所示的签名信息:

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.1 (GNU/Linux)
Comment: For info see http://www.gnupg.org
iD8DBQE6YouhU87DFNm6xGMRAiwqAJ4mnviKz5wA9HFhCW9PG6zl7A2LPACgk0SB
n+yWiCt4SCTVkSSgezGKIUk=
=WnX/
-----END PGP SIGNATURE-----

当接收者收到包含上述签名的信息或文件时,他可以使用发送者的公匙来验证信息的完整性,具体命令及执行情况如下: 
$ gpg --verify message.txt.asc

gpg: Signature made Sat Jan 13 22:33:21 2001 MST using DSA key D9BAC463

gpg: Good signature from Ima User (I'm just ME) $

2、数据加密传输

第2种传输方式的目的是为了只让个别人看到发送信息,所谓“信”有独钟。发送者使用其公匙对文件或数据进行加密,接收者使用发送者的私匙对接收数据进行解密。 


加密命令包含两个部分,一部分指定接收者的Email,另一部分指定要加密的文件。具体命令如下: 
$ gpg -r  -a --encrypt message.txt

执行后的输出结果为文件message.txt.asc,其内容类似如下:

-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.0.1 (GNU/Linux)
Comment: For info see http://www.gnupg.org
hQEOA/Yj7lT9u0d9EAQAhE+KaGfMzvRfCdrfW2EYzuu+YeaKdoJksHB16CO7RsZC
DkllV/uma/rMj5PiDzFoV8PGjqdq9M+n9YXOVnuG3XITWhuvfFqm1KWxK9e0UDoS
7Tb2cm+k8UK18HBI/EaNrV+a3A5YQr6nVY0OCXheohg3+9ursFc8uOBQma64/VUD
/io0EQiIxEmERy2UsN7e+OB1/w4FUcRt7FFWCTVMGdUuQPY8UkeStH7u43NlPsf5
6uPPjaTxCOjjQoCf17XnfxqJPm9c0uyPDjljXYmp74XroT+lHvGcaKK56t0agGVo
i5nMflXoCIA2n/KDALzTjy7cIzLnUeYVU4NrBt7pV4TTyelxYB70mW94Wlr5BlLj
S+FYueR31i790QO+265iS4QPA+zxXIT5KCF8TT1gVPaZOJxmo0wRKuoOYrCd7LQD
Oz3exhCgeKKjfZRwJtqvl/QVamFJWSyhAiuTlA60IHyxIqAZlwLoYoXs9oOIs49g
HLYG6hSemJEW+fTX8xipOOfDXzHrJjUE897igeW62Mf6HLr4aNb1kwrlH7d7Xdr8
29+sckZlSRtBvL3/dSw5FcRCFYbS51AHstdywYvNu4rqSOljv5C6dXEw9Gre+wPS
5S7k0KoTLK4VOZJI2byBTZxgjQNr7ytpu1QMN2+10tpHx6MLkUFV/BJZbAtJ3C0v
auS4xskoSlZgbuX/8Veqhx4GC0lSRLqn14M9CP/tzZN0dIZSTbM2aq58zk0wZZVB
Tmb06HdYvkLrcLkmyNBt3/PUlDIIdeXNCkqN5bjGD/elTtkaMmHN9OIIDHWA9olR
tcXoLJPF4kgg1q6y6pgy2sklYQhI8A4q8VoQNJDzF/SbKvlnGji5HyF6rvKDCF0m
/l0heQEMn4AyFbJ7LZt2zh4i3jSwyV4Ff+tWJD09xaNziKi791FaSBVMxsPhT4SD
w+R75JR/FV0IRpMsy8kdJw/+kejQwCmRqDbm3EHOESCOouxsL8JB39vX+1h32p1b
EdVyQIHZA+TomHsp/y3i+EX52MC8+8XmCukHfT0dCVcnfk2H0hKvFueBkW8Y2JGd
FJZb+CDX33Aapr6FW9CIXvI+1NFOz+cIWVZIYYECnUZe4l3Jikjw3rY2To4E/WUy
MN+ZKsMb6xlhMSoRa9qHWY+S/pp9D8qiqweOLg4cnCjZBZWVOMf4dMcDWNjsW3mX
GgYVmPf52WxvVFtp1yjNbHBu+is8/ZR1P04efD+kOg1WtwpfRdHKQ1o1fn/OxYX1
oP7PVR5BK05HaQYmI0Vlwkcv59RyeYqqOQOiEfL0hEWdGy1gdj0R0eHYuZLnBLfb
SHJ2OtRpcqHuXB27EU3C4OR/N++7ExhG/MNB8WPFb82cbIP8xDF9q+3b73b7myTn
JpAYj4p2ocv9Zf1DH9HHaT7bYD37hvjLlNXe07kYOlMWB9+48meO/o+Yjn5oEj60
wipRdCiP4TUoAwC9EDFED64qLXST9MBycLrc5DwiMYzfdyauiHU3MNhUfErXVaRJ
/5ljtJUGHA/P/ouqbSCleHQ=
=2Sgq
-----END PGP MESSAGE-----

注意:通过以上方式被加密的信息也可以被签名,方法是在上述命令中再加上一个-s参数。

要对上述加密数据进行解密,接收者可以使用“--decrypt”命令,并指定输出重定向的位置。具体命令及执行情况如下:

$ gpg --decrypt message.txt.asc > message.txt

You need a passphrase to unlock the secret key for
user: "Jonny Xu (for test) <>"
1024-bit ELG-E key, ID 133B44E7, created 2009-03-16 (main key ID 880C18D5)

Enter passphrase:$


接收者输入passphrase后,加密信息就被解密,然后导入到文件message.txt中。

结 束 语

以上介绍了免费加密工具GPG的概念、原理及使用方法,可以看到,整个操作流程都是很容易理解和操作的。我相信,你又掌握了网络世界中和朋友安全沟通的一个方法,那么,就让我们灵活、熟练地使用这个方法,在Internet中更加真实地生活!

GPG使用的是非对称的密钥体系,用户拥有一对密钥,包括一个公钥和一个私钥。公钥对外公布,私钥则由自己保存。使用公钥加密的数据可以用私钥解密,同样,使用私钥加密的数据可以用公钥解密。作为用户,也会收到别人的GPG公钥,它们可能来自网站、电子邮件、FTP和目录服务等,只要信任其来源,就可以将其导入自己的GPG环境,之后才可以与相应的人员进行基于GPG的各种应用。导入公钥的过程可以分为以下三步:在非对称加密体系中,私钥是由用户保管,而公钥是对外公开的。用户在生成密钥对后,需要把其中的公钥导出到一个文件中,然后将其分发给其它用户。

转载于:https://blog.51cto.com/379162/1363812

Linux如何使用GPG(GNU Privacy Guard)对信息/文件进行加密和解密相关推荐

  1. linux 加密文件,如何运用OpenSSL 对文件进行加密和解密

    导读 我们在平时的 Linux 运维管理的时候,经常会进行各种数据备份任务.将数据导出然后打包.通常在安全性要求比较高的环境下,我们可以借助 OpenSSL 工具对打包后的数据进行加密,这样能进一步的 ...

  2. linux配置文件密码加密工具,Linux下利用openssl对文件进行加密和解密

    转载地址:http://hi.baidu.com/edeed/item/99206a096b62d0e1ff240db8 --建立文件test.txt, 特意写入中英文# cd /tmp # echo ...

  3. 通过GPG非对称加密工具验证ECharts发布版本实例演示,win10下Gnu Privacy Guard工具的安装和使用方法

    GPG 验证 ECharts 发布版本实例演示 第一章:Gpg 工具的安装 ① Gpg 工具的下载 ② Gpg windows 版 Gpg4win 的安装 ③ Gpg 安装是否成功状态检测 第二章:使 ...

  4. LINUX、C#下使用DES算法CBC模式进行对称加密、解密

    openssl是一个加密库,封装了多个算法,我们这里使用的是DES算法CBC模式. 一.准备OPENSSL的LINUX及C#库 openssl项目地址: https://www.openssl.org ...

  5. linux生成私钥 prk,自动生成RSA密钥,并进行加密和解密1

    /** * 自动产生RSA512位密钥(可以在512到2048之间) */ public static void getA271() throws Exception{ KeyPairGenerato ...

  6. Linux下使用GPG(GnuPG)加密及解密文件

    文章目录 Linux下使用GPG(GnuPG)加密及解密文件 1. 简介 2.环境及版本 3.GPG公钥生成 4.查看公钥 5.查看私钥 6.导出公钥 7.导出私钥 8.加密文件 本机加密 其他电脑加 ...

  7. Linux下的文件、文件夹加密方法

    1. ZIP 文件加密 zip -e linuxzgf.zip linuxzgf 即可出现输入密码的提示,输入2次密码. 此文件即被加密解压时候是需要密码的 文件夹加密: zip -re linuxz ...

  8. linux系统日志文件夹加密,linux系统环境下,对文件进行加密

    引用自:http://blog.chinaunix.net/u/19895/showart_232861.html Linux关于文件加密的两种方法和详解: 一.用GnuPG加密文件. GnuPG软件 ...

  9. gpg 的加密与解密

    os: ubuntu 16.04 信息 # which gpg /usr/bin/gpg# apt install gnupg gnupg-agent rng-tools # gpg --versio ...

  10. linux 怎么不检查gpg,如何在Linux上使用GPG加密和解密文件 | MOS86

    如何在Linux上使用GPG加密和解密文件... GnuPrivacy Guard (GPG) allows you to securely encrypt files so that only th ...

最新文章

  1. cmd 将文件夹下文件剪切到另外一个文件_总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇...
  2. 在c语言中除法运算符,c – 不需要的除法运算符行为,我该怎么办?
  3. Eclipse 中隐藏的 5 个非常有用的功能
  4. SAP ui5 control lifecycle - registration and deregistration
  5. 一些oj的返回结果:通过结果找错误,debug。
  6. postman生成python代码_别再用手敲了,这个工具可以自动生成python爬虫代码
  7. sharing-jdbc实现读写分离及分库分表
  8. 史上最拉风年货?苏宁门店私人飞机开售 网友:这个真香不了吧
  9. Leetcode每日一题:16.3sum-closest(最接近的三数之和)
  10. ie6和W3C的盒子模型
  11. windows cmd 提示 ‘系统找不到指定路径‘ 提示 ‘ECHO 处于关闭状态‘
  12. 如何利用python盗qq_一个团队为了让我帮他提高流量,竟然盗我QQ,没办法,我只好帮他用python刷了刷流量!...
  13. push rejected by remote
  14. 如何从0到1打磨一门 Elasticsearch 线上直播课?
  15. 游泰晤士小镇所思所想
  16. 结对编程项目的收获与总结(支持UI背景与背景音乐的刷题器)
  17. 基于 WebRTC 的 P2P 文件传输
  18. 论文MICO for MRI bias field estimation and tissue segmentation品讲
  19. 爆笑三国故事:张飞流水帐41-50
  20. 霸气!恒大2015年87张海报 球迷文化深入人心 AE

热门文章

  1. 数据结构和算法9——哈希表
  2. 删除误添加的本地github检查库文件
  3. SPOJ VLATTICE Visible Lattice Points(莫比乌斯反演)题解
  4. Serengeti Accomodation
  5. golang获取u盘序列号(通过读取注册表实现)
  6. Spring MVC+Mybatis 多数据源配置及发现的几个问题
  7. IDEA 导入cordova3.5工程目录注意事项
  8. centos 安装图形桌面
  9. R语言ETL工程:分组(group_by)
  10. 计算机网络领悟摩尔定,计算机网络等133信息技术展望P15-P17.PPT