https安全性 带给im 消息加密的启发

大家好,我是蓝胖子,在之前# MYSQL 是如何保证binlog 和redo log同时提交的?这篇文章里,我们可以从mysql的设计中学会如何让两个服务的调用逻辑达到最终一致性,这也是分布式事务实现方式之一。今天来看看我们能够从httpsd设计中得到哪些启发可以用于业务系统开发中。

https原理分析

首先,我们来看下https 涉及到的握手流程,在http的三次握手基础上,https还要进行tls的握手协议。在经过tls握手后,后续客户端和服务端发送的消息也就都是加密的了。我们着重要看的就是tls握手过程。tls协议目前主要现存两个版本,我们都来看看。

tls1.2

首先,来看下tls1.2 协议下的握手流程。

在了解程序逻辑究竟为何如此设计之前,要搞懂我们这样做的目的。https之所以要用tls,无非就是为了两个目的,

  • 第一个目的: 让客户端能够认证服务端的身份信息,防止访问不安全的钓鱼网站。
  • 第二个目的: 对服务器和客户端之间的消息进行加密,不再明文传输。

对于第一个目的,可以通过数字证书解决,CA 向服务器颁发一个证书,在一次tls握手中,服务器会向客户端发放自己的证书,客户端在得到证书后向CA验证证书的合法性,如果合法,说明服务端是经过认证的,可以信任。

验证的原理则是通过公私钥加密算法和摘要算法,CA有自己的私钥,同时CA会将自己的公钥公布出去,然后CA对服务器的证书内容进行摘要计算,再对摘要进行私钥加密,私钥加密的内容只有公钥才能解密,私钥加密的内容称为签名信息,这段签名信息同样也会包含在证书中。

客户端在得到服务端证书的时候,通过对签名信息进行解密,得到证书的摘要信息,这个时候再对证书的内容进行摘要计算,看计算结果是否和解密得到的摘要信息一致,如果证书内容没被篡改的话,相同摘要算法得到的摘要信息应该是一致。

对于第二个目的,则是可以通过加密算法,为了性能,会话加密将会采用对称加密算法,这里的关键是得到一个会话密钥,但是为了安全性,会话密钥又不能直接采用明文进行传输。

所以tls是这样做的,客户端首先会生成一个随机数A,并已明文传递给服务端,服务端也会生成一个随机数B,并且把它传递给客户端,同时还会把数字证书传给客户端。数字证书中包含了服务端的公钥信息,客户端在收到证书取出其中公钥后,会再次生成一个随机数,随机数被称作pre master key ,这个随机数会通过证书中的公钥进行加密,传递给服务端,服务端会用自己的私钥对其进行解密,因为公钥加密的信息只能私钥才能解密,所以在服务端私钥不会泄露的情况下,黑客即使截获了报文,依然不能知道pre master key的值。

接着,便是服务端和客户端用相同的计算密钥的算法,以客户端和服务端的随机数A,B和pre master key生成相同的会话密钥,用于后续的通信进行对称加密。整个过程如下图所示,可以看到密钥的产生过程经历两次RTT,才会开始进行后续的请求发送。

请求一来一回称为一次RTT

image.png

关于tls1.2的完整握手过程,我也总结一个流程图,方便大家参考,

image.png

tls1.3

在了解了tls1.2的握手过程后,我们来看看tls1.3在握手过程中有哪些优化。tls1.3 废弃了一些密钥交换算法如RSA,默认用椭圆曲线ECDHE密钥交换算法,将密钥的产生时间从两次RTT缩短至了一次RTT。

废弃RSA密钥交换算法的另一个原因在于,使用RSA密钥交换算法,如果黑客持续截获https报文,如果数字证书中的公钥对应的服务端私钥泄露,那么黑客便可以将之前的历史报文进行解密,RSA密钥交换算法不具有前向安全性。前向安全指的是长期使用的主密钥泄漏不会导致过去的会话密钥泄漏

如下图所示,客户端和服务端都各自生成自己的一对用于ECDHE计算的随机公私钥和各自的随机数, 然后将各自的公钥和随机数传给对方,之后便可以各自通过这些信息计算出相同的会话密钥。

ECDHE 密钥交换具有前向安全性,因为参与会话密钥计算的私钥每次都是随机生成的,这样即使黑客获得了当前的私钥,也不能对历史https报文进行解密。

image.png

可以看到,ECDHE密钥交换算法只交换了各自的公钥便可以计算出会话密钥,即使黑客截获了消息内容,但是只有公钥,没有私钥也不能计算出会话密钥。我将tls1.3的握手过程总结到了下面的流程图中,大家可以参考下,

