第10章 网络安全 本章内容 网络安全的基本概念 信息安全技术 防火墙技术 网络病毒
网络安全的基本概念 什么是网络安全? 网络安全主要解决数据保密和认证的问题。
数据保密就是采取复杂多样的措施对数据加以保护,以防止数据被有意或无意地泄露给无关人员。 认证分为信息认证和用户认证两个方面 信息认证是指信息从发送到接收整个通路中没有被第三者修改和伪造, 用户认证是指用户双方都能证实对方是这次通信的合法用户。通常在一个完备的保密系统中既要求信息认证,也要求用户认证。
主要的网络安全的威胁 (1)非授权访问(Unauthorized Access): 一个非授权的人的入侵。 (2)信息泄露(Disclosure of Information): 造成将有价值的和高度机密的信息暴露给无权访问该信息的人的所有问题。 (3)拒绝服务(Denial of Service): 使得系统难以或不可能继续执行任务的所有问题。
信息安全技术 数据加密 用户认证 数字签名 加密技术应用案例
密码分析和密码学 破译密码的技术叫做密码分析 设计密码和破译密码的技术统称为密码学
传统加密技术 密码学的历史非常悠久,传统的加密方法可以分成两类: 替代密码 换位密码
替代密码 定义:替代密码就用一组密文字母来代替一组明文字母以隐藏明文,但保持明文字母的位置不变。
缺点:容易破译,因为最多只需尝试25次(k=1~25)即可轻松破译密码。 凯撒密码——最古老的地带密码 凯撒密码,它用D表示a,用E表示b,用F表示c,……,用C表示z,也就是说密文字母相对明文字母左移了3位。 更一般地,可以让密文字母相对明文字母左移k位,这样k就成了加密和解密的密钥。 记法约定:用小写表示明文,用大写表示密文
替代密码-单字母表替换 单字母表替换:使明文字母和密文字母之间的映射关系没有规律可循,比如将26个英文字母随意映射到其他字母上。 破译者只要拥有很少一点密文,利用自然语言的统计特征,很容易就可破译密码。 破译的关键在于找出各种字母或字母组合出现的频率
虽然破译多字母密码表要困难一些,但如果破译者手头有较多的密文,仍然是可以破译的。破译的诀窍在于猜测密钥的长度。 替代密码-多张密码字母表 虽然破译多字母密码表要困难一些,但如果破译者手头有较多的密文,仍然是可以破译的。破译的诀窍在于猜测密钥的长度。 对明文中不同位置上的字母用不同的密码字母表来加密。如:
换位密码 换位有时也称为排列,它不对明文字母进行变换,只是将明文字母的次序进行重新排列。 例: C O M P U T E R 明文 pleaseexecutethelatestScheme 1 4 3 5 8 7 2 6 p e a s x c u t h 密文 PELHEHSCEUTMLCAE ATEEXECDETTBSESA m b d
换位密码的破译 第一步是判断密码类型是否为换位密码。 第二步是猜测密钥的长度,也即列数。 第三步是确定各列的顺序。
秘密密钥算法 在传统加密算法的基础上,充分利用计算机的处理能力,将算法内部的变换过程设计的非常复杂,并使用较长的密钥,使得攻击者对密文的破译变得非常困难。甚至,在攻击者即使掌握了加密算法的本身,也会由于不知道密钥而得不到明文。由于这种体制将算法和密钥进行了分离,并且算法的保密性完全依赖于密钥的安全性,因此,被称为秘密密钥加密体制。
密钥分发问题 秘密密钥的一个弱点是解密密钥必须和加密密钥相同,这就产生了如何安全地分发密钥的问题。 传统上是由一个中心密钥生成设备产生一个相同的密钥对,并由人工信使将其传送到各自的目的地。 对于一个拥有许多部门的组织来说,这种分发方式是不能令人满意的,尤其是出于安全方面的考虑需要经常更换密钥时更是如此。
破译者即使能加密任意数量的选择明文,也无法破译密码。 公开密钥算法 在公开密钥算法中,加密密钥和解密密钥是不同的,并且从加密密钥不能得到解密密钥。为此,加密算法E和解密算法D必须满足以下的三个条件: ① D(E(P))=P; ② 从E导出D非常困难; ③ 使用“选择明文”攻击不能攻破E。 如果能够满足以上三个条件,则加密算法完全可以公开。 将解密算法D作用于密文E(P)后就可获得明文P 不可能从E导出D 破译者即使能加密任意数量的选择明文,也无法破译密码。
公开密钥算法的基本思想 如果某个用户希望接收秘密报文,他必须设计两个算法:加密算法E和解密算法D,然后将加密算法放于任何一个公开的文件中广而告知,这也是公开密钥算法名称的由来,他甚至也可以公开他的解密方法,只要他妥善保存解密密钥即可。
当两个完全陌生的用户A和B希望进行秘密通信时,各自可以从公开的文件中查到对方的加密算法。 若A需要将秘密报文发给B, 则A用B的加密算法EB对报文进行加密,然后将密文发给B,B使用解密算法DB进行解密,而除B以外的任何人都无法读懂这个报文; 当B需要向A发送消息时,B使用A的加密算法EA对报文进行加密,然后发给A,A利用DA进行解密。
在这种算法中,每个用户都使用两个密钥:加密密钥是供其他人向他发送报文用的,这是公开的;解密密钥是用于对收到的密文进行解密的,这是保密的。 通常用公开密钥和私人密钥分别称呼公开密钥算法中的加密密钥和解密密钥,以同传统密码学中的秘密密钥相区分。 由于私人密钥只由用户自己掌握,不需要分发给别人,也就不用担心在传输的过程中或被其他用户泄密,因而是极其安全的。
用公开密钥算法解决密钥分发问题: 中心密钥生成设备产生一个密钥后,用各个用户公开的加密算法对之进行加密,然后分发给各用户,各用户再用自己的私人密钥进行解密,既安全又省事。 两个完全陌生的用户之间,也可以使用这种方法很方便地商定一个秘密的会话密钥。
RSA算法 参数计算: 选择两个大素数p和q(典型值为大于10100); 计算n=p×q和z=(p-1)×(q-1); 选择一个与z互质的数,令其为d; 找到一个e使其满足e×d=1(mod z)。
RSA加密过程 首先将明文看成是一个比特串,将其划分成一个个的数据块P且有0≤P<n。 对数据块P进行加密,计算C=Pe(mod n),C即为P的密文; 对C进行解密,计算P=Cd(mod n)。 公开密钥由(e,n)组成,私人密钥由(d,n)组成。
RSA算法的安全性 RSA算法的安全性建立在难以对大数提取因子的基础上,如果破译者能对已知的n提取出因子p和q就能求出z,知道了z和e,就能求出d。 所幸的是,300多年来虽然数学家们已对大数的因式分解问题作了大量研究,但并没有取得什么进展,到目前为止这仍是一个极其困难的问题。
用户认证 定义:通信双方在进行重要的数据交换前,常常需要验证对方的身份,这种技术称为用户认证。 在实际的操作中,除了认证对方的身份外,同时还要在双方间建立一个秘密的会话密钥,该会话密钥用于对其后的会话进行加密。 每次连接都使用一个新的随机选择的密钥
基于共享秘密密钥的用户认证协议 假设在A和B之间有一个共享的秘密密钥KAB 。某个时候A希望和B进行通信,于是双方采用如图所示的过程进行用户认证。 使用共享秘密密钥进行用户认证
使用密钥分发中心的用户认证协议 要求通信的双方具有共享的秘密密钥有时是做不到的,另外如果某个用户要和n个用户进行通信,就需要有n个不同的密钥,这给密钥的管理也带来很大的麻烦。 解决的办法是引进一个密钥分发中心(Key Distribution Center,KDC)。KDC是可以信赖的,并且每个用户和KDC间有一个共享的秘密密钥,用户认证和会话密钥的管理都通过KDC来进行。
KDC举例 如图所示,A希望和B进行通信 一个用KDC进行用户认证的协议 重复攻击问题: 假如有个C,当他为A提供了一定的服务后,希望A用银行转账的方式支付他的酬金,于是A和B(银行)建立一个会话,指令B将一定数量的金额转至C的账上。 这时C将KDC发给B的密文和随后A发给B的报文复制了下来,等会话结束后,C将这些报文依次重发给B, 而B无法区分这是一个新的指令还是一个老指令的副本,因此又将相同数量的金额转至C的账上,这个问题称为重复攻击问题。 为解决这个问题,可以在每个报文中放一个一次性的报文号,每个用户都记住所有已经用过的报文号,并将重复编号的报文丢弃。另外还可以在报文上加一个时间戳,并规定一个有效期,当接收方收到一个过期的报文时就将它丢弃。 一个用KDC进行用户认证的协议
使用公开密钥算法的用户认证协议 使用公开密钥进行用户认证
数字签名 一个可以替代手迹签名的系统必须满足以下三个条件: ① 接收方通过文件中的签名能认证发送方的身份; ② 发送方以后不能否认发送过签名文件; ③ 接收方不可能伪造文件内容。
数字签名的实现方法 使用秘密密钥算法的数字签名 使用公开密钥算法的数字签名 报文摘要
使用秘密密钥算法的数字签名 这种方式需要一个可以信赖的中央权威机构(Centra1 Authority,以下简称CA)的参与,每个用户事先选择好一个与CA共享的秘密密钥并亲自交到CA,以保证只有用户和CA知道这个密钥。 除此以外,CA还有一个对所有用户都保密的秘密密钥KCA。
使用秘密密钥算法的数字签名 当A想向B发送一个签名的报文P时,它向CA发出KA(B,RA,t,P),其中RA为报文的随机编号,t为时间戳; CA将其解密后,重新组织成一个新的密文KB(A,RA,t,P,KCA(A,t,P))发给B,因为只有CA知道密钥KCA,因此其他任何人都无法产生和解开密文KCA(A,t,P); B用密钥KB解开密文后,首先将KCA(A,t,P)放在一个安全的地方,然后阅读和执行P。
验证 当过后A试图否认给B发过报文P时,B可以出示KCA(A,t,P)来证明A确实发过P,因为B自己无法伪造出KCA(A,t,P),它是由CA发来的,而CA是可以信赖的,如果A没有给CA发过P,CA就不会将P发给B,这只要用KCA对KCA(A,t,P)进行解密,一切就可真相大白。 为了避免重复攻击,协议中使用了随机报文编号RA和时间戳t。B能记住最近收到的所有报文编号,如果RA和其中的某个编号相同,则P就被当成是一个复制品而丢弃,另外B也根据时间戳t丢弃旧报文,以防止攻击者经过很长一段时间后,再用旧报文来重复攻击。
使用公开密钥算法的数字签名 使用公开密钥算法的数字签名,其加密算法和解密算法要同时满足 D(E(P))= P; E(D(P))= P。 这个假设是可能的,因为RSA算法就具有这样的特性。 数字签名的过程如图所示。 EB(DA(P))
验证 当A过后试图否认给B发过P时,B可以出示DA(P)作为证据,因为B没有A的私人密钥DA,除非A确实发过DA(P),否则B是不会有这样一份密文的,只要用A的公开密钥EA解开DA(P),就可以知道B说的是真话。
报文摘要 使用一个单向的哈希(Hash)函数,将任意长的明文转换成一个固定长度的比特串,然后仅对该比特串进行加密。这样的方法通常称为报文摘要(Message Digest,MD),它必须满足以下三个条件: ① 给定P,很容易计算出MD(P); ② 给出MD(P),很难计算出P; ③ 任何人不可能产生出具有相同报文摘要的两个不同的报文。 为满足条件3,MD(P)至少必须达到128位,实际上有很多函数符合以上三个条件。
报文摘要-CA KCA(A,t,MD(P))
报文摘要-公开密钥密码系统 在公开密钥密码系统中,使用报文摘要进行数字签名的过程如图所示。 P,DA(MD(P)) 使用报文摘要的数字签名
常用的密码算法 对称加密算法 非对称加密算法 常用的报文摘要算法 Data Encryption Standard(DES) RSA Digital Signature Algorithm (DSA) 常用的报文摘要算法 (Message Digest Algorithm)MD5 (Security Hash Algorithm)SHA