随着网络与计算机技术的发展,数据存储与数据交换的安全性已经变得越来越重要,加密技术已经很早就用于数据存和数据交换。为了确保网络数据交换时的双方身份的正确性,签证体系也已经成熟。GnuPG就是用来加密数据与制作证书的一套工具,其作用与PGP类似。但是PGP使用了许多专利算法,属于"臭名昭著"的美国加密出口限制之列。GnuPG是GPL软件,并且没有使用任何专利加密算法,所以使用起来有着更多的自由。
具体地说,GnuPG是实现安全通讯和数据存储的一系列工具集,可以做加密数据和做数字签名之用。在功能上,它和PGP是一样的。由于PGP使用了IDEA专利算法,所以使用PGP会有许可证的麻烦。但是GnuPG并没有使用这个算法,所以对用户来说使用GnuPG没有任何限制。GnuPG使用非对称加密算法,安全程度比较高。所谓非对称加密算法,就是每一个用户都拥有一对密钥: 公钥和私钥。其中,密钥由用户保存,公钥则由用户尽可能地散发给其他人,以便其他人与您通讯。
---- GnuPG主要有以下特点:
---- 完全兼容 PGP
---- 没有使用任何专利算法,没有专利问题
---- 遵循GNU公共许可证
---- 与OpenPGP兼容
---- 使用广泛,安全性高于PGP2,可以加密校验和PGP5.x格式的信息
---- 支持多种加密算法
---- 支持扩展模块
---- 用户标识遵循标准结构
---- 多语言支持(尚未支持中文)
---- 在线帮助系统
---- 支持匿名信息接收
---- 支持HKP密钥服务
---- 拥有众多的GUI界面支持
---- GnuPG的源代码可以在http://www.gnu.org/download.html取得。
GnuPG的安装
---- 首先要取得GnuPG的源代码,然后执行如下操作:
---- 1.解开源代码包:
---- [kerberos@dev9] tar xvzf gnupg-version.tar.gz
---- [kerberos@dev9] cd gnupg-version
---- [kerberos@dev9 gnupg-version] ./configure
---- 2.编译源代码
---- [kerberos@dev9 gnupg-version] make
---- 3.检验生成的工具
---- [kerberos@dev9 gnupg-version] make check
---- 4.准备安装
---- [kerberos@dev9 gnupg-version] su
---- 5.安装工具包
---- [root@dev9 gnupg-version] make install
GnuPG命令使用
---- 1.生成密钥对
---- 使用GnuPG之前必须生成密钥对(公钥和私钥),参数选项"--gen-key"可以生成密钥对。可按如下步骤操作。
[root@dev9 /]#gpg --gen-key
gpg (GnuPG) 1.0.2; Copyright (C) 2000 Free Software
Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to
redistribute it
under certain conditions. See the file COPYING for details.
gpg: /root/.gnupg: directory created
gpg: /root/.gnupg/options: new options file created
gpg: you have to start GnuPG again, so it can read
the new options file
然后重新使用上面的指令。
gpg (GnuPG) 1.0.2; Copyright (C) 2000 Free Software
Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.
gpg: /root/.gnupg: directory created
gpg: /root/.gnupg/options: new options file created
gpg: you have to start GnuPG again, so it can read the
new options file
Please select what kind of key you want:
(1) DSA and ElGamal (default)
(2) DSA (sign only)
(4) ElGamal (sign and encrypt)
Your selection? 1
DSA keypair will have 1024 bits.
About to generate a new ELG-E keypair.
minimum keysize is 768 bits
default keysize is 1024 bits
highest suggested keysize is 2048 bits
What keysize do you want? (1024) 2048
Do you really need such a large keysize? y
Requested keysize is 2048 bits
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) 0
Key does not expire at all
Is this correct (y/n)? y
---- 这时您需要一个用户ID来标识您的密钥,GnuPG可以根据您的真实姓名、注释和E-mail地址产生一个用户ID。
Real name: kerberos
Email address: kerberos@minigui.org
Comment: Unix/Linux consultant
You selected this USER-ID:
"kerberos (Unix/Linux consultant) < kerberos@minigui.org > "
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
You need a Passphrase to protect your secret key.
Enter passphrase: [enter a passphrase]
---- 在产生密钥的过程中,GnuPG需要得到一些随机的数字。这些随机的数字可以 从您的系统当前状态中得到,所以这时候,您可以随机敲一下键盘或者移动鼠标,来产生高质量的随机数。
---- 然后,GnuPG要求您输入您要生成的密钥的算法。
Please select what kind of key you want:
(1) DSA and ElGamal (default)
(2) DSA (sign only)
(4) ElGamal (sign and encrypt)
Your selection?
---- GnuPG可是生成多种密钥对,这里有三种选择。DSA密钥是生成证书的最基本的密钥格式。ElGamal密钥对可以用来加密。第二种选择与第一种相似,但是仅仅生成DSA密钥对,第三种选择可以生成供签证和加密使用的ElGamal密钥对。对大多数用户来说,使用缺省的选择是非常方便的。
---- 下面要选择密钥的长度,DSA密钥的长度在512位~1024位之间,Elmagal密钥的长度则没有限制。
About to generate a new ELG-E keypair.
minimum keysize is 768 bits
default keysize is 1024 bits
highest suggested keysize is 2048 bits
What keysize do you want? (1024)
---- 生成一个很长的密钥既有优点也有缺点,长的密钥无疑安全性非常高,但是会导致加密的过程变得缓慢,另外,密钥过长,也会使证书的长度变大。
---- 缺省的密钥长度1024位已经够用了,确定了密钥的长度之后,就不能再改变它。
---- 最后,需要指定这个密钥对的有效日期,如果选择了生成ElGamal或者 DSA密钥对,它们需要指定密钥对的失效日期。
Please specify how long the key should be valid
0 = key does not expire = 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)
---- 对于大多数用户来说,密钥对没有失效期限是可以的。虽然在密钥对产生以后,可以改变它的有效日期,但是仍要谨慎选择这个参数。因为公钥发送出去以后,很难再改变其他用户拥有的您的公钥。
---- 现在需要提供一个用户标识,在签证的时候,公钥需要与用户标识绑定以证明您的真实身份。
---- You need a User-ID to identify your key; the software constructs the user id from Real Name, Comment and Email Address in this form:
---- "kerberos (Linux consultant) < kerberos@minigui.org > "
---- Real name: 您的用户名
---- Email address: 输入您的email地址
---- Comment: 输入注释
---- 最后,GnuPG 需要一个私钥,这个私钥由用户自己保存
---- Enter passphrase: 输入密钥口令
---- 这个口令的目的是用来加密您的私钥,这样,即使有人偷走了您的私钥,没有这个口令,也无法使用, 这个口令的长度没有限制,但是,正如我们所知道的,一个短的口令是很容易被破解的。同样,如果您的口令是一个单词,也很容易被破解。
---- 2.证书的回收
---- 当您的密钥对生成之后,您应该立即做一个公钥回收证书,如果您忘记了您的私钥的口令或者您的私钥丢失或者被盗窃,您可以发布这个证书来声明以前的公钥不再有效。生成回收证书的选项是"--gen-revoke"。
---- [root@dev9 /]# gpg --output revoke.asc --gen-revoke mykey
---- 其中mykey 参数是可以表示的密钥标识,产生的回收证书放在revoke.asc文件里,一旦回收证书被发放,以前的证书就不能再被其他用户访问,因此以前的公钥也就失效了。
---- 3.密钥列表
---- 列出密钥使用 --list-keys 选项
---- [root@dev9 /]# gpg --list-keys
---- 4.输出公钥
---- 您可以输出您的公钥供您的主页使用,也可以把它放在密钥服务器上,当然,还可以使用于其他的途径。在您使用此公钥之前您首先要导出它。选项 --export 可以实现这个功能,在使用这个选项时,还必须使用附加的选项指明您要输出的公钥。
---- 下面的命令表示以二进制格式输出公钥:
---- [root@dev9 /]# gpg --output kapil.gpg --export kerberos@minigui.org
---- 如下命令表示以ASCII字符格式输出:
---- gpg --output kapil.gpg --export-armor> kerberos-key.asc
---- 5.导入公钥
---- 您可以把从第三方的公钥数据库中得到的公钥导入您的私有数据库,在与他人进行通讯时使用。
---- [root@dev9 /]#gpg --import < filename >
---- 其中,参数filename为公钥文件。
---- 例如:导入redhat的公钥,redhat.asc可以从redhat的主页上下载。
---- [root@dev9 /]# gpg --import redhat.asc
---- gpg: key :9B4A4024: public key imported
---- gpg: /root/.gnupg/trustdb.gpg: trustdb created
---- gpg: Total number processed: 1
---- gpg: imported: 1
---- 6.确认密钥
---- 导入密钥以后,使用数字签名来验证此证书是否合法。查看数字签名使用 --fingerprint 选项。
---- [root@dev9 /]# gpg --fingerprint < UID >
---- 其中,UID 为您要验证的公钥。
---- 7.密钥签名
---- 导入密钥之后,可以使用 --sign-key 选项进行签名,签名的目的是证明您完全信任这个证书的合法性。
---- 例如:[root@dev9 /]# gpg --sign-key < UID >
---- 其中,UID 是要签名的公钥。
---- 8.检查签名
---- 我们可以使用 --check-sigs选项来检查在上面我们对密钥所作的签名。
---- [root@dev9 /]# gpg --check-sigs < UID >
---- 这个选项可以列出此密钥文件的所有的签名。
---- 9.加密和解密
---- 加密和解密一个文件非常容易,如果您要给redhat发送一个加密文件,您可以使用redhat的公钥加密这个文件,并且这个文件也只有redhat使用自己的密钥才可以解密查看。
---- 加密一个文件可以使用下面的指令
---- [root@dev9 /]#gpg --sear < UID > < file >
---- 其中,UID是对方的公钥,file为您要加密的文件。
---- 如果您要解开一个其他用户发给您的文件可以使用下面的指令:
---- [root@dev9 /]#gpg -d < file >
---- 其中,file是您要解密的文件。解密过程中,GnuPG会提示您输入使用密钥所需要的口令,也就是在产生私钥时您所输入的口令。