科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道使用开源PGP技术实现Solaris 10 下加密和解密

使用开源PGP技术实现Solaris 10 下加密和解密

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

PGP技术是一个基于非对称加密算法RSA公钥体系的邮件加密技术,也是一种操作简单、使用方便、普及程度较高的加密软件。

作者:曹江华 来源:51CTO.com   2008年9月24日

关键字: PGP 系统加密解密 加密解密

  • 评论
  • 分享微博
  • 分享邮件

  一、PGP(Pretty Good Privacy)技术简介

  1、PGP简介

  【51CTO.com独家稿件】PGP技术是一个基于非对称加密算法RSA公钥体系的邮件加密技术,也是一种操作简单、使用方便、普及程度较高的加密软件。PGP技术不但可以对电子邮件加密,防止非授权者阅读信件;还能对电子邮件附加数字签名,使收信人能明确了解发信人的真实身份;也可以在不需要通过任何保密渠道传递密钥的情况下,使人们安全地进行保密通信。

  PGP技术创造性地把RSA非对称加密算法的方便性和传统加密体系结合起来,在数字签名和密钥认证管理机制方面采用了无缝结合的巧妙设计,使其几乎成为最为流行的公钥加密软件包。

  PGP使用两个密钥来管理数据:一个用以加密,称为公钥(Public Key);另一个用以解密,称为私钥(Private Key)。公钥和私钥是紧密联系在一起的,公钥只能用来加密需要安全传输的数据,却不能解密加密后的数据;相反,私钥只能用来解密,却不能加密数据。

  现在广泛使用的公共密钥系统是基于PGP方式。它是一个基于RSA公钥加密体系的开源软件,但它与RSA加密算法又有所不同。确切地说,PGP使用的是RSA和传统算法DES结合的新算法——IDEA(受专利保护)。

  RSA算法是利用素数(即质数)的因式不可分解性。RSA算法的要点与难点有二个:算法主要为求模取余运算;判断一个数是否为素数。由于进行的都是大数计算,使得RSA最快的情况也比DES慢上百倍,所以为了避开速度这一缺陷,PGP采用了改进后的IDEA算法。

  2、为什么采用PGP加密?

  目前国内多使用56位的加密系统,实际上是不安全的,而PGP是最少128位加密的强大的加密软件, 可以用于任何格式的文档,包括文本、电子表、图形等。具备数字签名功能,用于检查消息和文件的原作者和完整性。支持以下密钥算法:

  1)公用密钥算法:Diffie-Hellman/DSS,RSA

  2)散列功能:MD5, RIPEMD-160, SHA-1

  3)对称算法:CAST, IDEA, Triple-DES

  包括密钥生成和管理的整套工具,使系统管理员能够灵活控制整个网络系统的安全策略。

  3、如何部署大规模PGP系统

  1)建立网络系统的PGP证书管理中心

  在大型网络系统中,利用PGP Certificate Server建立一个证书的管理中心。可以轻松地创建并管理统一的公用密钥基础结构。从而在网络系统内部或Internet之间进行保密通讯。 通过将Lightweight Directory Access Protocol (LDAP)目录和PGP证书的优点相结合, PGP Certificate Server大大简化了投递和管理证书的过程。同时具备灵活的配置和制度管理。PGP Certificate Server支持LDAP和HTTP协议,从而保证与PGP客户软件的无缝集成。 其Web接口允许管理员执行各种功能,包括配置、报告和状态检查,以实现对其远程管理。 我们可以在Sun Solaris或Microsoft Windows Server (Intel)平台上实现。

  2)对文档和电子邮件进行PGP加密

  在操作系统可以安装PGP,对文件系统和电子邮件系统进行加密传输。

  3)在应用系统中集成PGP加密

  利用PGP Software Development Kit(PGP 软件开发包)系统开发人员可以将密码功能结合到现有的应用系统中, 如电子商务、法律、金融及其他应用中。

  4、PGP的 运行方式

  PGP有5种业务:认证性?保密性?压缩?电子邮件的兼容性?分段?表1是这5种业务的总结?其中CAST-128是一种分组密码,算法具有传统Feistel网络结构,采用16轮迭代,明文分组长度为64比特,密钥长以8比特为增量,从40比特到128比特可变?

  

功能

使用的算法

功能描述

数字签字

DSS/SHA或RSA/SHA

发送方使用SHA产生消息摘要,再用自己的秘密钥按DSS算法或RSA算法对消息摘要签字。

消息加密

CAST或IDEA或三个密钥的三重DES/ElGamal或RSAIDEA或三重DES加密

消息由用户产生的一次性会话密钥按CAST-128或消息加密,会话密钥用接收方的公开钥按ElGamal或RSA加密。

压缩格式

ZIP, ZLIB, BZIP2

消息经ZIP, ZLIB, BZIP2算法压缩后存储或传送

电子邮件的兼容性

使用基数64变换

