即时通讯安全篇(十六):对称加密 vs 非对称加密?一文搞懂
本文由vivo 互联网服务器团队Deng Qian分享有排版和内容优化。1、引言在了解加密原理前我们来看看这样一个故事小红和小明是情侣一天小红给小明发短信说“亲爱的我银行卡上没有钱了你给我转1万块钱吧。”有过上当受骗经历的人都知道这有可能是小偷偷了小红手提包然后拿手机发的短信。不过我们小明学过加密原理于是他回复说“你直接拿我的银行卡刷吧密码加上我们第一次约会的日期就是663156。”很明显只有小明和小红知道他们第一次约会是什么时候假设是2008年4月1号那么小红就可以根据计算663156-200841462315得到银行卡密码就可以消费了。这就是加密的本质将信息与密钥相加得到加密后的信息只有知道密钥的人才能解密。本文将以通俗案例讲解加密本质介绍对称加密含 AES、迪菲–赫尔曼密钥交换与非对称加密RSA原理、特点及应用并阐释其数学基础。2、系列文章《即时通讯安全篇一正确地理解和使用Android端加密算法》《即时通讯安全篇二探讨组合加密算法在IM中的应用》《即时通讯安全篇三常用加解密算法与通讯安全讲解》《即时通讯安全篇四实例分析Android中密钥硬编码的风险》《即时通讯安全篇五对称加密技术在Android平台上的应用实践》《即时通讯安全篇六非对称加密技术的原理与应用实践》《即时通讯安全篇七用JWT技术解决IM系统Socket长连接的身份认证痛点》《即时通讯安全篇八如果这样来理解HTTPS原理一篇就够了》《即时通讯安全篇九你知道HTTPS用的是对称加密还是非对称加密》《即时通讯安全篇十为什么要用HTTPS深入浅出探密短连接的安全性》《即时通讯安全篇十一IM聊天系统安全手段之通信连接层加密技术》《即时通讯安全篇十二IM聊天系统安全手段之传输内容端到端加密技术》《即时通讯安全篇十三信创必学一文读懂什么是国密算法》《即时通讯安全篇十四网络端口的安全防护技术实践》《即时通讯安全篇十五详解硬编码密码的泄漏风险及其扫描原理和工具》《即时通讯安全篇十六对称加密 vs 非对称加密一文搞懂》☜ 本文3、什么是秘钥既然加密需要密钥那么密钥是什么呢密钥是作用于加密时的一串密码通过密钥进行信息加密传输到达接收者和监听者由于接收者也有密钥所以接收者可以根据密钥进行解密。从而防止通讯信息泄露。4、什么是对称加密前言讲的故事就是一个对称式加密小明和小红都知道第一次约会的日期。所以传统的对称式加密需要通讯双方都保存同一份密钥通过这份密钥进行加密和解密。所以对称加密也称为单密钥加密。对称加密的优势在于加解密速度快但是安全性较低密钥一旦泄露所有的加密信息都会被破解。同时密钥的传输和保密也成为难题。为了解决密钥传输的问题出现通过密钥交换建立共享密钥的技术。具体如何建立共享密钥呢我们往下看。5、对称加密之建立共享密匙在小明、小红和小偷的三人世界中由于小明是学过加密原理的知道迪菲–赫尔曼密钥交换Diffie-Hellman Key Exchange所以他知道如何建立共享密钥。5.1 颜料混合把戏接下来我们看看如何通过颜料混合把戏建立共享密钥吧。假设在房间中有小明、小红和小偷三个人每个人各自拥有相同颜色的颜料。在房间的正中间也有这些颜料。接下来小明要和小红建立共享密钥了。此时小明对大家说“我要用蓝色。”然后小明从自己的颜料里选择了黄色这个黄色就是小明的私钥小红和小偷都不知道。小明将自己的私钥黄色与公钥蓝色混合后得到了一种不能分解的颜色我们就叫“小明-蓝色”吧虽然大家都知道黄蓝变绿但是这里我们为了知道是谁的混合色还是以名字加公钥颜色来称呼然后小明将“小明-蓝色”公布了出来。同样小红听到了小明说用蓝色后也选择了自己的私钥红色与公钥蓝色混合得到了“小红-蓝色”并公布了出来。此时房间中小明、小红、小偷三人都知道了几个信息1他们都用了蓝色2小明公布了“小明-蓝色”小红和小偷不知道是什么颜料与蓝色的混合3小红公布了“小红-蓝色”小红和小偷不知道是什么颜料与蓝色的混合。接下来见证奇迹的时刻到了小明拿到“小红-蓝色”与自己的私钥“黄色”混合得到“小红-蓝色-小明”的新颜料。同样的小红拿到“小明-蓝色”与自己的私钥“红色”混合得到“小明-蓝色-小红”。大家发现了吗“小红-蓝色-小明”和“小明-蓝色-小红”是一模一样的颜色。而小偷不知道小明和小红的私钥颜色无法混合出与他们相同的颜色。至此共享密钥建立起来了。在了解了共享密钥的建立过程后我们将告别实体颜料采用数字的方式来建立共享密钥。注大家可能想到了小偷可以根据自己的颜料与公钥“蓝色”混合尝试得出“小明-蓝色”和“小红-蓝色”。这样的方法称之为穷举法也就是尝试所有的可能性进行信息破解所以加密算法在理论上都是可以通过穷举法破解的只不过实际上超级计算机都需要计算万亿年才能穷举出所有可能性。5.2 乘法把戏首先我们假设乘法如同颜料混合一样是不能分解的看看如何用乘法与数字建立共享密钥。小明公开了一个数字5然后小明选择了一个私人数字4然后利用乘法将两者混合起来得到“小明-5”20接下来小红也选择了一个私人数字7得到“小红-5”35小明拿到35*4140小红拿到20*7140。共享密钥建立完成。大家也发现了小偷知道20,35,5这三个数字后用除法就能算出小明和小红的私钥。所以接下来我们将了解实际使用中的如何使用乘法把戏来防止私钥被计算出来的。6、对称加密之迪菲·赫尔曼密钥交换算法我们都知道幂运算但是要让计算机计算就比较难了。所以我们会用幂运算作为建立共享密钥的乘法把戏。同时我们还要了解钟算的原理这里的钟可以理解成我们经常看到的时钟我们常见的时钟最大是12如果当前是10点过了4个小时后就变成了下午2点。也就是(104)mod122。了解了钟算和幂运算后就开始进入正题吧。还是小明、小红和小偷的房间小明声明了钟为11幂运算的底为2接下来小明和小红分别选择了自己的私钥4和7。1第一步小明混合自己的“小明-11,2”得到小红混合自己的“小红-11,2”得到。2第二步小明拿到“小红-11,2”7进行计算小红拿到“小明-11,2”5进行计算。大家注意到了吗小明和小红建立了共享密钥3而小偷无法根据已知的11、2、5、7这几个数字计算出密钥或小明小红的私钥。有了共享密钥后小明和小红就可以安全进行加密传输了。迪菲赫尔曼密钥交换7、 对称加密之AES加密过程AES 的全称是 Advanced Encryption Standard 是最流行的对称加密算法其加解密速度快。AES支持128位192位256位三种长度的密钥密钥越长安全性越高。AES加密时会把明文切分成许多小块的明文然后对每块明文单独加密将加密后的密文传送出去接收方再将密文切块解密得到明文。如下图所示。AES加密原理上一步中小明和小红已经协商好了密钥3。接下来就可以通过对称加密进行通信了。在小明、小红和小偷的房间中小明想把密码“462315”告诉小红于是1第一步将密码按照一位的长度进行切分实际中通常按128位进行切分就变成了“4”“6”“2”“3”“1”“5”2第二步对每块明文通过密钥3进行加密结果就是“795648”然后小明告诉小红和小偷“我的密码是795648”3第三步小红拿到密文后对密文进行切块对每块通过密钥3进行解密就得到了正确的密码“462315”而小偷由于不知道密钥就无法解密出正确的信息。8、什么是非对称加密8.1 概述在对称加密中加密和解密使用的是同一份密钥。所以在非对称加密中加密和解密使用的是不同的密钥。非对称加密中的密钥分为公钥和私钥。公钥顾名思义就是公开的任何人都可以通过公钥进行信息加密但是只有用户私钥的人才能完成信息解密。非对称加密带来了一个好处避免了对称式加密需要传输和保存同一份密钥的痛苦。现在最流行的非对称加密算法就是RSA加密算法具体是怎么做的呢我们继续往下看。8.2 RSA加密过程百科是这么解释的RSA加密算法是一种非对称加密算法在公开密钥加密和电子商业中被广泛使用。RSA是由罗纳德·李维斯特Ron Rivest、阿迪·萨莫尔Adi Shamir和伦纳德·阿德曼Leonard Adleman在1977年一起提出的。当时他们三人都在麻省理工学院工作。RSA 就是他们三人姓氏开头字母拼在一起组成的。▲ RSA算法的作者合影照片拍摄于1978年前面我们讲了如何通过钟算和幂函数建立不可逆计算机可以通过穷举法计算出私钥实际场景中就算是超级计算机也要计算几万亿年之久的共享密钥。由于小红是小明的女朋友小明天天在小红面前给她讲RSA加密算法的原理所以小红也知道怎么得出自己的公钥和私钥。接下来我们一起跟着小红的脚步看看RSA加密的公钥和私钥是怎么计算出来的1第一步小红选择了两个很大的质数p和q这里为了便于计算选择2和11;2第二步计算p和q的乘积np*q2*11223第三部计算n的欧拉函数φ(n)(p-1)*(q-1)104第四步选择一个小于φ(n)且与φ(n)互质的整数e{1,3,7,9}这里选择e75第五步计算e对于φ(n)的模反元素ed mode φ(n) 1dd3。到这里小红就得到了他自己的公钥(n,e)和私钥(n,d)。其中n就是钟大小e和d就是幂函数的幂。接下来就通过计算出来的公钥和私钥进行数据的加解密。还是小明、小红和小偷三个人小红对大家说我的公钥是22,7小明知道了小红的公钥后想讲自己的信息“14”告诉小红于是就用小红公开的公钥进行加密。具体步骤如下1第一步小明根据要加密的信息14进行计算得到加密后的信息20然后将20告诉小红和小偷2第二步小红有自己的私钥将加密信息20进行解密得到了小明想传递给小红的信息。而小偷呢知道22,7,20但是不知道小红的密钥22,3无法解密出正确的信息。RSA加密算法在数字签名中也发挥着巨大的作用假设小偷可以假冒小红说小红的公钥是22,9而小明不知道是小偷假扮的按照小偷的公钥加密后结果被小偷解密了。数字签名的作用就是防止信息被篡改小红说她的公钥是22,7的同时使用私钥给这段信息通常使用MD5值计算签名加上签名小明得到公钥22,7和签名13小明拿到签名后利用公钥计算出信息是否被篡改。9、加密的实际作用本文使用的很小的数来进行加密原理的讲解为了是读者可以方便进行计算。在实际使用中n,e都是特别大的数其中n的长度都在768以上1024长度被认为是基本安全的。123018668453011775513049495838496272077285356959533479219732245215172640050726365751874520219978646938995647494277406384592519255732630345373154826850791702612214291346167042921431160222124047927473779408066535141959745985690214341333478071698956898786044169848212690817704794983713768568912431388982883793878002287614711652531743087737814467999489×3674604366679959042824463379962795263227915816434308764267603228381573966651127923337341714339681027009279873630891710、写在最后或许看到这里大家心里还有许多疑惑1为什么小明和小红建立共享密钥时通过几次幂运算和钟算就能得到一样的共享密钥2为什么RSA加密算法要用两个质数3为什么通过公钥加密的信息可以通过私钥解开加密算法的背后是一道道迷人的数学难题。而RSA加密算法之所以被广泛运用是因为一个名为整数分解的古老数学问题你可以轻易找到两个很大的质数相乘得到一个结果n但是要将这个结果n分解回两个质数就变得极其困难。尽管这个所谓的“整数分解”问题被研究了数个世纪还没人能找到一个足够高效的通用方法解决它并对标准RSA钟大小造成危害。数学史中充满了未解决的问题尽管这些迷人的问题缺乏任何实际应用却单靠其美学特质就吸引了数学家进行深入探究。令人颇感惊讶的是许多这类迷人但显然无用的问题后来都有了很大的实用价值这一价值只有在问题被研究数个世纪后才得以破解。整数分解这一问题由来已久。对其最早的严肃研究似乎是在17世纪由数学家费马Fermat和梅森Mersenne进行的。欧拉Euler和高斯Gauss两位数学“泰斗”也在接下来的世纪里对这一问题做出了贡献。但直到公钥加密于20世纪70年代被发明分解大数字的困难才成为一个实际应用的关键。11、本文小结最后总结一下。首先我们通过一个诈骗短信的例子引出了加密的原理就是信息密钥密钥就是对信息进行加解密的一串数字。然后通过颜料混合把戏形象的演示了如何建立共享密钥。在使用乘法建立共享密钥的过程中学习了钟算和幂运算接着我们了解了RSA加密算法的过程通过两个质数生成公钥和私钥。最后我们根据公钥进行信息加密再通过私钥完成信息解密。12、参考资料[1] 探讨组合加密算法在IM中的应用[2] 一文读懂常用加解密算法与网络通讯安全[3] 非对称加密技术的原理与应用实践[4] 你知道HTTPS用的是对称加密还是非对称加密[5] IM聊天系统安全手段之通信连接层加密技术[6] IM聊天系统安全手段之传输内容端到端加密技术[7] 信创必学一文读懂什么是国密算法的[8] 传输层安全协议SSL/TLS的Java平台实现简介和Demo演示[9] 理论联系实际一套典型的IM通信协议设计详解含安全层设计[10] 微信新一代通信安全解决方案基于TLS1.3的MMTLS详解[11] 来自阿里OpenIM打造安全可靠即时通讯服务的技术实践分享[12] 简述实时音视频聊天中端到端加密E2EE的工作原理[13] 移动端安全通信的利器——端到端加密E2EE技术详解[14] 通俗易懂一篇掌握即时通讯的消息传输安全原理[15] 一分钟理解 HTTPS 到底解决了什么问题[16] 一篇读懂HTTPS加密原理、安全逻辑、数字证书等[17] 基于Netty的IM聊天加密技术学习一文理清常见的加密概念、术语等[18] 手把手教你为基于Netty的IM生成自签名SSL/TLS证书[19] 即时通讯初学者必知必会的20个网络编程和通信安全知识点[20] 零基础IM开发入门(五)什么是IM系统的端到端加密[21] 微信团队分享来看看微信十年前的IM消息收发架构你做到了吗[22] 零基础IM开发入门(一)什么是IM系统[23] 一套亿级用户的IM架构技术干货(上篇)整体架构、服务拆分等[24] 转转平台IM系统架构设计与实践(一)整体架构设计[25] 一套分布式IM即时通讯系统的技术选型和架构设计即时通讯技术学习- 移动端IM开发入门文章《新手入门一篇就够从零开发移动端IM》- 开源IM框架源码https://github.com/JackJiang2011/MobileIMSDK备用地址点此本文已同步发布于http://www.52im.net/thread-4899-1-1.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2496281.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!