image.png

im消息加密解决方案

以上是https消息加密的实现原理,如果我们也想在消息传输中进行加密和认证处理,比如在im系统中对im消息加密,那么完全可以参考https的实现原理。

我们需要为im系统做消息加密消息防篡改的设计。

对于消息加密,参考https的交互,可以采用对称加密对后续会话内容进行对称加密,比如AES算法,加密的密钥可以采用ECDHE密钥交换算法,具有前向安全性。

对于消息防篡改,可以采用消息摘要算法,常见的摘要算法有md5,sha256,通过对加密后的报文进行摘要计算,在获取到报文的第一时间就通过对比计算出的消息摘要和报文中的消息摘要 来判断报文是否经过篡改。

更进一步,还可以设计一组只有im客户端和服务端知道的密钥,让客户端在进行摘要计算时,加上密钥,也就是通过类似hmac的消息认证算法,进行摘要计算,这样在对端接收到报文后,正常情况下,通过相同的消息认证算法和密钥会得到相同的摘要结果,如果计算的摘要结果和报文中的摘要结果不一致,那么说明报文不是从信任的客户端发来的,直接拒绝,这样便达到了消息认证的目的。

📢📢注意,在im消息系统设计时,对于消息认证我们没有去生成一个数字证书,对于https,客户端对服务端的消息认证却是通过数字证书的认证完成的。

这是因为在通信前,客户端和服务端对于彼此是未知的,它们只能通过一个已知的第三方机构CA完成这样的认证。

而我们自己写的程序就不一样,可以设计一个密钥让im客户端和im服务端程序都使用这个密钥对报文进行hmac消息认证,因为密钥只有自己的程序知道,如果得到的认证码和计算出的不一致,那么消息必然来自第三方。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/785223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Qt 学习笔记】Day3 | 使用两种方式实现helloworld

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Day3 | 使用两种方式实现helloworld 文章编号:Qt 学习笔记…

移动硬盘怎么加密?移动硬盘加密软件有哪些?

移动硬盘是我们在工作中最常用的移动存储设备,为了保护数据安全,需要使用专业的移动硬盘加密软件加密保护。那么,移动硬盘加密软件有哪些? ​BitLocker BitLocker是Windows的磁盘加锁功能,可以用于加密保护移动硬盘中…

MySQL(常用函数、多表查询)

文章目录 1.数据库函数1.count函数案例答案count(*)与count(列)的区别 2.sum函数案例答案 3.avg函数案例答案 4.max/min函数案例答案 5.group by 分组统计案例答案 6.字符串相关函数演示练习 7.数学相关函数演示 8.日期相关函数演…

Linux系统使用Docker部署个人IT工具箱IT-Tools结合内网穿透实现公网访问

作为程序员,在日常工作中,需要借助一些工具来提高我们工作效率,IT-Tools是为开发人员度身打造的一套便捷在线工具。它提供全面功能,使开发者能以更高效方式完成任务。经由IT-Tools,开发人员能轻松应对各类技术挑战&…

鸿蒙OS开发实例:【通知消息】

背景 HarmonyOS 论坛中有研发人员求助,反馈通知没有没有声音,因此在真机上验证了一下,果不其然,没有通知的提示音,后来解决办法也非常简单,在手机设置应用中,将可以打开的通知提示统统改为铃声…

告别繁琐代码,只需简单拖拽,便可从0到1开发!

告别繁琐代码,拥抱科技未来!只需简单拖拽,便可从0到1开发!代码即刻生成,一键下载,轻松上手。我们的低代码平台,不仅高效便捷,更完全开源,让你自由探索编程的无限可能&…

设计模式-装饰者模式在Java中使用实例-打印发票装饰抬头和脚注

场景 设计模式-装饰者模式在Java中的使用示例: 设计模式-装饰者模式在Java中的使用示例_java装饰者模式例子-CSDN博客 上面装饰器的调用示例如下 AbstarctComputer computer;//要买1台电脑computer new BaseComputer();//加一个内存条computer new MemoryDecor…

【面试专题】Spring高频面试题

1.Spring应该很熟悉吧?来介绍下你的Spring的理解 有些同学可能会抢答,不熟悉!!! 好了,不开玩笑,面对这个问题我们应该怎么来回答呢?我们给大家梳理这个几个维度来回答 1.1 Spring的发展历程 先介绍Spring是怎么来的…

