分类: LINUX
2008-05-05 16:58:41
随着网络与计算机技术的发展,数据存储与数据交换的安全性、完整性和一致性已经变得越来越重要。网络信息安全中核心的加密技术也随之应用于数据存储和数据交换。同时,为了确保网络数据交换时的双方身份的正确性以及不可抵赖性,签证体系也已经日趋成熟。如何保证在不安全的网络上传输数据的安全性成为网络信息安全界研究的热点和经典问题。本文将向读者介绍一种Linux下的基于PGP(Pretty Good Privacy)机制的加密及签名软件——GnuPG,通过它可以极大地保证网络用户传输及使用数据的安全性。
PGP的创始人是美国的PhilZimmermann。他创造性地把RSA公钥体系的方便和传统加密体系的高速度结合起来,并且在数字签名和密钥认证管理机制上有非常巧妙的设计,因此PGP成为几乎最流行的公钥加密软件包。
其中,RSA(Rivest-Shamir-Adleman)算法是一种基于“大数不可能质因数分解假设”的公钥体系。它是指每一个用户都拥有一对密钥:公钥和私钥。其中,密钥由用户保存,公钥则由用户尽可能地散发给其他人,以便用户与其他人通信。这两个密钥是互补的,用公钥加密的密文可以用私钥解密,反过来也一样。
PGP(Pretty Good Privacy),是一个基于RSA公钥加密体系的邮件加密软件。它不但可以对用户的数据保密以防止非授权者阅读,还能对用户的邮件加上数字签名从而使收信人确信邮件是由该用户发出。让人们可以安全地和从未见过的人们通信,而事先不需要任何保密的渠道用来传递密钥。PGP采用了审慎的密钥管理,一种RSA和传统加密的杂合算法,用于数字签名的邮件文摘算法,加密前压缩等。它功能强大,速度很快。
GnuPG是实现安全通信和数据存储的一系列工具集,可以做加密数据和做数字签名之用。在功能上,它和PGP是一样的。由于PGP使用了IDEA专利算法,所以使用PGP会有许可证的麻烦。但是GnuPG并没有使用这个算法,所以对用户来说使用GnuPG没有任何限制。GnuPG使用非对称加密算法,安全程度比较高。GnuPG主要有以下特点:
● 完全兼容PGP;
● 没有使用任何专利算法,没有专利问题;
● 遵循GNU公共许可证;
● 与OpenPGP兼容;
● 使用广泛,安全性高于PGP2,可以加密校验和PGP5.x格式的信息;
● 支持多种加密算法;
● 支持扩展模块;
● 用户标识遵循标准结构;
● 多语言支持(尚未支持中文);
● 支持匿名信息接收;
● 支持HKP密钥服务。
现在的各种发行版大部分都提供了GPG的RPM包,如果没有提供或者想用最新的版本,可以从获得。现在最新的版本为1.4.7。其源码的安装方法为:
[root@localhost mnt]# ls gnupg-1.4.7.tar.gz -l -rw-r--r-- 1 root root 4524604 Mar 5 2007 gnupg-1.4.7.tar.gz [root@localhost mnt]# tar zxvf gnupg-1.4.7.tar.gz [root@localhost mnt]# cd gnupg-1.4.7 [root@localhost gnupg-1.4.7]# ./configure [root@localhost gnupg-1.4.7]# make [root@localhost gnupg-1.4.7]# make install
GPG可以用来验证我们从网上下载的软件的完整性和真实性。以MySQL为例,我们可以从http://dev.mysql.com/downloads/获得MySQL的各种平台的RPM和tgz包以及签名。下面我们来介绍如何用GPG来验证起完整性和真实性。
要想验证软件上的私钥签名,就需要得到相对应的公钥。
MySQL的官方公钥可以从http://处获得。如图1,将build@mysql.com输入到文本框中,然后点击“Search”。然后,点击“Key ID”并保存此文件,我们暂且将其命名为mysql_pubkey.asc。如图2
图1
图2
1)、导入公钥。
[root@localhost mnt]# gpg --import mysql_pubkey.asc gpg: key 5072E1F5: "MySQL Package signing key ()" not changed gpg: Total number processed: 1 gpg: unchanged: 1 [root@localhost mnt]# gpg --list-keys /root/.gnupg/pubring.gpg ------------------------ pub 1024D/5072E1F5 2003-02-03 [expires: 2008-02-02] uid MySQL Package signing key () sub 2048g/6D9876B8 2003-02-03 [expires: 2008-02-02]
2)、验证签名。
[root@localhost mnt]# ls -l mysql-5.0.45.tar.gz* -rw-r--r-- 1 root root 24433261 Jul 4 22:49 mysql-5.0.45.tar.gz -rw-r--r-- 1 root root 189 Jul 10 15:56 mysql-5.0.45.tar.gz.asc [root@localhost mnt]# gpg --verify mysql-5.0.45.tar.gz.asc gpg: Signature made Tue 10 Jul 2007 11:56:49 PM CST using DSA key ID 5072E1F5 gpg: Good signature from "MySQL Package signing key ()" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: A4A9 4068 76FC BD3C 4567 70C8 8C71 8D3B 5072 E1F5
Good signature消息表示签名正确。