- 论坛徽章:
- 0
|
20.3 Solaris加密体系
Solaris系统的安全与其加密体系密切相关。系统管理员应了解Solaris加密体系。
20.3.1 Solaris加密体系概述
Solaris加密体系(Cryptographic Framework)以无缝透明的形式向用户提供应用和内核模块的加密服务,用户应用很少察觉到,也很少受到干扰。密码体系中包括命令、用户程序编程接口、内核编程接口和优化加密算法的程序。
1.加密体系中的术语
加密算法
加密算法是一些公式和法则,它规定了明文和密文之间的变换方法。下面简要列出Solaris加密体系中的一些加密算法。
AES:Advanced Encryption Standard高级加密标准,是美国联邦政府标准,是指定的标准密码系统,未来将在政府和银行业用户使用,因为它的执行速度很快,十分适合于现代需求(如智能卡),而且能够使用的密钥大小范围很广。
DES:Data Encryption Standard,在1977年被美国政府正式采纳,是全世界最广泛使用的加密算法。除政府以外,银行业是加密的最大用户,主要问题是其密钥长度很短,密钥实际上有64位,但密钥有8位是奇偶校验位,DES密钥实际只有56位在起作用,完全不适合当今的形势,它已由AES高级加密标准算法代替了。
3DES:即三重DES,只是以某种特殊的顺序使用2个密钥执行三次DES,也可以使用三个单独密钥。
DH:Diffie-Hellman密钥协议,由公开密钥密码体制的奠基人Diffie和Hellman所提出的一种思想,允许两名用户在公开媒体上交换信息以生成“一致”的、可以共享的密钥。
DSA:所谓数字签名就是信息发送者用其私钥对从所传报文中提取出的特征数据(或称数字指纹)进行RSA算法操作,以保证发信人无法抵赖曾发过该信息(不可抵赖性),同时也确保信息报文在经签名后末被篡改(完整性)。当信息接收者收到报文后,就可以用发送者的公钥对数字签名进行验证。
HMAC:Keyed-hash message authentication code,MAC有几种工作方式。第一种方式是在计算摘要之前,将秘钥并置到数据末尾。如果没有秘钥,则无法确认数据未经改动。另一种计算更复杂的方式是照常计算散列,然后再使用对称算法(如 DES)加密散列。要认证散列,必须首先对它解密。
MAC:Message Authentication Code消息认证代码,使用一个密钥生成一个固定大小的小数据块,并加入到消息中。该密钥可以用于认证可疑数据,确保加密位流在传输中免遭恶意修改。
MD5:Message-Digest Algorithm,由麻省理工学院为开发的用于数字签名的信息摘要算法,做Message的Hash变换,将任意长度的Message变换成一个128位的大整数,并且它是一个不可逆的字符串变换算法。MD5的典型应用是对一段Message产生数字指纹,以防止被篡改,即数字签名应用。
PKCS:Public-Key Cryptography Standards是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容,以及数字签名、数字信封的格式等方面的一系列相关协议。PKCS已经公布了PKCS#1到PKCS#15。
PKCS#5:基于口令的加密标准,是一种利用从口令派生出来的安全密钥加密字符串的方法。使用MD5从口令中派生密钥,并采用DES-CBC模式加密。主要用于加密从一个计算机传送到另一个计算机的私人密钥,不能用于加密消息。
PKCS#11:定义了一套独立于技术的程序设计接口,用于智能卡和PCMCIA卡之类的加密设备。
RSA:美国麻省理工学院研究人员开发,是最有名的公钥算法,也是第一个能同时用于加密和数字签名的算法,出口受限。RSA背后的一般思想将两个大素数相乘十分容易,但是想分解它们的乘积却极端困难,因此可以将乘积公开作为加密密钥。在1999年,用了7个月时间完成了对特定 RSA 512位数(称为 RSA-155)的因式分解。由于进行的都是大数计算,使得RSA最快的情况也比DES慢。
SHA-1:安全散列算法(SHA)是由美国国家标准和技术协会(National Institute of Standards and Technology)开发的,1994年发布了原始算法的修订版,称为SHA-1。与MD5相比,SHA-1生成160位的消息摘要,虽然执行更慢,却被认为更安全。明文消息的最大长度可达到264位。
机制
机制就是应用加密算法的目的。比如,对于DES来说,CKM_DES_MAC的机制就是验证。
消费者
消费者就是使用加密服务的用户、应用软件或内核操作。
提供者
提供者就是消费者使用的加密服务。
2.Solaris加密体系中命令介绍
管理命令
cryptoadm命令是在Solaris加密体系中的管理命令。它可以管理下列内容:
显示加密服务提供者的信息。
启动或关闭提供者。
用户命令
Solaris加密体系提供了几个用户级的命令来检查文件的完整性和保密性。
Digest:计算文件的数字签名。通过比较数字签名来检查文件的完整性。
Mac:计算消息身份验证代码。消息身份验证保证了被传输的消息不会在途中被修改。
Encrypt:对文件加密。
Decrypt:对文件解密。
20.3.2 使用加密方法来保护系统文件
Solaris加密体系从以下两个方面来保护文件。
保密性:保密性是指确保数据处于私有和保密状态,并且不会被可能使用网络监控软件的窃听者查看到。通常借助加密来达到保密目的。
完整性:以防止数据在传输过程中遭到意外或蓄意(恶意)的修改。完整性通常是通过使用数字签名或者“消息身份验证代码”(Message Authentication Code, MAC)来实现的。
用户可以将自己的文件以加密的方式存储,尽管这些文件对于超级用户还是可读的,但内容确是超级用户无法识别的。因为,此时的文件内容已经被加密算法打乱了,只有用户才可以通过解密算法来恢复文件的内容。
文件在传输的过程中能否保持与原来文件的内容一致,我们如何察觉到传递的文件已经被别人修改过了?有两种方法可以验证文件的一致性:
数字签名。
消息身份验证代码。
1.产生对称密钥
密钥是控制加密算法和解密算法的关键信息,它的产生、传输、存储等工作是十分重要的。对称密钥是无论加密还是解密都采用一个密钥。密钥的产生最好是随机产生的。下面我们介绍使用dd命令和/dev/urandom设备随机产生的密钥的方法。
(1)在产生密钥前需要了解系统中加密算法所支持的密钥长度。
显示数字签名算法:
% encrypt -l
Algorithm Keysize: Min Max (bits)
-----------------------------------------------------------------------
aes 128 128
arcfour 8 128
des 64 64
3des 192 192
显示MAC机制:
% mac -l
Algorithm Keysize: Min Max (bits)
--------------------------------------------------------------------------
des_mac 64 64
sha1_hmac 8 512
md5_hmac 8 512
我们只需要在最大值和最小值之间取一个长度数值就可以了。比如对于sha1_hmac和md5_hmac来说,我们可以取的密钥长度是8、16、64等。
(2)用随机数产生长度为16个字节的对称密钥,并存在$HOME/keyf目录的05.07.aes16文件中:
% dd if=/dev/urandom of=$HOME/keyf/05.07.aes16 bs=16 count=1
(3)保存密钥,不让其他用户读取。
% chmod 400 ~/keyf/05.07.aes16
2.检查文件的完整性
检查文件的完整性有下面两种方法。
(1)通过比较文件的数字签名,可以了解文件是否被改动。
比如,我们在下载许多UNIX软件的时候,总会看到一个文件名相同而文件扩展名却为.md5的文件。在这个文件中通常只有一行文本,大致结构如下:
md5 (duanf.tar.gz) = 85c0a53d1a5cc71ea34d9ee7b1b28
这就是duanf.tar.gz文件的数字签名。MD5将整个文件当做一个大文本信息,通过其不可逆的字符串变换算法,产生了这个惟一的MD5信息摘要。如果在以后传播这个文件的过程中,无论文件的内容发生了任何形式的改变(包括人为修改或者下载过程中线路不稳定引起的传输错误等),只要你对这个文件重新计算时MD5就会发现信息摘要不相同,由此可以确定你得到的只是一个不正确的文件。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。
检查文件的数字签名:
% digest -v -a md5 duanf.tar.gz >> $HOME/digest.duanf.05.07
% cat ~/digest.duanf.05.07
md5 (duanf.tar.gz) = 85c0a53d1a5cc71ea34d9ee7b1b28
可见,下载文件与原文件一致。
(2)“消息身份验证代码”(Message Authentication Code, MAC)
MAC也是可以检查文件内容是否正确。所不同的是,在验证过程中,还需要输入正确的密钥,才能完成验证过程。
% mac -v -a des_mac duanf.tar.gz
Enter key: <Type passphrase>
des_mac (duanf.tar.gz) = dd27870a
% echo "des_mac (duanf.tar.gz) = dd27870a" >> ~/desmac.daily.0
需要指出的是这个密钥不是文件加密解密的密钥。
3.确保文件的保密性
文件的加密和解密的目的就是为了确保文件的保密性。我们可以通过encrypt命令来对文件进行加密,使用decrypt命令来对文件进行解密。这两个命令的参数选项是一样的,我们选择encrypt命令来解释说明:
% encrypt -a algorithm [ -k keyfile ] -i input-file -o output-file
-a 加密算法标识。
-k 包含密钥内容的文件。
-i input-file 你想要进行加密的文件,这个文件在命令中无改变。
-o output-file 已经加密后,形成的加密文件,需要密钥才能打开它。
例20-27 使用aes加密算法对ticket.to.ride文件进行加密,加密后文件名为e.ticket.to.ride。
05.07.aes16文件中存有密钥:
% encrypt -a aes -k ~/keyf/05.07.aes16 -i ticket.to.ride -o ~/enc/e.ticket.to.ride
对e.ticket.to.ride文件进行解密:
% decrypt -a aes -k ~/keyf/05.07.aes16 -i ~/enc/e.ticket.to.ride -o ~/d.ticket.to.ride
20.3.3 管理Solaris加密体系
本节介绍如何管理Solaris加密体系中的软件和硬件加密服务。当系统不再需要加密服务的时候,软件和硬件的加密服务都可以被关闭。比如,你可以关闭一个软件加密服务提供的算法,也可以迫使系统使用其他软件提供的加密算法。
1.如何列出可用的加密服务
Solaris加密体系提供了下面几个类型的加密算法:
用户级的提供者;
内核软件提供者;
内核硬件提供者。
对于一般用户来说,只有用户级的加密机制才有可能被使用。
例20-28 显示一般用户可以使用的加密机制。
% cryptoadm list
user-level providers:
/usr/lib/security/$ISA/pkcs11_kernel.so
/usr/lib/security/$ISA/pkcs11_softtoken.so
kernel software providers:
des
aes
blowfish
arcfour
sha1
md5
rsa
kernel hardware providers:
dca/0
如果要查看系统中有多少个加密机制,而不在意这些机制是否起用,请见下面例子:
例20-29 查看所有的加密机制。
% cryptoadm list -m
user-level providers:
=====================
/usr/lib/security/$ISA/pkcs11_kernel.so: CKM_MD5,CKM_MD5_HMAC,
CKM_MD5_HMAC_GENERAL,CKM_SHA_1,CKM_SHA_1_HMAC,CKM_SHA_1_HMAC_GENERAL,
...
/usr/lib/security/$ISA/pkcs11_softtoken.so:
CKM_DES_CBC,CKM_DES_CBC_PAD,CKM_DES_ECB,CKM_DES_KEY_GEN,
CKM_DES3_CBC,CKM_DES3_CBC_PAD,CKM_DES3_ECB,CKM_DES3_KEY_GEN,
CKM_AES_CBC,CKM_AES_CBC_PAD,CKM_AES_ECB,CKM_AES_KEY_GEN,
...
kernel software providers:
==========================
des: CKM_DES_ECB,CKM_DES_CBC,CKM_DES3_ECB,CKM_DES3_CBC
aes: CKM_AES_ECB,CKM_AES_CBC
blowfish: CKM_BF_ECB,CKM_BF_CBC
arcfour: CKM_RC4
sha1: CKM_SHA_1,CKM_SHA_1_HMAC,CKM_SHA_1_HMAC_GENERAL
md5: CKM_MD5,CKM_MD5_HMAC,CKM_MD5_HMAC_GENERAL
rsa: CKM_RSA_PKCS,CKM_RSA_X_509,CKM_MD5_RSA_PKCS,CKM_SHA1_RSA_PKCS
swrand: No mechanisms presented.
kernel hardware providers:
==========================
dca/0: CKM_MD5,CKM_MD5_HMAC,CKM_MD5_HMAC_GENERAL,...
可以看到,系统加密机制分为三类,分别列出。
例20-30 列出系统中可以应用的加密机制。
% cryptoadm list -p
user-level providers:
=====================
/usr/lib/security/$ISA/pkcs11_kernel.so: all mechanisms are enabled.
random is enabled.
/usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled.
random is enabled.
kernel software providers:
==========================
des: all mechanisms are enabled.
aes: all mechanisms are enabled.
blowfish: all mechanisms are enabled.
arcfour: all mechanisms are enabled.
sha1: all mechanisms are enabled.
md5: all mechanisms are enabled.
rsa: all mechanisms are enabled.
swrand: random is enabled.
kernel hardware providers:
==========================
dca/0: all mechanisms are enabled. random is enabled.
2.如何增添软件的加密服务
例20-31 增添PKCS#11加密库。
(1)安装软件包:
# pkgadd -d /cdrom/cdrom0/SolarisNew
(2)刷新系统加密服务:
# svcadm refresh system/cryptosvc
(3)查看加密列表,PKCS#11加密库已经在列表中:
# cryptoadm list
user-level providers:
==========================
/usr/lib/security/$ISA/pkcs11_kernel.so
/usr/lib/security/$ISA/pkcs11_softtoken.so
3.如何关闭加密服务
对于软件、硬件和内核加密服务来说,关闭的命令是一样的。我们只举一个例子说明。
例20-32 关闭内核中aes加密。
(1)查看有无aes加密服务:
$ cryptoadm list -m provider=aes
aes: CKM_AES_ECB,CKM_AES_CBC
(2)查看aes加密服务是否启动:
$ cryptoadm list -p provider=aes
aes: all mechanisms are enabled.
(3)使用disable关闭加密服务:
$ cryptoadm disable provider=aes mechanism=CKM_AES_ECB
(4)查看aes服务是否已经关闭:
$ cryptoadm list -p provider=aes
aes: all mechanisms are enabled, except CKM_AES_ECB |
|