将加密的消息转换为ASCII字符的兼容性基数64变换串,以提供电子邮件应用系统的透明性。

分段

对消息进行分段和重组以适应PGP对消息最大长度的限制。

  表1 PGP的业务

图1:PGP工作流程

  5、开源pgp工具

  后来GNU和自由软件运动的出现可以使用免费的GPG,它的安全性与PGP一样强,可以充分地保护每个用户的隐私。 GnuPG 是用于安全通信的工具;它是对 PGP加密技术的完全和免费的开源代替产品。使用 GnuPG,你可以给你的数据和通信加密,并可以使用 数码签名(digitally signing)来验证你的通信。GnuPG还能够解密及校验 PGP 5.x。

  因为GnuPG 和其它加密标准兼容,你的安全通信可能会与其它操作系统(如 Windows 和 Macintosh)上的电子邮件程序兼容。GnuPG 使用公钥加密术(public key cryptography)来为用户提供安全的数据交换。在公钥加密术方案中,你生成两把钥匙:公钥和密钥。你和通信对方或钥匙服务器互换你的公钥,你决不应该出示你的密钥。

  二、在Solaris的GnuPG安装

  首先先必须安装软件软件包:

  bzip2-1.0.5

  libidn

  libiconv

  libintl

  readline

  openssl-0.9.8g

  curl

  openldap

  sasl

  zlib

  限于篇幅笔者不详细介绍了。

  #gunzip gnupg-1.4.8-sol10-x86-local.gz

  #pkgadd –d gnupg-1.4.8-sol10-x86-local

图2:是gunpg安装成功界面

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

  三、Gunpg在Solais下的配置

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

  1、生成密匙

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

  #gpg --gen-key

  命令开始运行后,首先,会看到版本和路径信息。随后需要回答一系列问题,以帮助产生一对密钥。其中,DSA是数字签名算法,RSA和ElGamal是两种不同原理的非对称密钥算法。通常可以选择“1”,这样生成的密钥可以同时用作签名和加密两种用途。

  接着,会要求选择密钥的长度。这里的密钥长度有768、1024和2048位三种。如图 3 。

图3:选择密钥使用的长度

  显然,密钥越长越安全,但太长又会影响使用的速度。所以,可以根据不同的需要选择适合的长度。笔者选择了的1024位密钥。另外,还需要设定密钥过期的时间,原则上,密钥使用的频率越高,密钥有效的时间越长,被攻击的可能性就越大。

  所以,要根据应用的实际情况综合考虑,确定一个适当的时间长度。需要注意的是,密钥要定期更换,建议绝对不要永远使用同一对密钥。

  最后,需要输入一些个人信息,包括真实姓名、电子邮件地址等,用来识别密钥,最好是如实填写。然后,必须输入一个密码。密码用来保护密钥,没有这个密码,任何人都不能看到密钥本身的内容。密码是在密钥文件泄露后惟一的保密措施,它的最大敌人是暴力破解和字典攻击。

  所以,一定要选择一个强壮的密码,来有效地对抗这些攻击。 密码确定以后,系统开始运算。这时需要随便地敲击键盘或是移动鼠标,以产生一些随机数,协助密钥的顺利生成。注意,如果没有以上动作,很可能最终不能产生密钥。系统运算完成后,会出现类似图4的信息:

图4:成功生成钥匙文件

  2、查看密钥

  使用下面的命令:

  gpg --list-keys

  你会看到和图 5相似的输出:

