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

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

1)防止消息窃听

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

2)防止消息篡改

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

3)防止消息伪造

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

4)防止否认

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

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

  1. 防窃听

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

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

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

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

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

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

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

1.1 对称加密

对称加密是指加密和解密用的是同一个密钥。这个密钥只有发送者和接收者知晓,其他没有密钥的人无法解密消息。

常见的对称加密算法有 DES 、 3DES 和 AES 等。随着计算机硬件的进步,使用暴力破解法已经能在现实时间中完成对 DES 的破解; 3DES 处理速度不高,此外在安全性方面也逐渐显现出了些问题;目前应该选用的算法是 AES 。

1.2 非对称加密

与对称加密不同,非对称加密算法需要两个密钥——公钥和私钥。

公钥和私钥是一对。公钥加密,对应的私钥才能解密,反之亦然。前面的场景适用于防窃听,后面的场景适用于数字签名,也就是防止否认。

实现机密消息交换的基本过程是:甲方生成一对密钥并将其中一个作为公钥向其它方公开,得到该公钥的乙方使用该公钥对消息进行加密再发送给甲方,甲方再使用自己的私钥对消息进行解密。

网络中的其他窃听者虽然也能拿到甲方的公钥,但是加密后的消息只有私钥才能解开,所以他们无法破译消息。

最常使用的非对称加密算法是 RSA 。

1.3 混合加密

比较一下对称加密和非对称加密各自的特点:

对称加密处理速度快,但是由于通讯双方使用的是同一个密钥,存在密钥配送困难的问题。要求通讯双方线下交换密钥是不现实的,而线上配送又存在被窃听的风险。

非对称加密的公钥本身就是可以对外公开的,天然避免了密钥配送的问题;但是非对称加密的处理速度远远低于对称加密。

混合加密体系是将上述两种优势相结合的办法。

先看一下加密过程。

通讯过程中传送了两部分内容:一部分是使用对称加密算法加密的消息,另一部分是对称加密的密钥。其中对称加密的密钥是由接收方的公钥加密过的,这样除了接收方之外,任何其他人都不能解开对称加密的密钥,从而也无法解开加密的消息。


加密过程

相比于要传送的消息本身,对称密钥的长度要短得多。非对称加密的处理速度慢,所以只用来加密对称密钥,而很长的消息则用处理速度快的对称算法来加密。

下面是解密过程。

先把对称加密的密钥和加密后消息这两部分分离开。对称密钥之前是用接收者的公钥加密的,所以只能使用接收者的私钥进行解密。对称密钥解出来之后,就可以对消息密文进行解密了,从而得到消息明文。

  1. 防篡改

通讯过程中,接收方有时候会有这样的疑问:

"我接收到的消息确实就是发送者发过来的那条吗?在传输的过程中会不会已经被***者给改写了?"

这是对消息完整性的挑战。

实践中一般使用摘要算法来应对这种挑战。

摘要算法有如下重要特性。

第一,输入任意长度的字符串,输出固定长度的字符串。比起要传输的消息长度来说,输出的固定长度通常很短,因此很容易进行处理。

第二,相同的输入总是对应相同的输出。发送方对消息进行摘要处理,同时把摘要附在消息里发送出来。接收方收到之后用同样的摘要算法对消息进行处理,再把计算出来的摘要和收到的摘要进行对比,如果不一致,就能知道消息已被篡改。

第三,给定一个字符串 A ,经过摘要算法处理后的串 B ,很难找到一个字符串 C ,使其摘要后的串和串 B 相同。这个重要的特性称为抗碰撞性(弱抗碰撞性)。这条特性使得***者在篡改消息后,很难再计算出同样的摘要,从而规避摘要算法的检查。

第四,这种转换具有单向性,即不能通过输出串倒推出输入串。

常用的摘要算法包含 MD4 、 MD5 、 SHA-1 和 SHA-2 (包含 SHA-256 、SHA-384 和 SHA-512 )。上述算法中目前唯有 SHA-2 算法的强抗碰撞性尚未被攻破。

  1. 防伪造

