吃透计算机网络(三)

安全通信特性:
机密性:仅发送方和接收方能够理解传输报文的内容,这要求报文在一定程度上进行加密。
报文完整性:确保通信内容在传播中未被改变(恶意篡改或者意外改动)
端点鉴别:发送方和接收方都能证实通信过程所涉及的另一方,确保通信的另一方具有所声称的身份。
运行安全性:保护服务器和网路的正常运行,防止对网络的攻击

个人理解,安全通信的核心就是防止破坏,发送方和接收方无法阻止第三方得到报文段,底层网路是互通的,只能在传输的数据包上下文章。第三方可能在任何时候进行破坏,机密性是防止报文被其他人截获,从而知道双方的通信内容(比如银行密码社么的)。但即使第三方无法懂的报文内容,也可以通过修改报文段来破坏通信。虽然有很多传输机制来保证正确传输,但它有局限性。假设传输一个加密的报文,它通过校验和来检验传输是否正确,如果第三方修改报文段使检验和不变,但内容改变,那么最后收到的数据就是乱的,或者第三方直接修改头部中的序号,最后的数据流就乱了无法通信。所以要保证完整性,确保收到的报文是发送方发出的原始那个,未经过修改。前面两个是对发送的包上做保护,但是怎样证明通信的另一方不是其他人伪装的呢?就需要端点鉴别,证明我就是我,你就是你。前3个是保证一对通信的双方可以安全通信,而运行安全性就是在保护运行的主机和网络了。

机密性

报文段最初形式叫明文,加密后的机密报文称为密文。加密算法通过输入明文和密钥,就得到了密文,加密算法本身是公开的,所以密钥就是防止密文被破解的核心。密钥分为对称密钥和非对称密钥。

对称密钥

对称密钥接受方和发送发用同一个密钥。

根据入侵者所拥有的信息分为:
唯密文攻击:入侵者只能得到截取的密文,也不了解明文的内容。统计分析有助于对加密方案进行唯密文攻击。
已知明文攻击:当入侵者知道(明文、原文)的一些匹配时,称为已知明文攻击。
选择明文攻击:入侵者能够选择明文报文并得到该明文报文对应的密文形式。

最原始的加密方式就是单码代替密码,明文中所有bit通过一个密码翻译成密文,后来出现多码代替密码,明文通过多个密码翻译成密文,比如第1个bit用密码1翻译,第2个bit用密码2翻译等等。

块密码

对称加密技术分为块密码和流密码。其中块密码被用在多种的网络协议中,如GP、SSL、IPsec等。

在块密码中,要加密的报文被处理为k比特的块,每个块被独立加密,采用一对一映射,k比特原文映射k比特密文。K数字越大则可能的排列数越多,越不能破解。但是K越大所要存储的输入表也越大越多,这是难以实现的。因此块密码通常使用函数模拟随机排列,将K比特再次分成多个组,对每个小分组(通过小型加密表)进行加密,然后把分组重新排序,再次加密,再重排加密,如此循环得到最后的密文。这是用时间换空间的处理,通过对单个小分组的多次加密,达到更高的保护性。一个算法的密钥决定了特性“小型表”的映射和该算法内部的排列。

当某些特定的位置总会出现特定的明文,那么加密后得到的密文如果相同,攻击者看到相同的密文可能会猜出明文,并且通过识别相同的密文快和利用支撑协议结构的知识,可能解密整个报文。因此需要加入一些随机性,让相同的明文翻译出的密文并不完全相同,块密码通过密码块链接(CBC)实现。基本思想是仅随第一个报文发送一个随机值,然后让发送方和接收方使用计算的编码块代替后继的编码块。具体如下:

  1. 在加密报文或数据流之前,发送方生成一个随机的k比特串,称为初始向量,发送方以明文的方式将初始向量发送给接收方
  2. 对第一个块,计算第一块明文与初始向量的异或,然后通过块密码算法运行得到相应的密文。并把密文当作下一个块的向量
  3. 以上一个块的密文当作下一个块的向量,不断循环

接收方是倒着解密的, 根据发送方,上一个加密块会当作下一次的随机向量。先解密最后一个接受块,得到明文和随机向量的异或值,而随机向量是上一个接受块,这样就得到最后一个明文。不断循环,从后向前解密,第一个接受快所需要的初始向量是明文发送。即使第三方得到初始向量,但是并不知道密钥同样无法破解。

非对称密钥

非对称密钥双方使用不同的密钥,一个称为公钥,一个称为私钥。公钥是公开的,而私钥仅仅自己知道。

RSA

RSA广泛使用了模n的算术运算

1.选择两个大素数p、q,这两个值越大RSA越难破解,同时加密和解密所需要的时间也越长。RSA推荐pq的乘积为1024比特的数量级。
2.计算n=p*q、z=(p-1)(q-1)
3.选择小于n的数e,e和z没有(非1)公因数。e将被用来加密。明文的指数次对n求余,及为密文。
4.求一个数d,ed-1可以被z整除。密文的指数次对n求余,及为明文。
5.公钥是一对数(n,e),私钥是一对数(n,d)。