图5:查看所有密钥

  3、其他常用命令:

  查看所有公钥:

  gpg --list-public-key

  查看所有私钥:

  gpg --list-secret-key

  列出所有签名:

  gpg --list-sig

  4、公钥的使用

  接下来要做的工作是输出一个用来发布的公钥:

  gpg --export -a -o yourpubkey.asc

  -a 是ASCII编码形式,-o 说明输出公钥到 yourpubkey.asc 文件。要发布这个公钥,可以将yourpubkey.asc文件放在你的主页上,也可以通过邮件寄给朋友。

  当你收到朋友发来的公钥,你需要将这把公钥导入你的钥匙库。例如,他寄给你的公钥是 friendpubkey.asc ,使用下面命令就可以导入进钥匙库:

  gpg --import friendpubkey.asc

  5、生成一份废弃证书

  在生成钥匙对后,还应该为公钥创建一份废弃证书。这不是废弃刚刚生成的钥匙,而是提供了一种停止钥匙被继续公开使用的安全方法。当忘记了口令句,或者该口令句被窃取,或者更换了联系邮件地址,或系统崩溃等情况下,可以使用该废弃证书宣告原来的公钥无效。使用--gen-revoke选项生成废弃证书:

  #gpg --output revoke.asc --gen-revoke [user-id: goodcjh@2911.net]

  确认废弃原因后,输入用来生成钥匙的口令句。注意,如果省略了--output revoke.asc选项,则废弃证书只会被显示在屏幕上,需要进行复制、粘贴操作,并保存为文件才行。

  四、Gunpg在Solaris下的应用

  1、对文件进行加密和解密

  Gunpg使用的是非对称的密钥体系,用户拥有一对密钥,包括一个公钥和一个私钥。公钥对外公布,私钥则由自己保存。使用公钥加密的数据可以用私钥解密,同样,使用私钥加密的数据可以用公钥解密。

  2、使用GnuPG进行数字签名(sign)

  利用GnuPG数字签名的方式有三种: 1.显式数字签名,即直接把数字签名添加在文件内容的后面。这样做的好处是简单,可以直接阅读信息。 2.隐匿数字签名,即签名后隐藏文件内容。这样做的好处是把真实信息隐藏在签名档中。如果想要查看信息,使用命令:

  #gpg -d goodcjh.file.asc

  3、把数字签名单独存放于一个文件。

  #gpg -ba goodcjh.file

  这时目录下会出现一个cjh.file.asc的签名文件。如果此时修改原文件test.file的内容,再次校验数字签名档时就会被警告。

  使用GnuPG进行数据加密和解密,例如,现有一份文本文件,内容为“goodcjh using GnuPG on solaris”。使用如下命令进行数据加密:

  #gpg -ea -r goodcjh test.txt

  -e表示加密选项;-a表示使用ASCⅡ字符,如果不指定,默认输出为二进制文件;-r指定某用户的公钥;text.txt为所要加密的文件名。

  解密操作使用命令:

  #gpg -d goodcjh.file.asc >test.file

  一般可以用以下命令来生成一个同时带有数字签名和加密的文档:

  #gpg -o test.gpg -ea -s -r goodcjh.test.file

  其中-o表示输出文件名;-s表示加入数字签名。

  另外在GPG的使用过程中,可以进行多次加密使数据更加安全。命令如下:

  #gpg -eas -r goodcjh test.file -o test.gpg.nc1

  #gpg -eas -r goodcjh test.gpg.nc1 -o test.gpg.nc2

  #gpg -eas -r goodcjh test.gpg.nc2 -o test.gpg.nc3

  解密操作过程类似。

  五、对文件进行数字签名和验证

  #gpg --clearsign policy.txt

  运行以上命令,生成一个名为report.txt.asc的文件,该文件中除了原文件信息外还包含数字签名信息。

  验证文件的数字签名

  #gpg --verify policy.txt.asc

  在电子邮件中使用gunpg

  在Mutt中使用GnuPG

  GnuPG用的最多的地方,还是在收发邮件的过程中。这里以Mutt作为邮件客户端来举例。Mutt对GnuPG支持的非常好,并且如果你不做任何设置,它会自动到.gnupg目录下调用公钥和密钥。

  1、发信

  写完一封信,在发出之前,可以使用下列功能: 通过按“Esc+K”键可以添加GPG文档,按照提示输入公钥ID号,如0B383904,或者直接回车从钥匙圈上选择。

  2、阅读电子邮件

  当你收到一封朋友寄来的加密阅读电子邮件时,Mutt会在邮件索引页中,用P表示是加密过的信件,用s表明有签名。 要打开一封P标志的信时,Mutt提示先输入使用密钥的口令。口令输入正确,Mutt用密钥自动解密该邮件。当你关闭Mutt,下次再看这封邮件时,需要再次输入口令和解密过程。 打开一封s标志的信,Mutt自动匹配钥匙库里面的公钥,显示信件内容的同时也显示签名信息。

  图形化电子邮件Ximin下使用gunpg

  Ximin下使用gunpg界面如图 6 。

  常见问题:

  当您给电子邮件添加一个加密签名时,您可能会看到下面的错误:

  Failed to GPG sign: Broken pipe

  gpg: skipped '<key>': secret key not available

  gpg: signing failed: secret key not available要更正此错误,请执以下步骤:

  打开以下文件:$HOME/.gnupg/gpg.conf

  注释掉以下行:use-agent

  总结:Gunpg作为一个开源并且免费的加密和数字签名软件已经存在多年。它不但可以为企业、个人之间的重要信息提供加密保护,还可以为出版的软件、内核等电子产品进行数字签名,防止产品被篡改,最大程度地保障信息安全。 对于Unix用户来说,对信息安全的要求相对更高,gunpg更值得在unix用户中推广和应用。

  有用参考资料:

  Gunpg加密技术中可以研究讨论之处极多,这里只对 GnuPG 蜻蜓点水地介绍了一下。如果你想深入了解这方面的知识,可以参看下面的资料。

  在线的文档

  Gpg –h ##可以显示GnuPG 命令和选项的快捷参考。

  有用的网站:

  http://www.gnupg.org — GnuPG 网站,其中有到最新 GnuPG 发行版本、通俗易懂的用户指南、以及其它加密资源的链接。

  相关书籍:

  PGP &GPG ,作者Michael W. Lucas;No Starch Press出版。

PGP &GPG封面

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章