当谈论通信安全的时候,一般咱们关心的是下面四个问题:算法
1)防止消息窃听安全
当传送的消息是机密内容的时,人们但愿给消息加密。这样即便消息在传送过程当中被截获,窃听者也没法确切的知道消息内容,从而达到保密的效果。网络
2)防止消息篡改工具
消息在传送过程当中,有可能被攻击者篡改内容,这样接收者接到的就是错误的信息,通信过程当中应该提供某种方案防止篡改。加密
3)防止消息伪造spa
攻击者假冒发送者的名义,给接收者发送消息,这种行为称为消息伪造。code
4)防止否定blog
发送者过后否定本身发送过消息,须要有一种机制来防止这种状况发生。图片
下面,咱们将详细分析下这四个问题。开发
提到加密,不少人的第一反应是下面这样:
“本身实现一个加密算法,而后将算法保密,这样就能保证安全。”
在密码学的领域,这是个典型的误区。
首先,开发高强度的加密算法是很是困难的。普通的算法在外行看起来牢不可破,可是专业破译者却有很是多的工具和攻击方式,使其破绽百出。
其次,加密算法的秘密总有一天会公诸于世。到那时,全部基于这个算法的秘密都将被泄露。
实践中使用的加密算法都是公开的,消息传递依靠保密的密钥来确保消息不被破解。正所以,它们通过攻击者长期尝试仍未被破解,因此保密强度较高。
经常使用的加密体系分为三类,对称加密、非对称加密和混合加密。
1.1 对称加密
对称加密是指加密和解密用的是同一个密钥。这个密钥只有发送者和接收者知晓,其余没有密钥的人没法解密消息。
常见的对称加密算法有 DES 、 3DES 和 AES 等。随着计算机硬件的进步,使用暴力破解法已经能在现实时间中完成对 DES 的破解; 3DES 处理速度不高,此外在安全性方面也逐渐显现出了些问题;目前应该选用的算法是AES 。
1.2 非对称加密
与对称加密不一样,非对称加密算法须要两个密钥——公钥和私钥。
公钥和私钥是一对。公钥加密,对应的私钥才能解密,反之亦然。前面的场景适用于防窃听,后面的场景适用于数字签名,也就是防止否定。
实现机密消息交换的基本过程是:甲方生成一对密钥并将其中一个做为公钥向其它方公开,获得该公钥的乙方使用该公钥对消息进行加密再发送给甲方,甲方再使用本身的私钥对消息进行解密。
网络中的其余窃听者虽然也能拿到甲方的公钥,可是加密后的消息只有私钥才能解开,因此他们没法破译消息。
最常使用的非对称加密算法是 RSA 。
1.3 混合加密
比较一下对称加密和非对称加密各自的特色:
对称加密处理速度快,可是因为通信双方使用的是同一个密钥,存在密钥配送困难的问题。要求通信双方线下交换密钥是不现实的,而线上配送又存在被窃听的风险。
非对称加密的公钥自己就是能够对外公开的,自然避免了密钥配送的问题;可是非对称加密的处理速度远远低于对称加密。
混合加密体系是将上述两种优点相结合的办法。
先看一下加密过程。
通信过程当中传送了两部份内容:一部分是使用对称加密算法加密的消息,另外一部分是对称加密的密钥。其中对称加密的密钥是由接收方的公钥加密过的,这样除了接收方以外,任何其余人都不能解开对称加密的密钥,从而也没法解开加密的消息。
相比于要传送的消息自己,对称密钥的长度要短得多。非对称加密的处理速度慢,因此只用来加密对称密钥,而很长的消息则用处理速度快的对称算法来加密。
下面是解密过程:
先把对称加密的密钥和加密后消息这两部分分离开。对称密钥以前是用接收者的公钥加密的,因此只能使用接收者的私钥进行解密。对称密钥解出来以后,就能够对消息密文进行解密了,从而获得消息明文。
2.防篡改
通信过程当中,接收方有时候会有这样的疑问:
“我接收到的消息确实就是发送者发过来的那条吗?在传输的过程当中会不会已经被攻击者给改写了?”
这是对消息完整性的挑战。
实践中通常使用摘要算法来应对这种挑战。
摘要算法有以下重要特性。
第一,输入任意长度的字符串,输出固定长度的字符串。比起要传输的消息长度来讲,输出的固定长度一般很短,所以很容易进行处理。
第二,相同的输入老是对应相同的输出。发送方对消息进行摘要处理,同时把摘要附在消息里发送出来。接收方收到以后用一样的摘要算法对消息进行处理,再把计算出来的摘要和收到的摘要进行对比,若是不一致,就能知道消息已被篡改。
第三,给定一个字符串A ,通过摘要算法处理后的串 B ,很难找到一个字符串 C ,使其摘要后的串和串 B 相同。这个重要的特性称为抗碰撞性(弱抗碰撞性)。这条特性使得攻击者在篡改消息后,很难再计算出一样的摘要,从而规避摘要算法的检查。
第四,这种转换具备单向性,即不能经过输出串倒推出输入串。
经常使用的摘要算法包含 MD4 、 MD5 、 SHA-1 和 SHA-2 (包含 SHA-256 、SHA-384 和 SHA-512 )。上述算法中目前惟有 SHA-2 算法的强抗碰撞性还没有被攻破。
3.防伪造
防伪造指的是“消息来自正确的发送者”。
防篡改关注的是消息内容,防伪造关注的是消息发送者自己。
防篡改关注的是消息的完整性( integrity ),防伪造关注的是消息的认证( authentication )。
消息认证码( Message
Authentication Code)是一种既能检查消息完整性,又能作身份验证的技术,取三个单词的首字母,简称为 MAC 。
实践中常用与密钥相关的摘要算法来实现消息认证码。
消息认证码的使用步骤以下:
1.发送者和接收者事先共享密钥; 2.发送者使用共享密钥对消息计算 MAC 值; 3.发送者将消息和 MAC 一块儿发给接收者; 4.接收者使用共享密钥对接收到的消息计算 MAC 值; 5.接收者将计算的 MAC 值跟接收到的 MAC 值作比较;
因为攻击者没有共享密钥,因此没法跟接收者算出同样的 MAC 值。
跟对称密钥同样,这里一样面临密钥配送的问题,咱们仍然能够采用非对称加密的方式进行密钥配送。除此以外, Diffie-Hellman 算法也是经常使用的密钥交换方式。
4.防否定
想象一下这个场景, Bob 收到了一张 Alice 发来的五百万元的借条。使用事先约定好的共享密钥,Bob 计算出的 MAC 值跟借条里收到的 MAC 值一致,这代表消息没有被篡改,同时消息也不会是第三方伪造的,那么就没有任何后顾之忧了吗?
并非这样。问题在于共享密钥是两我的持有的,所以能算出正确 MAC 值的并不仅是 Alice , Bob 也能。若是 Alice 声称本身没有发过这样的借条,那做为第三方仲裁者来讲,没法证实借条是 Alice 生成的仍是 Bob 生成的。
咱们须要寻求一种解决方案, Alice 使用的签名是由只有她本身才知道的密钥生成,同时别人还能顺利解开。这样别人没法伪造 Alice 的签名,同时还能验证这个签名。
看上去是否是有点熟悉?没错,就是以前介绍过的非对称加密。
Alice 使用本身的私钥对消息进行签名(加密),同时对外发布对应的公钥。不管是 Bob 仍是第三方仲裁者,均可以使用公钥对签名进行验证(解密)。
这种方案称为数字签名。
5.后话
到目前为止,看上去咱们解决了以前提出的四个问题,可是通信安全领域的问题还远不止这些。好比怎么验证公钥的可靠性?好比怎么才能生成一个可靠的随机数?再延伸下去咱们会涉及到证书,认证机构和随机数的分级等领域,这里就再也不一一展开了。
最后,请你们记住一句话:只有完美的密码,没有完美的人。无论多精密的系统,在确保总体安全方面,人是一个特别巨大的弱点。不少时候,最脆弱的环节并非各类算法,而是人类本身。