计算机网络中的安全
什么是网络安全
接人通信所需的资源)。考虑了这些问题后,我们能够指出安全通信( secure communication)
具有下列所需要的特性:
机密性( confidentiality)。仅有发送方和希望的接收方能够理解传输报文的内容。因为窃听者可以截获报文,这必须要求报文在一定程度上进行加密( encrypted),使截取的报文无法被截获者所理解。机密性的这个方面大概就是通常意义上对于术语安全通信的理解。报文完整性( message integrity)。为了确保其通信的内容在传输过程中未被改变一一或者恶意篡改或者意外改动。我们在可靠传输和数据链路协议中遇到的检验和技术在扩展后能够用于提供这种报文完整性。端点鉴别(end- point authentication)。发送方和接收方都应该能证实通信过程所涉及的另一方,以确信通信的另一方确实具有他们所声称的身份。人类的面对面通信可以通过视觉识别轻易地解决这个问题。当通信实体在不能看到对方的媒体上交换报文时,鉴别就不是那么简单了。当某用户要访问一个邮箱,邮件服务器如何证实该用户就是他或她所声称的那个人呢?运行安全性( operational security)。几乎所有的机构(公司、大学等)今天都有了与公共因特网相连接的网络。这些网络都因此潜在地能够被危及安全。攻击者能够试图在网络主机中安放蠕虫,获取公司秘密,勘察内部网络配置并发起DoS攻击。防火墙位于机构网络和公共网络之间,控制接入和来自网络的分组。入侵检测系统执行“深度分组检查”任务,向网络管理员发出有关可疑活动的警告。
入侵者能够潜在地执行下列行为:
窃听一一监听并记录信道上传输的控制报文和数据报文修改、插入或删除报文或报文内容
密码学的原则
密码技术使得发送方可以伪装数据,使入侵者不能从截取到的数据中获得任何信息。当然,接收方必须能够从伪装的数据中恢复出初始数据。
对称密钥密码体制
所有密码算法都涉及用一种东西替换另一种东西的思想,例如,取明文的一部分进行计算,替换适当的密文以生成加密的报文。
可以根据入侵者所拥有的信息区分三种不同的情况:
唯密文攻击。有些情况下,入侵者只能得到截取的密文,也不了解明文报文的内容。我们已经看到,统计分析有助于对加密方案的唯密文攻击( ciphertext- only attack)。已知明文攻击。,如果 以某种方式确信在密文报文中会出现“bob”和“ alice",她就可以确定字母a、1、i、e、e、b和o的(明文,密文)匹配关系。 然后记录到传输的所有密文,然后在一张纸上找到Bob写下的已解密的明文。当入侵者知道(明文,密文)的一些匹配时,我们将其称之为对加密方案的已知明文攻击( known- plaintext attack)选择明文攻击。在选择明文攻击( chosen- plaintext attack)中,入侵者能够选择某明文报文并得到该明文报文对应的密文形式。 块密码
对称加密技术有两种宽泛的类型:流密码( stream ciphers)和块密码( block ciphers)。
快密码用于多种因特网协议的加密中,包括PGP(用于安全电子邮件)、SSL(用于使TCP连接更安全)和Pse(用于使网络层传输更安全)。
在块密码中,要加密的报文被处理为k比特的块。例如,如果k=64,则报文被划分为64比特的块,每块被独立加密。为了加密一个块,该密码采用了一对一映射,将k比特块的明文映射为k比特块的密文。
目前有一些流行的块密码,包括DES( Data Eneryption Standard,数据加密标准3DES和AES( Advanced Encryption Standard,高级加密标准)。这些标准中的每种都使用了函数(而不是预先决定的表)。这些算法中的每种也使用了比特串作为密钥。密码块的链接
在计算机网络应用中,我们通常需要加密长报文(或长数据流)。如果我们使用前面描述的块密码,通过直接将报文切割成k比特块并独立地加密每块,将出現一个微妙而重要的问题。为了理解这个问题,注意到两个或更多个明文块可能是相同的。例如,两个或更多块中的明文可能是“HTTP/1.1”。对于这些相同的块,块密码当然将产生相同的密文。当攻击者看到相同的密文块时,它可能潜在地猜出其明文,并且通过识别相同的密文块和利用支撑协议结构的知识,甚至能够解密整个报文。为了解决这个问题,我们能够在密文中混合某些随机性,使得相同的明文块产生不同的密文块。
公开密钥加密
从凯撒密码时代直到20世纪70年代的两千多年以来,加密通信都需要通信双方共享一个共同秘密,即用于加密和解密的对称密钥。这种方法的一个困难是两方必须就共享密钥达成一致;但是这样做的前提是需要通信(可假定是安全的)!可能是双方首先会面,人为协商确定密钥(例如,凯撒的两个百夫长在罗马浴室碰头),此后才能进行加密通信。但是,在网络世界中,通信各方之间可能从未见过面,也不会在网络以外的任何地方交谈。此时通信双方能够在没有预先商定的共享密钥的条件下进行加密通信吗?在1976年,Diie和 Hellman[ Diffie1976]论证了一个解决这个问题的算法(现在称为 Diffe- Hellman密钥交换),这是个完全不同、极为优雅的安全通信算法,开创了如今的公开密钥密码系统的发展之路。我们很快就会看到公开密钥密码系统也有许多很好的特性,使得它不仅可以用于加密,还可以用于鉴别和数字签名。有趣的是,最近发现20世纪70年代早期由英国通信电子安全团体的研究人员独立研究的一系列秘密报告中的思想,与[Die1976]和[RSA1978」中的思想类似[EIis1987]。事实常常如此,伟大的想法通常会在许多地方独立地闪现;幸运的是,公钥的进展不仅秘密地发生,而且也在公众视野中发生。
RSA
RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
1973年,在英国政府通讯总部工作的数学家克利福德·柯克斯(Clifford Cocks)在一个内部文件中提出了一个相同的算法,但他的发现被列入机密,一直到1997年才被发表。
对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。假如有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA钥匙才可能被强力方式解破。到目前为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。 密钥生成
首先要使用概率算法来验证随机产生的大的整数是否是质数,这样的算法比较快而且可以消除掉大多数非质数。假如有一个数通过了这个测试的话,那么要使用一个精确的测试来保证它的确是一个质数。
除此之外这样找到的p和q还要满足一定的要求,首先它们不能太靠近,此外p-1或q-1的因子不能太小,否则的话N也可以被很快地分解。
此外寻找质数的算法不能给攻击者任何信息,这些质数是怎样找到的,尤其产生随机数的软件必须非常好。要求是随机和不可预测。这两个要求并不相同。一个随机过程可能可以产生一个不相关的数的系列,但假如有人能够预测出(或部分地预测出)这个系列的话,那么它就已经不可靠了。比如有一些非常好的随机数算法,但它们都已经被发表,因此它们不能被使用,因为假如一个攻击者可以猜出p和q一半的位的话,那么他们就已经可以轻而易举地推算出另一半。
此外密钥d必须足够大,1990年有人证明假如p大于q而小于2q(这是一个很经常的情况)而d < N^(1/4)/3,那么d是e/N的某一个渐进分数的分母(这个算法的原理是利用N=pq来逼近phi(N):=(p-1)(q-1),而算法要求d*e除以phi(N)的余数是1,所以de=k phi(N)+1,e/phi(N)=k/d +1/phi(N),这说明了e/phi(N)与k/d近似相等,从而可以通过e/N的渐进分数来寻找d(当然更多的,我们也可以更好地估计phi(N)来获得一个更好的估计,但对通常情况(e=65537),RSA算法仍然是安全的))。
最后,RSA的原理保证了d和e必须与(p-1)(q-1)的因子互素,因此d,e都不可能为2。 [2]运算速度
由于进行的都是大数计算,使得RSA最快的情况也比DES慢上好几倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。RSA的速度是对应同样安全级别的对称密码算法的1/1000左右。
比起DES和其它对称算法来说,RSA要慢得多。实际上Bob一般使用一种对称算法来加密他的信息,然后用RSA来加密他的比较短的对称密码,然后将用RSA加密的对称密码和用对称算法加密的消息送给Alice。
这样一来对随机数的要求就更高了,尤其对产生对称密码的要求非常高,因为否则的话可以越过RSA来直接攻击对称密码。密钥分配
和其它加密过程一样,对RSA来说分配公钥的过程是非常重要的。分配公钥的过程必须能够抵挡中间人攻击。假设Eve交给Bob一个公钥,并使Bob相信这是Alice的公钥,并且她可以截下Alice和Bob之间的信息传递,那么她可以将她自己的公钥传给Bob,Bob以为这是Alice的公钥。Eve可以将所有Bob传递给Alice的消息截下来,将这个消息用她自己的密钥解密,读这个消息,然后将这个消息再用Alice的公钥加密后传给Alice。理论上Alice和Bob都不会发现Eve在偷听他们的消息。今天人们一般用数字认证来防止这样的攻击。时间攻击
1995年有人提出了一种非常意想不到的攻击方式:假如Eve对Alice的硬件有充分的了解,而且知道它对一些特定的消息加密时所需要的时间的话,那么她可以很快地推导出d。这种攻击方式之所以会成立,主要是因为在进行加密时所进行的模指数运算是一个位元一个位元进行的而位元为1所花的运算比位元为0的运算要多很多,因此若能得到多组讯息与其加密时间,就会有机会可以反推出私钥的内容。彩虹表攻击
原因生成的素数由于随机数是固定有限的集合产生的数量较少,可以用彩虹表攻击。
百度百科RSA
报文完整性和数字签名
使用密码术为两个通信实体提供机密性。报文完整性也称为报文鉴别。连同报文完整性,在本节中我们将讨论两个相关的主题:数字签名和端点鉴别。
我们再次使用Aice和Bob来定义报文完整性问题。假定Bob接收到一个报文(这可能已经加密或可能是明文),并且他认为这个报文是由Aice发送的。为了鉴别这个报文,Bob需要证实:
该报文的确源自Aice该报文在到Bob的途中没有被篡改。
报文完整性这个问题在所有安全网络协议中都是至关重要的。
举一个特定的例子,考虑一个使用链路状态路由选择算法(例如 OSPF)的计算机网络,在该网络中决定每对路由器之间的路由(参见第4章)。在一个链路状态算法中,每台路由器需要向该网络中的所有其他路由器广播一个链路状态报文。路由器的链路状态报文包括直接相连邻居的列表以及到这些邻居的直接费用。一旦某台路由器从其他所有路由器收到了链路状态报文,它能够生成该网络的全图,运行它的最小费用路由选择算法并配置它的转发表。对路由选择算法的一个相对容易的攻击是, Trudy分发具有不正确状态信息的虚假链路状态报文。因此产生了报文完整性的需求:当路由器B收到来自路由器A的链路状态报文,路由器B应当证实路由器A实际生成了该报文,并且进一步证实在传输过程中该报文没有被纂改。
密码散列函数
密码散列函数(Cryptographic hash function),又译为加密散列函数,是散列函数的一种。它被认为是一种单向函数,也就是说极其难以由散列函数输出的结果,回推输入的数据是什么。这样的单向函数被称为“现代密码学的驮马”。这种散列函数的输入数据,通常被称为消息(message),而它的输出结果,经常被称为消息摘要(message digest)或摘要(digest)。在信息安全中,有许多重要的应用,都使用了密码散列函数来实现,例如数字签名,消息认证码。
密码散列函数是一种单向散列函数,将任意长度的消息压缩到某一固定长度的消息摘要,一个理想的密码散列函数应该有四个主要的特性:对于任何一个给定的消息,它都很容易就能运算出散列数值。难以由一个已知的散列数值,去推算出原始的消息。在不更动散列数值的前提下,修改消息内容是不可行的。对于两个不同的消息,它不能给与相同的散列数值。单向散列函数生成的信息摘要是不可预见的,消息摘要看起来和原始的数据没有任何的关系。而且,原始数据的任何微小变化都会对生成的信息摘要产生很大的影响 。它的模型为:h=H(M)
其中, M是待处理的明文,可以为任意长;H是单向散列函数, h是生成的报文摘要,它具有固定的长度,并且和M的长度无关。其中 H具有以下的单向性质:给 H和M ,很容易计算 h;给定 h 和 H ,很难计算 M,甚至得不到的 M任何消息;给定H ,要找两个不同的 M1 和M2 ,使得H(M1)=H(M2) 在计算上是不可行的。
散列函数(Hash function)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(hash values,hash codes,hash sums,或hashes)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。所有散列函数都有如下一个基本特性:如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。这个特性是散列函数具有确定性的结果,具有这种性质的散列函数称为单向散列函数。但另一方面,散列函数的输入和输出不是确定对应关系的,如果两个散列值相同,两个输入值很可能是相同的,但也可能不同,这种情况称为“散列碰撞(collision)”,这通常是两个不同长度的输入值,刻意计算出相同的输出值。输入一些数据计算出散列值,然后部分改变输入值,一个具有强混淆特性的散列函数会产生一个完全不同的散列值。
数字签名(又称公钥数字签名,Digital Signature)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证,但法条中的电子签章与数字签名,代表之意义并不相同,电子签章用以辨识及确认电子文件签署人身份、资格及电子文件真伪者。而数字签名则是以数学算法或其他方式运算对其加密,才形成电子签章,意即使用数字签名才创造出电子签章。数字签名不是指将签名扫描成数字图像,或者用触摸板获取的签名,更不是落款。数字签名了的文件的完整性是很容易验证的(不需要骑缝章、骑缝签名,也不需要笔迹鉴定),而且数字签名具有不可抵赖性(即不可否认性),不需要笔迹专家来验证。数字签名应用了公钥密码领域使用的单向函数原理。单向函数指的是正向操作非常简单,而逆向操作非常困难的函数,比如大整数乘法。这种函数往往提供一种难解或怀疑难解的数学问题。公钥密码领域具备实用性的三个怀疑难解问题为:质数分解,离散对数和椭圆曲线问题。
在密码学中,消息认证码(Message authentication code,缩写为MAC),又译为消息鉴别码、文件消息认证码、讯息鉴别码、信息认证码,是经过特定算法后产生的一小段信息,检查某段消息的完整性,以及作身份验证。它可以用来检查在消息传递过程中,其内容是否被更改过,不管更改的原因是来自意外或是蓄意攻击。同时可以作为消息来源的身份验证,确认消息的来源。消息认证码的算法中,通常会使用带密钥的散列函数(HMAC),或者块密码的带认证工作模式(如CBC-MAC)。信息鉴别码不能提供对信息的保密,若要同时实现保密认证,同时需要对信息进行加密。
百度百科-密码散列函数
报文鉴别码(MAC)
消息认证码(带密钥的Hash函数):密码学中,通信实体双方使用的一种验证机制,保证消息数据完整性的一种工具。构造方法由M.Bellare提出,安全性依赖于Hash函数,故也称带密钥的Hash函数。消息认证码是基于密钥和消息摘要所获得的一个值,可用于数据源发认证和完整性校验。
消息认证码(带密钥的Hash函数):密码学中,通信实体双方使用的一种验证机制,保证消息数据完整性的一种工具。
构造方法由M.Bellare提出,安全性依赖于Hash函数,故也称带密钥的Hash函数。消息认证码是基于密钥和消息摘要所获得的一个值,可用于数据源发认证和完整性校验。
在发送数据之前,发送方首先使用通信双方协商好的散列函数计算其摘要值。在双方共享的会话密钥作用下,由摘要值获得消息验证码。之后,它和数据一起被发送。接收方收到报文后,首先利用会话密钥还原摘要值,同时利用散列函数在本地计算所收到数据的摘要值,并将这两个数据进行比对。若两者相等,则报文通过认证。
消息验证码有两种计算方式 [1] :
一种是利用已有的加密算法,如DES等直接对摘要值进行加密处理;另一种是使用专门的MAC算法。HMAC,它基于MD5或者SHA-1,在计算散列值时将密钥和数据同时作为输入,并采用了二次散列迭代的方式,实际计算方法如下:
HMAC(K,M)=H(K⊕opad∣H(K⊕ipad∣M))
其中K是密钥,长度应为64字节,若小于该长度,则自动在密钥后面用“0”填充补足。M是消息;H是散列函数;opad和Ipad分别是由若干个0x5c和0x36组成的字符串;⊕表示异或运算,∣表示连接操作。
数字签名
数字签名(又称公钥数字签名)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。
数字签名,就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。
数字签名是非对称密钥加密技术与数字摘要技术的应用。
数字签名的文件的完整性是很容易验证的(不需要骑缝章,骑缝签名,也不需要笔迹专家),而且数字签名具有不可抵赖性(不可否认性)。
简单地说,所谓数字签名就是附加在数据单元上的一些数据,或是对数据单元所作的密码变换。这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据,防止被人(例如接收者)进行伪造。它是对电子形式的消息进行签名的一种方法,一个签名消息能在一个通信网络中传输。基于公钥密码体制和私钥密码体制都可以获得数字签名,主要是基于公钥密码体制的数字签名。包括普通数字签名和特殊数字签名。普通数字签名算法有RSA、ElGamal、Fiat-Shamir、Guillou- Quisquarter、Schnorr、Ong-Schnorr-Shamir数字签名算法、Des/DSA,椭圆曲线数字签名算法和有限自动机数字签名算法等。特殊数字签名有盲签名、代理签名、群签名、不可否认签名、公平盲签名、门限签名、具有消息恢复功能的签名等,它与具体应用环境密切相关。显然,数字签名的应用涉及到法律问题,美国联邦政府基于有限域上的离散对数问题制定了自己的数字签名标准(DSS)。
保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。
数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。
数字签名是个加密的过程,数字签名验证是个解密的过程。
发送报文时,发送方用一个哈希函数从报文文本中生成报文摘要,然后用自己的私人密钥对这个摘要进行加密,这个加密后的摘要将作为报文的数字签名和报文一起发送给接收方,接收方首先用与发送方一样的哈希函数从接收到的原始报文中计算出报文摘要,接着再用发送方的公用密钥来对报文附加的数字签名进行解密,如果这两个摘要相同、那么接收方就能确认该数字签名是发送方的。
数字签名有两种功效:一是能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。二是数字签名能确定消息的完整性。因为数字签名的特点是它代表了文件的特征,文件如果发生改变,数字摘要的值也将发生变化。不同的文件将得到不同的数字摘要。 一次数字签名涉及到一个哈希函数、发送者的公钥、发送者的私钥。”
数字签名:
发送方用自己的密钥对报文X进行Encrypt(编码)运算,生成不可读取的密文Dsk,然后将Dsk传送给接收方,接收方为了核实签名,用发送方的公用密钥进行Decrypt(解码)运算,还原报文。
具有数字签名功能的个人安全邮件证书是用户证书的一种,是指单位用户收发电子邮件时采用证书机制保证安全所必须具备的证书。个人安全电子邮件证书是符合x.509标准的数字安全证书,结合数字证书和S/MIME技术对普通电子邮件做加密和数字签名处理,确保电子邮件内容的安全性、机密性、发件人身份确认性和不可抵赖性。 具有数字签名功能的 个人安全邮件证书中包含证书持有人的电子邮件地址、证书持有人的公钥、颁发者(CA)以及颁发者对该证书的签名。个人安全邮件证书功能的实现决定于用户使用的邮件系统是否支持相应功能。 MS Outlook 、Outlook Express、Foxmail及CA安全电子邮件系统均支持相应功能。使用个人安全邮件证书可以收发加密和数字签名邮件,保证电子邮件传输中的机密性、完整性和不可否认性,确保电子邮件通信各方身份的真实性。
每个人都有一对“钥匙”(数字身份),其中一个只有她/他本人知道(密钥),另一个公开的(公钥)。签名的时候用密钥,验证签名的时候用公钥。又因为任何人都可以落款声称她/他就是你,因此公钥必须向接受者信任的人(身份认证机构)来注册。注册后身份认证机构给你发一数字证书。对文件签名后,你把此数字证书连同文件及签名一起发给接受者,接受者向身份认证机构求证是否真地是用你的密钥签发的文件。
在通讯中使用数字签名一般基于以下原因:
鉴权
公钥加密系统允许任何人在发送信息时使用公钥进行加密,数字签名能够让信息接收者确认发送者的身份。当然,接收者不可能百分之百确信发送者的真实身份,而只能在密码系统未被破译的情况下才有理由确信。
鉴权的重要性在财务数据上表现得尤为突出。举个例子,假设一家银行将指令由它的分行传输到它的中央管理系统,指令的格式是(a,b),其中a是账户的账号,而b是账户的现有金额。这时一位远程客户可以先存入100元,观察传输的结果,然后接二连三的发送格式为(a,b)的指令。这种方法被称作重放攻击。
完整性
传输数据的双方都总希望确认消息未在传输的过程中被修改。加密使得第三方想要读取数据十分困难,然而第三方仍然能采取可行的方法在传输的过程中修改数据。一个通俗的例子就是同形攻击:回想一下,还是上面的那家银行从它的分行向它的中央管理系统发送格式为(a,b)的指令,其中a是账号,而b是账户中的金额。一个远程客户可以先存100元,然后拦截传输结果,再传输(a,b3),这样他就立刻变成百万富翁了。
不可抵赖
在密文背景下,抵赖这个词指的是不承认与消息有关的举动(即声称消息来自第三方)。消息的接收方可以通过数字签名来防止所有后续的抵赖行为,因为接收方可以出示签名给别人看来证明信息的来源。
端点鉴别
端点鉴别(end- point authentication)就是一个实体经过计算机网络向另一个实体证明其身份的过程,例如一个人向某个电子邮件服务器证明其身份。作为人类,我们通过多种方式互相鉴别:见面时我们互相识别对方的面容,打电话时我们分辨对方的声音,海关的检查官员通过护照上的照片对我们进行鉴别。
当经网络进行鉴别时,通信各方不能依靠生物信息比如外表、声波纹等进行身份鉴別。的确,我们会在后面的实例研究中看到,诸如路由器、客户/服务器进程等网络元素通常必须相互鉴别。此处,鉴别应当在报文和数据交换的基础上,作为某鉴别协议(au-thentication protocol)的一部分独立完成。鉴别协议通常在两个通信实体运行其他协议(例如,可靠数据传输协议、路由选择信息交换协议或电子邮件协议)之前运行。鉴别协议首先建立相互满意的各方的标识;仅当鉴别完成之后,各方才继续下面的工作。
安全电子邮件
安全电子邮件SMTP的安全漏洞
安全问题分类
SMTP的安全漏洞
电子邮件在因特网传输时,一般采用SMTP,一种属于TCP/IP的协议,该协议明确定义了计算机系统间电子邮件的交换规则。邮件在发送时需要用不同的邮件服务器进行转发,这种转发过程一直持续到电子邮件到达最终接收主机。而SMTP自身存在先天安全隐患,它传输的数据没有经过任何加密,于是攻击者在电子邮件数据包经过这些邮件服务器的时候把它截取下来,就可获得这些邮件的信息,然后按照数据包的顺序重新还原成为你发送的原始文件。邮件发送者发送完电子邮件后,不知道它会通过哪些邮件服务器到达最终的主机,也无法确定在经过这些邮件服务器时是否有人把它截获下来。从技术上看,没有任何办法可以阻止攻击者截获在网络上传输的数据包。
电子邮件接收客户端软件的安全漏洞
邮件接收客户端软件的设计缺陷也会造成电子邮件的安全漏洞,如微软的Outlook和Outlook Express功能强大,能够和操作系统融为一体,具有相当多的使用者,但它们可能传播病毒和木马程序。一旦木马程序进入用户计算机,一切都将会处于黑客的控制之下。而病毒一旦发作,轻则损坏硬盘上的文件,甚至整个硬盘,重则会造成整个网络的瘫痪。电子邮件传播病毒通常是把自己作为附件发送给被攻击者,一旦被攻击者打开了病毒邮件的附件,病毒就会感染其计算机,然后自动打开其Outlook的地址簿,将自己发送到被攻击者地址簿上的每一个电子邮箱中,这正是电子邮件病毒能够迅速大而积传播的原因所在。电子邮件客户端程序的一些bug也常被攻击者利用来传播电子邮件病毒。Outlook曾经就因为存在这方而的漏洞被攻击者用来编制特殊的代码,这样,即使被攻击者收到邮件后不打开附件,也会自动运行病毒文件。
垃圾邮件
垃圾邮件是指向新闻组或他人电子邮箱发送的未经用户准许、不受用户欢迎的、难以退掉的电子邮件或电子邮件列表。垃圾邮件的常见内容包括:商业或个人网站广告、赚钱信息、成人广告、电子杂志、连环信等。垃圾邮件可以说是因特网给人类带来的副产品,其一,占用网络带宽,造成邮件服务器拥塞,降低了整个网络运行的速率。其二,侵犯收件人的隐私权,耗费收件人的时间、精力和金钱,占用收件人信箱空间。其三,严重影响ISP (Internet服务提供者)的形象。在国际上,频繁转发垃圾邮件的主机会被上级因特网服务提供商列入垃圾邮件数据库,从而导致该主机不能访问国外许多网络。而且收到垃圾邮件的用户会因为ISP没有建立完善的垃圾邮件过滤机制,而转向其他ISP。其四,骗人钱财,传播色情,发布反动言论等内容的垃圾邮件,已经对现实社会造成危害。其五,被黑客利用成为助纣为虐的工具。如2000年2月,黑客攻击雅虎等5大热门网站时,先是侵入并控制了一些高带宽的网站,集中众多服务器的带宽能力,然后用数以亿万计的垃圾邮件猛烈袭击口标,造成被攻击者网站网路堵塞,最终瘫痪。
邮件炸弹
邮件炸弹是指邮件发送者通过发送巨大的垃圾邮件使对方电子邮件服务器空间溢出,从而造成无法接受电子邮件,或者利用特殊的电子邮件软件在很短的时间内连续不断地将邮件发送给同一个信箱,在这些数以千万计的大容量信件而前,收件箱肯定不堪重负,最终“爆炸身亡”。信箱被撑满后,如果不及时清理,将导致所有发给该用户的电子邮件被主机退回。而被撑爆的信箱很可能会一直出错,从而导致其信箱长时间处于瘫痪状态。邮件炸弹还会大量消耗网络资源,常常导致网络塞车,使大量的用户不能正常使用。
防范措施
对电子邮件进行加密
既然没有任何办法可以组织攻击者截获在网络上传输的数据包,那么,惟一能采取的措施就是在发送邮件前对其进行数宇加密处理,接受方接到电子邮件后对其进行数宇解密处理,这样,即使攻击者截获了电子邮件,他而对的也只是一堆没有任何意义的乱码。所谓加密,是指将一个明文信息经过加密密钥及加密函数的转换,变成无意义的密文,当需要的时候则将此密文经过解密函数、解密密钥还原成明文。最常用的加密软件是PGP (Pretty Good Privacy), PGP是一个基于RSA (Rivest Shamir Adleman)公钥加密体系的邮件加密软件,它提出了公共钥匙或不对称文件加密和数字签名。RSA算法是一种基于大数不可能质因数分解假设的公钥体系。简单地说就是找两个很大的质数,一个公开给世界,称之为“公钥”,另一个不告诉任何人,称之为“私钥”。两把密钥互补—用公钥加密的密文可以用私钥解密,反过来也一样。假设A寄信给B,他们知道对方的公钥,A可以用B的公钥加密邮件寄出,B收到后用自己的私钥解出A的原文,这样就保证了邮件的安全,以防阻止非授权者阅读,还能对邮件进行数字签名从而使收信人确信邮件是由你发出的。
采用防火墙技术
防火墙是在受保护的内部网和外部网之间建立的网络通信安全监控系统,也可称之为控制进/出两个方向通信的门槛。在网络边界上通过建立起来的相应网络通信监控系统来隔离内部和外部网络,以阻挡外部网络的侵入。目前的防火墙主要有包过滤防火墙、代理防火墙和双穴主机防火墙3种类型。其中应用最广泛的防火墙为代理防火墙又称应用层网关级防火墙,它是由代理服务器和过滤路由器组成。过滤路由器负责网络互联,并对数据进行严格选择,然后将筛选过的数据传送给代理服务器。代理服务器起到外部网络申请访问内部网络的中间转接作用,其功能类似于一个数据转发器,它主要控制哪些用户能访问哪些服务类型。当外部网络向内部网络申请某种网络服务时,代理服务器接受申请,然后它根据其服务类型、服务内容、被服务的对象、服务者申请的时间、申请者的域名范围等来决定是否接受此项服务,如果接受,它就向内部网络转发这项请求,从而保护了内部网络不被非法访问。
及时升级病毒库
计算机病毒在不断产生并演化变体,反病毒软件生产商都会根据最近新发现的病毒情况,随时补充新病毒代码到病毒库中,因此用户及时升级防病毒软件是必须做的工作。
识别邮件病毒
一些邮件病毒具有广泛的共同特征,找出它们的共同点可以防止病毒的破坏。当收到邮件时,先看邮件大小及对方地址,如果发现邮件中无内容,无附件,邮件自身的大小又有几十K或更大或者附件的后缀名是双后缀,那么此类邮件中极可能包含有病毒,可直接删除此邮件,然后再清空废件箱。在清空废件箱后,一定要压缩一遍邮箱,否则杀毒软件在下次查毒时还会报有病毒。
打开实时监控防火墙
实时监控技术为电子邮件和系统安全构筑起一道动态、实时的反病毒防线,它通过修改操作系统,使操作系统本身具备反病毒功能,拒病毒于计算机系统之门外。且优秀的反病毒软件由于采用与操作系统的底层无缝连接技术,实时监控器占用的系统资源极小,用户几乎感觉不到其对机器性能的影响,并且不用考虑病毒的入侵问题。
PGP
PGP(英语:Pretty Good Privacy,中文翻译“优良保密协议”)是一套用于消息加密、验证的应用程序,采用IDEA的散列算法作为加密与验证之用。
PGP加密
PGP加密由一系列散列、数据压缩、对称密钥加密,以及公钥加密的算法组合而成。每个步骤支持几种算法,可以选择一个使用。每个公钥均绑定唯一的用户名和/或者E-mail地址。这个系统的第一个版本通常称为可信Web或X.509系统;X.509系统使用的是基于数字证书认证机构的分层方案,该方案后来被加入到PGP的实现中。当前的PGP加密版本通过一个自动密钥管理服务器来进行密钥的可靠存放。 [1]
兼容性
随着PGP的版本更新,新版本的PGP系统开始支持新的特征和算法,新系统生成的加密消息不能直接被旧的PGP系统解密,即使是使用旧版存储的有效私钥也不行。因此,在PGP通讯中的通信双方应统一版本,或者至少协商好PGP的具体设置。
机密性
PGP可以用来发送机密消息。这是通过对称的一组密钥-公钥组合来实现的。消息采用对称加密算法加密,采用一组对称密钥。每个对称密钥只使用一次,所以也叫做会话密钥。会话密钥通过接收方的公钥来加密保护,因此只需确保仅接收方能解密会话密钥即可。加密的消息和加密的会话密钥一起发送给接收方。
数字签名
PGP支持消息认证和完整性检测。完整性检测被用来检查消息在传输过程中是否变更过(即验证消息完整性),而消息认证则是被用来决定消息是否确由某特定的人或实体发出(即数字签名验证)。在PGP中,这些特性默认是和消息加密同时开启的,而且同样可以被应用到明文的验证。发送者只需使用PGP为消息创建一个数字签名(签名算法采用RSA或DSA算法)。具体步骤为:PGP以数据或信息创建一个散列(参见消息摘要),然后使用发送者的私钥利用散列生成数字签名。
信赖网络
不管是在加密消息时还是在验证签名时,都需要注意用来发送消息的公钥是否确实属于期望的接收者。简单的从某个位置下载一个公钥是没有保障的。蓄意的或意外冒名顶替是可能的。PGP从它的第一个版本起,总是包含在一个’身份证书’中发布用户公钥,身份证书也是经过加密构造的,所以任何的篡改或意外的变动都可以被迅速的检测出来。但是仅通过创建一个即使最简单的篡改都会被发现证书仍然不够,这样的检测机制只能在证书创建之后用于避免篡改,而不是创建之前。用户也必须用某种形式确保证书中的公钥真正的属于特定的人/实体。从第一个发行版开始,PGP产品就包含一个内部的’审查方案’来协助。一个信任模型被叫做信赖网络(Web of Trust)。一个给定的公钥(如一个用户名到对应其密钥的绑定信息)可以被第三方用户。数字签名 来证明某人(一个用户名)和一个密钥关联。可以在这样的签名中包含几个信任级别,只不过许多程序都会读写这个信息,而只有少数会通过信任级别来决定是否信任一个密钥。
信赖网络协议(Trusted-Web Protocol)在1992年的PGP 2.0手册中被菲利普·齐默曼(Philip R. Zimmermann)描述为:
随着时间过去,你累积到许多人的密钥,其中有些人你也许愿意签署信赖他们,别人也会签署一些他们自己信赖的他人密钥。每个人都逐渐累积到一些他人已签署信赖的密钥,然后自己再签署并散发出去。那么便能期待,下一个拿到这把密钥的人在签署名单上总有一两个是自己信赖的。这最终能形成所有公钥的分布式防弊的信赖网络。
信赖网络机制比S/MIME机制的集中管理的公钥基础设施有优势,但是没有被网络普罗大众普遍采用,一般只在Unix-like的爱好者、开源软件界、和对隐私特别注意而且有电脑知识的人群之间使用。如何使一般用户容易使用、乐意接收证书然后手动的验证它们的有效性,对于这些潜在的推广上阻碍还没有找到满意的解决方案。
近来有一些电子邮件服务业者推出结合于网页邮件接口的简便PGP操作,用户就算不创设自己的PGP密钥也可以寄出PGP加密信,包括寄给不使用PGP的收信人,并以通关密语的问答来使收信人获取阅读权限。每封信可以设置不同的通关密语,并能设置每个密语的有效期限(对于寄信人而言则是无期限的)。收信人甚至可以在回答正确的通关密语后,以勾选选项的方式轻易回复PGP加密信,无需自行创设和管理PGP密钥。对于一般用户而言这也许足够安全,但对于信息安全极度谨慎的人而言,这机制把私钥也存在寄件人的邮件服务器上,仍存有私钥外泄的疑虑,不论是政府依法获取,或是黑客非法入侵后获取。针对非法入侵,只能信赖电子邮件服务业者的安全防护能力;对于合法途径则只能透过设置及复杂的通关密语来提高破解难度。
使TCP连接安全:SSL
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
宏观描述
Secure Socket Layer,为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。一般通用之规格为40 bit之安全标准,美国则已推出128 bit之更高安全标准,但限制出境。只要3.0版本以上之I.E.或Netscape浏览器即可支持SSL。
当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
更完整的描述
服务器认证阶段:1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;4)服务器回复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。
用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。
SSL协议提供的安全通道有以下三个特性:
机密性 SSL协议使用密钥加密通信数据。可靠性:服务器和客户都会被认证,客户的认证是可选的。完整性:SSL协议会对传送的数据进行完整性检查。
从SSL 协议所提供的服务及其工作流程可以看出,SSL协议运行的基础是商家对消费者信息保密的承诺,这就有利于商家而不利于消费者。在电子商务初级阶段,由于运作电子商务的企业大多是信誉较高的大公司,因此这问题还没有充分暴露出来。但随着电子商务的发展,各中小型公司也参与进来,这样在电子支付过程中的单一认证问题就越来越突出。虽然在SSL3.0中通过数字签名和数字证书可实现浏览器和Web服务器双方的身份验证,但是SSL协议仍存在一些问题,比如,只能提供交易中客户与服务器间的双方认证,在涉及多方的电子交易中,SSL协议并不能协调各方间的安全传输和信任关系。在这种情况下,Visa和 MasterCard两大信用卡公组织制定了SET协议,为网上信用卡支付提供了全球性的标准。