目录
7.1 网络安全问题概述
7.1.1 计算机网络面临的安全性威胁
7.1.2 安全的内容
7.1.3 数据加密模型
7.2 两类密码体制
7.2.1 对称密钥密码体制(对称加密、加密密钥和解密密钥相同)
7.2.2 公钥/公开密钥密码体制(非对称加密、加密密钥和解密密钥不相同)
7.3 数字签名(验证文件/合同的真实性)
7.4 鉴别
7.4.1 报文鉴别
7.4.2 实体鉴别
7.5 密钥分配
7.5.1 对称密钥的分配
7.5.2 公钥的分配
7.6 互联网使用的安全协议
7.6.1 网络层安全协议:IPSec(IP Security)
7.6.2 运输层安全协议:SSL、TLS
7.6.3 应用层安全协议:电子邮件安全
7.7 系统安全
7.7.1 防火墙
7.7.2 入侵检测系统( IDS, Intrusion Detection System )
7.8 未来的发展方向
- 网络结构安全:添加冗余设备,避免单点故障导致网络中断(具体见“3.4.5 生成树协议”)
- 系统安全:微软公司一旦发生操作系统存在漏洞,就会将补丁发布到网上;Windows操作系统一旦执行更新操作,就可将补丁下载到本地,降低系统被攻击的风险
- 数据存储安全:给文件设置读写权限
- 数据传输安全:
- 网络层实现的安全:TCP/IP协议并没有考虑安全的问题,为了弥补安全性,添加了一系列安全措施
- 用户安全意识:密码设置过于简单、密码存放过于显眼
7.1 网络安全问题概述
7.1.1 计算机网络面临的安全性威胁
计算机网络上的通信面临以下两大类威胁:
被动攻击/截获攻击/流量分析(traffic analysis):攻击者从网络上窃听他人的通信内容。攻击者只是观察和分析某一个协议数据单元PDU,以便了解所交换数据的某种性质,但不干扰信息流。
主动攻击:
- 篡改/更改报文流:攻击者故意篡改网络上传送的报文
- DNS域名劫持:通过攻击域名服务器或伪造域名服务器的方法,把目标网站域名解析到错误的IP地址(修改域名解析的结果),从而实现用户无法访问目标网站的目的 或者 蓄意要求用户访问指定IP地址(钓鱼网站)的目的。
- 恶意程序:种类繁多,对网络安全威胁较大的主要包括计算机病毒、计算机蠕虫、特洛伊木马、逻辑炸弹、后门入侵、流氓软件等。
- 拒绝服务:攻击者向互联网上的某个服务器不停地发送大量分组,使该服务器无法提供正常服务,甚至完全瘫痪。
- 分布式拒绝服务DDoS (Distributed Denial of Service)/网络带宽攻击/连通性攻击:从互联网上的成百上千的网站集中攻击一个网站
计算机网络通信安全的目标:
- 被动攻击:通常难以检测 → 可采用各种数据加密技术
- 防止分析出报文内容和流量分析
- 主动攻击:可以采取适当措施加以检测 → 将加密技术与适当的鉴别技术相结合
- 防止恶意程序
- 检测更改报文流和拒绝服务
7.1.2 安全的内容
网络的安全性是不可判定的。一个安全的计算机网络应达到四个目标:
- 保密性:
- 只有信息的发送方和接收方才能懂得所发送信息的内容。
- 是网络安全通信的最基本的内容,也是对付被动攻击必须具备的功能。
- 为了使网络具有保密性,需要使用各种密码技术。
- 端点鉴别:
- 鉴别信息的发送方和接收方的真实身份。
- 在对付主动攻击中是非常重要的。
- 信息的完整性:
- 信息的内容未被篡改过。
- 在应对主动攻击中是必不可少的。
- 信息的完整性与端点鉴别往往是不可分割的。
- 在谈到“鉴别”时,也同时包含了端点鉴别和报文完整性。
- 运行的安全性:
- 系统能正常运行并提供服务。
- 访问控制 (access control) 对计算机系统的安全性是非常重要的。必须对访问网络的权限加以控制,并规定每个用户的访问权限。
7.1.3 数据加密模型
密钥:一串秘密的字符串(即比特串) K(Key)
- 注1:加密密钥和解密密钥可以一样,也可以不一样
- 注2:密钥通常由密钥中心提供
- 注3:当密钥需要向远地传送时,一定要通过另一个安全信道
加密:发送端通过加密算法E(Encode)和加密密钥,将明文X加密为密文Y
解密:接收端通过解密算法D(Decode)和解密密钥,将密文Y解密为明文X(解密算法是加密算法的逆运算)
密码学(cryptology):
- 密码编码学(cryptography):密码体制的设计学(研究如何加密)
- 密码分析学(cryptanalysis):在未知密钥的情况下,从密文推演出明文或密钥的技术(研究如何解密)
- 如果不论截取者获得了多少密文,但在密文中都没有足够的信息来唯一地确定出对应的明文,则这一密码体制称为无条件安全的 或 理论上是不可破的。
- 如果密码体制中的密码不能被可使用的计算资源破译,则这一密码体制称为在计算上是安全的。
7.2 两类密码体制
7.2.1 对称密钥密码体制(对称加密、加密密钥和解密密钥相同)
对称加密1(一重DES):数据加密标准属于对称密钥密码体制,是一种分组密码
- Step1:对整个明文X进行分组,每一个组长为64位
- Step2:对每一组64位二进制数据进行加密处理,产生一组64位密文数据
- 密钥:64位(实际密钥长度为56位,其余8位用于奇偶校验)
- Step3:将各组密文串接起来,即得出整个的密文
- DES的保密性:
- DES的保密性仅取决于对密钥的保密,其算法是公开的。
- 目前较为严重的问题是DES的密钥长度。由于现在已经设计出搜索DES密钥的专用芯片,因此56位DES已不再认为是安全的了。
对称加密2(三重DES):使用两个56位的密钥
- 把一个64位明文用一个密钥加密,再用另一个密钥解密,然后再使用第一个密钥加密,即
优缺点:
- 优点:效率高
- 缺点:
- 密钥不适合在网络中传输:攻击者一旦捕获密钥,就能破解密文
- 密钥维护困难:每台计算机与其他的所有计算机进行安全通信时,需要使用不同的密钥,导致密钥的数量巨大
7.2.2 公钥/公开密钥密码体制(非对称加密、加密密钥和解密密钥不相同)
- 公钥密码体制产生的主要原因:
- 常规密钥密码体制的密钥分配问题。
- 对数字签名的需求。
非对称加密:以“发送者A给接收者B发送数据”为例
- Step1:密钥对生成器产生出接收者B的一对密钥
- 公钥(Public Key):加密密钥 → 向公众公开
- 私钥(Secret Key):解密密钥 → 对其他人都保密
- Step2:发送者A用B的公钥对明文X进行加密(E运算),即可得到密文Y
- Step3:接收者B用自己的私钥对密文Y进行解密(D运算),即可恢复出明文X
- 注1(算法):加密算法E和解密算法D是公开的
- 注2(算法):加密和解密运算可以对调,即加密和解密是互逆的
- 公钥加密、私钥解密:实现保密的方法
- 私钥加密、公钥解密:实现数字签名的方法
- 注3(密钥):虽然私钥SK是由公钥PK决定的,但却不能根据PK计算出SK。
优缺点:
- 优点:
- 公钥适合在网络中传递:即便攻击者捕获公钥加密的密文,由于没有私钥,也就无法破解密文(公钥加密的密文,只能用私钥解密)
- 密钥维护简单:计算机中只要有一对密钥对,就能实现多对一的单向保密通信
- 缺点:效率低(相对于对称加密)
对称密钥 VS. 公开密钥:
- 对称密钥:由于双方使用同样的密钥,因此在通信信道上可以进行一对一的双向保密通信。每一方既可用此密钥加密明文,并发送给对方;也可接收密文,用同一密钥对密文解密。这种保密通信仅限于持有此密钥的双方(如再有第三方就不保密了)。
- 公开密钥:在通信信道上可以是多对一的单向保密通信。
- 安全性:任何加密方法的安全性取决于密钥的长度,以及攻破密文所需的计算量。在这方面,公钥密码体制并不具有比传统加密体制更加优越之处。
- 开销:由于目前公钥加密算法的开销较大,在可见的将来还看不出来要放弃传统的加密方法。
- 密钥分配协议:公钥还需要密钥分配协议,具体的分配过程并不比采用传统加密方法时更简单。
非对称加密的细节:为了结合对称加密(效率高)和非对称加密(公钥适合在网络中传递)的优点,实际应用中通常常用如下的加密方式
- Step1:发送者使用对称密钥加密文件(效率高),使用接收者的公钥加密对称密钥(适合在网络中传递),然后一并发送给接收者
- Step2:接收者使用自己的私钥解出对称密钥,再使用对称密钥解出文件
7.3 数字签名(验证文件/合同的真实性)
数字签名必须保证以下三点:
- 报文鉴别:接收者能够核实发送者对报文的签名(证明来源)
- 由于除A外没有别人能具有A的私钥,因此除A外没有别人能产生这个密文 → B相信报文X是A签名发送的
- 报文的完整性:接收者不能伪造对报文的签名或更改报文的内容(防伪造)
- 若B将X伪造成X',则B不能在第三者前出示明文X'对应的密文。这样就证明了B伪造了报文。
- 不可否认:发送者事后不能抵赖对报文的签名(防否认)
- 若A要抵赖曾发送报文给B,B可将明文X和对应的密文出示给第三者。第三者很容易用A的公钥去证实A确实发送X给B。
数字签名1(不具有保密性):
数字签名2(具有保密性):
- 注:现在已有多种实现数字签名的方法,但采用公钥算法更容易实现。
7.4 鉴别
目的:在信息的安全领域中,对付被动攻击的重要措施是加密,而对付主动攻击中的篡改和伪造则要用鉴别(authentication)。
分类:
- 报文鉴别:接收方能够鉴别所收到的报文的确是报文的发送者所发送的,而不是其他人伪造的或篡改的 → 端点鉴别(防伪造)、报文完整性鉴别(防篡改)
- 实体鉴别:仅仅鉴别发送报文的实体,实体可以是一个人,也可以是一个进程(客户或服务器) → 端点鉴别(防伪造)
鉴别 VS. 授权(authorization):鉴别与授权不同
- 授权:所进行的过程是否被允许(如是否可以对某文件进行读或写)。
7.4.1 报文鉴别
定义:许多报文并不需要加密,但却需要数字签名,以便让报文的接收者能够鉴别报文的真伪。
实现1(对报文本身进行数字签名):
- 缺点:对较长的报文(这是很常见的)进行数字签名需要耗费较多的运算时间,增加计算机的负担。
- 当我们传送不需要加密的报文时,应当使接收者能用很简单的方法鉴别报文的真伪。
实现2(对报文的摘要/散列值进行数字签名):一种相对简单的对报文进行鉴别的方法(如何获取报文的摘要?)
- 散列函数:获取报文的摘要
- 定长输出:散列函数的输入长度可以很长,但输出长度是固定的,并且较短。散列函数的输出叫做散列值/散列。
- 多对一:不同的散列值肯定对应于不同的输入,但不同的输入却可能得出相同的散列值。散列函数的输入和输出并非一一对应,而是多对一。(世界上的文件无穷无尽,而散列值的长度是固定的,能够表示的文件数量也是有限的,因此必然无法实现散列值与文件的一一对应关系。即便如此,想要通过散列值反向推导出源文件是不现实的。)
- 密码散列函数(cryptographic hash function):在密码学中使用的散列函数
- 单向性:要找到两个不同的报文,它们具有同样的密码散列函数输出,在计算上是不可行的。也就是说,密码散列函数实际上是一种单向函数(one-way function)、不可逆。
- 实用的密码散列函数MD5:
- 基本概述:MD5是报文摘要MD (Message Digest)的第5个版本。报文摘要算法MD5公布于RFC 1321 (1991年),并获得了非常广泛的应用。
- MD5的设计者Rivest曾提出一个猜想,即根据给定的MD5报文摘要代码,要找出一个与原来报文有相同报文摘要的另一报文,其难度在计算上几乎是不可能的。
- 基本思想:用足够复杂的方法将报文的数据位充分“弄乱”,报文摘要代码中的每一位都与原来报文中的每一位有关。
- 计算步骤:
- Step1(追加):把任意长的报文按模计算其余数(64位),追加在报文的后面(长度项)。
- Step2(填充):在报文和长度项之间填充1~512位,使得填充后的总长度是512的整数倍。填充的首位是1,后面都是0。
- Step3(分组):把追加和填充后的报文分割为一个个512位的数据块,每个512位的报文数据再分成4个128位的数据块。
- Step4(计算):将4个128位的数据块依次送到不同的散列函数进行4轮计算。每一轮又都按32位的小数据块进行复杂的运算。一直到最后计算出MD5报文摘要代码(128位)。
- 实用的密码散列函数SHA-1:
- 基本概述:安全散列算法SHA (Secure Hash Algorithm)是由美国标准与技术协会NIST提出的一个散列算法系列。目前已制定SHA-1、SHA-2、SHA-3等版本。
- 基本思想:
- 要求输入码长小于位,输出码长为160位。
- 将明文分成若干512位的定长块,每一块与当前的报文摘要值结合,产生报文摘要的下一个中间结果,直到处理完毕。
- 共扫描5遍,效率略低于MD5,抗穷举性更高。
- MD5 VS. SHA:
- 安全性:SHA比MD5更安全
- 计算速度:MD5比SHA要快些
报文鉴别码MAC(Message Authentication Code):散列加密后的结果
- 问题引入:由于报文鉴别既需要防伪造(端点鉴别),又需要防篡改(报文完整性鉴别),而仅依靠MD5算法得到的报文摘要来实现报文鉴别可以防篡改,但不能防伪造,因而不能真正实现报文鉴别。(示例如下)
- 可以防篡改:接收者B接收到数据(M, H(M))后,计算报文M的散列值H(),若报文在传输过程中被篡改了,则H()一定不等于H(M),则认为报文的内容被篡改。
- 不能防伪造:
- 攻击者C伪造一个报文M,计算出其散列H(M),并拼接有散列的扩展报文冒充A发送给B。
- B收到扩展的报文(M, H(M))后,通过散列函数的运算,计算出收到的报文的散列H()。
- 若H(M)= H(),则B就会误认为所收到的伪造报文就是A发送的。
- 解决方案:需要对报文摘要(即散列值)进行加密(数字签名)
- 由于入侵者不掌握密钥K,所以入侵者无法伪造A的报文鉴别码MAC,因而无法伪造A发送的报文,实现了对报文的鉴别。
- 虽然从散列值导出报文鉴别码MAC需要加密算法(整个的报文是不需要加密的),但由于散列值的长度通常都远远小于报文X的长度,因此这种加密不会消耗很多的计算资源。
7.4.2 实体鉴别
报文鉴别 VS. 实体鉴别:
- 报文鉴别:对每一个收到的报文都要鉴别报文的发送者。
- 实体鉴别:在系统接入的全部持续时间内,对和自己通信的对方实体只需验证一次。
实现1:对称密钥(最简单的实体鉴别) → 使用预共享的对称密钥(仅A、B知道)实现实体鉴别
- Step1:A发送给B的身份认证报文(含A的用户名和密码),使用共享对称密钥进行加密。
Y = E((用户名, 密码), KAB)
- Step2:B收到报文后,使用共享对称密钥进行解密(提取出A的用户名和密码),从而实现实体A的身份鉴别。
(用户名, 密码) = D(Y, KAB)
- 存在问题:重放攻击(replay attack)
- 入侵者C可以从网络上截获A发给B的报文。
- C并不需要破译这个报文,而是直接把这个截获的、由A加密的报文发送给B,使B误认为C就是A。然后,B就向伪装是A的C发送应发给A的报文。
- C甚至还可以截获A的IP地址,然后把A的IP地址冒充为自己的IP地址(IP欺骗),使B更加容易受骗。
- 注:不使用不重数技术的实体鉴别,只要攻击者有一次捕获到身份认证的加密报文,以后每次都可以使用该加密报文进行实体鉴别(一劳永逸)。
实现2:对称秘钥 + 不重数
实现3:非对称秘钥 + 不重数(在使用公钥密码体制时,可以对不重数进行签名鉴别)
- Step1:B用自己的私钥对不重数进行签名后发回给A。A用B的公钥核实签名。如能得出自己原来发送的不重数,就核实了和自己通信的对方的确是B。
- Step2:A也用自己的私钥对不重数进行签名后发送给B。B用A的公钥核实签名,鉴别了A的身份。
- 存在问题:中间人攻击(公钥密码体制虽然不必在互相通信的用户之间秘密地分配共享密钥,但仍有受到攻击的可能)
- A向B发送“我是A”的报文,并给出了自己的身份。此报文被中间人C截获,C把此报文原封不动地转发给B。
- 截获不重数:B选择一个不重数发送给A,但同样被C截获后也照样转发给A。
- 私钥加密不重数(私钥冒充):中间人C用自己的私钥冒充A的私钥,对加密后发回给B,使B误以为是A发来的。A收到后也用自己的私钥对加密后发回给B,中途被C截获并丢弃。
- 索取公钥(公钥冒充):B向A索取其公钥,此报文被C截获后转发给A。C把自己的公钥冒充是A的公钥发送给B,而C也截获到A发送给B的公钥。
- 公钥解密不重数:B用收到的公钥对收到的加密的进行解密,其结果当然正确。于是,B相信通信的对方是A,接着就向A发送许多敏感数据,但都被C截获了。
- 公钥加密数据、私钥解密数据:B用收到的公钥(以为是A的)对数据加密发送给A。C截获后用自己的私钥解密,复制一份留下,再用A的公钥对数据加密后发送给A。
- A收到数据后,用自己的私钥解密,以为和B进行了保密通信。其实,B发送给A的加密数据已被中间人C截获并解密了一份。但A和B却都不知道。
7.5 密钥分配
密钥管理:
- 诞生:由于密码算法是公开的,网络的安全性就完全基于密钥的安全保护上。因此,在密码学中出现了一个重要的分支——密钥管理。
- 内容:密钥产生、密钥分配(重点讨论)、密钥注入、密钥验证、密钥使用
密钥分配:密钥管理中最大的问题
- 密钥必须通过最安全的通路进行分配。
- 分配方式:
- 网外分配方式:派非常可靠的信使(比如U盘)携带密钥分配给互相通信的各用户(不再适用)
- 网内分配方式:密钥自动分配(推荐使用)
- 注:随着用户的增多和网络流量的增大,密钥更换频繁(更换密钥必须定期才能做到可靠),派信使的办法已不再适用,而应采用网内分配方式。
7.5.1 对称密钥的分配
密钥分配中心(KDC, Key Distribution Center):目前常用的密钥分配方式
- 作用:KDC是大家都信任的机构,其任务是给需要进行秘密通信的用户临时分配一个会话密钥(仅使用一次)。
对称密钥分配:
- Step0(用户注册):用户A和用户B都是KDC的注册用户,各自分配了主密钥(master key)和
- 主密钥:仅用户A和KDC知道,用于两者之间的对称加密通信
- 主密钥:仅用户B和KDC知道,用于两者之间的对称加密通信
- Step1(申请密钥):A向KDC发送明文(A, B),申请与B通信的密钥
- Step2(KDC向A回送信息):
- 会话密钥:用户A、用户B和KDC都知道,用于A、B之间的对称加密通信(由KDC产生的一次性会话密钥)
- 票据信息内容:通信双方信息 以及 会话密钥(需要A转给B的信息)
- 票据信息加密:票据信息是使用进行加密的,A不知道其中的信息
- 报文加密:报文整体(包含会话密钥和票据信息密文)使用A的主密钥进行加密
- Step3(票据发送):
- A收到报文后,使用主密钥进行解密,得到会话密钥和 票据信息密文,然后将其中的票据信息密文发送给B
- B收到票据信息密文后,使用主密钥进行解密,得到通信双方信息 以及 会话密钥,从而知道A想要和自己通信,并且带来了通信的密钥
- 几点说明:
- 加入时间戳:为防止重放攻击,KDC还可在报文中加入时间戳
- 会话密钥有效期:会话密钥是一次性的,因此保密性较高
- 用户主密钥有效期:KDC分配给用户的密钥和,应定期更换,以减少攻击者破译密钥的机会
密钥分配协议:Kerberos
- 作用:Kerberos既是鉴别协议,同时也是KDC
- 注1:Kerberos使用比DES更加安全的高级加密标准AES进行加密。
- 注2:目前Kerberos V5协议最为常用,使用普及,是互联网建议标准
- 服务器:
- 鉴别服务器AS:掌握了各个用户的身份和主密钥
- 票据受理服务器TGS
- 工作流程:鉴别身份 → 会话密钥分配
- Step1(A→AS):A使用明文向鉴别服务器AS表明自己的身份
- Step2(AS→A):AS向A发送用A的对称密钥加密的报文
- 报文加密:报文使用AS中存储的A的主密钥进行加密
- 报文内容:A与TGS通信的会话密钥、A与TGS通信的票据
- 票据内容:票据使用TGS密钥加密,包含了A和密钥(告之TGS服务器,与A通信可使用会话密钥)
- Step3(A→TGS):
- 转发鉴别服务器AS发来的票据
- 服务器B的名字:表明A请求B的服务。请注意,现在A向 TGS证明自己的身份并非通过键入口令(因为入侵者能够从网上截获明文口令),而是通过转发AS发出的票据(只有A才能提取出)。票据是加密的,入侵者伪造不了。
- 加密的时间戳T:防止入侵者的重放攻击
- Step4(TGS→A):两个票据,每一个都包含A和B通信的会话密钥
- 票据1:给A的票据(内容是B、AB通信密钥),用加密
- 票据2:给B的票据(内容是A、AB通信密钥),用加密
- 注:现在入侵者不能提取,因为不知道和。入侵者也不能重放步骤3,因为入侵者不能把时间戳更换为一个新的(因为不知道)。
- Step5(A→B转发票据):A向B转发TGS发来的票据2,同时发送用加密的时间戳T。
- Step6(B→A回复确认):B把时间戳T加1来证实收到了票据,然后向A发送用密钥加密的报文。
- Step7(开始通信):A和B使用TGS给出的会话密钥进行通信。
- 协议要求:所有使用Kerberos的主机必须在时钟上进行“松散的”同步
- “松散的”同步:要求所有主机的时钟误差不能太大(例如不能超过5分钟的数量级)
- 目的:防止重放攻击
7.5.2 公钥的分配
问题引入:在公钥密码体制中,如果每个用户都具有其他用户的公钥,就可实现安全通信。然而,使用公钥实现安全通信的前提是客户端收到的服务器的公钥默认是服务器的,不存在被人替换的情况。但是,实际上这种情况就会存在,中间人替换了密钥,客户端收到服务端发送的密钥都是假的,客户端实际上在和中间人通信,中间人再和服务端通信。由于无法防止假冒和欺骗,因此不能随意公布用户的公钥,否则使用者无法确定公钥的真正拥有者。
- 问题1:客户端如何确定它收到的密钥是服务端发送过来的?
- 问题2:客户端如何确定它访问的服务器是真正的服务器,而不是一个冒充的服务器?
解决方案:引入一个值得信赖的机构 认证中心CA(Certification Authority)
数字证书和数字证书颁发机构:
- 数字证书颁发机构:证书授权中心(Certificate Authority, CA)
- 作用:承担公钥体系中公钥合法性校验的责任,为每个使用公钥的用户颁发一个数字证书
- 建立:认证中心一般由政府出资建立(有的大公司也提供认证中心服务)
- 机构:Digicert、Globalsign、……
- CA的公钥:任何用户都可从可信的地方(如代表政府的报纸)获得认证中心CA的公钥,此公钥用来验证某个公钥是否为某个实体所拥有(通过向CA查询)。
- 数字证书:
- 证书的作用:证明证书中的用户合法拥有证书中的公钥,将公钥与其对应的实体(人或机器)进行绑定(binding)。证书是一种身份证明,用于解决信任问题。
- 证书的格式:CA证书具有统一的格式,ITU-T制定了X.509协议标准,用来描述证书的结构。IETF接受了X.509,仅做了少量的改动,给出了互联网X.509公钥基础结构PKI (Public Key Infrastructure)。
- 证书的特点:证书被CA进行了数字签名,是不可伪造的,可以信任。
- 证书的编码:
- PEM证书格式:Base64格式、这种证书可以通过文本编辑
- DER证书格式:Binary二进制格式
- 证书的后缀:cer、crt、pem
- 除证书外还有个后缀是key的文件,这个一般是公钥或者为私钥。
- 证书的吊销:证书不是永久有效,它可以过期,也可以被吊销。有很多原因导致证书被吊销(如下所示),CA需要建立并维护一个证书吊销列表。
- 用户的私钥已被泄漏
- 该用户不再被该CA认证
- CA签署用户证书的私钥已被泄漏
- 数字证书颁发过程:
- Step1(生成密钥对):数字证书的需求方生成自己的密钥对,包括一个公钥和一个私钥。
- Step2(提交信息给认证中心):将公钥以及部分个人或实体身份信息传递给认证中心CA。
- Step3(身份验证):CA对申请者的身份进行验证,确保其合法性和真实性。这可能包括检查申请者提供的身份信息、授权文件等。
- Step4(证书签发):在确认申请者身份后,CA利用申请信息生成摘要,并使用CA的私钥为申请者生成数字证书。数字证书包含申请者的身份信息、公钥、证书的用途、有效期以及CA的签名等信息。
- Step5(颁发证书):CA将数字证书颁发给申请者,颁发方式可能是通过电子邮件、网站下载等。
- Step6(证书安装和使用):申请者收到数字证书后,需要将其安装到信任的浏览器或应用程序中。此后,其他实体可以通过验证数字证书的有效性和持有者的身份来确认申请者的身份。
- Step7(证书维护和撤销):CA需要定期更新和维护数字证书,包括更新证书的有效期、用途,撤销失效或被吊销的证书。当数字证书不再需要或出现异常情况时,CA可以将其撤销。
- 数字证书验证过程:当客户端访问服务器时,服务器就会把证书发送给客户端,那么客户端是如何验证数字证书的有效性的
- Step1:浏览器和操作系统会预置一些CA机构的公钥(具体见“数字证书查看”)
- Step2:浏览器收到证书后,使用CA的公钥对签名进行解密,生成摘要
- Step3:浏览器使用摘要算法生成证书的摘要
- Step4:浏览器将解密的摘要(Step2)和生成的摘要(Step3)进行对比
- 一致:证书是可靠的,且证书里面的服务器公钥也是可靠的
- 数字证书查看:计算机在安装完操作系统后,已经将互联网上常见的CA机构添加进信任列表中
- 查看方式1:“Win+R” → 输入“mmc” → “文件” → “添加或删除管理单元” → “证书” → “添加” → “我的用户账户”或“计算机账户”
- 我的用户账户:仅当前用户信任(别的用户未必信任)
- 计算机账户的证书:当前计算机上的所有用户都信任
- 查看方式2:“Win+R” → 输入“certmgr.msc”(默认查看当前用户信任的证书颁发机构)
- 查看方式3:浏览器 → “设置” → “隐私和安全” → “安全” → “管理证书”(以Google浏览器为例)
- 根CA和子CA:
7.6 互联网使用的安全协议
7.6.1 网络层安全协议:IPSec(IP Security)
参考链接:https://hanshuliang.blog.csdn.net/article/details/108747091
网络层协议IP:在设计和实现上存在安全漏洞,使各种攻击有机可乘,几乎不具备任何安全性(安全性很差)
- 数据机密性:没有为数据提供任何机密性保护(防截获)
- 数据完整性:没有为数据提供强大的完整性保护机制(防篡改)
- 数据来源认证:没有为通信提供良好的数据源鉴别机制(防伪造)
- 例如:攻击者很容易构造一个包含虚假地址的IP数据报。
网络层安全协议IPsec:提供标准、健壮且包含广泛的机制来保证IP层安全
- 注1(协议族):IPsec并不是一个单个的协议,而是能够在IP层提供互联网通信安全的协议族。
- 注2(框架):IPsec只提供了框架,允许通信双方选择/自定义合适的算法和参数(例如,密钥长度)。
- 注3(互操作性):为保证互操作性,IPsec提供了所有IPsec都必须实现的一套加密算法。
- 注4:Ipsec支持IPv4和IPv6。
- 3个组成部分:
- IPSec数据报格式的两个协议:
- 鉴别首部AH(Authentication Header)协议:提供源点鉴别和数据完整性,但不能保密
- 封装安全有效载荷ESP(Encapsulation Security Payload)协议:提供源点鉴别、数据完整性和保密
- ESP协议比AH协议复杂得多,AH协议的功能都已包含在ESP 协议中。
- 有关加密算法的三个协议:不讨论
- 互联网密钥交换IKE (Internet Key Exchange)协议:
- 2种工作方式:无论使用哪种方式,最后得出的IP安全数据报的IP首部都是不加密的。
- 运输方式(transport mode):
- 报文:在整个运输层报文段的前后分别添加若干控制信息(相当于“加密”),再加上IP首部(路由器需要根据IP地址转发数据包,此部分不能加密),构成IP安全数据报。
- 协议:需要使用IPsec的主机都运行IPsec协议。
- 使用:运输方式常用来实现主机到主机之间的安全传送。
- 隧道方式(tunnel mode):
- 报文:在原始的IP数据报的前后分别添加若干控制信息(相当于“加密”),再加上新的IP首部,构成IP安全数据报。
- 协议:需要在IPsec数据报所经过的所有路由器上都运行IPsec协议。
- 使用:隧道方式常用来实现虚拟专用网VPN。
安全关联(Security Association, SA):在发送IP安全数据报之前,在源实体和目的实体之间必须创建一条网络层的逻辑连接
- 作用:IPsec通过安全关联SA将传统互联网无连接的网络层转换为具有逻辑连接的网络层。
- 特点:
- 单向安全通信:只有一个方向建立安全关联SA只能提供单向安全通信(安全关联是从源点到终点的单向连接,它能够提供安全服务)
- 双向安全通信:两个方向都建立安全关联SA能够提供双向安全通信(若n个员工进行双向安全通信,一共需要创建(2+2n)条安全关联SA)
- 状态信息:用于描述如何进行加密、解密(建立安全关联SA的双方需要维护状态信息)
- IP地址:安全关联SA的源点和终点的IP地址
- 安全参数索引SPI (Security Parameter Index):32位的连接标识符
- 加密算法:数据加密标准DES(对称加密算法)、高级加密标准AES(对称加密算法)
- 加密密钥
- 完整性检查的类型:使用报文摘要MD5或SHA-1的报文鉴别码MAC
- 鉴别使用的密钥
IPSec数据报格式:数据报格式协议(ESP) + 工作方式(隧道方式)
- 原始的IP首部:用主机H1和H2的IP地址分别作为源地址和目的地址
- 新的IP首部:用路由器R1和R2的IP地址分别作为源地址和目的地址
- 安全数据报:
- 使用ESP或AH协议的IP数据报
- 数据报的数据部分是经过加密的,并能够被鉴别的
- 在安全关联SA上传送的数据报
- 生成流程:
- Step1(添加ESP尾部):生成ESP尾部,添加在原始IP数据报后面
- 填充字段:保证数据块长度是若干字节整数倍
- 填充长度:填充字段长度
- 下一首部:下一个要处理的首部,指的是有效载荷中的原始 IP首部
- Step2(加密):按照IPsec状态信息中指定的加密算法和加密密钥,对有效载荷(原始IP数据报)和ESP尾部,进行加密
- Step3(添加ESP首部):在加密后的密文前面,添加ESP首部(64位)
- 安全参数索引SPI(32位):连接标识符
- 序号(32位):用于鉴别,防止重放攻击;分组重传时,序号不重复
- Step4(鉴别):按照IPsec状态信息中指定的完整性检查算法和鉴别密钥,对ESP首部+有效载荷(加密)+ESP尾部(加密)数据,生成报文鉴别码MAC
- Step5(添加MAC):将生成的MAC报文鉴别码添加到ESP尾部后面
- Step6(添加新的IP首部):将IP首部放在ESP首部之前
- 新的IP首部:协议字段值是50,表示后面的数据要交给ESP协议处理
- 工作机制:
- 无法获知主机地址:截获者无法解密其中的数据,只能看懂这是从 路由器R1发往路由器R2的数据报,无法看懂其中的含义;只有解码密文,才能看到有效载荷中的原始IP数据报信息,原始IP数据报头部有源主机和目的主机IP地址
- 无法篡改:截获者删除其中的字节,但是接收端会进行完整性验证,会要求发送端重发信息
- 无法重放攻击:截获者进行重放攻击,安全数据报中的ESP首部序号不能重复,每次都不能重复,使得重放攻击无法生效
IPsec构件:
- 安全关联数据库(SAD, Security Association Database):
- 作用(存储SA):发送IPsec数据报,可能用到很多安全关联SA,SA存放在SAD中
- 发送IP安全数据报:主机发送IP安全数据报时,到SAD中查找 SA,获取相关的信息,对该IP安全数据报进行加密保护
- 接收IP安全数据报:主机接收IP安全数据报时,也要到SAD中查找SA,获取相关的信息,解密IP安全数据报
- 安全策略数据库(SPD, Security Policy Database):
- 需求:主机发送的数据报,不是所有的数据都需要加密,有些只需要使用明文发送即可
- 作用:SPD指明哪些数据报需要加密,哪些数据报不加密
- 互联网密钥交换(IKE, Internet Key Exchange):IKE是个非常复杂的协议,在2014年10月已成为互联网的正式标准[RFC 7296]。
- 作用:为IP安全数据报,创建安全关联SA
- 协议基础:该协议基于Oakley协议、SKEME协议、ISAKMP 协议
- Oakley协议:密钥生成协议[RFC 2412]
- SKEME协议(Security Key Exchange Mechanism, 安全密钥交换协议):利用公钥加密来实现密钥交换协议中的实体鉴别
- ISAKMP协议(Internet Secure Association and Key Management Mechanism, 互联网安全关联和密钥管理协议):实现IKE中定义的密钥交换,使IKE的交换能够以标准化、格式化的报文创建安全关联SA
7.6.2 运输层安全协议:SSL、TLS
运输层安全协议:现在广泛使用的有以下两个协议
- 安全套接字层(SSL, Secure Socket Layer):
- 发布:由Netscape于1994年开发,广泛应用于基于万维网的各种网络应用(但不限于万维网应用)。1996年发布SSL 3.0,成为Web安全的事实标准。
- 位置:SSL作用在端系统应用层的HTTP和运输层之间,在TCP之上建立起一个安全通道,为通过TCP传输的应用层数据提供安全保障。
- 运输层安全(TLS, Transport Layer Security):
- 发布:1999年,IETF在SSL 3.0基础上推出了传输层安全标准TLS,为所有基于TCP的网络应用提供安全数据传输服务。
- SSL和TLS:
- 基础:SSL/TLS建立在可靠的TCP之上,与应用层协议独立无关(应用层协议无需做任何更改)
- 支持:SSL/TLS已被所有常用的浏览器和万维网服务器所支持
- 基本目标:实现两个应用实体(进程)之间的安全可靠通信
- 应用:应用层使用SSL最多的就是HTTP,但SSL并非仅用于HTTP,而是可用于任何应用层的协议。HTTP使用SSL协议就变成了HTTPS,表明现在使用的是提供安全服务的HTTP协议
- 端口号:HTTP端口号是80,HTTPS端口号是443
- 在发送方,SSL接收应用层的数据,对数据进行加密,然后把加了密的数据送往TCP套接字。
- 在接收方,SSL从TCP套接字读取数据,解密后把数据交给应用层。
SSL提供的安全服务:
- SSL服务器鉴别:允许客户证实服务器的身份
- 支持SSL的客户端通过验证来自服务器的证书,进而鉴别服务器的真实身份并获得服务器的公钥。
- SSL客户鉴别:允许服务器证实客户的身份(SSL的可选安全服务)
- 加密的SSL会话:对客户和服务器间发送的所有报文进行加密,并检测报文是否被篡改。
SSL安全会话建立过程:
- 协商加密算法:
- Step1:浏览器A向服务器B发送浏览器的SSL版本号和一些可选的加密算法
- Step2:B从中选定自己所支持的算法(如非对称加密算法RSA),并告知A
- 服务器鉴别:具体见“数字证书颁发过程、数字证书验证过程”
- Step3:服务器B向浏览器A发送包含其RSA公钥的数字证书
- Step4:A使用该证书的认证机构CA公开发布的公钥对该证书进行验证
- 会话密钥计算:
- Step5:由浏览器A随机产生一个秘密数,用服务器B的RSA公钥进行加密后发送给B。服务器B接收到后用RSA私钥进行解密得到秘密数。(此时,双方都知晓秘密数)
- Step6:双方根据协商的算法产生共享的对称会话密钥
- 安全数据传输:
- Step7:双方用会话密钥加密和解密它们之间传送的数据并验证其完整性
- 注:秘密数传输使用非对称密钥进行加密解密,而会话过程中的数据传输使用对称密钥进行加密解密
- 问题1:为什么整个SSL的连接建立过程不全部使用非对称加密?(字节后端开发二面)
- 回答1:非对称加密算法十分复杂,加密解密时间长,效率低,因此我们只在TLS连接建立时才使用,后面的数据传输环节统一使用对称加密,这样既能保证效率,又能极大的增强安全性。
参考链接1:https://blog.csdn.net/yxg520s/article/details/122004032
7.6.3 应用层安全协议:电子邮件安全
PGP (Pretty Good Privacy, 完美隐私):一个完整的电子邮件安全软件包,包括加密、鉴别、电子签名和压缩等技术。
- 注1:PGP并没有使用什么新的概念,它只是将现有的一些算法如MD5,RSA,以及IDEA等综合在一起而已。
- 注2:PGP虽然已被广泛使用,但并不是互联网的正式标准。
- 发送方A的工作:数字签名 + 加密
- Step1:对明文邮件X进行MD5运算,得出MD5报文摘要H。用A的私钥对H进行加密(即数字签名),得出报文鉴别码MAC,把它拼接在明文X后面,得到扩展的邮件(X, MAC)。
- Step2:使用A自己生成的一次性密钥对扩展的邮件(X, MAC)进行加密。
- Step3:用B的公钥对A生成的一次性密钥进行加密。
- Step4:把加了密的一次性密钥和加了密的扩展的邮件发送给B。
- 接收方B的工作:解密 + 核实数字签名
- Step1:把被加密的一次性密钥和被加密的扩展报文(X, MAC)分离开。
- Step2:用B自己的私钥解出A的一次性密钥。
- Step3:用解出的一次性密钥对报文进行解密,然后分离出明文X和MAC。
- Step4:用A的公钥对MAC进行解密(即签名核实),得出报文摘要H。这个报文摘要就是A原先用明文邮件X通过MD5运算生成的那个报文摘要。
- Step5:对分离出的明文邮件X进行MD5报文摘要运算,得出另一个报文摘要H(X)。把H(X)和前面得出的H进行比较,是否一样。如一样,则对邮件的发送方的鉴别就通过了,报文的完整性也得到肯定。
7.7 系统安全
7.7.1 防火墙
简介:
- 定义:防火墙是由软件、硬件构成的系统,是一种特殊编程的路由器
- 作用:防火墙用于在两个网络之间实施访问控制策略,解决内联网和外联网的安全问题
- 配置:访问控制策略由使用防火墙的单位(网络管理员)自行配置,以适合本单位的需要
- 网络:
- 可信的网络(trusted network):防火墙内的网络
- 不可信网络(untrusted network):防火墙外的网络
功能:
- 阻止:阻止某些类型的流量/通信量通过(双向)防火墙→ 主要功能
- 允许:允许某些类型的流量/通信量通过(双向)防火墙
- 注1:防火墙必须能够识别各种类型的通信流量,才能实现上述阻止或允许流量通过。
- 注2:通过 = 从外部网络到内部网络 或 从内部网络到外部网络
分类:
- 分组过滤路由器(网络层防火墙):一种具有分组过滤功能的路由器
- 功能:根据过滤规则对进出内部网络的分组执行转发或者丢弃(即过滤)
- 过滤规则:基于分组的网络层或运输层首部的信息
- 源IP地址、目的IP地址(网络层首部)
- 源端口号、目的端口号(传输层首部)
- 协议类型(TCP 或 UDP)(网络层首部)
- ……
- 分组过滤状态:
- 无状态:独立地处理每一个分组
- 有状态:跟踪每个连接或会话的通信状态,并根据这些状态信息来决定是否转发分组(比如当内网主动连接外网并访问外网,外网的流量能够进入内网;而外网不能主动连接内网 → 已经建立连接的流量允许自由进出,而未建立连接的流量不能随便进来)
- 特点:简单高效,对用户透明,无法过滤高层数据
- 注:路由器为三层网络设备,无法看到应用层的内容,因此无法对应用层(高层)的数据进行过滤
- 应用网关/代理服务器(应用层防火墙):在应用层通信中扮演报文中继的角色
- 数量:每个网络应用都需要配置一个应用网关
- 功能:所有的该应用的报文数据都必须通过应用网关传输,可以实现高层(应用层)数据的过滤和高层(应用层)用户鉴别
- 缺点:
- 配置繁琐:每个应用都需要配置应用网关
- 消耗资源:应用层转发处理报文,处理负担较重,资源消耗比较大
- 透明性差:需要在每个应用程序客户端中配置应用网关地址
7.7.2 入侵检测系统( IDS, Intrusion Detection System )
引入:防火墙用于在入侵行为发生之前,阻止可疑的通信。然而,防火墙不能阻止所有的入侵通信,因此需要引入“入侵检测系统”。
简介:
- 作用:在入侵行为已经开始,但还没有造成危害或在造成更大危害前,及时检测到入侵,以便尽快阻止入侵,把危害降低到最小
- 工作原理:对进入网络的分组进行深度分组检查,当观察到可疑分组时,向网络管理员发出警告或执行自动阻断操作(由于IDS的“误报”率通常较高,多数情况不执行自动阻断)
- 检测的攻击种类:
- 网络映射
- 端口扫描
- Dos攻击
- 蠕虫
- 病毒
- 系统漏洞攻击
分类:
- 基于特征的入侵检测系统:
- 工作原理:维护一个已知攻击标志性特征的数据库
- 维护者:这些特征和规则通常由网络安全专家生成,由网络管理员定制并将其加入到数据库中
- 弊端:只能检测已知攻击,不能检测未知攻击
- 基于异常的入侵检测系统:
- 工作原理:通过观察正常运行的网络流量,学习正常流量的统计特性和规律。当检测到网络流量的某种统计规律不符合正常情况时,则认为可能发生了入侵行为。
- 注:至今为止,大多数部署的入侵检测系统都是基于特征的
7.8 未来的发展方向
网络安全是一个很大的领域。对于有志于这一领域的读者,可在下面几个方向作进一步的研究:
椭圆曲线密码(Elliptic Curve Cryptography, ECC)与AES:这一系统现在已广泛用于电子护照中,也是下一代金融系统使用的加密系统。
移动安全(Mobile Security):移动通信带来的广泛应用(如移动支付,Mobile Payment)向网络安全提出了更高的要求。
量子密码(Quantum Cryptography):量子计算机的到来将使得目前许多使用中的密码技术无效,后量子密码学(Post-Quantum Cryptography)的研究方兴未艾。
写在最后:码字不易,喜欢的小伙伴烦请一键三连,你们的支持是我持续创作的动力,感谢!!!