从"嘿,今晚..."谈消息安全传输中的技术点
一、初级阶段:信息裸传
特点:在网络上传递明文
黑客定理一:网络上传递的数据是不安全的,属网络于黑客公共场所,能被截取
结果:传递明文无异于不穿衣服裸奔
改进方案:先加密,再在网络上传输
二、进阶阶段:传输密文
特点:
服务端和客户端先约定好加密算法,加密密钥
客户端,传输前用约定好的密钥加密
传输密文
服务端,收到消息后用约定好的密钥解密
这么传输消息安全么?
黑客定理二:客户端的代码是不安全的,属于黑客本地范畴,能被逆向工程,任何客户端与服务端提前约定好的算法与密钥都是不安全的
结果:任何客户端的代码混淆,二进制化都只能提高黑客的破解门槛,本质是不安全的
改进方案:不能固定密钥
三、中级阶段:服务端为每个用户生成密钥
特点:
客户端和服务端提前约定好加密算法,在传递消息前,先协商密钥
客户端,请求密钥
服务端,返回密钥
然后用协商密钥加密消息,传输密文
这么传输安全么?
结果:
如黑客定理一,网上传输的内容是不安全的,于是乎,黑客能得到加密key=X
如黑客定理二,客户端和服务端提前约定的加密算法是不安全的,于是乎,黑客能得到加密算法
于是乎,黑客截取后续传递的密文,可以用对应的算法和密钥解密
改进方案:协商的密钥不能在网络上传递
四、再进阶阶段:客户端确定密钥,密钥不再传输
特点:
协商的密钥无需在网络传输
使用“具备用户特性的东西”作为加密密钥,例如:用户密码的散列值
一人一密,每个人的密钥不同
然后密钥加密消息,传输密文
服务端从db里获取这个“具备用户特性的东西”,解密
这么传输安全么?
黑客定理三:用户客户端内存是安全的,属于黑客远端范畴,不能被破解
当然,用户中了木马,用户的机器被控制的情况不在此列,如果机器真被控制,监控用户屏幕就好了,就不用搞得这么麻烦了
结果:使用“具备用户特性的东西”作为加密密钥,一人一密,是安全的。只是,当“具备用户特性的东西”泄漏,就有潜在风险
五、高级阶段:一次一密,密钥协商
特点:每次通信前,进行密钥协商,一次一密
密钥协商过程,如下图所述,需要随机生成三次密钥,两次非对称加密密钥(公钥,私钥),一次对称加密密钥,简称安全信道建立的“三次握手”,在客户端发起安全信道建立请求后:
服务端随机生成公私钥对(公钥pk1,私钥pk2),并将公钥pk1传给客户端
(注意:此时黑客能截获pk1)
客户端随机生成公私钥对(公钥pk11,私钥pk22),并将公钥pk22,通过pk1加密,传给服务端
(注意:此时黑客能截获密文,也知道是通过pk1加密的,但由于黑客不知道私钥pk2,是无法解密的)
服务端收到密文,用私钥pk2解密,得到pk11
服务端随机生成对称加密密钥key=X,用pk11加密,传给客户端
(注意:同理,黑客由密文无法解密出key)
客户端收到密文,用私钥pk22解密,可到key=X
至此,安全信道建立完毕,后续通讯用key=X加密,以保证信息的安全性
六、总结
黑客定理一:网络上传递的数据是不安全的,属于黑客公共场所,能被截取
黑客定理二:客户端的代码是不安全的,属于黑客本地范畴,能被逆向工程,任何客户端与服务端提前约定好的算法与密钥都是不安全的
黑客定理三:用户客户端内存是安全的,属于黑客远端范畴,不能被破解
对于不同加密方法明:
明文消息传递如同裸奔,不安全
客户端和服务端提前约定加密算法和密钥,不安全(好多公司都是这么实现的=_=)
服务端随机生成密钥,发送给客户端,不安全
一人一密,客户端使用“具备用户特性的东西”作为加密密钥,弱安全
一次一密,三次握手建立安全信道,安全
好了,这下明白了,可以放心的和女/男票发送“啪啪啪”“咻咻咻”“嘿嘿嘿”了
只要即时通讯公司有良知,不从服务端偷看,一切都是安全的。额,这个“只要”的假设,貌似不成立
从"嘿,今晚..."谈消息安全传输中的技术点的更多相关文章
- 替换 wcf 消息传输中的 命名空间
替换 wcf 消息传输中的 命名空间,http://vanacosmin.ro/Articles/Read/WCFEnvelopeNamespacePrefix
- 【ASP.NET MVC系列】浅谈NuGet在VS中的运用
一 概述 在我们讲解NuGet前,我们先来看看一个例子. 1.例子: 假设现在开发一套系统,其中前端框架我们选择Bootstrap,由于选择Bootstrap作为前端框架,因此,在项目中,我们 ...
- 浅谈surging服务引擎中的rabbitmq组件和容器化部署
1.前言 上个星期完成了surging 的0.9.0.1 更新工作,此版本通过nuget下载引擎组件,下载后,无需通过代码build集成,引擎会通过Sidecar模式自动扫描装配异构组件来构建服务引擎 ...
- RabbitMQ消息可靠性传输
消息的可靠性投递是使用消息中间件不可避免的问题,不管是使用kafka.rocketMQ或者rabbitMQ,那么在RabbitMQ中如何保证消息的可靠性投递呢? 先再看一下RabbitMQ消息传递的流 ...
- Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)
MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...
- 浅谈线程池(中):独立线程池的作用及IO线程池
原文地址:http://blog.zhaojie.me/2009/07/thread-pool-2-dedicate-pool-and-io-pool.html 在上一篇文章中,我们简单讨论了线程池的 ...
- Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完毕測试代码)
MD5和RSA是网络传输中最经常使用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,仅仅能加密而不能解密. ...
- Android网络传输中必用的两个加密算法:MD5 和 RSA
MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...
- 浅谈如何检查Linux中开放端口列表
给大家分享一篇关于如何检查Linux中的开放端口列表的详细介绍,首先如果你想检查远程Linux系统上的端口是否打开请点击链接浏览.如果你想检查多个远程Linux系统上的端口是否打开请点击链接浏览.如果 ...
随机推荐
- 关于 CMSIS 标准 及 STM32F10x的固件库
CMSIS 标准英文全称是Cortex MicroController Software Interface Standard,翻译为中文意思就是 ARM Cortex 微控制器软件接口标准. 由于基 ...
- JavaSE 学习笔记之IO流(二十二)
IO流:用于处理设备上数据. 流:可以理解数据的流动,就是一个数据流.IO流最终要以对象来体现,对象都存在IO包中. 流也进行分类: 1:输入流(读)和输出流(写). 2:因为处理的数据不同,分为字节 ...
- hdu_1024_糖果大战_201404021640
糖果大战 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- sql-server-internals-architecture
http://kevinekline.com/slides/sql-server-internals-architecture/
- 用 Arduino Uno 给 Arduino Mini(Pro)烧录程序
用 Arduino Uno 给 Arduino Mini(Pro)烧录程序 准备 Arduino Uno Arduino Mini(Pro) 杜邦线若干 接线 首先去掉 Arduino 上的芯片ATM ...
- php apc缓存以及与redis的对比
apc缓存用户数据这个会用, apc_store() 和apc_fetch()函数. 那apc 缓存php 代码,这个怎么用呢? 原文: http://blog.csdn.net/w187046226 ...
- express 不是内部或外部命令(windows)解决方式
请环境变量设置 注意 "D:\soft\nodejs\"这个是笔者自己安装在电脑上的node js文件夹,请改动成自己的 假设安装的express是4.X就要安装 express- ...
- C++学习之命名空间
在C++中,命名空间(namespace)的目的是为了防止名字冲突.每个命名空间是一个作用域,在所有命名空间之外,还存在一个全局命名空间(global namespace),全局命名空间以隐式的方式声 ...
- android自己定义控件系列教程-----仿新版优酷评论剧集卡片滑动控件
我们先来看看优酷的控件是怎么回事? 仅仅响应最后也就是最顶部的卡片的点击事件,假设点击的不是最顶部的卡片那么就先把它放到最顶部.然后在移动到最前面来.重复如次. 知道了这几条那么我们就非常好做了. 里 ...
- Android学习之仿QQ側滑功能的实现
如今项目越来越多的应用了滑动删除的功能,Android本来遵循的是长按删除,IOS定制的是滑动删除,不可否认滑动删除确实在客户体验上要好一点,所以看了非常多关于仿QQ滑动删除的样例,还是感觉代码家的A ...