计算机网络中的安全
- 1 什么是网络安全
- 2 加密的方式——机密性
- 2.1 对称密钥加密
- 2.2 公开密钥加密
- 3 报文鉴别码——报文完整性
- 4 数字签名——报文完整性、端点鉴别
- 4.1 数字签名技术的基础
- 4.2 公钥认证
- 5 案例——设计安全电子邮件系统
《计算机网络—自顶向下方法》(第7版)第8章:计算机网络中的安全,学习笔记
1 什么是网络安全
安全通信所需要具备的特性:
- 机密性 —— 通过对报文进行加密,使得报文内容仅有发送方和接收方能够理解报文内容,其他窃听者虽然可以截获报文,但却无法理解报文内容。
- 报文完整性 —— 接收方在收到报文后,能够检验出报文在传输过程中是否被意外改动或者人为篡改。CRC、检验和就是一种用于检验报文完整的方式。
- 端点鉴别 —— 发送方和接收方都应该能够证实对方的身份。例如发送方声称自己是“Alice”,对于安全的通信来说,接收方需要能够确认发送方的身份的确是“Alice”。
- 运行安全性 —— 对与一个与互联网连接的机构(或者个人)来说,希望能够实时监控流入和流出该机构的分组,以预防攻击者安放蠕虫病毒、获取公司机密。防火墙与入侵检测系统就是用于维护网络的运行安全性的。
2 加密的方式——机密性
发送方通过加密算法将原始报文(明文)生成密文,然后将密文发送给接收方。加密算法都涉及到了用一个东西替换另一个东西的思想。加密算法可分为两类:对称密钥加密和公开密钥加密。
2.1 对称密钥加密
举个例子:
发送者将报文中的所有字母所对应的ASCII码减3(明文"hello" -> 密文"ebiil")。接收方收到报文后需要对报文中所有字母对应的ASCII码加3才能得到原始报文(密文"ebiil"->明文"hello")。
这个例子中加密算法是:将ASCII加3(发送方)和减3(接收方),密钥是:3。密钥作为加密算法的输入,通常是一串数字或字符。在对称密钥加密方式中,发送方和接收方的密钥是相同的,且这个密钥只有他们两个知道。简单的对称加密算法——如上面那个例子或者密码本,可以利用报文中某些单词出现的概率,或者报文中肯定会出现的单词(如接收者的名字)等信息来破解密文。为了加大破解难度,某些对称加密算法在加密过程中混入一些随机性,如块密码中通常使用了密码块连接技术。
此外对称加密还存在一个问题:密钥如何分发? 似乎只能是双方首先见个面,人为协商确定密钥。
2.2 公开密钥加密
公开密钥加密可以很好的解决对称密钥加密中密钥分发的问题。在公开密钥加密方式中,接收方有两个密钥,一个是世界上任何一个人都可以得到的公钥,另一个是只有接收方自己知道的私钥。可以用符号 K + K^+ K+ 和 K − K^- K− 分别表示公钥和私钥。 公开密钥加密算法能够实现 K − ( K + ( m ) ) = m K^-( K^+(m) ) = m K−(K+(m))=m (m是报文),即用公钥加密后的报文只能用对应的私钥解开。举个例子:
当 Alice 向 Bob 发送一个消息 m 时,Alice 首先会使用 Bob 的公钥 K B + K^+ _B KB+ 对报文进行加密,得到密文 K B + ( m ) K^+ _B(m) KB+(m) ,然后将密文发送给 Bob。 Bob在收到密文后,用自己的私钥 K B − K^- _B KB− 对密文进行解密 K B − ( K B + ( m ) ) K^- _B( K^+ _B(m) ) KB−(KB+(m)) ,从而得到原始报文 m。
图2.1 公开密钥密码
在此用RSA加密算法举个例子,方便理解一下公开密钥加密。
RSA的加密算法是:
c = m e m o d n c = m^e \ mod \ n c=me mod n
RSA的解密算法是:
m = c d m o d n m = c^d \ mod \ n m=cd mod n
上式中 m表示明文,c表示密文,mod表示取余运算,对数(n, e) 为公钥,对数(n, d)为私钥。假设 Alice 向 Bob 发送一个报文m = “love”,Alice知道Bob的公钥( K B + K^+ _B KB+ )为(n=35,e=5),Alice对报文的加密过程如下:
图2.2 Alice的RSA加密
表中的数字表示是将26个字母a 到 z放别用数字1~26表示。可以看出在不知道Bob的私钥情况下,很难找到规律来破解密文。当Bob收到密文后会使用自己的私钥(n=35,d=29)来解密:
图2.3 Bob的RSA加密
公开密钥加密存在的问题: 对于一个长报文来说,使用 RSA 算法的计算量是非常大,而对称密钥加密算法的计算量通常会小很多。此外就是公钥认证的问题,若Trudy骗Alice,说Bob的公钥是xxx(其实这是Trudy自己的公钥),然后Alice给Bob发消息时,Trudy就可以截获并用自己的私钥破解报文,而Bob则完全看不懂报文。
两种加密方式的混合使用(解决对称密钥分发问题): 在实际应用中 RSA 和对称密钥加密是结合使用的,因为对于一个长报文来说,使用 RSA 算法的计算量是非常大。例如,Alice给Bob发送报文m前,先选择一个用于加密报文的会话密钥 K S K_S KS(也就是对称密钥),将报文加密得到密文 K S ( m ) K_S(m) KS(m),然后用Bob的公钥将会话密钥加密得到 K B + ( K S ) K^+ _B(K_S) KB+(KS),最后将 K S ( m ) K_S(m) KS(m) 和 K B + ( K S ) K^+ _B(K_S) KB+(KS) 一起发送给Bob,Bob收到后现有自己的私钥解开 K B + ( K S ) K^+ _B(K_S) KB+(KS) 得到会话密钥,然后用会话密钥获取原始报文m。
3 报文鉴别码——报文完整性
密码散列函数: 和 CRC 和 检验和 类似,密码散列函数以报文m作为输入,计算得到一个固定长度的字符串 H(m) 。此外密码散列函数还具有这样一个性质,找到任意两个不同的报文x和y使得H(x)=H(y),在计算上是不可能的。MD5散列算法就是一个被广泛使用的密码散列函数。
报文鉴别码(缩写为 MAC): Bob将报文m 和 鉴别密钥s(s是对称密钥,只有Bob和Alice知道) 输入密码散列函数得到报文鉴别码 H(m+s) ,然后H(m+s)附加到m上,生成一个扩展报文 (m, H(m+s)) 发送给Alice,Alice收到后,将从报文中取出的 m 和自己已知的 s 输入密码散列函数得到H(m+s),最后Alice将自己算出的 H(m+s) 与Bob发送过来的 H(m+s) 做对比,如果相同则说明报文在传输过程中没有被改动。
图3.1 报文鉴别码
4 数字签名——报文完整性、端点鉴别
4.1 数字签名技术的基础
其实要是公开密钥加密算法中的公钥和私钥加密能够交换,我们就能得到更神奇的结果: K − ( K + ( m ) ) = K + ( K − ( m ) ) = m K^-( K^+(m) ) = K^+( K^-(m) ) = m K−(K+(m))=K+(K−(m))=m 。即用私钥加密后的报文只能用对应的公钥解开。其实这就是数字签名技术的基础。我们回到 Alice 和 Bob 的例子:
如果 Bob 将报文 m 输入密码散列函数得到报文 H(m) ,然后用自己的私钥对 H(m) 进行加密得到 数字签名 K B − ( H ( m ) ) K^-_B( H(m) ) KB−(H(m)),最后将报文连同数字签名 (m, 数字签名 )一起发送给 Alice 。Alice在收到后,为了确定报文是 Bob 发过来的,Alice用 Bob 的公钥尝试解开数字签名得到H(m),然后将收到的报文m输入散列函数得到自己算出的H(m)。若两个H(m)相同,则说明报文确实是 Bob 发送的,因为只有 Bob 知道 Bob的私钥,并且也证实了报文传送过程中没有被改动。
图4.1 Bob发送数字签名的报文
图4.2 Alice验证数字签名报文
4.2 公钥认证
公钥认证,即证实一个公钥属于某个特定的实体,用在许多安全的网络协议中,包括IPsec和SSL。将公钥与特定实体绑定通常是由认证中心( CA)完成的,CA 的职责就是使识别和发行证书合法化。
- CA 证实一个实体(一个人、 一台路由器等)的真实身份。
- 一旦CA验证了某个实体的身份,这个CA会生成一个将其身份和实体的公钥绑定起来的证书(certificate) 这个证书包含这个公钥和公钥所有者全局唯一的身份标识信息(例如,一个人的名字或一个IP地址)。由CA对这个证书进行数字签名。的职责就是使识别和发行证书合法化。
Bob给Alice发送报文m的同时,他也发送了其CA签署的证书。Alice使用CA的公钥来核对Bob证书的合法性并提取Bob的公钥。这要就可以确定证书里面的公钥确实属于 Bob 了。
5 案例——设计安全电子邮件系统
本节利用对称密钥密码、公开密钥密码、散列函数和数字签名,设计一个安全电子邮件系统。我们还是以Bob和Alice为例,当Alice给Bob发送一个报文时,会进行如下工作:
图 5.1 Alice给Bob发送报文的过程:Alice使用对称密钥密码、公开密钥密码、散列函数和数字签名来提供安全性、发送方鉴别和报文完整性
Bob接收到以后只要按照相反的动作将密文解开即可。最后就是Alice利用4.2节中的CA认证的方式将自己的公钥发给Bob即可。像 SSL 、IPsec 等安全的网络协议的原理都与之类似。