RSA的安全性:目前没有已知的算法可以快速进行一个数因数分解,这种情况下公开值n无法快速分解成p和q。但如果p和q已知,e是公钥公开的,很容易算出d。

报文完整性

密码散列函数:散列函数以m为输入,得到称为散列的固定长度字符串H(m)。找到任意两个不同的报文x、y使的H(x)=H(y)是不可能的。目前广发使用的散列算法有MD5、SHA-1。

MD5:
1.填充------散列函数要求输入报文长度满足一定条件(比如可以被某个值整除),先填充1再填充足够多的0,直到满足条件
2.添加------在填充前添加一个用64比特表示的报文长度
3.初始化累加器
4.循环处理

报文鉴别码

报文鉴别码(Message Authentication Code, MAC),发送方和接收方使用鉴别密钥,鉴别密钥是一串比特串,两边使用用一个鉴别密钥。

发送方使用散列函数,将报文+鉴别密码进行散列买得到报文鉴别码。并将MAC附在报文上,接收方收到报文后,也对报文+鉴别密钥进行散列,并与MAC相比较,若相同则一切正常。

MAC的优点是不要求加密算法,关注的是报文完整性,并不关心报文段机密性。MAC是将报文和鉴别密钥进行散列得到的值,并没有进行设么加密,不需要进行复杂的加密运算。

数字签名

数字签名使用了非对称密钥。

数字签名:发送方使用自己的私钥,对报文进行加密。接收方使用公钥来解密,如果解密正确则代表是用私钥发出的,如果解密失败则错误。

数字签名一定是私钥发出,公钥解密。因为公钥是所有人都知道的,用公钥发出、私钥解密,无法判断是那个人发出的。使用非对称密钥代价高,加密解密都需要大量的计算。可以先对初始报文进行散列,然后对散列结果进行数字签名。

公钥认证

数字签名的重要应用是公钥认证,公钥认证广泛应用与安全网络协议,如IPsec、SSL等。认证中心(CA)将公钥与特定的实体绑定。一旦CA认证了某个实体的身份,这个CA会生成一个将其身份和实体店公钥绑定的证书,这个证书包含这个公钥和公钥所有者全局唯一的身份标识信息。由CA对这个证书进行数字签名。

端点鉴别

不重数是在一个协议中的生存期只使用一次的数,也就是说,一旦某个协议使用了不重数,将永远不会再使用那个数字。不重数可以用来防止回放攻击。

SSL

安全套接字(Secure Socket Layer,SSL)是提供机密性、数据完整性和端点鉴别的TCP。SSL3.0的一个稍微修改的版本被称为运输层安全性(Transport Layer Security,TLS)。能够运行在TCP上的应用也一定能应用在SSL上。SSL提供了一个简单的具有套接字的应用编程接口,该接口类似于TCP的API。尽管从SSL技术上看位于应用层,但从研发者的角度它属于应用层协议。

在这里插入图片描述

SSL流程分为握手、密钥导出、数据传输三部分。

握手
1.客户发送它支持的密码算法列表,以及一个客户的不重数
2.从密码算法列表中,服务器选择一种对称算法(如AES/DES)、一种非对称算法(如RSA)和一种MAC算法。服务器把它的选择、证书和一个不重数返回给客户
3.客户检验该证书,提取服务器的公钥,生成前主密钥PMS,使用服务器公钥加密PMS,然后发送给服务器
4.服务器用私钥得到PMS。服务器和客户端使用相同的密钥导出函数,独立的从PMS和不重数中计算出主密钥MS。MS被切分为两个加密密钥和两个MAC密钥。当选择的对称密钥使用CBC时,两个初始向量也从MS获得,分别用于客户端和发送端。
5.客户端发送所有握手报文段MAC。发送一个级联所有发送和接受的握手报文段MAC,让服务器检查一致性。
6.服务器发送所有握手报文段MAC。同5,服务器发送,客户端检验。不一样则终止连接。

最后握手报文MAC是为了防止前面4步的完整性,因为第三方可能从第一步中删除保护性强的算法,迫使客户使用保护性弱的算法。1/2中的不重数是为了防止连接重放攻击,单纯的序号并不足以防止连接重放攻击。

密钥导出
在握手的第4步,就可以导出密钥和CBC初始向量。双方各自一个会话加密密钥和会话MAC密钥。

数据传输

SSL将数据流分割成记录,对每个记录附加一个MAC用于完整性检查,然后加密“记录+MAC”。MAC是数据+MAC密钥+当前序号的散列。序号是保证记录数据流不被第三方扰乱,接收方通过发送方的序号,通过在MAC的计算中包括适当的序号,验证记录的数据完整性。

连接关闭

在类型字段中指出该记录是否是用于终止SSL会话的,收到终止连接后才认定TCP FIN有效。虽然SSL的类型字段是明文,但是SSL还有MAC,接受方可以使用MAC来鉴别是否是第三方伪造的类型字段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值