6.2 系统安全保护的基本原理和方法
安全保护是基于数据及计算机资源保存的机密性、完整性和实用性的,这三个信息安全准则通常被认为是信息系统安全防护的“三大法则”。可以采用图6-5来加以形象地说明。

当我们在讨论每一个原则时都非常清楚的知道,为了提供一个可靠的、安全的无线网络环境,我们都必须保证能够遵循每一条基本原则。为了保证能够遵循“三大原则”,能够保证这些数据和计算机资源在存储及流动过程中的安全性受到很好的保护,这三大安全原则必须通过真实可靠的应用来得到认真地贯彻执行。这些不同的应用是通过保证对授权访问的适当认证实现的,同时保证资源使用方法和身份识别的不被复制,以及完全负责对所有的活动进行日志和审核来执行“三大原则”。系统安全管理人员将使用认证、授权以及审核
(Authentication, Authorization, and Audit ,AAA)这三种工具来识别和减少任何可能的风险以实现信息系统安全性 “三大原则”
6.2.1 公钥基础建设PKIs和无线网络
传统的有线网络安全使用公钥基础建设PKIs 来保证系统的保密性、完整性、合法性以及不被复制。为了符合所期望的最小可以接受的安全标准,无线网络同样应该支持基本的安全规范。
PKIs 是一种用来分配和管理加密和数字签名密钥的组件,它通过一种集中化的服务机构来实现其功能,通过此功能建立用户对第三方中间机构的信任。
PKIs包含以下几个部分:认证中心(Certificate Authority,CA)、目录服务、证书认证服务。认证中心是一种以证书的形式发布和管理密钥的应用服务。目录或者查询服务被用来发布关于用户或者所使用的证书的公共信息的。证书认证服务是一种签证机构的代理服务,它可以直接回答使用者关于一个所发布的证书的有效性及实用性等问题,或者是支持目录、查询服务,或者是作为对证书有效性进行验证的第三方。
PKI证书类似于终端客户身份识别或电子护照,它们是一种为使用者提供加密和数字签名密钥技术的手段。AdaptLink™的执行依赖于PKI构架,包括RFID标签和阅读器之间、阅读器及网络之间的认证服务。
6.2.2 理解加密机制在RFID中间件中的作用
互联网被看作是我们日常交流的一种方式。大部分的商业交易依靠互联网来完成。无论是否存在专门的机构设置的商务网络,或是否存在一个电子商务站点或电子邮件系统,互联网都是现代商业行为的基础。
任何特定的商业交易的本质在于信任。你必须能够确认你所收到的一封最好朋友的电子邮件确实来自于他本人,做生意时人们需要知道他们和谁在进行交易,而且要相信他们的合作伙伴。加密机制所具有的真实性、机密性、完整性的特点是建立商业伙伴之间相互信任的基础。交易参与者必须确保和他们进行交易的对象是他们所信任的。这些交易的参与者必须确认他们是否可以信任其他的交易对象。
无线网络才用多个不同的密文加密方法的组合来维护系统所需安全,支持系统功能。对称加密、非对称加密和椭圆曲线加密方法等技术的联合运用,使无线系统的安全更加可靠。应用到无线网络的安全机制包括无线应用协议(Wireless Application Protoco, WAP)、有线等效协议(Wired Equivalent Privacy ,WEP)和安全套接字层(Secure Sockets Layer ,SSL)。
6.2.2.1 加密方法简述
加密是一种把信息转化成一种无法直接理解的数据包,这种数据包必须通过通信双方约定的特殊编码方式进行解析,才能被我们所理解和应用。加密过程由两个部分组成:加密(Encryption)和解密(Decryption)。加密是一个把我们能够理解的原文或数据转成密文或加密数据的一个过程,而解密则是一个把密文或加密数据反向转换为我们可以阅读的原文格式的一个过程。
加密技术的安全性取决于只有信息发送者和接收者双方能够知晓如何将数据转换成模糊信息的方法。这个方法就是密钥的格式。
对于加密方式来讲,一般存在两种用于安全信息的加密模式或者密码:对称密钥(Symmetric Cipher)或私钥(Private Key)、和非对称密钥(Asymmetric Cipher)或公钥(Public Key)。
这个种加密方式的弱点是可以利用不同顺序的字母顺序表采用统计分析方法进行解密,只不过具有很大的数据量而已。古罗马的儒略.凯撒(Julius Caesar)是第一个使用对称加密技术来与他的部下进行加密通信的人。他所采用的密钥通过改变字母一定的起始位置而取代原来的字母表,形成一条由加密机制形成的字母顺序来表达的密码信息。
这种加密方法的主要弱点在于它是对统计分析而言是公开的。一些语言(如英语)对某些字母的使用频次远比其他字母要高,因此,解密专家总可以找到对密钥进行解密尝试的起点。
这种对称加密的标准格式相对不变地被保留了下来,直到十六世纪才发生了一些改变。那时,亨利三世(Henry the III)命令密码学家维琼内尔(Blaise de Vigenere)对恺撒密码进行改进,提高系统的安全性。他所采用的加密方法是同时使用几个密码字母表去加密一条信息。至于采用哪个字母表来对哪个具体的字母进行加密取决于密码关键词的使用。密码关键词的每一个字母代表一个被加密字母的替代字母
例如:
标准字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ
A的代替项 ABCDEFGHIJKLMNOPQRSTUVWXYZ
B的代替项 BCDEFGHIJKLMNOPQRSTUVWXYZA
C的代替项 CDEFGHIJKLMNOPQRSTUVWXYZAB ……
Z的代替项 ZABCDEFGHIJKLMNOPQRSTUVWXY
如果采用airware作为关键词的,你会得到如下的密文:

