不安全网络中的数据安全传输利器:GnuPG


1  GnuPG简介

随着网络与计算机技术的发展,数据存储与数据交换的安全性、完整性和一致性已经变得越来越重要。如何保证在不安全的网络上传输数据的安全性成为网络信息安全界研究的热点和经典问题。本文将通过具体的加解密实例向用户来介绍一种Linux下的基于PGP(Pretty Good Privacy)机制的加密及签名软件——GnuPG,包括密钥生成、公钥导出、加密文件、解密文件、对文件进行数字签名等重要步骤,通过它可以极大地保证网络用户传输及使用数据的安全性。并且,用户可以通过灵活运用本文的技术来对网络传送的文档、电子邮件等进行安全传输。

PGP(Pretty Good Privacy),是一个基于RSA公钥加密体系的邮件加密软件。它不但可以对用户的数据保密以防止非授权者阅读,还能对你的邮件加上数字签名从而使收信人确信邮件是由你发出。让人们可以安全地和从未见过的人们通讯,而事先不需要任何保密的渠道用来传递密钥。PGP采用了审慎的密钥管理,一种RSA和传统加密的杂合算法,用于数字签名的邮件文摘算法,加密前压缩等。它功能强大,速度很快。

PGP的创始人是美国的PhilZimmermann。他创造性地把RSA公钥体系的方便和传统加密体系的高速度结合起来,并且在数字签名和密钥认证管理机制上有非常巧妙的设计。因此PGP成为几乎最流行的公钥加密软件包。其中,RSA(Rivest-Shamir-Adleman)算法是一种基于“大数不可能质因数分解假设”的公钥体系。简单地说就是找两个很大的质数,一个公开给世界,一个不告诉任何人。一个称为“公钥”,另一个叫“私钥”。这两个密钥是互补的,就是说用公钥加密的密文可以用私钥解密,反过来也一样。

具体地说,GnuPG是实现安全通讯和数据存储的一系列工具集,可以做加密数据和做数字签名之用。在功能上,它和PGP是一样的。由于PGP使用了IDEA专利算法,所以使用PGP会有许可证的麻烦。但是GnuPG并没有使用这个算法,所以对用户来说使用GnuPG没有任何限制。GnuPG使用非对称加密算法,安全程度比较高。所谓非对称加密算法,就是每一个用户都拥有一对密钥:公钥和私钥。其中,密钥由用户保存,公钥则由用户尽可能地散发给其他人,以便用户之间的通讯。该软件可以从网站http://www.gnupg.org/上进行下载安装。
GnuPG支持的算法有如下:

公钥:RSA, RSA-E, RSA-S, ELG-E, DSA

对称加密:3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH

散列:MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512

压缩:不压缩, ZIP, ZLIB, BZIP2

其使用的基本语法为:gpg [选项] [文件名]

其实现的功能包括签名、检查、加密或解密,默认的操作依输入数据而定。

2  详细使用方法

1.生成密钥对

使用GnuPG之前必须生成密钥对(公钥和私钥),参数选项”–gen-key”可以生成密钥对。可按如下步骤操作,如图1、图2所示。在图1中,首先用户需要注意有如下几个关键的步骤:

(1)GnuPG要求输入要生成的密钥的算法:GnuPG可以生成多种密钥对,这里有三种选择。DSA密钥是生成证书的最基本的密钥格式。ElGamal密钥对可以用来加密。第二种选择与第一种相似,但是仅仅生成DSA密钥对,第三种选择可以生成供签证和加密使用的ElGamal密钥对。对大多数用户来说,使用缺省的选择是非常方便的。

(2)选择密钥的长度,DSA密钥的长度在512位~1024位之间,Elmagal密钥的长度则没有限制。生成一个很长的密钥既有优点也有缺点,长的密钥无疑安全性非常高,但是会导致加密的过程变得缓慢,另外,密钥过长,也会使证书的长度变大。缺省的密钥长度1024位已经够用了,确定了密钥的长度之后,就不能再改变它。

(3)需要指定这个密钥对的有效日期,如果选择了生成ElGamal或者 DSA密钥对,它们需要指定密钥对的失效日期。对于大多数用户来说,密钥对没有失效期限是可以的。虽然在密钥对产生以后,可以改变它的有效日期,但是仍要谨慎选择这个参数。因为公钥发送出去以后,很难再改变其他用户拥有的您的公钥。

图1

图1  生成密钥对的前3个关键步骤

完成上述步骤后,用户还需要注意如图5所示的后续几个关键步骤:

(4)用户需要指定一个用户ID来标识选择的密钥,GnuPG可以根据用户的真实姓名、注释和E-mail地址产生一个用户ID。在图2中,我们使用姓名(liyang),电子邮件地址(liyang@tsinghua.com)和注释(liyang@tsinghua),并设定了密钥的密码,来完成了该步骤。这个口令的目的是用来加密用户的私钥,这样,即使有人偷走了用户的私钥,没有这个口令,也无法使用,这个口令的长度没有限制,但是,正如我们所知道的,一个短的口令是很容易被破解的。同样,如果用户的口令是一个单词,也很容易被破解。

(5)在产生密钥的过程中,GnuPG需要得到一些随机的数字。这些随机的数字可以从用户的系统当前状态中得到,所以这时候,用户可以随机敲一下键盘或者移动鼠标,来产生高质量的随机数。图2中系统就明显地要求笔者尽量多产生一些随机数字来生成密钥,以保证质量。