数据防护技术分析
在企业数据防护技术中,从本质上来说包括2大类,一类是数据加密;另一类则是数据防泄露。前者是为了解决数据的机密性和一致性问题,通俗来说就是防止不该看的人看到数据和篡改数据;而后者主要是为了解决数据的机密性问题,是为了定向地发布数据,控制数据的流通渠道,从本质上来说也是为了防止数据为非法或者不期望的用户所获得。
在今年引发的很多用户帐号泄露、机密数据泄密等安全事件中,很多事件就是因为如下几个原因造成的:
数据未加密:导致数据在传输通道(如有线网络、wifi等)中或者物理服务器中被有意窃取和捕获,如CSDN的用户帐号泄露事件等。如果数据加密了,黑客和不法用户即算捕获和窃取了加密的数据,要解开他们还是有相当的难度的;
未做好数据防泄露工作:导致数据通过USB、邮箱、即时消息等媒体和途径进行传播后,无法确保其仅能被有权限的人访问,从而导致间接泄密。
本文将针对上述第一个问题,详细介绍企业如何使用开源工具来进行数据加密工作。
使用GnuPG进行应用数据加密
随着网络与计算机技术的发展,数据存储与数据交换的安全性已经变得越来越重要,加密技术已经很早就用于数据存和数据交换。GnuPG(GNU Privacy Guard)就是用来加密数据与制作证书的一套工具,其作用与PGP类似。但是PGP使用了许多专利算法,属于"臭名昭著"的美国加密出口限制之列。GnuPG是GPL软件,并且没有使用任何专利加密算法,所以使用起来有着更多的自由。
具体地说,GnuPG是实现安全通讯和数据存储的一系列工具集,可以做加密数据和做数字签名之用。在功能上,它和PGP是一样的。由于PGP使用了IDEA专利算法,所以使用PGP会有许可证的麻烦。但是GnuPG并没有使用这个算法,所以对用户来说使用GnuPG没有任何限制。GnuPG使用非对称加密算法,安全程度比较高。所谓非对称加密算法,就是每一个用户都拥有一对密钥:公钥和私钥。其中,密钥由用户保存,公钥则由用户尽可能地散发给其他人,以便用户之间的通讯。该软件可以从网站http://www.gnupg.org/上进行下载安装。
1、安装GnuPG
很多开源系统已经自带了GnuPG的软件安装包,用户可以在系统安装时选择安装,也可以以后安装。一般,在系统中会有两个已经安装的GnuPG软件包,一个是GnuPG 1.x,一个是GnuPG 2.x。后者是GnuPG的最新稳定版本,它兼容OpenPGP和S/MIME,并且不会和已经安装的1.x系列有任何的冲突。相比1.x系列来说,由于有些新的功能(支持S/MIME)加入,所以其在运行时间和软件包大小上都比1.x系列要大。但是从功能实现上来说,与1.x相差无几。为了解释和讨论的有效性和一致性,本系列将采用GnuPG 1.x系列进行讲解说明。
#p#副标题#e#
2、GnuPG的基本命令
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 [选项] [文件名]。其实现的功能包括签名、检查、加密或解密,默认的操作依输入数据而定。
3、详细使用方法
(1)生成密钥对
使用GnuPG之前必须生成密钥对(公钥和私钥),参数选项"--gen-key"可以生成密钥对。可按如下步骤操作,首先需要注意有如下几个关键的步骤:
1)GnuPG要求输入要生成的密钥的算法:GnuPG可以生成多种密钥对,这里有三种选择。DSA密钥是生成证书的最基本的密钥格式。ElGamal密钥对可以用来加密。第二种选择与第一种相似,但是仅仅生成DSA密钥对,第三种选择可以生成供签证和加密使用的ElGamal密钥对。对大多数用户来说,使用缺省的选择是非常方便的。
2)选择密钥的长度,DSA密钥的长度在512位~1024位之间,Elmagal密钥的长度则没有限制。生成一个很长的密钥既有优点也有缺点,长的密钥无疑安全性非常高,但是会导致加密的过程变得缓慢,另外,密钥过长,也会使证书的长度变大。缺省的密钥长度1024位已经够用了,确定了密钥的长度之后,就不能再改变它。
3)需要指定这个密钥对的有效日期,如果选择了生成ElGamal或者 DSA密钥对,它们需要指定密钥对的失效日期。对于大多数用户来说,密钥对没有失效期限是可以的。虽然在密钥对产生以后,可以改变它的有效日期,但是仍要谨慎选择这个参数。因为公钥发送出去以后,很难再改变其他用户拥有的您的公钥。
完成上述步骤后,用户还需要注意后续几个关键步骤:
4)用户需要指定一个用户ID来标识选择的密钥,GnuPG可以根据用户的真实姓名、注释和E-mail地址产生一个用户ID。我们使用姓名(liyang),电子邮件地址(liyang@tsinghua.com)和注释(liyang@tsinghua),并设定了密钥的密码,来完成了该步骤。这个口令的目的是用来加密用户的私钥,这样,即使有人偷走了用户的私钥,没有这个口令,也无法使用,这个口令的长度没有限制,但是,正如我们所知道的,一个短的口令是很容易被破解的。同样,如果用户的口令是一个单词,也很容易被破解。
5)在产生密钥的过程中,GnuPG需要得到一些随机的数字。这些随机的数字可以从用户的系统当前状态中得到,所以这时候,用户可以随机敲一下键盘或者移动鼠标,来产生高质量的随机数。
完成了上述5个关键步骤后,如果系统显示成功界面,则生成密钥成功,否则用户需要再重复如上5个步骤。
#p#副标题#e#
(2)为密钥建立吊销证书
当用户的密钥对生成之后,用户应该立即做一个公钥回收证书,如果忘记了私钥的口令或者私钥丢失或者被盗窃,用户可以发布这个证书来声明以前的公钥不再有效。生成回收证书的选项是"--gen-revoke"。具体使用的命令是:
# gpg --output revoke.asc --gen-revoke mykey
其中mykey 参数是可以表示的密钥标识,产生的回收证书放在revoke.asc文件里,一旦回收证书被发放,以前的证书就不能再被其他用户访问,因此以前的公钥也就失效了。在该过程中我们为用户liyang的密钥建立了一份吊销证书,在建立过程中需要依次输入吊销理由和为密钥设定的密码才能成功建立:
(3)显示密钥列表
完成上述操作后可以使用 --list-keys 选项列出我们生成的密钥,如下命令所示:
#gpg –list –keys
(4)输出公钥
用户可以输出您的公钥供您的主页使用,也可以把它放在密钥服务器上,当然,还可以使用于其他的途径。在使用此公钥之前用户首先要导出它。选项--export可以实现这个功能,在使用这个选项时,还必须使用附加的选项指明用户要输出的公钥。
下面的命令表示以二进制格式输出公钥:
# gpg --output pubring.gpg --export samsunglinux@minigui.org
如下命令表示以ASCII字符格式输出:
#gpg --output pubring.gpg --export--armor> liyang_public-key.asc
(5)导入公钥
用户可以把从第三方的公钥数据库中得到的公钥导入自己的私有数据库,在与他人进行通讯时使用。命令如下:
#gpg --import < filename >
其中,参数filename为公钥文件。
图1给出了将用户liyang的公钥导入到用户samsunglinux自己的私有数据库的例子:
图1 导入公钥示例
(6)确认密钥
导入密钥以后,使用数字签名来验证此证书是否合法。查看数字签名使用 --fingerprint 选项。其命令如下所示:
#gpg --fingerprint < UID >
其中,UID为用户要验证的公钥。
(7)密钥签名
导入密钥之后,可以使用 --sign-key 选项进行签名,签名的目的是证明用户完全信任这个证书的合法性。其命令格式为:
# gpg --sign-key < UID >
其中,UID 是要签名的公钥。
(8)检查签名
用户可以使用 --check-sigs选项来检查在上面对密钥所作的签名。其命令格式为:
# gpg --check-sigs < UID >
这个选项可以列出此密钥文件的所有的签名。
(9)加密和解密
使用GnuPGP加密和解密一个文件非常容易,如果用户要给对方用户发送一个加密文件,可以使用对方用户的公钥加密这个文件,并且这个文件也只有对方用户使用自己的密钥才可以解密查看。
加密一个文件可以使用下面的指令
#gpg –r < UID > --encrypt < file >
其中,UID是对方的公钥,file为要加密的文件。
对应地,如果用户要解开一个其他用户发给您的文件可以使用下面的指令:
#gpg -d < file >
其中,file是要解密的文件。解密过程中,GnuPG会提示用户输入使用密钥所需要的口令,也就是在产生私钥时用户所输入的口令,否则,该文件将无法正常解密和为用户进行使用。图2和图3分别显示了用户samsung对文件gpg.conf进行加密传输,用户liyang对该加密文件gpg.conf.gpg进行解密的过程。
图2 用户samsunglinux对文件gpg.conf进行加密
图3 用户liyang对文件进行解密并浏览(白色部分)