安全性
安全加密聊天软件
什么是端到端加密?
端到端加密是在源结点和目的结点中对传送的数据进行加密和 解密,因此数据的安全性不会因中间结点的不可靠而受到影响。 蝙蝠APP的所有数据都通过用户端生成的私钥进行加密后再发送, 任何第三方包括开发者都不能解开此数据。
蝙蝠APP采用了哪些安全层级?
• 通道加密
• 内容加密
• 服务器数据库安全
• 密钥安全
蝙蝠APP加密方式详细信息
1. 通道加密
通道加密中采用了哪些加密算法?
通道加密中使用到的 RSA, ECDHE, AES256_CBC, SHA256, SHA1等等(如下图)。
步骤:
(1. 客户端和服务器先产生随机数。
(2. 服务器下发随机数。
(3. 客户端用 RSA 对客户端随机数进行加密,并发送给服务器。
(4. 服务器用 RSA 解密客户端随机数(使用 RSA 的目的是防止 中间人攻击)。
(5. 客户端,服务器用自己的随机数加上对方的随机数生成临时 密钥 TempKey 和临时偏移量 TempIV (此时双方均持有相 同的 TempKey 和 TempIV)。
(6. 客户端服务器均使用 ECDHE 生成各自的公私钥对。
(7. 客户端用 TempKey, TempIV 对自己的 ECDHE 公钥进行加 密,并将密文发送给服务器。
(8. 服务器收到客户端的 ECDHE 公钥密文,并解密。
(9. 服务器使用 TempKey, TempIV 对自己的 ECDHE 公钥进行 加密,并使用 RSA 对 ECDHE。
(10. 服务器使用 ECDHE 算法,使用客户端 ECDHE 公钥明文+服 务器 ECDHE 私钥明文生成ShareKey。
(11. 客户端收到服务器的 ECDHE 公钥密文和签名,然后进行解 密和验证签名,如果没有问题,就使用客户端 ECDHE 私钥 明文+服务器 ECDHE 公钥明文生成 ShareKey。
(12. 服务器初始化各个参数,下发给客户端,参数包含:
• AuthKeyID: 服务器随机生成的客户端临时标识符。
• MsgKey: 由 ShareKey, AuthkeyID, MsgID, SessionID, Salt, SeqNo 以及真实的消息内容相加后进行 Sha256 后的值。
本参数用于:
a. 进行防止数据篡改的验证。
b. 与 ShareKey 一起使用,生成 Aes256 key, IV,用来对各条消息进行加密。
• MsgID:时间相关的消息 ID,用于防止重放和去重。
• SessionID:每次登录唯一的会话 ID。
• Salt:每次登录唯一的盐值。
• SeqNo:用于防止重放。
(13. 后续每条消息均会有不同的 MsgID, SessionID, Salt, SeqNo 和真实的消息内容;这些变化的值会导致 MsgKey 每次都不同。这个每次都 不同的 MsgKey 加上 ShareKey 可以为每一条消息生成对应的 32 字节密钥和偏移量。
(14. ShareKey 会过期,过期后需要重新进行密钥协商。
2. 内容加密详解
蝙蝠 非对称加密 如下:
(1. 用户生成 ECDHE 公私钥,保存在本地。
(2. 将公钥发送到服务器,私钥保存在本地。
(3. 用户登录,获取所有好友信息的更新,包含每个好友的公钥。
(4. 发送消息,和接收消息时均采用自己的私钥+对方的公钥生成 ShareKey。
(5. 使用 ShareKey 生成 AES256 的密钥,进行加密和解密。
蝙蝠 双棘轮算法 如下:
Alice(A)发送的消息传送了她的新公钥。 最终,Bob(B)将收到以下消息之一,并执行第二个DH棘轮步骤;在每个DH棘轮步骤中生成的DH 输出用于导出新的发送和接收链密钥。当各方轮流执行DH棘轮步骤时,他们轮流引入新的发送链,依此类推。
3. 服务器数据库安全
服务器上的数据库做了防止人为篡改的处理:
(1. 数据库有签名字段。
(2. 服务器上生成 ECDSA 公私钥。
(3. 服务器代码中对数据库敏感字段,比如:password, userID, friend 等做增删改操作时均通过 ECDSA 生成签名,并更新到签名字段。
(4. 服务器代码对 password, userID, friend 等数据进行读取,判断等操作时进行 ECDSA验证签名,只有通过验证才能进行后续流程,否则 给客户端报错。
(5. 服务端程序进行加密和签名保护。
4. 密钥安全
(1. 用户的登录密码,二次密码,自动登录密码,均采用 SRP 算法,服务器上不存储用户的密码。
(2. 用户的加密私钥仅放在用户手机。
(3. 用户可随时在客户端上手动更新内容加密的密钥。
什么是公钥和私钥?
公开密钥(PubKey:简称公钥)和私有密钥(PriKey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解 密。
因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。如上文加密中使用的RSA、ECDHE为非对称加密算法。
非对称加密工作原理?
(1. A要向B发送信息,A和B都要产生一对用于加密和解密的公钥和私钥。
(2. A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A。
(3. A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。
(4. A将这个消息发给B(已经用B的公钥加密消息)。
(5. B收到这个消息后,B用自己的私钥解密A的消息。其他所有收到这个数据的人都无法解密,因为只有B才有B的私钥。