端到端加密多设备同步

用户的数据只有用户能看到,开发人员也不能看到!了解端到端加密的基本原理和实现流程

1 加密方式

密钥分为对称密钥非对称密钥,非对称密钥是一对的,用一个加密,就得用另外一个解密。

密钥类型 用法(一般情况) 存储位置(一般情况)
对称密钥 (key) 对内容进行加解密 不存储
公钥(public key) 对称密钥分发(端到端加密)、签名验证 服务端
私钥(private key) 对称密钥分发(端到端加密)、签名验证 客户端

2 端到端加密技术流程

端到端加密(End-to-End Encryption,E2EE)确保只有通信双方(发送方和接收方)可以获取明文信息,任何第三方(服务商、政府、黑客)均无法获取,提供了强有力的隐私保护。解决的是隐私问题。

场景: 甲方向乙方发送消息

  • 甲方(发送方)
    • 生成消息对称密钥,对明文消息进行对称加密,获得密文消息
    • 向服务端发送请求,获得乙方公钥
    • 乙方公钥消息对称密钥进行加密,获得共享密钥
    • 向乙方发送密文消息共享密钥
  • 乙方(接收方)
    • 收到密文消息共享密钥
    • 乙方私钥共享密钥解密,获得消息对称密钥
    • 消息对称密钥密钥消息解密,获得明文消息

3 数字签名技术流程

数字签名(Digital Signature)可以确保数据未被篡改(完整性)、数据来自发送方(身份验证),可以有效防止中间人攻击(篡改数据实现监听)。解决的是信任问题。

场景: 甲方向乙方发送消息,甲方表明确实来自自己

  • 甲方(发送方)
    • 明文消息进行哈希计算,得到甲方摘要消息
    • 甲方私钥甲方摘要消息加密,得到甲方签名
    • 向乙方发送明文消息甲方签名
  • 乙方(接收方)
    • 收到明文消息甲方签名
    • 向服务端发送请求,获得甲方公钥
    • 甲方公钥甲方签名解密,获得甲方摘要消息
    • 明文消息进行哈希计算,得到乙方摘要消息
    • 比对甲方摘要消息乙方摘要消息,如果一致,说明消息未被篡改,如果不一致,说明消息被篡改,不可信。

4 E2EE多设备同步

场景: 用户同时有手机和电脑,需要实现2个设备的加密消息同步

解法: 对照E2EE的技术流程,将每一个设备视为一个用户

4.1 设备注册

新设备登录时,当前设备生成密钥对,将公钥发送到服务端存储。针对Web App无法实现设备级的识别,只能将设备+XX浏览器视为一个设备,是客户端级别的。

4.2 增量消息

场景: 手机上记录消息,电脑上同步消息

存储: 放在服务端,客户端不存储消息

  • 手机(记录方)

    • 生成消息对称密钥,用消息对称密钥明文消息加密,得到密文消息

    • 手机公钥电脑公钥临时对称密钥加密,得到共享密钥组,结构如下:

      [
      {
      "device": "mobile",
      "share_key": "**********"
      },
      {
      "device": "pc",
      "share_key": "**********"
      }
      ]
    • 密文消息进行哈希计算,得到手机摘要消息

    • 手机私钥手机摘要消息加密,得到手机签名

    • 向服务端发送密文消息共享密钥组手机签名

  • 服务端(存储方)

    • 手机公钥手机签名解密,获得手机摘要消息
    • 密文消息进行哈希计算,获得服务端摘要消息
    • 比对手机摘要消息服务端摘要消息,如果一致则存储密文消息共享密钥组,如果不一致则拒绝存储,并提示风险
  • 电脑(同步方)

    • 向服务端拉取消息,获得密文消息电脑共享密钥
    • 电脑私钥电脑共享密钥解密,得到消息消息密钥
    • 消息对称密钥解密密文消息,得到明文消息

4.3 存量(历史)消息

需求场景: 新设备接入后,需要同步历史消息

假设: 服务端已经存储100条历史消息

  • 平板(新设备)
    • 提示:用旧设备推送100条历史消息
  • 手机(旧设备)
    • 拉取100条历史消息的共享密钥组
    • 手机私钥解密共享密钥,得到每条消息的消息对称密钥
    • 平板公钥加密消息对称密钥,推送到服务端
    • 服务端更新100条历史消息的共享密钥组
  • 平板(新设备)
    • 平板私钥解密平板共享密钥,得到消息对称密钥
    • 消息对称密钥解密密文消息,得到明文消息

更新日志

  • 20250628:初稿