维琼内尔加密机制最大的好处是用采用了一对多的关系代替一对一的密码字母表,来代替对应的原字母的关系,使得应用普通的统计分析方法无法破解。随着其它加密技术的衍生,使用维琼内尔加密算法的字母表来替换变量仍然是大多数编码系统的核心,一直到延续到20世纪中期。
现代加密技术与传统加密技术最大的不同在于设备的计算能力的充分利用,在一定时间内生成在数据块中执行二进制操作的密码,代替单独的字母。计算能力的扩大为密钥提供更大的空间,可以更好地利用公钥来对系统进行加密处理。
当使用二进制加密技术时,密钥表现为多位字串或者是2n个密钥。也就是说,每字节都加到密钥空间上,密钥的空间增加了两倍。二进制密钥的空间如表6-1上所示。表中示例为了适应现代算法满足需要多大的密钥空间,也示例了破解密钥具有多大难度。

对于一个56位的密钥来讲,发现一个密钥的难度相当于于在一个装满白色高尔夫球的海峡寻找一个红色的高尔夫球。一个57位的密钥就会象在两个并排的这样的海峡中寻找一个红色的高尔夫球。一个58位的密钥就如同在四个这样的海峡之中寻找这个红色的高尔夫球,如此类推。
使用二进制密钥的另一个好处是加密和解密的操作可以简化为使用基于位数的操作,如XOR、转换、替换和二进制运算操作如加、减、乘、除与幂运算等。
另外,几个数据块(如64位长)可以被同时处理,一部分数据可以结合,另一部分数据可以代替别的数据部分。这样可以通过采用不同的组合和替代来多次循环使用。每次循环称为一个周期。结果是,生成的密文就变成原文和多个子密码结合的产物。例如,现代对称加密算法包括56位DES,Triple DES加密机制采用大约 120位加密算法,RC2加密算法采用40位和1280位的密钥,CAST使用40位、64位、80位、128位 和 256位密钥,IDEA使用128位密钥等。
对称算法的一些主要缺点是它们只提供一种加密数据的方法。而且,其安全程度和在加密方和解密方传输密钥时的安全性是一样的。随着用户的增加,私钥的数量会相应增加,系统的安全性也会加强(如图6-6所示)。

