咱们来自字节跳动飞书商业使用研发部(Lark Business Applications),目前咱们在北京、深圳、上海、武汉、杭州、成都、广州、三亚都设立了办公区域。咱们重视的产品范畴主要在企业经验管理软件上,包含飞书 OKR、飞书绩效、飞书招聘、飞书人事等 HCM 范畴系统,也包含飞书批阅、OA、法务、财务、收购、差旅与报销等系统。欢迎各位加入咱们。

本文作者:飞书商业使用研发部 韩卫灵

欢迎咱们重视飞书技术,每周定时更新飞书技术团队技术干货内容,想看什么内容,欢迎咱们评论区留言~

摘要:

在几年前,笔者从前从事过一段时间的区块链研究工作,包含联盟区块链和公有区块链。这儿能够简略介绍一下,联盟区块链以 Hyperledger、Corda等,主要用于构建企业间互信环境,构成有限节点的联盟。公有区块链以btc,ETH,zcash等揭露的p2p网络。其间就触及到了众多的协议和算法。研究过包含PBFT(拜占庭 算法)、椭圆曲线加密算法、RSA加密算法、Diff-Hellman 加密算法,SSL加密算法等一系列的协议 。抛开其间根据数字钱银的一些资金盘(杀猪盘),我一向以为区块链一向是一个非常好的学习研究的材料。本文也是根据其间的协议由感而发,怎么完结一个去中心化的加密协议去确保集体信息交流的安全性。

为什么要加密

在互联网环境下,信息交流的一起也面临着信息走漏的风险 ,主要能够按以下问题分类

  • 内容窃取(比较隐私的个人或者集体的信息被走漏)
  • 内容篡改(信息交流的内容失真)
  • 内容假造(使用他人的身份发布信息)

常用的进犯手法

  • 木马移植
  • 使用假造
  • 网络抓包
  • 中间人进犯(DNS劫持)
  • 缝隙发掘

在信息交流的流程中,密码学能解决信息安全的三个效果

  1. 加密:防止坏人获取你的数据;
  2. 认证:防止坏人修改了你的数据而你却并没有发现
  3. 鉴权:防止坏人假冒你的身份

一个完好的信息交流加密流程如下:

发送方输入明文 -> 加密 -> 生成密文 -> 传输密文 -> 接收方解密 -> 得到明文

Diff-Hellman加密协议介绍

一些经典的的加密通讯协议都是根据Diff-Hellman加密算法来建立的,包含咱们熟知的https协议和 SSL协议。简略介绍一下,DH加密算法的流程吧。假定Alice 和Bob 希望把他们之前的通讯内容加密,可是又不能直接传递密钥,那这个时分DH算法就发挥效果了,能够通过这种密文交流 的方法算出一个对称加密的密钥

在diff-hellman 的论文中 证明了一个定理 : 假定有函数f(x),其间p 是一个足够大的素数,g 为一个常数 ,x为一个随机整数

image.png

那么

image.png

以下的密钥交流的方法的根据就是这个定理。

UML 图.jpg

多方通讯加密协议

现有的最为人知的加密通讯工具恐怕就属 telegram 为首了,可是具体telegram 的通讯协议的完结原理笔者找了好久也只看到了单聊加密是怎么完结的。那么在不可信网络中,怎么能够去中心化的完结集体信息交流加密呢? 根据这个问题,笔者也考虑了好久,想想能不根据DH 协议完结一个群聊的加密协议呢?

UML 图 (1).jpg

假定有这样一个集体,把这个集体看作是一个集合

image.png

在没有中心化节点的状况下,一条信息怎么在这个集体中传递,并且只能这个集体中的一员来解密这些信息。

咱们先来介绍两个概念。

  1. 在密码学中怎么证明一句话是你说的,而不是他人?

公私钥加密系统 给每一个主体都有一个私钥,私钥加密的信息公钥能够解出,而公钥加密的信息只 有私钥能解出,这样就有了公私钥签名验证的说法。

  1. DH 协议一向用于两头的通讯加密,怎么完结多端的加密?

DH协议的本质是根据密钥交流,那么能不能通过 n-1次 密钥 交流交流一个群聊加密的key,其实通过Diff-Hellman 证明进程能够扩展一下 ,对于任意 大整数

image.png

存在

image.png

所以这样看起来需求通过 n 次的密钥 交流得到终究的密钥。

假定现在有3方需求构建一个加密渠道 ,密钥洽谈流程能够简化成以下过程:

第一步,生成DH公钥,初始密钥,k1,k2,k3 为各自节点持有且不能被走漏

image.png

第二步,核算进程密钥,核算并发送到其它各个节点

image.png

第三步,核算进程密钥,并发送到其它各个节点

image.png

第四步,各节点合成终究的对称密钥

image.png

以上过程都能确保不走漏原始的密钥 k1,k2,k3 最后核算出对称加密密钥 K

UML 图 (2).jpg

注: 以上每一次对外发送数据时都需求 对应节点的私钥签名 sign,以上的通讯都是由server 端代完结的。

咱们能够用数学归纳法来看这个问题:如果现在有n个节点参与密聊,那么总共会经历  n 轮的密钥交流 ,每个节点在收到其它节点发送过来的消息后,都会将自己的 [交流密钥] 加入核算后的成果宣布,直到所有的密钥已经汇聚完结。如下所示

第一轮密钥核算:

image.png

第二轮密钥核算

image.png

第n-1 轮密钥核算

image.png

最后一轮核算就得到了终究的对称加密的密钥 K

笔者针对这种协议方法 ,完结了一个简易IM ,以下是开了4个客户端验证的成果 ,理论上能够开到n个客户端 。

安全性考虑:

这种将DH协议作为一个变种的使用方法理论上会有比原生的安全问题出现吗?其实咱们需求建立一个假定,就是在这个集体中是绝对可靠的,没有节点会有泄密的状况发生。这种方法简化下来就是 其实破解n 节点加密内容 和 破解两个节点的加密内容是一样的。咱们能够在加密算法的选择上做更多的安全加固。比如用椭圆曲线(ECC)签名算法来代替 RSA签名算法,中本聪从一开端规划 btc的时分就已经想好了将来量子核算机普及,比特币的加密算法怎么防量子进犯。

最后

本篇文章算是一个单点考虑并加以发散,只是几年前在深入研究了各种区块链的原理后由感而发,算是一个发散型的使用落地的考虑吧。个人感觉这是一个比较风趣项目而自己刚好又喜欢学以致用,比较喜欢追求朴素有用的东西。

参考文献

【 Diffie-Hellman】Key Exchange and Public Key Cryptosystems

【PBFT】拜占庭将军问题


加入咱们

扫码发现职位 & 投递简历:

image.png

官网投递:job.toutiao.com/s/FyL7DRg