Skip to content

端到端加密 EE2E

IBM: https://www.ibm.com/cn-zh/topics/end-to-end-encryption

维基百科:https://zh.m.wikipedia.org/zh-hans/端到端加密

什么是端到端加密?

端到端加密 (End-to-end encryption,缩写:E2EE) 是一种安全通信过程,可防止第三方访问从一个端点传输到另一个端点的数据。

原理:非对称加密。

什么是非对称加密?

对称加密算法


使用同一个密钥加密和解密

非对称加密算法


公钥加密:当且仅当私钥解密。

私钥加密:私钥、公钥都可以解密。

有了 https 为什么还要端到端加密?

  1. https 保护的是数据从浏览器到服务器这个过程的安全性,并不保证数据在服务器的安全性。

  2. 如果我们希望数据不希望服务器可以看到,然后服务器只是做一个转发的操作,不希望会话以外的人看到消息,那么端到端加密就可以了。

端到端加密方案

对称加密 AES 和非对称加密 RSA + 共享密钥(解决离线的问题)的方式来实现

评论区有人提问说 ssh?

什么是 SSH?SSH 是如何工作的? - 华为

不是说非对称加密最安全了为什么这里还用 AES 对称加密算法?

首先 RAS 非对称加密的效率很低,并不适合对大量数据进行加密

那么怎么解决呢?

使用对称加密 AES 算法加密消息内容,使用非对称加密来加密 AES 密钥

哪些应用使用了 端到端加密

WhatsApp(国外的即时通讯)

Zoom (实现了端到端加密会议)

如何使用代码实现?

https://github.com/rzcoder/node-rsa

js
const NodeRSA = require('node-rsa');
const key = new NodeRSA({b: 512});

const text = 'Hello RSA!';
const encrypted = key.encrypt(text, 'base64');
console.log('encrypted: ', encrypted);
const decrypted = key.decrypt(encrypted, 'utf8');
console.log('decrypted: ', decrypted);

端到端加密-时序图

首次安装客户端

mermaid
sequenceDiagram
par 开始处理
   客户端A ->> 客户端A : 生成密钥对
end

客户端A ->> 服务端 : 上传公钥

par 开始处理
   服务端 ->> 服务端 : 存储公钥
end

par 开始处理
   客户端B ->> 客户端B : 生成密钥对
end

客户端B ->> 服务端 : 上传公钥

par 开始处理
   服务端 ->> 服务端 : 存储公钥
end

打开会话 - 发送消息

mermaid
sequenceDiagram
客户端A ->> 客户端A : 打开会话

客户端A ->> 服务端: 根据userId获取对方公钥

服务端 -->>  客户端A: 获取对方userId对应公钥

par 处理1
   客户端A ->> 客户端A : 输入消息
and 处理2
   客户端A ->> 客户端A : 随机数+AES加密消息
and 处理3
   客户端A ->> 客户端A : 使用对方公钥加密AES密钥
end
客户端A ->>  服务端: 发送加密后的消息和aes密钥

服务端 -->>  客户端B: 转发消息

par 处理1
    客户端B ->> 客户端B : 使用私钥解密AES密钥
and 处理2
    客户端B ->> 客户端B : 拿到对称加密密钥解密消息
end