使用越多的对称密码,就会产生一个越大的统计数据,这样很容易被利用来进行暴力攻击和其他密码攻击。最佳的减少这种风险的途径是转变这种经常使用的对称密钥。如果采用人工方式进行密钥的话,不仅数据量巨大,而且成本也非常昂贵。
6.2.2.3 非对称加密
直到19世纪70年代非对称公钥加密技术被发明以前,加密技术的主要应用是都是在特殊的保密场合。今天,加密技术用在很多应用领域得到了广泛的应用,例如:
防止信息的未授权批露
防止对数据、网络和程序的未授权访问
发现数据的篡改,如入侵错误数据和对数据的删除
防止对数据篡改
非对称加密技术的基础是发送者和接收者没有共用一个密钥,但有一对分开的数学相关的密钥。了解其中一个密钥并不代表会获取另外一个密钥的任何信息。拿现实生活中的一把组合门锁来举例说明。知道业主的位置并不意味着会给你提供任何关于锁的信息。非对称算法秘诀在于它的对立面也是正确的。换言之,任何一个密钥都能单独进行加密,而另一个则能用来进行解密。这种关系使一对密钥中的一个密钥(称为公钥)可以自由分配,而另一个密钥可以保持保密(称为私钥),这样避免了密钥所需的庞大空间,也节省了密钥分配的成本。
这种关系允许非对称加密技术作为一种加密技术和签名技术来进行使用。非对称加密技术的局限是它相对于对称加密技术来讲加密过程较慢,此外加密荷载的大小也有所限制。
公钥密码技术的典型方法包括:Rivest, Shamir,Adleman (RSA), DSA和Diffie-Hellman 等方法。
6.2.2.4 椭圆曲线加密
椭圆曲线加密技术越来越多地被使用在嵌入式硬件中,因为它们相对于其它加密技术来讲,具有更好的灵活性、更可靠的安全性、更高的强度和更加有限的计算需求等优势。
简单地讲,椭圆曲线加密方式是在(x, y)坐标平面上画出曲线来计算密钥的方法。其优点在于可以使用不同数组来进行公钥的计算。
我们可以以这样最简单的方式来理解椭圆曲线加密办法,想象在一张无限大的图纸上面画有无数个代表(x, y) 位置的坐标点。如果利用这些坐标点画一根特殊的椭圆曲线,它可以伸展到无穷大,而不是一个闭合的椭圆形曲线。
在每个(x, y)坐标上画点。当进行点的确认工作时,可以在两个点之间通过一种额外的方法生成第三个点。这种额外的方法被用来定义点的方法产生一组有限的数组也就是密钥。
6.2.3 数字签名的工作原理
扩展标记语言(eXtensible Markup Language,XML)数组签名规范规定了使用者应该如何采用XML来描述数字签名的信息和XML签名的名义空间(详情请参阅:www.w3.org/TR/2002/REC-xmldsig-core-20020212)。这种签名是依照货物清单的规范格式表生成的,它代表多个XML文件。规范化的内容可以作为标准形式供其他用户使用。因为签名取决于所签字的内容,一个来自非规范化文档的签名与一个来自规范化文档的数字签名是有所不同的。要记住这种规范说明主要是关于电子签名的规定的,不仅仅是那些关于XML的文档。这种货物清单也可能包括任何被定位的电子信息或部分XML文档。
6.2.3.1 基础数字签名和验证的概念
了解数字签名是如何工作的有助于更好理解这个标准。数字签名的目的是为了向数据提供这样三方面的保障。即数据的完整性、数据的可验证性以及数据的确定性。数据的完整性指一个数字签名必须确保一种验证数据是否被修改或替代的方法。数据的可验证性指数字签名必须提供一种可以验证数据源身份的方法。数据的确定性指数字签名必须具备能够向第三方提供完整的数据的能力,并可以提供数据验证。
6.2.3.2 为什么不采用MAC来进行数字签名
信息验证码(Message Authentication Codes ,MACs)是一种用来确保数据完整性和和进行数据验证的方法。MACs可以被数据发送者用作执行一个单向的信息加密操作,这个加密过程需要一个秘钥来完成。加密过程完成后,MAC和数据随即被发送到接收方。接收者使用同一个密钥去独立地产生一个信号值,并与发送过来的信号进行计算比较。我们假设接收者拥有私钥而且这个密钥一直都是正确的,可以获得相同的MAC值证实数据的完整性。因为数据接收方知道数据发送方拥有这个密钥,只有数据发送者可以产生这个MAC码(接收方没有把数据发送给自己),所以可以鉴别来自接收方的数据的完整性。无论如何,一个MAC码不能提供数据的准确性,因为双方都有秘钥,因而可以拥有产生MAC码的能力。因此,第三方组织没有方法验证究竟是哪一方产生了这个MAC码。
由于MACs码的位数较短,因此MACs码比数字签名中的加密和解密解析速度更快。如果你已经建立了你自己的私人网络(因此信息确认不是问题),那么MACs就能够满足你对信息进行验证和确认需求。
6.2.3.3 公钥与私钥
如果我们能够再采用一些方法来将MAC码的密钥分成几个部分,使得密钥的一部分用于产生MAC码,而另一部分用于验证,我们就可以产生一个包含数据验证能力的MAC码。这种密钥被分割成几个部分系统是一种非对称加密机制,它是加密技术的重大发现,这种加密技术虽然被认为是很好的一种的加密方法,但是直到1976年才被Whitfield Diffie、Martin Hellman和Ralph Merkle证明是确实可行的。1978年,Ronald Rivest、Adi Shamir和Leonard Adelman 第一次在实际应用上采用了这种加密机制。
一旦确定了非对称加密方法,我们就可以公开密钥。我们仍然保留有一个私钥。因为我们想让公钥尽可能地被广泛传播,所以就将其置于公开的状态。我们这样做的原因是通过数字签名使任何拥有我们的公钥的数据接收者都可以证验证我们的数字签名。但是,在公钥系统中适当的密钥管理仍然是必需的。此外私钥的安全使非常重要的。公钥的发布一定要采用我们认为是可信的方法进行,而不是通过不安全的方式进行的。
6.2.3.4 数字签名中签名者和文件的绑定关系
对一个文件进行数字签名时,需要数据签名者生成一个签名的文件自身的散列(Hash)值,然后采用其私钥加密这个散列值。只有签名者拥有私钥,而且只要他可以加密那种散列值才可以采用公钥来进行解密。在接收信息和加密信号值之上,接收者可以加密散列值,获悉签名者的公钥。接收者也必须产生那种信息的散列值,而且把新产生的散列值和来自签名者的未加密的散列值进行比较。如果散列值相同,它证明了签名者产生了信息,因为只有实际的数据产生者才能正确地加密数字信号。
这个过程与产生MAC的过程不同,接收者不能产生相同的数字签名因为他没有私钥。因此,我们现在得到了一种认证的数学形式,只有数据签名者可以产生签名。此外,数字签名并不是数据安全的保证人。可能,数据安全系统攻击者可以通过安全攻击或者入侵产生一个完整的数学签名。
6.2.3.5 W3C XML数字签名
XML规范在定义认证数字证书的信息方面是可靠的。XML数字签名是由签名元素表示,具有如下的结构形式:
* 代表0或多次事件
+ 代表1或多次事件
? 代表0或一次事件
我们假设密钥的管理是十分适当的和非常安全的,所以数据发送方和数据接收方是密钥的惟一拥有者(如图6-7所示)。