密码学 总结

群 环 域 群 group G是一个集合,在此集合上定义代数运算*,若满足下列公理,则称G为群。 1.封闭性 a ∈ G , b ∈ G a\in G,b\in G a∈G,b∈G> a ∗ b ∈ G a*b\in G a∗b∈G 2.G中有恒等元素e,使得任何元素与e运算均为元素本…

鸿蒙(HarmonyOS)ArkTs语言基础教程开发准备

本文档适用于HarmonyOS应用开发的初学者。通过构建一个简单的具有页面跳转/返回功能的应用(如下图所示),快速了解工程目录的主要文件,熟悉HarmonyOS应用开发流程。 在开始之前,您需要了解有关HarmonyOS应用的一些基本概…

誉天华为认证存储HCIE课程怎么样

HCIA-Storage 课程介绍课程适合转行想进入IT行业者、零基础学员、IT从业人员、存储爱好者等 实验环境全真机,练习时间自由,7*24开机,可以随时通过远程连接进行试验课程内容 存储发展历史 存储硬件介绍 硬盘接口介绍 RAID技术 RAID2.…

解码视频流在opengl中的贴图投影计算

解码视频流在opengl中的贴图投影计算 修改顶点着色器cpp 文件放大缩小 我们把视频当成纹理,首先要确定贴入的坐标,原始坐标如下所示 static float vertices[] {// ---- 位置 ---- ---- 颜色 ---- - 纹理坐标 -1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f…

表单全选反选(前端)

1.Html和JavaScript <table><tr><th class"allCheck"><input type"checkbox" name"" id"checkAll"> <span class"all">全选</span></th><th>商品</th><th>商…

【成功案例】间隔数月双团伙先后利用某ERP0day实施入侵和勒索的解密恢复项目

1.背景 在2024年3月23日&#xff0c;我们的Solar应急响应团队&#xff08;以下简称Solar团队&#xff09;应某公司之邀&#xff0c;介入处理了一起财务系统服务器遭受黑客攻击的事件。该事件导致服务器上大量文件被加密。我们的团队迅速获取了一个被加密的文件&#xff0c;并立…

深度剖析:计算机集群在大数据体系中的关键角色和技术要点

什么是计算机集群&#xff1f; 计算机集群是一组相互连接的计算机&#xff08;服务器&#xff09;&#xff0c;它们协同工作以完成共同的任务。集群中的每个计算机节点都可以独立运行&#xff0c;但它们通过网络连接在一起&#xff0c;以实现更高的可靠性、性能和可扩展性。 典…

多图详细教你注册Google(Gmail)新账号,常见问题和注意事项

对于做外贸&#xff0c;或者需要和外国客户、朋友沟通的小伙伴来说&#xff0c;一个Google账号&#xff08;也就是Gmail账号&#xff0c;下述统一用Google账号来表述&#xff09;是非常必要的&#xff0c;一方面是通过Gmail邮箱收发邮件、沟通往来&#xff0c;另一个方面是很多…

3.29 文章翻译RO——Robust scheduling of building energy system under uncertainty

highlight 我们建立了一个带有冷却器和冰热能储存的建筑能源系统模型。 提出了一种两阶段鲁棒策略来调度系统运行。 具有适当参数的鲁棒策略优于确定性方法。 鲁棒策略和MPC方法的性能相似。 本文提出了一种鲁棒调度策略&#xff0c;用于在预测不确定的情况下管理具有太阳能发电…

[计算机毕业设计]基于SSM的宠物管理系统-介绍及文章指导

&#x1f389;**欢迎来到琛哥的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 琛哥&#xff0c;一名来自世界500强的资深程序猿&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 琛哥在深度学习任务中展现出卓越的能力&a…

【Git项目部署到本地仓库】

1. 下载安装Git 根据您的操作系统&#xff0c;访问Git的官方网站&#xff1a;https://git-scm.com/download/win 具体安装教程请访问其他博客&#xff0c;例如&#xff1a;http://t.csdnimg.cn/I28VO 安装完成后&#xff0c;您可以通过在winR键输入cmd打开命令行输入 git -…

服务器设置了端口映射之后外网还是访问不了服务器

目录 排查思路参考&#xff1a; 1、确认服务是否在运行 2、确认端口映射设置是否正确 3、使用防火墙测试到服务器的连通性 4、检查服务内部的配置 5、解决办法 6、学习小分享 我们在一个完整的网络数据存储服务系统设备中都会存有业务服务器、防火墙、交换机、路由器&a…