网络传输与加密 (2)

网络传输与加密

让我们先回顾一下上次的验证过程,如下图

有了“原信息”和它对应的“md5签名字符串”,我们就可以做最基本的信息验证:通过md5签名字符串的一致性,来保障我们收到的信息没有受到更改。

P.S.:由于签名signature在后续文章中会另有所指,为区分md5签名字符串,我们将md5签名字符串的叫法,更改为md5指纹字符串。意思同签名是一样的,就是A之所以是A的证据、特征,可以用签名来表示,也可以用指纹来表示。这里,我们开始将md5字符串对应的这个特征,称作md5指纹。

但一个容易发现的漏洞是,如果“原信息”和“md5指纹字符串”同时被修改了该怎么办?原信息被代提成了伪信息,而md5指纹字符串也被替换成了伪信息所生成的md5码,这时候,原有的验证过程都可以走通,根本无法发现信息被修改了或者替换了。

为了解决这个问题,在工业实践中便会将验证和加密进行组合使用。除了单纯的组合,还会引入一些基本的小技巧。

例如,因为md5的验证算法是公开的,所以很容易生成一份信息的md5指纹字符串,从而对原信息进行伪造。那么,可以不可以让人无法或者说难于伪造这份信息的md5指纹字符串呢?

一个小技巧是:并不提供原信息的md5验证码,而是提供“原信息+a key”的md5指纹字符串:

这个key,就是一串如“2d2316235b41924ac7c4b194661d2984”这样的随机字符串,它由“发信人”和“收信人”分别单独保存。

这时候,我们的验证流程就变成了:

  • 发件人将“原信息”和“key”一起打包,生成一个md5指纹字符串。再将原信息和md5指纹字符串发送出去。
  • 收件人收到信息后,将“接受信息”和“key”一起打包,生成一个md5字符串,再与接收到的md5字符串比较,看它们是否一致。

在这样的情况下,即便是原信息和md5字符串同时被修改了,但因为伪造者并不知道这个md5字符串是在原有信息的基础上,增加了什么样的一个key字符串来生成的,他就几乎不可能提供一个“原信息+key”的md5字符串。因为他无法逆向推导出那个key长成什么样。而这个“几乎不可能”,是由md5加密算法所保证的。

另一种保障“原信息”和“md5指纹字符串”的方式,是直接考虑把md5验证码做加密。这种方式并不同上面的小技巧相冲突,事实上它完全可以和上面的技巧结合,构造出更安全的方式。但为了降低理解的困难程度,让我们先暂时抛开上面的小技巧,只是单纯地考虑“原信息”“md5指纹字符串”和“md5字符串加密”这三样东西。

还是回到刚开头提到的核心想法,为什么仅有“原信息”和“md5指纹字符串”是不安全的?因为这两者的对应关系是由一个已知的算法连通的。之前的小技巧,是把这个用于连通的“已知”算法,通过一个私密的key,巧妙地把这个公开的“已知”算法变成了一个“未知”的算法,从而无法制造出对应的md5指纹字符串。

所以,这里的重点其实是,你没办法去伪造md5指纹字符串。

基于这样的考虑,我们还可以用别的方式,让其他人依旧无法伪造出md5指纹字符串,例如,你根本就不知道这个md5指纹字符串长什么样!

怎么做呢?那就是,我不再提供“原信息和md5指纹”的组合,而是提供“原信息”和“用私钥加密后的md5指纹”,也即是把md5指纹又做了一次乱码。

你或许会问,加密了md5有什么用?不是照样可以直接把信息和md5指纹同时换掉吗?

没错,你是可以这样做,但是,这时候作为接收方来讲,他的接受验证过程,已经变成了:

  1. 用公钥解密,得到一串字符串,当作原信息的md5指纹。
  2. 将md5函数作用在接收到的信息,得到一个本地生成的md5指纹。
  3. 将本地生成的md5指纹和原md5指纹做比较。

所以,即便是你替换了原信息和md5指纹,但如果这个md5指纹没有被私钥加密过,那么按照上述步骤,通过公钥解密出来的字符串,便不会是相应的md5指纹,而是一串不知所云的乱码。从而,你必须通过私钥加密,才可以伪造md5指纹来欺骗接收方。

这个被加密了的md5指纹,也被称作数字签名(digital signature)。

此时,所有的安全问题,便落在了这个“私钥”上。只要它不被窃取,你发送的信息便是安全的、可以得到验证的。

那么,如何保证你的“私钥”不被窃取呢?使用网络传输吗?万一在半路上被劫走篡改怎么办?基于此,更为安全妥当的办法,便是使用物理传输,直接在现实中,手把手的将秘钥给发送方。

我们在生活中遇到过这样的情况吗?当然!还记得银行的网银盾么?为什么银行要煞费苦心地给你一个U盘?因为里面存放着你用来加密的私钥啊!(以及之后我们会谈到的证书)相比于通过网络连接将私钥发放给客户,直接通过现实中的实物来传递私钥,是更加可靠的。

近期回顾

不是不屑,而是自保
网络传输与加密
为什么需要提前撰写Spec文档

如果你喜欢我的文章或分享,请长按下面的二维码关注我的微信公众号,谢谢!

更多信息交流和观点分享,可加入知识星球:

原文地址:https://www.cnblogs.com/kid551/p/9434055.html

