im:私聊消息端到端加密

概括:通过非对称加密算法获取共享密钥,通过对称加密算法对消息进行加密解密。 一、(非对称算法)获取共享密钥 采用 ECDH 算法获取共享密钥。 1. 公钥私钥什么时候生成? 当前设备第一次登录的时候,会生成公钥私钥,公钥保存到服务端,私钥保存在本地。 注册的时候 2. 共享密钥什么时候生成? 刚加好友的时候/刚进一个群的时候。 发现本地没有与一个好友/群的共享密钥的时候。 1. 私聊 发送消息时,需要对消息加密,加密用的是共享密钥。 共享密钥生成过程: A和B 都会生成各自的公钥和私钥,公钥存在服务端数据库中,私钥保存在本地。 根据 ECDH 算法,A 只需要获取到 B 的公钥,可以算得一个共享密钥,这个共享密钥和 B 用 A 的公钥算到的共享密钥是一样的。 共享密钥生成后,转为 AES 算法加密的密钥格式 2. 群聊 用户加入一个群的时候,会与这个群交换共享密钥,而不是与群内的所有用户交换共享密钥。服务端保存着 群与每个群用户的共享密钥,所以说,一个群有多少个用户,就会生成多少条共享密钥。 创建群聊的时候,群聊的公钥和私钥都存在服务端数据库。 用户A给群G发送消息时,用A与G的共享密钥加密;服务端获取到消息后,用 A与G 的共享密钥解密,然后把原文存到数据库;转发给群内用户的时候,用G与其他用户的共享密钥加密后再发送。 二、(对称算法)消息加密 采用对称加密算法 AES 进行加密,即用什么加密,就用什么解密。 服务端获取到私聊消息的时候,不用加密解密,因为服务端没有用户的共享密钥,直接存储消息加密后的二进制格式。 服务端收到群聊消息的时候,需要加密解密,存的是消息原文。

八月 31, 2024 · 1 分钟