论如何设计一款端对端加密通讯软件 您所在的位置:网站首页 怎样对json格式加密 论如何设计一款端对端加密通讯软件

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

2023-03-21 09:18| 来源: 网络整理| 查看: 265

前言

本文仅讨论设计思路,软件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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有