黑道VS白道,从网络攻击到数字加密
Posted 爱奇志
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了黑道VS白道,从网络攻击到数字加密相关的知识,希望对你有一定的参考价值。
文章目录
一、前言
计算机网络安全是一个很大内容,包括网络攻击、加密技术、密钥分配、鉴别技术等,本文从网络攻击(被动攻击和主动攻击)着手,得到网络安全的四个理论标准(保密性、端点鉴别、信息完整性、运行安全性),后面的内容基本上是围绕这四个标准展开,一步步探究整个计算机网络内容。
二、网络攻击与安全标准
2.1 网络攻击
网络攻击多种多样,按攻击方式划分,计算机网络攻击分为两种:被动攻击与主动攻击。如下图:
注意:上图只是网络攻击的一种划分依据,还存在其他划分依据,划分方式不唯一。
2.2 安全防治理论标准
为应对多种多样的网络攻击,计算机网络安全方面必须先诞生一个安全防治理论标准,即怎样的网络才能被称为是安全的?有个这个标准后,然后再根据这个标准去设计网络安全保障机制(如防范被动攻击需要的加密技术、防范主动攻击需要的加密技术和鉴别技术)。
一般来说,一个安全的计算机网络通信要想达到安全,需要满足四个要求——保密性、端点鉴别、信息完整性、运行安全性,具体如下表:
定义 | 防范的网络攻击 | 实现该标准方式 | 备注 | |
---|---|---|---|---|
保密性 | 保密性要求只有发送方和接收方才能看得懂发送的内容,网络攻击者/截取者则看不懂内容。 | 被动攻击 | 加密技术(对称加密或非对称加密) | 保密性是计算机网络安全的最基本的内容,是防范被动攻击的必须要求。 |
端点鉴别 | 端点鉴别要求发送方和接收方能够相互鉴别真实身份,防止网络攻击者伪装通信或作为中间人通信。 | 主动攻击中的重放攻击 | 鉴别技术,每一个通信鉴别发送方的身份 | 端点鉴别是防范主动攻击的基础,防范主动攻击必须实现通信双相互鉴别身份。 |
信息完整性 | 信息完整性要求每一个通信接收方有办法确认收到的信息确实就是发送方发送的信息,是完整的,没有受到任何篡改的。 | 主动攻击中的篡改 | 鉴别技术,每一个通信鉴别信息完整性 | 信息完整性是主动攻击中防篡改的,是鉴别技术的一个重要内容 |
运行安全性 | 运行安全性要求计算机网络运行在一个相对安全的环境,不会轻易受到恶意程序或拒绝服务的攻击。 | 主动攻击中的恶意程序和拒绝服务 | 访问控制技术,对访问网络的权限加以控制,并规定每个用户的访问权限 | 主要针对主动攻击中的拒绝服务Dos(Denial of Service),为计算机网络访问权限控制机制 |
三、加密技术
为实现安全标准中的保密性,我们需要对网路传送的数据进行加密。常用的密码体制包括两种:对称加密和非对称加密,先看对称加密。
3.1 对称加密技术
对称加密即传统加密,加密和解密使用同一密钥K,如下图所示:
解释一下上图:E运算代表Encode编码运算,则为加密运算;D运算代表Decode解码运算,则为解码运算。
加密和解密使用相同的密钥K,发送方A将明文X使用公开的加密算法产生密文Y,然后接收方B只要使用相同的密钥K对密文解密即得到明文X。
对称加密原理简单,实现起来也很快捷,但是存在一个很难解决的问题——对称密钥密码体制的密钥管理问题。
在对称密钥密码体制中,通信双方加密解密使用相同的密钥,但是如何做到这一点呢?
1、事先约定相同的密钥,但是事先约定对于某一时刻更换密钥造成极大不便,如果使用高度安全的密钥分配中心,会使网络成本大大增加。
2、信使传送密钥保证相同,但是高度自动化的大型计算机网络中,通信双方这样频繁传送密钥是极不合适的。
所以引入了非对称加密技术,且看下文。
3.2 非对称加密技术
除了对称加密,其实我们还有一种非对称加密技术,非对称加密的产生的原因主要有两点:
1、对称密钥密码体制的密钥管理问题无法找到高效、安全、低成本的方式解决(即本文3.1 对称加密技术);
2、数字签名的需求(即本文3.3 数字签名)。
非对称加密密码体制,又称为公钥密钥体制/公开密钥密码体制,在非对称加密密码体制中,密钥对产生器每次产生一对密钥——公钥(Public Key),以下用PK表示,私钥(Secret Key),以下用SK表示。非对称加密技术,如图:
两者区别为:
本质 | 常用的加密算法 | 加密算法 | 公钥 | 私钥 | |
---|---|---|---|---|---|
对称加密 | 加密和解密使用相同的密钥 | DES(Data Encryption Standard)、3DES(Triple DES)、AES(Advanced Encryption Standard)、Blowfish等。 | 公开 | 不分公钥和私钥,仅一个密钥,密钥是保密的 | 不分公钥和私钥,仅一个密钥,密钥是保密的 |
非对称加密 | 加密和解密使用不同的密钥,公钥加密,私钥解密 | RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。 | 公开 | 公开 | 保密 |
所以说,无论是何种密码体制,加密算法都是公开,所以实现保密性的关键在于密钥的保密。
对于对称加密和非对称加密,非对称加密确实比对称加密安全,但是并不是非对称加密就一定比对称加密优秀的,至少非对称加密速度就比对称加密慢。两种密码体制优缺点见表:
优点 | 缺点 | 适用情况 | |
---|---|---|---|
对称加密 | 算法公开、计算量小、加密速度快、加密效率高 | 秘钥的管理和分发非常困难,不够安全。 | 适用于对大量数据进行加密 |
非对称加密 | 安全性高,公钥是公开的,秘钥是自己保存的,不需要将私钥给别人,保证密钥不被泄露,保证安全 | 加密和解密花费时间长、速度慢 | 适合于对少量数据进行加密 |
所以在实际的网络环境中,会将对称加密和非对称加密混合使用.
3.3 数字签名
3.3.1 数字签名的要求
1、接收方B能够核实发送方A对报文的签名,保证报文鉴别。
2、接收方B能够确认收到数据是和发送方A发送的是一致的,没有被篡改过。保证数据完整性。
3、发送方A事后不能抵赖对报文的签名,即不能抵赖这个报文不是自己发送的。保证不可否认性。
3.3.2 数据签名的实现
同时实现上述三个要求(报文鉴别、数据完整性、不可否认性),则实现了数字签名,实际上我们只要将非对称加密变换一种形式,即发送方发送报文时,先自己的私钥SK对明文X进行D运算(这里不是解密运算),得到一串不可读报文,发送给接收方,接收方收到数据后,使用发送方的公钥(公钥是公开的,可以得到)进行E运算(同样这里也不是加密运算),即可恢复明文X。如下图:
解释一下上图:
数字签名中,先进行D运算,这里不能理解为解密运算(因为还没加密呢!),应该理解为使用A的私钥进行的一个D运算,得到一个不可读的密文DSKA(X).同样地,后面的E原酸,不能理解为加密运算,应该理解为使用A的公钥进行的一个E运算,还原明文X.
其次,这里的DSKA(X)的理解方式是:D表示D运算,SK表示secret key私钥,A表示A的私钥,(X)表示对明文X操作。合在一起的意思是,使用A的私钥,即SKA,对明文X进行D运算得到的结果,即DSKA(X)。
通过上面这种方式后,实际上我们已经实现了数字签名,为什么呢?且看数字签名的三个要求。
1、报文鉴别。因为私钥是保密的,发送方A的私钥只有它自己知道,所以只有A能产生DSKA(X),接收方B接收到DSKA(X)后发现能用PKA得到可读的明文,就相信明文X是A发送的,实现了报文鉴别。
2、数据完整性(即防篡改)。因为私钥是保密的,发送方A的私钥只有它自己知道,网络攻击者篡改报文,篡改完之后再发送给B,B拿到报文后发现不能用PKA得到可读明文,就知道数据被篡改过或者这根本就不是A发送的报文,不会处理,实现了数据完整性。
3、不可否认性。如果A过后想抵赖DSKA(X)这个报文不是自己发送的,B只要将收到的DSKA(X)和得到的明文X公示给第三者,第三者很容易使用A的公钥PKA验证B的说法是对的,使A无法抵赖,实现了不可否认性。
故此种方式实现了数字签名,这也是最常见的一种数字签名哦!
3.4 非对称加密与数字签名统一
在一开始提到的安全标准的四个要求中,加密技术实现了保密性,数据签名实现了报文鉴别,现在将这两种技术结合到一起,即非对称加密+数字签名,如图:
对加密技术和数字签名的整个理解:DSKA(X)表示使用A的私钥对明文X进行D操作,然后在使用的B的公钥对数据签名的结果进行E运算加密操作,得到密文EPKB(DSKA(X)),通过互联网传送后,接收端先用B的私钥对接收的密文EPKB(DSKA(X))进行D运算解密操作,得到DSKA(X),然后用A的公钥对其E运算,得到明文X。
所以说,对于非对称加密密码体制,通过巧妙的运算,同时实现了数字签名和加密技术。
EPKA(DSKA(X))==>X 即数字签名,表示发送方A先使用自己的私钥SK对明文X进行D运算,接收方使用A的公钥对收到的DSKA(X)进行E运算,得到明文X,实现签名核实。
DSKB(ESKB(X))==>X 即加密技术,表示发送方A使用接收方的公钥PK对明文X进行E运算加密,接收方使用自己的私钥SK对收到的ESKB(X)进行D运算,得到明文X,实现非对称加密解密。
3.5 单向加密(不可逆加密)和双向加密(可逆加密)
上面将的对称加密和非对称加密都是双向加密(可逆加密),就是可以对密文进行解密,因为密文是可逆的,所有在设计上就存在天然的风险。实际上,我们有一种更加安全的加密方式——单向加密(不可逆加密),使用单向加密,密文是不可逆的。实际上,这种单向加密在计算机网络通信中用到很少,因为接收方无法通过D运算来解密,但是在软件开发中,却使用的很广泛,比如我们在做系统级开发时,就可以让用户的密码经过不可逆算法存入数据库,每一次登录时密码经过不可逆算法与数据库比对,这样一来,即使某一天数据库泄露,用户账号信息仍然可以被保护,这就是单向加密的最常见用途。
常见的单向加密算法:MD5,SHA等(虽然说MD5和SHA-1都被破解了…清华大学王小云教授)。其实,即使是没有找到单向加密的破解方法,它也可被试探出来,如:
所以说,没有绝对安全的密码,这是有感而发的。
四、密钥分配(针对第三部分的加密技术)
4.1 对称加密的密钥分配
对称加密技术,加密和解密使用同一密钥,通常设立一个大家都信任的机构——密钥分配中心KDC(Key Distribution Center),用来给需要进行数据传输的用户临时分配一个会话密钥(仅使用一次,下一次再通信再分配一个)。
具体分配方式:
一开始,用户A和用户B都在KDC中记录自己的密钥KA和KB,这个早就完成,不是一个独立步骤。
1、用户A向密钥分配中心KDC发送明文,说明自己想要与用户B通信,在明文中给出通信双方A和B在KDC登记的身份(即映射关闭的key)
2、KDC用随机数产生一个“一次一密”的会话密钥KAB供A、B本次网络通信之用,然后向A发送响应报文。该报文使用KA加密(保证仅用户A解开,网络攻击者无法解开),内容一个刚刚产生的这个网络通信用的会话密钥KAB和一个票据,票据使用KB加密(因为是给用户B的),票据内容是A、B在KDC登记的身份和本次网络通信用的会话密钥KAB。
注:会话密钥KAB在发给A的响应报文里面有一份,因为响应报文使用KA加密,所有这一份KAB是给用户A使用的;然后在响应报文的票据中还有一份,因为票据使用KB加密,所以这份KAB是给用户B用的。从而保证用户A和用户B都有一份KAB,且相同,用于对称加密通信。
3、A收到KDC发来的响应报文,用KA解密,拿到属于自己的那一份KAB,但是用户A无法查看响应报文中的那份票据,因为那个票据使用KB,本来就不是给用户A的,所以用户A将响应报文中的那个票据发送给用户B.
4、用户B收到票据后,用KB解密,票据里面是A、B在KDC登记的身份和本次网络通信用的会话密钥KAB,则用户B知道用户要和它通信并且知道本次通信的密钥KAB.
整个过程如下图:
4.2 非对称加密的密钥分配(公钥分配)
非对称加密中,私钥是保密的,只有自己知道,自然不需要涉及到分配的问题。但是公钥是公开的,所以非对称加密密钥的分配就是公钥的分配,注意,我们一直所说的公钥公开并不是可随便公布用户的公钥,而是将公钥与对应的主机的映射关系存储起来,一般存放在CA认证中心(Certification Authority),这个CA认证中心一般由政府或大公司出钱建立,里面的存放着公钥和该公钥拥有者的唯一标识信息(人名或IP地址),用户需要公钥时,就到CA认证中心去查询。
其实,就是直接在浏览器中查询也可以,以Google浏览器为例,右上角选择“设置/高级/管理证书”,用户就可以看到证书颁发机构给自己颁发的证书,如:
随便打开一个,查看自己的公钥:
五、鉴别技术
鉴别技术作为防范主动攻击的必需品,鉴别的对象有两个,一是鉴别发送方的身份,满足安全标准中的端点鉴别,这就是端点鉴别/实体鉴别;二是鉴别通信信息完整性,满足安全标准中的信息完整性,这就是报文鉴别。
定义 | 鉴别实现的关键 | 鉴别频率 | |
---|---|---|---|
报文鉴别 | 鉴别通信信息完整性,满足安全标准中的信息完整性 | 密码散列函数 | 接收方对于每一个报文的收到的报文都要鉴别发送者,每一个报文鉴别一次。 |
端点鉴别/实体鉴别 | 鉴别发送方的身份,满足安全标准中的端点鉴别 | 不重数 | 接收方在系统接入的全部持续时间内对和自动通信的对方实体只需验证一次。 |
5.1 报文鉴别
实际上,本文第三部分的数字签名就已经实现了报文鉴别(数字签名三要求:报文鉴别、数据完整性、不可否认性),数字签名的第一个和第二个要求所表示的都是“报文鉴别/数据完整性/防篡改”这个意思,但是上文提到,这种公钥密码体制存在运行速度慢的问题,所以真实的报文鉴别的中,我们必须找到更加快捷的办法。使用一种计算型的方法——密码散列函数。
5.1.1 密码散列函数
散列函数的特点:
1、输入可以是不定长的,但是输出是定长的且比较短;
2、输入X与输出Y的映射关系,与数学中函数的定义一样(对于任意一个给定的X值,都有唯一的Y值与之对应),即输入X与输出Y是多对一的关系(一个X有一个确定的Y对应,但是多个X可以对应一个Y,但是一个Y只能对应一个X)。
散列函数保证了计算上的加密的单向性, 即要找到的两个不同的报文,它们具有同样的密码散列函数输出,在计算上是不可能的(注意:理论上是可能的,因为X与Y是多对一),所以密码散列函数时安全的。
如果我们的密码散列函数的输出H(X)被网路攻击者截获了,那么截获者无法伪造出另一个明文Y,使用H(X)=H(Y),因为计算上是不可行的。所以说密码散列函数通过一种极为简单的方式(密码散列函数)实现了报文鉴别。
5.1.2 报文鉴别码
现在我们讨论如何将密码散列函数运用到报文鉴别码中。如图:
步骤一:在A从报文X导出散列H后,就对散列H用密钥K加密。这样得到的结果叫做报文鉴别码MAC(Message Authentication Code)。
步骤二:A把已加密的报文鉴别码MAC拼接到报文X的后面,得到扩展的报文,发送给B。
步骤三:B收到扩展的报文后,先把报文鉴别码MAC与报文X分离出来,然后用同样的密钥K对收到的报文鉴别码MAC进行解密运算,得到加密前的散列H。再将报文X进行散列函数运算,得到散列H(X)。最后,把计算出的散列H(X)与H进行比较。如一致,就相信所收到的报文X确实是A发送的(因为密码散列函数在计算上是安全的)。这样就使用密码散列函数完成对报文鉴别。
5.2 端点鉴别/实体鉴别
端点鉴别又称实体鉴别,两者是同一个意思,即鉴别发送方是身份。
为了防止网络入侵者的重放攻击,这里引入一个新概念——不重数,不重数是一个不重复使用的足够大的随机数,即“一次一数”,在端点鉴别中使接收方可以把重复的鉴别请求与新的鉴别请求区分开。如图:
步骤一:A使用明文发送自己的身份A和一个不重数RA给B。
步骤二:B响应A的查问,用共享密钥RAB对RA加密后发回给A,同时也给出自己的不重数RB.
步骤三:最后,A再响应B的查问,用共享密钥RAB对RB加密后发回给B。
注意:这里A、B不同的通话必须使用不同不重数,这是防止重放攻击的关键,由于不重数不会重复使用,所有攻击者即使截取到报文也没用,因为那个不重数已经不能用了。
六、尾声
本文中,我们从网络攻击(被动攻击和主动攻击)着手,知道了网络安全的四个理论标准(保密性、端点鉴别、信息完整性、运行安全性),后面的内容基本上是围绕这四个标准展开,第三部分的加密技术和第四部分密钥分配是针对保密性,第五部分鉴别技术是针对端点鉴别和信息完整性(第三部分数字签名也可以鉴别信息完整性),运行安全性有具体网络权限控制来实现,无法展开,故略去。
天天打码,天天进步!
以上是关于黑道VS白道,从网络攻击到数字加密的主要内容,如果未能解决你的问题,请参考以下文章