时间: 2024-08-29 03:41:15

网络传输与加密 (2)的相关文章

网络传输的加密与解密(不是很难理解的一个版本)

--网络传输的加密与解密--    由于互联网早期并没有考虑到数据报文安全的问题,早期的理念都是基于进行通信的.现在随着网络兴起,互联网上慢慢有很多"犯罪团体",用较低的犯罪成本通常是基于一个网络通信协议的一个小的漏洞来完成窃取.篡改.重播其他人的数据报文. 而往往计算机网络安全维护者和那些恶意攻击者玩的就是一个类似猫鼠游戏,网络安全维护者处处考虑对计算机的安全负责,而恶意攻击者处处找安全的漏洞.而对于那些恶意攻击方式大体分两种. 一种叫被动攻击,大体上来说就是窃听,攻击者获得传输信息

Oracle网络传输的加密和完整性验证

转自 http://blog.itpub.net/24052272/viewspace-2129175/ 测试环境: 11.2.0.4 winodows  单机 应用场景: 对oracle服务器和客户端之间的网络传输数据进行加密和完整性校验. 默认是使用明文方式传输数据,举例可以通过wireshark.sniffer等网络抓包工具抓取到传输的具体信息. 对于敏感信息是很不安全的. 举例: 对于汉字可以通过很多在线转换工具将HEX编码转换成可读汉字. 对于了解业务的人来说,这些信息是很有价值的.

网络传输与加密

谈到网络,就必然会涉及网络安全.但"安全"这个事情, 一下子就会让人联想到黑客,进而把"安全"这个事情无限放大为各种高大上.神秘莫测.不可知.这不是一个engineer应有的态度(<一次艰难debug的反思>). 要讨论网络安全,可以从最核心的"加密"谈起. 加密,英文叫encryption.显然,无论中.英文,都不太能够从字面文法上,给人以直观的联想和理解(这是典型的"装X亮词"的特性).那更接地气的直观说法是什

Android 密钥保护和 C/S 网络传输安全理论指南

注:本文将着重讲解 Android KeyStore.so 库保护 app key / secret.HTTPS 原理及其防中间人***措施. 谈到 Android 安全性话题,Android Developers 官方网站给出了许多很好的建议和讲解,涵盖了存储数据.权限.网络.处理凭据.输入验证.处理用户数据.加密等方方面面,甚至对于动态加载代码也提供了建议,具体可以看看 training 的?security tips?章节.而今天,我想特别来讲一讲在 Android 密钥保护和 C/S 网

使用加密解密技术和CA认证解决网络传输中的安全隐患

服务端:xuegod63.cn   IP:192.168.1.63 客户端:xuegod64.cn   IP:192.168.1.64   网络安全: 网络传输中的安全隐患-.   中间人攻击 全隐患:        解决方法 1.窃听-- >  加密 2.篡改 ->  哈西算法:MD5,sha1 (检查数据完整性) 3.伪装(钩鱼网站,伪装WIFI)  ->  身份认证(用户名/密码.数字证书) 4.网络中断 (内网冒冲网关,DDOS )  –>绑定静态arp地址: 加大服务器和

Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)

MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明文是yanzi1225627,得到MD5加密后的字符串是:14F2AE15259E2C276A095E7394DA0CA9  但不能由后面一大串倒推出yanzi1225627.因此可以用来存储用户输入的密码在服务器上.现在下载文件校验文件是否中途被篡改也是用的它,原理参见:http://blog.c

APP安全--网络传输安全 AES/RSA/ECC/MD5/SHA

移动端App安全如果按CS结构来划分的话,主要涉及客户端本身数据安全,Client到Server网络传输的安全,客户端本身安全又包括代码安全和数据存储安全.所以当我们谈论App安全问题的时候一般来说在以下三类范畴当中. App代码安全,包括代码混淆,加密或者app加壳. App数据存储安全,主要指在磁盘做数据持久化的时候所做的加密. App网络传输安全,指对数据从客户端传输到Server中间过程的加密,防止网络世界当中其他节点对数据的窃听. 这一篇我们先聊下网络传输的安全. 安全相关的基础概念

大文件/数据网络传输方法总结(转载)

网络编程中不免会遇到需要传输大数据.大文件的情况,而由于socket本身缓冲区的限制,大概一次只能发送4K左右的数据,所以在传输大数据时客户端就需要进行分包,在目的地重新组包.而实际上已有一些消息/通讯中间件对此进行了封装,提供了直接发送大数据/文件的接口:除此之外,利用共享目录,ftp,ssh等系统命令来实现大文件/数据也不失为一种好的方法. 1.基础的基于socket进行传输 基础的基于socket进行传输关键在于控制,需要自己行分包和组包. ////////////////////////

App安全之网络传输安全

移动端App安全如果按CS结构来划分的话,主要涉及客户端本身数据安全,Client到Server网络传输的安全,客户端本身安全又包括代码安全和数据存储安全.所以当我们谈论App安全问题的时候一般来说在以下三类范畴当中. App代码安全,包括代码混淆,加密或者app加壳. App数据存储安全,主要指在磁盘做数据持久化的时候所做的加密. App网络传输安全,指对数据从客户端传输到Server中间过程的加密,防止网络世界当中其他节点对数据的窃听. 这一篇我们先聊下网络传输的安全. 安全相关的基础概念