专栏首页普通程序员IM系统服务端消息加解密方案

IM系统服务端消息加解密方案

IM系统中信息可能涉及隐私或秘密,安全显得尤为重要,怎么确保信息的安全呢?

端到端加密是最安全的,只有聊天双方知道具体是什么消息,传输链路和消息服务器端都不知道消息内容。但是端到端加密在有些场景不适用,比如大规模群聊就不太好办。另外基于某些合规性要求,端到端加密也不合适。

如果不采用端到端加密,消息的加密就分为网咯传输加密和服务端存储加密两部分。

传输过程,tcp长连接可以采用ssl协议(当然也可以自己实现加密《为什么相同的消息微信每次加密后发送的内容都不一样?》),websocket采用wss协议。

难点变成了消息在服务端测的安全问题。消息在服务器端的路由过程怎么加密, 存储怎么加密?

IM系统后台逻辑很复杂,涉及众多模块,中间还有消息总线、缓存、数据库等中间件。每个环节消息都需要以密文形式呈现,否则很容易泄漏。

第一反应是简单写个加密算法如AES对数据进行加密解密就搞定了。但是这样存在一个非常大的隐患。密码怎么保存?

日防夜防,家贼难防。写代码的程序员,部署系统的运维人员都可能拿到密码,如果密码写在配置文件里,会与更多人得到密码,比如能够访问git仓库的人……总之,这种方式非常不安全。

因此,一套完善的加密系统显得尤为重要。

加解密系统结构如下图,主要包括4部分。1、加解密服务,2、加解密管理服务,3、加密服务器,4、秘钥存储库。

1、加解密服务。

以HTTP,TCP等方式对业务系统提供加密、解密、转加密等服务,提供加密服务器的负载均衡能力。同时提供业务系统可以直接使用的SDK。加解密服务以IP白名单+App_Key/App_Secret组合的方式对外提供访问授权,确保只有授权的系统才能访问

2、加解密管理服务。

核心是提供密码生成、管理等服务(密码是以加密后形式展示,只有加密服务器才能解密)。以及一些管理配置等功能

3、加密服务器

提供加密、解密的能力。加密服务器内置多种加密算法,通过超级秘钥(root key),实现对加解密秘钥(business key)的加密解密;通过加解密秘钥(business key)实现业务数据的加解密。超级秘钥(root key)被拆成3部分保存在秘钥卡或U盘中。

4、秘钥存储库

以密文形式存储加密机生成的加解密秘钥(business key),秘钥只有加解密服务器能解密。

整个加密方案涉及几个主要流程

1、加解密服务器初始化(或配置参数)

(1)启动加解密服务器,插入3张秘钥卡(U盘)

(2)加解密服务器已内置的算法(加密芯片)对root key进行加密,缓存到内存,同时保存的机器存储介质。因此,内存及存储上的数据处于密文状态。

(3)根据root key初始化business key加解密服务

(4)初始化业务数据加解密服务

2、生成加解密秘钥(business key)

(1)通过加解密管理服务,为即将生成的秘钥起名(名字及秘钥索引号),向加解密服务器发出生成秘钥的命令。

(2)加解密服务器随机生成business key,通过root key进行加密。把加密后的business key返回,关联秘钥索引号,并保存到秘钥存储库。

3、加密及解密业务数据

(1)业务系统调用加解密服务,传入 秘钥索引号、算法以及业务数据

(2)加解密服务调用加密服务器,传入加密后的business key、算法以及业务数据

(3)加密服务器完成加密,并返回结果

加密系统的核心要点是:业务数据和加密服务隔离,算法和秘钥隔离。

本文分享自微信公众号 - 普通程序员(farmerbrag),作者:封宇

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-12-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用过XA分布式事务吗?

    下图说明了一个DTP系统的本地实例,其中AP调用TM来构造事务。这些框表示X/Open DTP模型中的软件组件。箭头指示控制流的方向。

    普通程序员
  • 分布式事务利器——RocketMQ事务消息的启示

    我们以一个转帐的场景为例来说明这个问题,Bob向Smith转账100块。这个列子在瓜子也有很多实际场景映射,如:车源状态变化,订单状态变化,金融放款,物流运输…...

    普通程序员
  • 10分钟弄懂Raft算法

    分布式系统在极大提高可用性、容错性的同时,带来了一致性问题(CAP理论)。Raft算法能够解决分布式系统环境下的一致性问题。

    普通程序员
  • 是时候开始学习一波 MySQL 的私人秘书 binlog 了

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.n...

    业余草
  • 组块构建——《学习之道》(Barbara Oakley)读书笔记二

    高质量的组块构成的神经模型,不仅能与我们钻研的学科产生共鸣,也能在其他学科或生活领域产生反响。

    mwangblog
  • Centos7.4 安装mysql5.7

    此次安装的是5.7版本,该版本安装成功后,在日志文件/var/log/mysqld.log文件中给root生成了一个默认密码;查看密码:

    用户1432189
  • 一周AI看点 | AI界的体操运动员Atlas上线,第一家金融AI公司纽交所上市

    本期一周AI看点包括行业热点、投融资、业界观点、技术前沿以及应用等方面。 行业 柯洁苦战终结AI 41连胜,深夜失眠发文感慨 11月18日凌晨,世界围棋第一人柯...

    AI科技大本营
  • HTML5 download属性无效的问题

    如果url指向第三方资源,download会失效,表现和不使用download时一致——浏览器能打开的文件,浏览器会直接打开,不能打开的文件,会直接下载。浏览器...

    javascript.shop
  • 给你的博客增加动态看板娘

    经常访问我博客的朋友们也许会注意到左下角多了一个新伙伴,她是来自《药水制作师》的 Pio~

    栖枝perch
  • 一周AI看点 | 人民日报刊文人工智能标准有待厘清;Gartner发布2017年度新兴技术成熟度曲线

    本期一周AI看点包括:技术前沿,行业,观点,应用以及投融资等方面。 行业 Gartner发布2017年度新兴技术成熟度曲线:人工智能无处不在 Gartner公司...

    AI科技大本营

扫码关注云+社区

领取腾讯云代金券