分布式反射攻击逐渐成为拒绝攻击的重要形式
涉及重要行业和政府部门的高危漏洞事件增多。
基础应用和通用软硬件漏洞风险凸显(“心脏出血”,“破壳”等)
漏洞风险和个人信息泄露高发;漏洞风险向传统领域和智能终端领域泛化演进;
移动恶意程序逐渐从应用程序向网站蔓延;短信拦截应用;钓鱼网站向云平台迁移。
针对政府部门和重要行业单位网站的攻击频度、烈度和复杂度加剧。
网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。
机密性:只有发送方与预订的接收方才能够理解报文内容(发送方加密报文、接收方解密报文)。
身份认证:发送方与接收方希望确认彼此的真实身份。
信息完整性:发送方与接收方希望确保信息未被篡改(传输途中或者后期处理),发生篡改后一定会被检测到。
可访问与可用性:网络服务必须对被授权用户可访问与可用。
相对性:只有相对的安全,没有绝对的安全。
时效性:新的漏洞与攻击方法不断被发现。
相关性:新配置和新系统组件的添加可能会引入新的安全问题。
不确定性:攻击时间、攻击者、攻击目标和攻击发起地点都具有不确定性。
复杂性:网络安全是一项系统工程,需要技术和非技术的手段(包括网络犯罪宣传打击力度,意识普及等等)。
重要性:网络安全关乎国家、政府、企业、个人的安全。
入侵者如何攻击计算机网络;如何防护网络对抗攻击、如何设计网络体系结构免疫攻击。
internet最初设计时很少考虑安全问题,是一堆大学透明地使用网络交换数据。Internet协议设计者扮演了一个追赶者的角色,随着互联网的发现,各种场景下对数据规范和安全的需求,促使协议设计者设计出不同的协议来保障数据交换的正常和安全性。
总之,网络安全需要考虑网络的各个层次。
Alice和Bob是网络通信双方,两者是恋人,经常要进行秘密通信,Trudy是破坏者(网络入侵者)会修改、添加、丢弃双方交流的信件(信息、数据)。
一般攻击者会伪装IP、利用路由器的混杂接收方式,获得信息等
还有拒绝服务攻击DDOS,两种方式,一种是通过多台主机植入病毒向服务器发送TCP连接请求骗取服务器服务资源,导致服务端CPU被占满。
另一种就是病毒主机伪装为要攻击的服务器IP,向其他主机或服务器发送请求,其他主机和服务器收到后,共同发送信息,导致网络拥塞,一样会造成DDOS攻击的成功。
如何破解DDOS攻击,因为大多数DDOS攻击都是利用TCP建立连接三次握手中,第二次握手服务器就会分配服务器资源,服务器可以做出改变,将分配资源放在第三次握手,且要确定第三次的cookie是第二次握手中给主机的cookie。
密码学就是通信双方在通信过程中,对发送方发送消息进行加密,防止窃取者进行识别的技术,对发送信息进行的各种加密活动就是密码学的一部分。这里三者发送者,接收者,破坏者(网络攻击者)可以用经典模型Bob、Alice、Trudy来分别代替。
对称加密:就是加密双方使用加密算法,这种加密算法来加密文件和解密文件,加密算法本身也会随着信息传递给接收方,接收方得知算法后才能进行解密。
非对称加密:如下图,分为公有密钥和私有密钥,公有密钥密钥是公布出来的,接收方还有一个私有密钥,发送方通过公有密钥将数据加密,但是这个加密是不可逆的,只有接收方使用自己的私有密钥才能将数据正确解密。
唯密文攻击:入侵者只能获到密文,基于对密文的分析进行破解,因为只有密文,所以一般有两种方式,暴力破解(将每种可能性都进行尝试)、根据统计分析出的结果简化破解过程,提高破解概率。
已知明文攻击:入侵者已知部分明文以及与之匹配的密文。例如攻击者已经知道发送者所使用的加密算法(假设是单码替代)的部分替代对应关系,例如a、l、c等的对应关系已经知道,则可以更快推出加密所用算法。
有规律地用26位字母中的一个字母替代另一个字母,统一将一个字母替换为其后第K个字母。
例如,K=3,则a就对应的是d,b就对应的是e。
那么该加密方法的密钥就是:一组字母集合向另一个字母集合的映射:
分析:上面这种加密方式一个一个尝试,仅需要25次即可破解,安全性差。
相比凯撒密码,该方式将每个字母的对应关系变为随机对应,安全性就更高了。
使用多组单码替代规则,同样的字母在不同位置可能使用不同的替代规则,这样密文的加密性就进一步提高了。
如下图,有两组对应替代规则,我们在密钥中指定不同位置使用何种对应规则。
密钥:
就是将数据按照固定位置相互替换。
密钥:
上面这组密钥就规定了密文长度为4,后面是对应关系,第1位移到第3位。
解密的过程是将位置再变换回来,逆过程。
将明文分布排列为矩阵,并按照固定列之间对应关系进行变换后,乱序发送,接收方再按照行数横向排布出矩阵,结果的列就是明文的行。
例子:例如我们要发送“bob i love you”,则首先排列成4*3的矩阵,不足处补充随意字母,然后按照指定列依次取出字母生成密文。接收方根据密文和密钥得知矩阵列数,根据数据长度算出每行需要的字母数。
上图规定生成密文时先取出第2列,然后第3列,第1列,第4列。拿到密钥后解密方,同样知道取出的前三个字母是第二行数据,最后形成新的矩阵,从左往右竖向读取。
跟上面方式不同,该方式用单词表示明文的矩阵列数,用单词中字母顺序表示加密时取出列的顺序。
例如下面:
nice有四个字母,所以这个矩阵有4列,同时nice中c是26个字母最靠前的,所以第一个取出形成密文的是矩阵的第三列,即bvu。
现代加密技术同样包括传统加密方式中的替代和置换。但是不是针对一个一个字母,而是针对一个一个二进制位进行加密的位操作。
现代加密技术主要是对称密钥加密、非对称密钥加密(公开密钥加密)。
对称密钥加密又分为:流密码加密和分组密码,也称块密码。
基本思路:利用密钥K产生一个密钥流:Z=Z0 Z1 Z2....;然后使用如下规则对明文串X=X0X1X2....进行加密:Y=Y0Y1Y2...=Ez0(x0)Ez1(x1)...
解密时,使用相同的密钥流与密文做运算。
下图展示流密码基本的加密与解密过程:
分组密码就是将明文划分成长为m的明文组,一个明文可以划分多个明文组,多个明文组构成一个明文。
各个明文组在长度为i的密钥组的控制下变换成长度为n的密文组。
通常情况下n=m,如果出现n>m,则为扩展分组密码;出现n<m,则为压缩分组密码。
典型的分组密码结构是:Feistel分组密码结构;
在设计这个密码体制的过程中,Shannon提出了能够破坏对密码系统进行各种统计分析攻击的两个基本操作:扩散(diffusion)和混淆(confusion)。
基于1949年Shannon提出的交替使用替代和置换方式构造密码体制制造。即是说基于扩散和混乱的思考,Feistel提出通过替代和置换交替操作方式构造密码。
如下图,是对该加密方式的介绍:
这个过程就是对每组明文进行多次加密,每次加密后都要换下L和R的位置,同时对L使用轮函数进行处理,然后使用k子密钥进行加密,每次加密子密钥都不同。
解密过程:
Feistel结构的分组密码安全性取决于:
分组长度:分组长度越大,安全性越高,加密速度哦就越慢,效率就越低。目前常用的分组加密算法分组长度为64位。
子密钥大小:子密钥长度增加,安全性提高,加密速度降低。设计分组密码时需要在安全性和加密效率之间进行平衡。
循环次数:循环越多,安全性越高,加密效率越低。
子密钥产生算法:在初始密钥给定情况下,产生子密钥的算法越复杂,安全性越高。
轮函数:一般情况下,轮函数越复杂,加密算法的安全性越高。
该标准是由IBM公司研制,1972年,美国国家标准局NBS开始实施计算机数据保护标准的开发计划。1973年5月13日,NBS征集在传输和存储数据中保护计算机数据的密码算法。1975年3月17日,首次公布DES算法描述。1977年正式成为加密标准。此后每年都会进行评估,1998年12月以后不再将DES作为数据加密标准。
首先将64位的明文进行初始置换后,分为两部分L0和R0,在加密过程中,先把R0移到L1处成为L1,然后运用56位的密钥通过压缩和置换等方法变为48位,同时R0经过F函数扩展(32位到48位),之后两者进行异或运算,而后再进行S盒替代运算(通过对应表将48位结果对应成32位结果),再进行P盒置换运算形成最终32位结果,再进行异或运算。所有加密轮数完成后,再进行逆置换得到R1如下图:
上面对R的数据变换和处理最终形成新的Ri的过程可以总体看作一个黑盒。
将输入的64位数据的排列顺序打乱,每位数据按照下面规则重新组合,所谓规则就是一张表对应哪一位和哪一位置换。
E就是上面过程中对R的扩展操作;+是异或,异或之后再进行替换分成8组,每组6bit,最终替换出来的数据是Si,这种替换将每组第一个bit和最后一个bit作为行,中间四位作为列,在一张表中找到一个四位bit,所以最终就被置换为了32bit数据,然后进行置换。
扩展变换将64位输入序列右半部分从32位扩展到48位,如下表。
可以看出,能将32位扩展成48位数据,就是很多位对应数据被复制多分,到其他位置,这样最终就称为48位数据。
就是将32比特按照表中对应规则再进行换位。
逆初始置换就是照着刚开始置换顺序,再一次置换一次。
初始置换和对应逆初始置换操作并不会增强DES算法的安全性。
主要目的是为了更容易地将明文盒密文数据以字节大小放入DES芯片中。
存在问题:
1988年7月,EFE(电子前哨基金会)宣布攻破了DES算法,他们使用的是不到25万美元的特殊的“DES破译机”,这种攻击只需要不到3天的时间。
DES的迭代次数过少,抗分析能力差。S盒中有不安全因素。一些关键部分不应当保密,存在弱密钥盒半弱密钥;
针对DES的攻击方法:
差分分析方法、线性分析方法、旁路攻击法
改进:
为了增加安全性,在实际使用过程中,会将前一分组和当次分组进行异或运算,这样就能减少当数据中出现重复分组被破译的可能性。当然这样在解密的时候也要增加异或操作。
因为担心密钥过短,所以出现两个密钥三次加密的实际操作,第一次用K1进行加密,第二次用K2进行解密,第三次再用K3进行加密。
在DES被弃用之后,AES作为新的标准登上历史舞台。其是NIST(美国国家标准技术研究所)征集,比利时学者Joan Daement 和Vincent Rijmen共同提出的Rijndael加密算法被选为AES算法。
2001年正式颁布。
alice首先向bob发送消息,bob确认alice身份,就发送一个随机数字,alice利用两人都有的密钥加密随机数,bob收到加密后随机数进行解密,如果跟发送一致则认为是Alice。
安全风险:在共享的密钥确定阶段,还是有共享密钥被盗取的可能。
还是Bob在收到信息后发送随机数给Alice,Alice收到之后利用自己的私钥加密,然后发送给Bob,Bob收到后向Alice索要公钥,Alice收到后,给Bob公钥,Bob收到后解析公钥,对比后发现随机数一致,则确定Alice为Alice。
存在漏洞:中间人攻击,就是攻击者直接扮演中间人,在Bob看来是Alice,在Alice看来是Bob,具体攻击过程如下:
首先,Alice发送数据到Trudy,Trudy收到后转发到Bob,Bob发送随机数给Trudy,Trudy转发给Alcie,同时用自己的私钥加密R,发送给Bob,Bob收到后向Alice索要公钥(实际是向Trudy索要公钥),同时Trudy收到Alice发送过来的用自己私钥加密的数据,Trudy向Bob发送自己的公钥,同时向Alice索要其公钥,然后用Alice公钥解密,同时返回确认成功信息。Bob收到后用Trudy公钥进行解密,对比一致后,就返回正确信息,三方就可以正常通信,Trudy始终是中间人,不断窃取信息。
要破解这一攻击,要从公钥分发上解决,后面会提到。
在报文保证完整性过程中要用到散列函数,来将任何位数的报文生成为指定长度的散列值,为验证报文完整性提供依据。
散列函数的要求:
MD5:2015年,被广泛应用的散列函数。其通过4个步骤,对任意长度的报文输入,计算输出128位的散列值。
但是这种方案在1996年被Dobbertin利用两个不同的512-bit块,在MD5计算下产生了相同的散列值。
SHA-1(Secure Hash Algorithm):另一个正在使用的散列算法。要求输入消息长度不小于2的64次方。输出的散列值为160位。速度慢于MD5,安全性优于MD5。
C、报文完整性过程
发送方将要发送的报文通过散列函数生成固定散列值,然后将散列值和源报文一块发送到接收方,接收方用接收到的报文经过散列函数生成散列函数,将自己生成的散列函数和收到的散列函数进行对比,如果一致则说明报文在传送过程中没有被改变,还是原报文。
报文摘要:将报文原文通过散列函数生成的固定长度的散列值又称为报文摘要。
不足:这种方式只能确定报文没有被部分篡改,无法确定发送人的身份,因为散列算法是公开的,任何一个攻击者都能够将自己的报文计算散列值,伪造发件人IP给接收方发送报文。
将散列函数的输入变为两个(认证密钥、报文原文),这样生成的散列函数,因为攻击者无法拿到双方密钥,所以无法自造报文发送,接收方验证还是将收到的原报文和密钥用同样的散列算法,对比收到的散列值,如果相同则确认为发送方发送的完整报文。
不足:存在某一方篡改报文,不承认收到或发送的情况。例如,接收方接收到一个报文,发现对自己不利,因为双方使用密钥一致,故接收方将原报文修改后再利用密钥加密,则该报文就和发送方发过来的形式一致,无法确认发送方和接收方两个报文的真伪。
数字签名就是利用公钥和私钥的原理:
如上图:发送方(Bob)利用仅自己知的Bob的私钥进行加密,Alice收到后用Bob的公钥进行解密。
因为私钥只有自己知道,且不存在在网络传播的可能性,所以私钥是很难泄漏的。同时也可以让发送方难以抵赖。
数字签名具有以下特点:可验证性、不可为造性、不可抵赖性。
我们把上面验证步骤中,双方共享密钥换为接收方公钥,同时因为报文有大有小,大的报文导致加密速度变慢,所以将对报文的加密变为对报文摘要的加密。如下图:
首先将大报文通过散列函数生成报文摘要,用Bob(发送方)的私钥对报文摘要进行加密,最后将加密后的报文摘要和报文原文发送。接收方接收到后将大报文通过散列函数生成报文摘要,同时用Bob(发送方)的公钥对数字签名进行解密,最后对比两个报文摘要是否相等,来确定报文是否完整。
如何防止抵赖?我们来假设一个场景,A给B发送消息,B收到后看到消息对自己不利,首先想修改原文,但是计划泡汤,因为要修改原文就要从新生成新的报文摘要并利用发送方私钥进行加密,B没有A的私钥不能进行修改。如果A不承认发送消息,则B可以将收到的签名和报文原文呈上法院,法院利用A的公钥进行解析,如果解析结果和原文的摘要一致,则报文为A发送,A不可抵赖。
上面提到一种保证报文完整性的方式是通过共享密钥加密,那么发接双方是如何拿到共享密钥的呢?
这就需要一个机构--密钥分发中心,具体分发过程如下:
首先发送方和接收方都要提前在密钥分发中心注册一个人密钥(只有自己和分发机构知道)。用来保持和KDC的秘密通信。
然后,当Alice想要向Bob发送消息时,
Alice先将自己信息和要发送人的信息用自己的密钥加密,发送给KDC,KDC接收到后,用Alice的密钥进行解析,后根据接收方(Bob)密钥加密A得信息和一个随机数R1,之后KDC将用Bob加密的信息和R1发送给Alice,Alice收到后留下R1,将Bob密钥加密的消息送给Bob,Bob收到后解密后得到R1,至此双方都拿到了R1,则可以作为此次通信的会话密钥。
上面提到的利用数字签名认证过程和保证数据完整性的过程中仍存在漏洞。
比萨恶作剧:攻击者Trudy,其有自己的私钥和公钥,其向披萨店用自己私钥签名产生一份披萨订单,当披萨店来索要公钥时,Trudy告诉老板,我是Bob,并且将自己的公钥说成是Bob的公钥,老板收到后就将披萨发给了Bob,而Bob本来没有这份订单。
这个恶作剧产生的根源就是,公钥的确定的不确定性,所以就需要权威认证机构,这个机构就是认证中心(CA)。
认证过程如下:
Bob将自己的公钥发送给CA,CA收到后用自己的私钥对Bob的公钥,进行加密,然后加上一些必要信息,形成CA签发的公钥证书。
这样每次当就收到用签名形成的报文时,接收方要索要公钥就要向CA机构索要其证书,这样在权威机构认证下,冒名就被避免了。
接收方解密公钥过程也很简单,首先到CA官网获取CA的公钥,然后向CA请求Bob(发送方)的证书,再用CA的公钥解密Bob的证书,得到Bob公钥,可以对报文进行完整性验证,同时也验证Bob的身份。图示如下:
Web服务越强大,包含安全漏洞概率就越高。,HTTP服务可在不同权限下运行。
因为Web页中的一些javascript代码都是运行在浏览器端运行的,所以很可能带有恶意代码,对主机(Web应用使用方造成安全威胁)。
监听程序监听信道中传输信息,威胁信息机密性;
伪造、篡改、重放会威胁所传输信息的完整性;
缺乏身份认证使得冒充他人身份进行中间人攻击;
缺乏数字签名机制使得通信双方能够相互攻击;
拒绝服务攻击使得通信信道不能保证可用性;
可以在应用层、传输层、网络层进行解决:
应用层:为特定应用定制特定安全服务,将安全服务直接嵌入在应用程序中。
在协议中增加内容,例如Kerberos就是关于认证的内容,SSH是关于邮件通信相关信息。
传输层:SSL或者TLS可作为基础协议栈的组成部分,对应用来讲是透明的。也可以直接嵌入到浏览器中使用,SSL或者TLS主要用于在数据到达传输层之前的加密工作。
网络层:提供端到端(主机到主机)的安全机制,通用解决方案,各种应用程序均可利用IPSec协议提供的安全机制,减少安全漏洞的产生。
A、背景
由第一个浏览器厂商(Netscape)发明,能够提供机密性(confidentiality)、完整性(integrity)、认证(authentication)。
可以理解为在传输层和应用层之间,叫做会话层;也可以理解为在应用层上,其提供一个接口,将信息进行加密后传输到传输层。
流行的语言如C语言和java语言都提供可以调用SSL的库(类)。
其就是在收发双方采用密钥方式加密的协议,但是有些细节:
双方是通过字节流交互数据。需要一组密钥用于整个连接中数据的加密,不同类型数据使用不同密钥加密。
在密钥产生和交换阶段,可以看作是通信双方在TCP握手阶段之后的新的握手阶段。
握手(handshake):Alice和Bob利用他们的证书、私人密钥(鉴别)彼此,以及交换共享密钥。
密钥派生(key derivation):ALice和Bob利用共享的主密钥派生出一组密钥。
数据传输(data transfer):待传输数据分割成一系列记录,称为记录。
连接关闭(connection closure):通过发送特殊消息,安全关闭。
MS:主密钥;EMS:加密的主密钥;Alice首先获得Bob的证书,再利用AC机构的密钥解密得到Bob公钥。在发送的过程中,Alice(发送方)将用Bob公钥加密的MS交给Bob,这样两个人都拥有了主密钥。
不同的密钥加密不同的数据能够使通信中数据更加安全,被破译的可能性更小。例如报文认证码(MAC)和数据加密密钥。MAC就是前面提到的通过散列函数生成的报文摘要。我们用K或M来标识密钥:一般来说密钥数量为4。
Kc:用于加密客户向服务器发送数据的密钥;
Mc:用于客户向服务器发送数据的MAC密钥;
Ks:用于加密服务器向客户发送数据的密钥;
Ms:用于服务器向客户发送数据的MAC密钥;
四个密钥都是通过密钥派生函数(KDF)实现密钥派生的,提取主密钥和(可能的)一些额外的随机数,生成密钥。
为什么要在SSL中将应用层的字节流分成多个记录?
因为如果不分成多个记录来传输,那么每个TCP建立后的字节流就看做一个记录,一个记录对应一个MAC用来验证数据完整性,这样数据完整性验证就要等字节流发送完成后,反映到应用中,如QQ等聊天软件,等对方把消息都把所有发送完了,完整性验证通过后,才能被接收方看到,很显然,发送方不具备预测接收方会返回什么信息的能力。综上,要分成多个记录,每个记录携带一个MAC,接收方可以对每个记录进行完整性检测。
一句话来讲就是,一些即时消息应用需要对发送的字节流中部分字节即时的完整性检测。
记录的结构如下:length是值不固定,随着data数据改变而改变(待证实)。
经过上面的处理之后,入侵者无法破译消息内容,但是入侵者仍然可以捕获记录,并且恶意改变记录的顺序,导致数据无法被正确解析,故要在记录中加上序列号,这个序列号直接安排值MAC中。
可是这样捕获者(入侵者)仍然可以重放所有记录,攻击某个主机造成拥塞和性能浪费。故还要增加一次性随机数(nonce),单次消息传递仅指定随机数会被接收。
攻击者伪造TCP连接的一方,故意发送断开连接的数据请求,接收方收到后导致误判,提前断开连接。
解决方案:在记录中增加控制类型,如普通消息为type=0,终端连接消息是type=1。
这样记录的结构就又被丰富了:
此后即时攻击者发送断开连接的请求,接收方没有看到type=1也不会关闭连接,增加了安全性。
上面我们仅仅是用一个简单的结构对SSL进行分析,没有涉及到具体细节,例如密钥和算法协商应该怎样实现等等?
如上图,SSL要用到四个协议,分别是SSL握手协议、SSL更改密码规格协议、SSL警告协议,以及SSL记录协议,这四个协议分工合作共同实现了SSL的功能。
上面分析中提到,双方有一个密码组协商的过程,所谓密码组就是双方协商使用哪些算法的过程,发送方发送一个密码组,说明能够使用的算法和加密方式,接收方根据自身情况选定实际实现的算法最为双方最终使用的算法。
当双方协商完密钥组中使用算法后,如果想要更改使用算法,就需要用到该协议。
其位于SSL记录协议之上,ContentType=20,ContentType是用来让SSL记录协议识别其上层协议的。
协议内容较短,仅包含一条消息(值为一个字节)
当握手过程或数据加密等出错或者发生异常时,为各方发送SSL警告或终止当前连接,需要用到该协议。
ContentType=21,协议包含两个字节,警告级别和警告代码。
握手协议是实现SSL记录协议的基础。因为握手协议使用过程中,通信双方不仅要交换随机数,验证服务器身份,还要确定加密方式,敲定主密钥,生成四个子密钥。SSL记录协议到达下一层(传输层)时就需要是加密完成后的记录,故握手协议扮演着很重要的角色。
整理其主要任务:服务器认证和鉴别、协商加密算法、建立密钥、客户认证(可选)。
ContentType=22
解释:
上面第3步还是说的不够详细,其实预主密钥双方都拿到后,还有一个主密钥的生成过程被省略了,四个子密钥其实是在主密钥基础上生成的。下面的密钥派生中会提到。
第5步和第6步的存在,是为了验证在双方握手的过程中有无发生篡改的情况,只有当计算出的MAC一致,才可以确定在握手的过程中没有受到破坏。
想象一个场景,Alice(客户)在服务器(Bob)上买了两件商品,通信过程虽然加密,但是攻击者还是嗅探到了,虽然仍然不知到加密后记录内容。如果双方始终只使用客户端提供的随机数,则第二天,拿到了记录的攻击者,直接将加密后的记录发送到服务器,因为服务器使用的是客户端随机数,所以SSL在握手过程中很顺利,双方在验证数据完整性对比MAC时,也不会发现异常。
但是如果服务器在收到密文后,发送给客户端一个随机数Y,双方在确定主密钥过程要使用自己的和对方的随机数,则攻击者因为拿到的记录是昨天服务器发送的随机数生成的主密钥生成的子密钥加密,则生成的主密钥双方肯定不一致,这样服务器在接收到密文时无法正确解密,就能够发现攻击者伪装用户要求服务器发生同一行为。
因为在算法确定之前,双方一直是明文发送,所以攻击方窃取到后既能知晓其意,攻击方会删除算法列表中保密程度相对较高的,这样服务器在选择时,就只能在安全性较低的算法中选择了,这也就为攻击者日后攻击埋下了伏笔。
客户一次随机数和服务器一次随机数和预主密钥输入伪随机数发生器,产生主密钥MS。
主密钥和新一次随机数输入另一个随机数发生器产生“密钥块(key block)”。这里新一次随机数是双方新交换的随机数(猜测)
通过对密钥块的切割生成“切片”就是各种子密钥:
客户MAC密钥、服务器MAC密钥、客户加密密钥、服务器加密密钥、客户初始向量,服务器初始向量。
这里MAC密钥要理解清楚,MAC本身是对数据的散列函数输出的定长散列值(又称摘要),MAC密钥是对摘要进行加密要用的方法。
SSL记录协议的操作步骤:将数据分段成可操作的数据块、对分块进行数据压缩、计算MAC值、对压缩数据及MAC值加密、加入SSL记录头(ContentType,版本、长度)、在TCP中传输。
图示如下:
加密后的每个SSL片段为2的14次方字节-16kb。
在实际网络应用中往往需要专门的机构网络,这些机构有自己的网络,不希望互联网中其他用户接入网络,所以可以通过建立专用网络(基础设施)、或者租用网络公司的某段网络,通过独占的方式实现子公司网络的接入。
但是上面这些途径:建设基础设施成本过高,租用费用也过高。所以在实际专用网络建设中,往往采用虚拟专用网络技术来构建专用网络。
因为互联网是覆盖最广泛的网络,所以虚拟专用网络就是利用互联网传播范围广的优势,省去基础设施建设成本。虚拟网络中会将两端建立专用的安全通道,这个通道是虚拟的,安全通道实际数据传输还是和所有互联网用户共享信道,但是虚拟专用网络,利用加密技术,密钥管理、认证和访问控制,隧道技术等实现了安全传播。
VPN能够实现的功能:数据机密性保护、数据完整性认证、数据源身份认证、防重放攻击、访问控制。
虚拟专用网络要用到的关键技术:隧道技术、数据加密、身份认证、密钥管理、访问控制、网络管理。
实现VPN隧道协议比较关键,常见的隧道协议都包括三个类型的协议:
乘客协议:用来标识封装的是上层什么协议的数据。
封装协议:用来规定数据的加密方式、封装方式、如何进行数据认证等方面。
承载协议:用来给封装后的数据加上数据头,如果是Internet就直接加上IP协议数据头,以IP协议数据包进行发送。
VPN的隧道里用隧道协议对通过隧道传输的数据进行封装,能够使数据安全地穿越公共网络,通过加密认证以保证安全,数据报进入隧道时,由VPN封装成IP数据报,通过隧道在Internet上安全传输,离开隧道后,进行解封装,之后数据就不再受到安全隧道的保护。
常用的隧道协议有:
在第二层上的:PPTP、L2TP;主要用于远程用户访问专用网络。
在第三层上的:IPSec协议,主要用于网关到网关,或者网关到主机方案,不支持远程拨号访问。
当然前面学到的SSl也可以用于安全隧道的建立。
在实际应用中多是多种协议的结合使用,例如IPSec和SSL、IPSec和L2TP。
要求:机密性、数据完整性、源认证/鉴别、重放攻击预防等
协议:AH,在IP数据报文中的协议号为51;ESP,在IP报文头中的协议号为51。
安全关联中包含很多参数包括:安全参数索引(SPI):32位SA的唯一标识(ID)、加密密钥、认证密钥、密码算法标识、序列号(用来抗重放攻击)、抗重放窗口(接收方使用滑动窗口协议检测恶意主机重放数据报)、生存周期(规定SA的有效使用周期)、运行模式有传输模式和隧道模式、IPSec隧道源、目的地址。
因为安全关联是半双工的,所以每个通信需要建立两个SA连接,这些连接一旦形成就会保存在双方的SAD(安全关联数据库)中,当有一方要处理IPSec数据报时,就会从SAD中定位这些信息。
对于1个分支机构和n个销售人员,1个总部,则向总部的通信需要建立2+2N条SA,这些信息都会被保存到SAD中。
检测过程:收到IPSec数据报,从SAD中检测SPI,寻找到匹配SPI就开始处理数据报。
在进行SAD检索之前,还要进行SPD(安全策略数据库)检索 ,所谓安全策略就是要对数据流实施什么样的安全处理(应用IPSec、绕过、丢弃)。不同的安全策略组成了SPD,每个记录就是一条SP,SPD会从每个安全策略中提取信息组成“选择符”(这些选择符包括目标IP、源IP、传输层协议、源和目标端口等等。)
在处理过程中,首先决定处理策略,如果决定应用IPSec协议处理数据,则接下来再从SAD中寻找SA,进行处理。
隧道模式和传输模式:
隧道模式:是两个子网对外连接的路由器之间的相互通信。
传输模式:是两个主机直接直接进行通信。
D、AH协议和ESP协议的结构对比
传输模式AH:
隧道模式AH:因为隧道模式要保证安全通信,所以会加上新的IP头。
传输模式ESP:
ESP尾部有填充位主要是为了能够实现分组加密。ESP认证数据是将(ESP头部、原IP数据报载荷、ESP尾部)进行散列计算后形成固定位的验证位(基于共享密钥形成)。SPI是SA的唯一认证信息。基于此知道做什么,序列号是数据报的唯一标识,用于抵抗重放攻击。
隧道模式ESP:
对于新的SA,发送方初始化序列号为0,每次通过该SA发送数据报,发送方序列号计数器都会加一,之后将计数器值置于序列号字段。目的是防止重放或者嗅探攻击。接收方负责检验重复分组,利用一个窗口。
手动建立一般比较麻烦,所以一般使用IKE为IPSec提供SA连接服务。在IKE进行丽娜姐过程中会根据公钥进行身份认证,共享密钥确定等等,SA因为是有连接状态的,所以其也需要维持连接,是有连接的。
IKE分为PSK和PKI。PSK基于共享的秘密密钥;PKI基于公开/私有密钥以及证书,类似SSL的握手过程。
要采用对称密钥加密(保证机密性、主机认证、数据完整性)、自同步每个分组单独加密(给定加密分组和加密密钥就可以解密,即便前序分组丢失,也可以继续成功解密分组。)、高效(能够用硬件或者软件实现)。
将密钥流的每个字节与明文的每个字节进行异或运算,就可以得到密文。(RC4算法)
因为是独立加密,所以在解密的过程中,需要知道每个数据帧(组)开始使用的密钥加密位置,用IV(初始向量)标识。所以加密过程如下:
如下图:
发送端针对数据(data)计算完整性校验值(ICV)用于数据完整性校验。
每端都会有108位的共享密钥用于加密,发送端生成24位初始向量(IV),附加到密钥上,得到128位密钥。发送端还要附加KeyID(8位),然后将128位密钥输入伪随机数发生器,产生密钥流。利用RC4算法对数据进行加密。
解密时,首先接收端提取IV,将IV和共享密钥输入伪随机数发生器,得到密钥流,将密钥流与加密部分逐个字节异或,解密d得到数据与ICV。利用ICV验证数据完整性,注意这里验证数据完整性方式与MAC和数字签名验证数据完整性方式不同,安全性低。
WEP采用端对端一次性随机数认证:
实际上,攻击方只需要伪装成权限用户向一端发送自己的明文,然后获取其加密后的密文,最后就可以得到密钥进行破译。
改进如下:
预防拒绝服务攻击、预防对内部数据的非法访问、只允许对内部网络的授权访问。
无状态分组过滤器,可以过滤指定来源和指定端口连接限制,但是不能对连接状态变化进行捕捉,所以如果伪造状态还是可以通过防火墙。
有状态防火墙,可以过滤状态,对状态变化进行感知。
应用网关,就是在应用层用应用方式来控制内部信息发送和外部消息进入和连接请求。
下面是无状态协议的策略表:
完!(该系列内容均来自哈工大mooc公开课)