马若望

http://kodefun.blog.51cto.com

http://blog.sina.com.cn/kodefun

1. 加密的用途和必要性

电子形态的信息易于被窃取和篡改。对一份电子文档的拷贝、修改并不会留下物理上的痕迹,也不能通过笔迹之类的手段看出谁编辑过它。泄漏的账户数据库、照片、视频、文档和电子邮件给人们造成了不同程度的麻烦和困扰。可信赖的信息系统必须具备保护信息不被非法获取或者篡改的能力。我们所使用的计算机终端、服务器和网络在不同程度上是开放的,这使得仅通过物理手段或者程序控制逻辑无法保障信息的安全。加密可以使得在开放环境中存储和传输的电子信息具备保密、防篡改的能力,这使得加密成为当前保护电子信息安全的存储和传输的关键机制。对于电子商务等依赖于信息的保密和防篡改能力的应用系统,加密是必须的信息处理环节。

2. 算法和密钥

加密算法和密钥一起完成信息明文与密文之间的转换。加密技术在古代就被用来保护军事情报,通过加密防止信使在战场上被敌方捕获时泄漏所携带的情报。在很长的时期里,加密和解密都依赖于手工,对密码的破译则是一种类似于猜字谜的智力游戏。20世纪20年代以来,加密进入了机械化时代,第二次世界大战中,交战各方都大量使用了机械与电子结合的密码机。在这种情形下,对密码的破译也相应采用了机械化手段。二战中的分析活动最后形成了密码学严谨的信息论与数学理论基础,一些公开的密码理论研究成果在二战末期发表。密码分析和设计理论的进步使得非正式的加密算法在现代正规密码分析手段面前不堪一击。以DES、RSA等算法为代表的工业加密标准算法的发布和推广为数据加密技术的广泛应用建立了坚实的基础。民用领域最先大规模应用现代标准密码技术是在金融领域,早在1980年代,金融机构就开始建立与使用电子转账系统。现代密码技术加密的防护能力在电子金融中通过了***者的考验。今天标准密码技术的加密能力可以使得一份电子文档具备超越金库和保险柜的保密性。具有比纸质文件上的签名更难以伪造的可验证性。数十年的应用,使得工业标准加密算法的安全性得到全球范围的证实,在应用中暴露出的算法实现和密钥管理等过程中的薄弱环节也得到了相应的增强,形成了一套行之有效的防范措施。这一切,使得人们在开放的Internet网络上建立信任成为可能,正确的实现相关加密技术成为网银、网购等电子商务活动的前提条件之一。

3. 加密的安全目标和基本过程

加密实现的基本安全目标有机密性、完整性和可认证性(数字签名)等。

3.1. 机密性

发送者想要在一个不安全的开放信道(如Internet)上发送信息给接收者。发送者对可理解的信息(称为明文)进行处理,将其变换成不可理解的乱码(称为密文),使得非授权者难以从信道上直接获得的密文中获取信息,这个处理过程称为加密。解密者使用加密的逆过程从密文获取明文,这个过程称为解密(也称脱密)。

解密用的算法称为解密算法,密钥称为解密密钥。相应的算法称为加密算法,密钥称为加密密钥。采用相同的密钥加密和解密的算法称为对称算法(体制),采用不同的密钥加密和解密的算法称为非对称算法(体制)。非对称算法加密的密钥可以公开,解密的密钥则只有密钥对的所有者拥有,适宜于开放系统的安全需要。非对称密码算法一般比较慢,所以一般结合对称算法使用。使用非对称算法保护对称的信息加密密钥,然后使用受保护的对称密钥以对称算法加密大量的用户信息,这称为混合加密体制(如图X所示)。

公开的对称加密算法标准有DES、AES等。公开的非对称算法标准有RSA、ECC等。

3.2. 完整性/鉴别

从信息中不可逆的生成一个唯一的定长特征值的过程,称为散列。在用户身份鉴别过程中,一般使用传输散列值的方式防止口令在信道上被截获。数字签名时,常常采用对信息的散列值签名的方法提高签名速度和安全性。网络下载文件时,经常使用散列值校验下载内容的正确性。常用的散列算法有MD5、SHA-1、SHA-256等等。

3.3. 数字签名

签名者将信息变换称为一种可验证的证据的过程,称为签名。签名所使用的算法称为签名算法,密钥称为签名密钥。一个实体(个人或者组织)的签名密钥一般是私有的,这样只有签名者能够产生自己对信息的签名值。对信息的签名进行检验的过程,称为验证。验证所使用的算法称为验证算法,密钥称为验证密钥。验证密钥一般是公开的,且与签名密钥一一对应,这样,其他人能够方便的验证信息的签名值的有效性,从而确认信息是否来自特定的实体,并确知其未被篡改。根据各国的电子签名法令,这种签名信息是具备法律效力的。

非对称算法签名和验证的运算量很大,速度较慢。为了提高处理效率,实际应用中一般先计算需要签名的信息的散列,然后对定长的散列值计算签名值。

3.4. 加密信息交换的规范