让我们打破这种通常的结构形式来恰当地理解它。Signature元素是XML数字签名规范的初始形式。签名可以对本地的签名数据进行封装或者被本地的数据所封装,或签名指向外部资源。这样的签名方式是分散的。记住,这是一种用XML描述数组签名的规范,不存在对签名内容的限制规定。
SignedInfo元素是实际签名的信息。在签名的过程中,这些数据将会继续进一步的处理,才能完成整个签名过程(如图6-8所示)。

可能没有或者具有更多个转换的步骤。如果存在多次转化,每一次输出都提供下一次的输入接口。
CanonicalizationMethod元素包含规范数据的算法,或者用一种通用的方法构造数据。规范化可以做用作申请标准的最后的协议,删除注释,或者做任何其他需要的签名文档的操作。
Reference元素识别签名的资源和任何用作数据预处理的算法。这些算法在Transforms元素中以清单列出,可以包括规范化、加密/解密、压缩/解压缩、或者XPath、或XSLT转换等操作。
Reference元素可以包括多个Transforms元素,每一个列在Reference的元素都可用作开始数据。注意的是,Reference的元素包含一个可选择的统一资源标识符(Uniform Resource Identifier ,URI)的属性。如果签名包含超过一个Reference元素,URI属性在其中一个Reference元素中是可选的;其他都必须有URI属性。签名的定义的语法(请参阅图5-1)没有清楚说明这一点,但是在W3C XML数字签名规范文档中给予了清楚的描述。详情请参阅:
(www.w3.org/TR/2002/RECxmldsig-core-20020212) 。
DigestMethod是算法在任何转换中用于在DigestValue内产生值后用于储存数据的。DigestValue值是规范化和转换过程的结果,而不是原始数据。因此,如果转换是用于这些文档的,那么它对于这些操作是透明的,文档的签名仍然是可以校验的。例如,假设我们产生一种规范化的方法来把原文转化成一个小写字母的文档,并用它来签名一个包含混合情况的文档。如果我们后来把原文转换成全部大写字母,那么修改后的文档仍然可以采用原签名来进行验证。
签名DigestValue值把资源内容绑定到签名人的密钥上。通常算法依照SignatueMethod的方法把标准化和转换后的签名信息转换成签名值。签名值包含数字签名的真实值。
KeyInfo元素存放签名密钥。注意到这个元素是可选的。在典型的情况下,当你想产生一个标准的签名时,KeyInfo元素需要包含在内,因为需要签名人的公钥去确认签名。为什么这个元素是可选择的而非必需的呢?这是由下面的因素所确定的。首先,我们已经知道公钥而且可以从某个地方得到它。在这种情况下,知道签名的密钥信息是多余的。就像我们在下面列举的例子所说明的一样,KeyInfo元素如果被添加进去则占用很大的空间。所以,如果我们已经可以从其他方面获取到相关信息,我们能够避免在签名中无关的混乱信息。其次,还存在另外一种更加重要的情况,就是签名者不希望任何人都能够检验签名,相反,这种权力只限制在可靠的机构范围内。在这种情况下,你应该只安排那些可靠的机构才能得到你的公钥的副本。
在散列值的执行过程(DigestMethod)和散列值的生成过程(DigestValue)中,把这种结构放进电子签名的内容中,被签名的信息存放在SingedInfo元素里。然后公钥通过SignatureValue发布出去。签名有各种不同的构造方法,不过这种构造方法是最直接的。
为了确认签名,你必须通过关联DigestMethod方法来分类摘取参考数据。如果生成的分类值与指定的DigestValue匹配,参考信息是有效的。为了确认签名的合法性,必须从SignatureValue中获取关键信息,并通过SignedInfo元素进行确认。通过加密技术,XML数字签名的执行允许任何算法执行任何电子签名所需要操作,如规范化、加密和转换等。为了增加互动性,W3C推荐了应该与任何XML数字签名一同执行的一些算法,这在本章内容的后面将会进行讨论到。
6.2.3.6 应用XML数字签名的安全措施
XML签名在实际应用上可以采取如下三种基础模式:
被封装格式 签名存在于文档中,如下编码所示。
<document>
<signature>...</signature>
</document>
封装格式 文档存在签名中,如下编码所示。
<signature>
<document>...</document>
</signature>
分离格式 签名通过一个URI指向其他地方的文档,如下编码所示。
<signature>...</signature>
这只是XML签名的几种基本的应用模式。一个XML数字签名不仅只有一种文档格式,它可以同时使用被封装、封装、分离格式等多个格式。
值得注意的是一个URL被认为是不正式的并且不再在技术文档中使用;取而代之的是URI。一个URI有一个与它联系的名字,并且格式是:名字=URL 的格式。
6.2.3.7 使用高级加密标准加密RFID数据流
高级加密标准(Advanced Encryption Standard , AES, 也称为Rijndael)是美国联邦政府用来保护敏感(只读:机密)信息的方案。美国政府之所以选择AES主要是基于安全性、可执行性、高效率、易于执行和灵活性等方面的考虑。此外,采用AES也不会受专利权保护的限制。负责选择AES的政府机构声称它是“通过大范围的计算环境的验证。AES在软件和硬件两方面都有良好的表现” 。
详情请参阅:www.nist.gov/public_affairs/releases/aesq&a.htm
1997年,当数据加密标准(Data Encryption Standard ,DES)开始衰败的时候,美国国家标准技术研究院(National Institute for Standards and Technology ,NIST)宣布寻求AES方案,作为DES的下一代标准。这项工作开始的时候,大多数著名的加密机构都提交了他们自己的AES候选方案。
AES的要求包括如下几个方面:
AES应是一种私钥对称密码加密机制(与DES相似)。
AES需要比3-DES更加强壮和速度更快
AES至少具有20到30年的生命周期
AES应该支持大小为128位、192位和256位的密钥
AES应该对所有公众开放——没有限制,非私人所有,没有专利权的限制。
因为采用不同类型的处理器执行加密计算,系统的软件和硬件也存在很大的差异,因此,加密运算的速度也存在很大的差异,因此究竟AES比3-DES快多少是很难界定的,关于这一点,我们在下一节内容里讨论。但是,在相似的加密运算环境中,AES往往比它相应的3-DES快。Brian Gladman进行了一个试验,在Pentium Pro 200的电脑上运行用C语言编写的优化代码,
AES/Rijndael能够以70.2Mbps的速度进行加密和解密,而DES的速度是28Mbps。关于本次试验的其他结果请参阅:fp.gladman.plus.com/cryptography_technology/aes 。


