乐趣区

融云分析当我们在谈通讯安全时我们在谈些什么

当谈论通讯安全的时候,通常我们关心的是下面四个问题:

1)防止消息窃听

当传送的消息是机密内容的时,人们希望给消息加密。这样即使消息在传送过程中被截获,窃听者也无法确切的知道消息内容,从而达到保密的效果。

2)防止消息篡改

消息在传送过程中,有可能被攻击者篡改内容,这样接收者接到的就是错误的信息,通讯过程中应该提供某种方案防止篡改。

3)防止消息伪造

攻击者假冒发送者的名义,给接收者发送消息,这种行为称为消息伪造。

4)防止否认

发送者事后否认自己发送过消息,需要有一种机制来防止这种情况发生。

下面,我们将详细分析下这四个问题。

  1. 防窃听

提到加密,很多人的第一反应是下面这样:

“自己实现一个加密算法,然后将算法保密,这样就能保证安全。”

在密码学的领域,这是个典型的误区。

首先,开发高强度的加密算法是非常困难的。普通的算法在外行看起来牢不可破,但是专业破译者却有非常多的工具和攻击方式,使其破绽百出。

其次,加密算法的秘密总有一天会公诸于世。到那时,所有基于这个算法的秘密都将被泄露。

实践中使用的加密算法都是公开的,消息传递依靠保密的密钥来确保消息不被破解。正因此,它们经过攻击者长期尝试仍未被破解,所以保密强度较高。

常用的加密体系分为三类,对称加密、非对称加密和混合加密。

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. 后话

到目前为止,看上去我们解决了之前提出的四个问题,但是通讯安全领域的问题还远不止这些。比如怎么验证公钥的可靠性?比如怎么才能生成一个可靠的随机数?再延伸下去我们会涉及到证书,认证机构和随机数的分级等领域,这里就不再一一展开了。

最后,请大家记住一句话:只有完美的密码,没有完美的人。不管多精密的系统,在确保整体安全方面,人是一个特别巨大的弱点。很多时候,最脆弱的环节并不是各种算法,而是人类自己。

更多技术干货请点击了解。

退出移动版