防伪造指的是"消息来自正确的发送者"。

防篡改关注的是消息内容,防伪造关注的是消息发送者本身。

防篡改关注的是消息的完整性( integrity ),防伪造关注的是消息的认证( authentication )。

消息认证码( Message Authentication Code )是一种既能检查消息完整性,又能做身份验证的技术,取三个单词的首字母,简称为 MAC 。

实践中经常使用与密钥相关的摘要算法来实现消息认证码。

消息认证码的使用步骤如下:

  1. 发送者和接收者事先共享密钥;
  2. 发送者使用共享密钥对消息计算 MAC 值;
  3. 发送者将消息和 MAC 一起发给接收者;
  4. 接收者使用共享密钥对接收到的消息计算 MAC 值;
  5. 接收者将计算的 MAC 值跟接收到的 MAC 值做比较;

由于***者没有共享密钥,所以无法跟接收者算出一样的 MAC 值。

跟对称密钥一样,这里同样面临密钥配送的问题,我们仍然可以采用非对称加密的方式进行密钥配送。除此之外, Diffie-Hellman 算法也是常用的密钥交换方式。

  1. 防否认

想象一下这个场景, Bob 收到了一张 Alice 发来的五百万元的借条。使用事先约定好的共享密钥, Bob 计算出的 MAC 值跟借条里收到的 MAC 值一致,这表明消息没有被篡改,同时消息也不会是第三方伪造的,那么就没有任何后顾之忧了吗?

并不是这样。问题在于共享密钥是两个人持有的,因此能算出正确 MAC 值的并不只是 Alice , Bob 也能。如果 Alice 声称自己没有发过这样的借条,那作为第三方仲裁者来说,无法证明借条是 Alice 生成的还是 Bob 生成的。

我们需要寻求一种解决方案, Alice 使用的签名是由只有她自己才知道的密钥生成,同时别人还能顺利解开。这样别人无法伪造 Alice 的签名,同时还能验证这个签名。

看上去是不是有点熟悉?没错,就是之前介绍过的非对称加密。

Alice 使用自己的私钥对消息进行签名(加密),同时对外发布对应的公钥。无论是 Bob 还是第三方仲裁者,都可以使用公钥对签名进行验证(解密)。

这种方案称为数字签名。

  1. 后话

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

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

原文地址:https://blog.51cto.com/14084807/2376598

时间: 2024-11-08 17:40:33

【融云分析】当我们在谈通讯安全时,我们在谈些什么的相关文章

3分钟融云Demo体验:IM即时通讯篇

很多开发者朋友在使用融云IM SDK之前经常纠结一个问题,这个SDK集成到我的应用里究竟能不能变成我想要的样子?So,为了更好地理解IM的功能属性和使用场景,融云提供了一款Demo——SealTalk,为大家提供可参考的IM开发实践,从而减少应用从开发到上线的时间,并可以根据自己的应用产品来衍生出更多实用.有趣的新功能. 1.Demo下载 这里我们以移动版SealTalk举例实操演示,此外融云官网还提供Windows.MacOS以及Web端的SealTalk版本,供大家下载体验. 2.Demo体

apicloud+融云实现即时通讯

请尊重作者的辛勤劳动!!! 使用apicloud开发已经快2个月了,起初的目的就是为了实现安卓和苹果的兼容,属于一个试验项目,究竟apicloud是否能够满足公司的要求?最 终看来还是不错的,使用apicloud+融云实现了类似微信即时通讯的功能.看到有很多后来的人依然在这块挣扎,我就把自己的实现思路和成果分享出来和 大家一起交流一下,我也是第一次做手机开发,有很多经验不足的地方,希望大家能够直接指出来,我也不断完善自己的产品.     这次没有使用本地数据库,所有数据都是从融云和服务器获取,会

融云参加RTC实时互联网大会 现场集成IM SDK

