1. 通道加密

通道加密主要确保客户端和服务器之间的通信安全,防止数据被窃取或篡改。

1)产生随机数:客户端和服务器各自生成随机数,用于后续密钥的生成。

2)下发随机数:服务器将自己的随机数发送给客户端。

3)RSA加密客户端随机数:客户端使用服务器的公钥对自己的随机数进行RSA加密,并发送给服务器。

4)RSA解密:服务器使用自己的私钥解密客户端发送的加密随机数。

5)生成临时密钥和偏移量:双方使用各自的随机数生成临时密钥TempKey和偏移量TempIV。

6)生成ECDHE公私钥对:客户端和服务器使用ECDHE算法生成各自的公私钥对。

7)交换ECDHE公钥:客户端和服务器交换加密后的ECDHE公钥。

8)生成共享密钥:双方使用ECDHE算法结合对方的公钥和自己的私钥生成共享密钥ShareKey。

9)初始化参数和验证:服务器初始化通信参数并发送给客户端,同时进行数据完整性验证。

10)消息加密:后续每条消息使用MsgID, SessionID, Salt, SeqNo等参数结合ShareKey生成独特的密钥和偏移量,对消息内容进行AES256_CBC加密。

11)密钥过期:为了保证安全性,ShareKey会定期过期,过期后需要重新进行密钥协商。

2. 内容加密详解

内容加密确保用户之间的消息内容安全。

1)生成ECDHE公私钥:用户生成ECDHE公私钥,公钥发送给服务器,私钥保存在本地。

2)获取好友公钥:用户登录后从服务器获取所有好友的公钥。

3)生成共享密钥:发送消息时,使用自己的私钥和对方的公钥生成共享密钥ShareKey。

4)加密和解密消息:使用ShareKey生成AES256密钥对消息进行加密和解密。

3. 服务器数据库安全

服务器数据库的安全保护非常重要,以防止数据被篡改。

1)签名字段:数据库中的每条记录都包含签名字段,用于验证数据的完整性。

2)ECDSA公私钥:服务器使用ECDSA算法生成公私钥对,私钥用于签名,公钥用于验证签名。

3)签名和验证:对数据库中的敏感字段进行增删改操作时,服务器使用ECDSA私钥生成签名并更新到签名字段;读取数据时,服务器使用ECDSA公钥验证签名。

4. 密钥安全

密钥安全是加密通信的关键。

1)SRP算法:用户的登录密码、二次密码等敏感信息采用SRP算法进行保护,服务器不存储明文密码。

2)私钥存储:用户的加密私钥仅保存在用户设备上,不发送给服务器。

3)手动更新密钥:用户可以在客户端上手动更新内容加密的密钥,增强安全性。
总的来说,通过多层加密和验证机制确保了通信和数据的安全性。