端到端加密 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 为什么还要端到端加密?
https 保护的是数据从浏览器到服务器这个过程的安全性,并不保证数据在服务器的安全性。
如果我们希望数据不希望服务器可以看到,然后服务器只是做一个转发的操作,不希望会话以外的人看到消息,那么端到端加密就可以了。
端到端加密方案
对称加密 AES 和非对称加密 RSA + 共享密钥(解决离线的问题)的方式来实现
评论区有人提问说 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