9月21至22日,由全球实时云服务商声网Agora.io主办的RTC2017实时互联网大会在北京万豪酒店成功举办.作为亚洲最权威的RTC实时通信行业技术盛会,会议吸引了来自全球上千名开发者参加,Google.Slack.阿里巴巴.猎豹移动.荔枝FM等公司的技术大咖分享了各自在实时通信领域的技术.应用与经验.融云作为声网紧密合作的伙伴受邀参会,出席全球首个实时互联网生态圈Agora Plus启动仪式,并在Coding Workshop的环节中,助力开发者现场实现App即时通讯能力. 成为全球首个实

thinkphp整合系列之融云即时通讯在线聊天

随着技术的发展:现代的网站:越来越趋于应用形式了: 不再是像以前那样需要用户刷新页面:获取数据了: 服务器端可以主动向用户推送数据:更加及时性了: 比较突出的就是即时通讯在线聊天: 今个:我们要打造的就是类似于网页版微信的功能: 示例项目:http://git.oschina.net/shuaibai123/thinkphp-bjyadmin 一:注册融云账号 如果我们不是以即时通讯为主营业务:那么建议使用第三方的服务:这里以融云为例: 官网:http://www.rongcloud.cn/ 注

iOS开发融云即时通讯集成详细步骤

1.融云即时通讯iOS SDK下载地址   http://rongcloud.cn/downloads  选择iOS   SDK下载 2.进行应用开发之前,需要先在融云开发者平台创建应用,如果您已经注册了融云开发者帐号,请前往 融云开发者平台 创建应用:如果您还没有注册融云开发者帐号,请前往 融云官方网站 首先注册开发者帐号,注册后创建应用.注册地址  https://developer.rongcloud.cn/signup 3.登陆融云开发者平台 https://developer.rong

IOS集成融云SDK即时通讯

相信大家在项目中会用到即时通讯功能,自己去写的话会需要前后台合作,会大大加大开发的周期,所以考虑使用第三方的即时通讯平台,比如现在有融云,环信....等等等!楼主在项目开发过程中使用到过环信和融云,今天就为大家写下IOS端集成环信的方法和可能会遇到的问题.(融云提供聊天会话列表和聊天界面并且允许我们自定义,所以很方便的). 一:准备工作        1.首先打开融云官网http://www.rongcloud.cn/,注册自己的账户,并登陆.        2.点击左边创建应用,在打开的小窗口

融云CEO韩迎:如何基于云通讯构建企业竞争力

近日,"第四届互联网+高峰论坛暨大数据应用峰会 CIO 时代中国行苏州站"活动成功举行.本次论坛由中国新一代 IT 产业推进联盟.江苏省企业信息化协会指导,CIO 时代学院.苏州工业园区人工智能产业协会.江苏省企业信息化协会苏州代表处联合主办,吸引了来自全国各地的近150名行业翘楚.知名 CIO 及专家学者参会,与会者围绕"新 IT 助力制造业再增长"的主题进行深入沟通与探讨. 活动现场 融云 CEO 韩迎受邀参会,并就"如何基于云通讯构建企业移动信息化竞

融云即时通讯~~

iOS开发融云即时通讯集成详细步骤 端身正义 发表于 2016-04-12 16:12:11 1.融云即时通讯iOS SDK下载地址   http://rongcloud.cn/downloads  选择iOS   SDK下载 2.进行应用开发之前,需要先在融云开发者平台创建应用,如果您已经注册了融云开发者帐号,请前往 融云开发者平台 创建应用:如果您还没有注册融云开发者帐号,请前往 融云官方网站 首先注册开发者帐号,注册后创建应用.注册地址  https://developer.rongclo

Vue+原生App混合开发手记#2 融云即时通讯

最近开发的一个医药项目中要求加入即时通讯,最后选择了融云IM即时通讯服务,融云即时通讯包含Android SDK,iOS SDK以及Web SDK,为了节省开发时间,使用了Web SDK,这样在Android平台和iOS平台上都能表现一致.这是部分界面的效果, 分为两类用户,一类是医生,接受患者的咨询,一类是患者,可以与医生交流: 医生用户看到的界面 患者用户看到的界面 聊天界面       获取App Key 首先进入融云官网,找到Web SDK开发指南,按照提示先注册一个账号,拿到AppKe