为了使得不同的设备之间能够正确的交换和解析加密的信息,业界形成了几种应用较广泛的加密相关的规范的标准,常用的有PKCS系列规范、Xml加密规范。

4. 系统内置的加密应用

Windows操作系统内置有加密文件系统(EFS),应用程序签名机制。IE、Chrome、Firefox等浏览器均支持加密的https方式。这些应用均基于混合加密体制,使用数字证书中的密钥加密保护信息。

5. 加密功能应用编程接口(API)

作为建立安全应用系统的基础支撑构件之一,在Windows、Linux、Android、iOS等操作系统环境中,都内置了标准加密算法及规范的实现,提供了加密API接口供应用程序使用。PKCS系列规范是加密信息交换的工业标准,各种操作系统的加密API均在不同程度上支持PKCS规范。几种常见操作系统和开发技术提供的加密API有:CSP、CNG、.NET加密API、Java加密API、OpenSSL等。

5.1. CryptoAPI

CryptoAPI是Windows SDK平台应用编程接口(Platform API)的一部分,是系统提供的原生Win32加密接口。CryptoAPI使用CSP所提供的加密/数字签名等密码服务。CSP是Windows平台下实现加密算法的标准接口,符合CSP规范的加密算法实现模块注册到Windows系统之后,应用程序即可通过CryptAPI函数调用CSP中所实现的算法完成应用数据的加解密。Windows系统中内置的CSP实现了常用的各种加密算法,这些算法实现的正确性经过了NSA的认证。Windows 2000、XP、2003、Vista、7、8均支持CryptAPI。

5.2. CNG

CNG是微软自Windows Vista以来引入的新一代加密编程接口,长期计划是替换掉CryptoAPI。CNG的设计具有多个层次和可扩展性。CNG包括如下新的特性:一个新的密码配置系统,支持更好的密码敏捷性,更细粒度抽象的密钥存储(从算法操作中分离存储)。对长生命期的密钥的操作进行隔离,可替换的随机数发生器(RNG),减少了导出签名的限制,线程安全性,提供内核模式的密码API。此外,CNG还包括支持Suite B算法,支持椭圆曲线密码(ECC)。CNG通过了美国联邦信息处理标准(FIPS)140-2级别2认证。NSA允许经过认证的Suite B实现用来保护美国政府和军方的机密(Top Secret)和秘密(Secret )及其以下级别(如过去被描述为敏感而非密Sensitive-But-Unclassified)的信息。

CNG也是平台原生的Win32 API的一部分,支持CNG的Windows版本有Vista及其以后的Windows 7、Windows 2008、Windows 8等较新的Windows。

5.3. .NET

.NET的System.Security.Cryptography 命名空间中的类提供了CryptoAPI所支持的全部密码算法和密钥操作功能,这些类有些是CrytoAPI的托管封装,有些是算法的纯托管代码实现。3.5版本以后的.NET支持Suite B和CNG所包含的加密功能。

5.4. Java

Java平台的javax.crypto包中的类提供了加密相关的API。Java的加密体系有着与CryptoAPI的CSP类似的提供者机制,加密运算可以是软件的,也可以在智能卡、硬件加密加速卡等硬件上实现。Java平台内置了最常用各种加密算法的实现,包括 RSA、DSA和ECDSA 非对称算法, DES、AES和 ARCFOUR 对称加密算法, MD5、SHA-1,、SHA-256散列算法,Diffie-Hellman 和密钥协商算法

5.5. OpenSSL

OpenSSL是一个开源的加密软件库,它不仅仅实现了SSL协议,而且提供了各种的常见标准算法、数字证书处理等加密的实现,是一个完整的加密软件包。Openssl在Linux和Windows下均能够正常编译运行,很多开源应用程序采用openssl支持加密的通信,如wget等。Openssl含有硬件加密引擎机制,可以方便的使用各种硬件加密模块。

6. 硬件加密模块

对于服务器性能和客户端安全性有较高要求的应用,如网银、电子商务等,需要用到硬件加密模块。服务器端主要是密码加速卡,客户端有智能卡、USBKey等。这些硬件加密模块一般会提供驱动,使得应用软件可以通过CSP、openssl等通用编程接口使用它们。

6.1. 密码加速卡

加密是计算密集型操作,对于并发数较多的服务器,使用软件实现的加密将显著降低服务器吞吐量。密码加速卡使用硬件实现安全连接所需的算法,硬件随机数发生器用于快速生成高质量的密钥,能有效提高ssl、IPSec等安全连接的并发速度。

6.2. USBKey、智能卡

由于计算机病毒、***、盗版软件等因素,Internet上的客户端计算机的安全状况较差,存储在本机硬盘上的文件证书中的私钥面临的安全风险较大。为了网银、企业计算环境等应用的安全性,用户可以使用USBKey或者智能卡等硬件保证交易信息的安全性。USBKey及智能卡均内置有算法的实现和硬件随机数发生器,无私钥输出接口,从而保证了私钥的安全性。有些USBKey还采用指纹、硬件pin按键等方式增强了使用安全性。