首页 > 其他分享 >论如何设计一款端对端加密通讯软件

论如何设计一款端对端加密通讯软件

时间:2023-03-20 12:06:08浏览次数:58  
标签:本文 加密 网络 消息 软件 服务器 一款 客户端

前言

本文仅讨论设计思路,软件demo已经写好,是基于QT版本编写的,后期会挂在我的gitee上供大家参考,本文中部分片段代码均为demo中的代码片段。

设计架构

在目前IPv4的大前提下,为了在复杂网络环境中稳定通讯,都采用了C/S的模式,需要消息中转服务器(网络基础知识不在本文讨论范围,自行填空)。

消息服务器主要作用:

1、处理客户端与服务器之间的C/S消息。此类消息不需要其他客户端参与,由客户端发起请求,服务器执行完毕后将结果返回给该客户端。主要有:登录、注册、修改用户信息、获取离线消息等。

2、协助客户端与客户端之间的C2C消息。如果两个客户端均在线(登录状态)则直接转发消息,如果有一方离线,则缓存消息到数据库,等待该客户端上线后拉取离线消息时发还。

3、处理用户身份认证。对用户的登录、注销请求进行认证,并发放一次性访问令牌。

通讯加密的主要方式:

1、客户端与客户端之间的C2C消息中,聊天内容字段肯定是要加密的,且加解密仅限于两个客户端之间,服务器在转发和缓存消息的过程中,无法解密消息内容。参考signal聊天软件的模式,可以采用DH密钥协商算法(本文使用的是openssl库的ECDH),协商后的AES加密密钥保存在两个客户端自己本地,服务器不参与该内容的加解密。(网络包格式图片中灰色部分)

2、客户端与服务器之间的C/S消息理论上无需加密,因为没有聊天内容字段的信息,但为了保护用户登录认证、用户信息等内容,通讯内容也最好加密。本文使用的方法是:客户端使用预服务器设好的AES对称密钥加密后发送给服务器,服务器对内容进行解密后再进一步处理。(网络包格式图片中橙色部分)

论如何设计一款端对端加密通讯软件_设计

网络包的结构:

总结以上两个方面,本文设计的网络封包格式如下:

论如何设计一款端对端加密通讯软件_通讯软件_02

部分细节:

仅展示消息结构体(网络包格式图片中绿色部分)的设计详情,其他细节请参考项目源码。

请求数据包(客户端->服务器)

论如何设计一款端对端加密通讯软件_端到端加密_03

返回数据包(服务器->客户端)

论如何设计一款端对端加密通讯软件_端到端加密_04

标签:本文,加密,网络,消息,软件,服务器,一款,客户端
From: https://blog.51cto.com/yiyefangzhou24/6132504

相关文章

  • #创作者激励#嵌入式好用工具—软件篇【新人向】
    【本文正在参加2023年第一期优质创作者激励计划】文件下载在gitee仓库:https://gitee.com/lalhan/embedded-tool-sharing视频:https://www.bilibili.com/video/BV1rx4y1T7Jf......
  • JavaScript加密/解密与OpenAI的对接:生成加密对话的ChatGPT 4.0应用
    首先,我们来看一个简单的JavaScript加密算法的示例,该算法将输入的字符串每个字符的ASCII值加上1,并返回一个新的字符串。以下是加密函数的代码:javascriptCopycodefunctionen......
  • 仪器软件平台组成
    1、应用软件用户界面、参数下发、数据显示、参数计算、通信原理、通信算法、通信协议、SCPI响应2、远程控制基于VNC的Web仪器控制、网络配置3、SCPI基于网络、串口、G......
  • 一款开源的 Kafka 管理平台
    项目地址:https://github.com/provectus/kafka-ui 我是通过docker-compose安装的 操作过程可以会遇到地址解析问题,可参考文章:https://www.cnblogs.com/ReturnOfTheKi......
  • 软件开发的一些思考
    1.测试驱动开发1)测试驱动开发是有争议的。有些人鼓吹它的好处,有些人却质疑它的有效性。鼓吹和质疑者中都不乏大佬。2)测试贯穿开发过程(包括规划,设计过程),这个理念很对,目的......
  • 如何基于Security框架兼容多套用户密码加密方式
    一、说明当已上线的系统存在使用其他的加密方式加密的密码数据,并且密码不可逆时,而新的数据采用了其他的加密方式,则需要同时兼容多种加密方式的密码校验。例如下列几种......
  • 软件测试实验-黑盒测试
     序号输入数据覆盖等价类输出12009、12、2236星期322022、3、14226星期132008、3、01316输入日期无效42022、6、e2422输入日期无......
  • 软件质量保障体系建设
    转载:https://www.cnblogs.com/imyalost/p/15116840.html前言从事软件测试相关工作七年,做过功能测试、自动化测试、测试开发、性能测试、专项测试,也干过一段时间技术管理......
  • 硬件加密狗--软加密狗(软锁)--云授权的转变
      加密狗,由USB硬件加密狗--软加密狗(软锁)--云授权的转变圣天诺LDK软授权问:什么是软授权?答:软授权(也称软锁)是以计算机文件作为载体的软件许可证(License)类型,而硬授权(也称硬锁......
  • 【Java】Allatori代码加密
    一般来说我们在写Java程序时都会使用Maven(或Gradle)做依赖集成。这过程中Maven(或Gradle)作为编译黑盒,输入源码而输出字节码。但我们也知道Java程序是可以通过反编译工具看到源......