即时通讯加密方案探讨
1.背景:
因为互联网是开发透明的,任何人都可能对你的产品进行破解研究,因此,在软件的有良好的安全意识是十分必要的。
2.安全问题分析:
2.1 客户端方面:
- 客户端被反编译源码,常见如: android apk被反编译,获取加密算法与密钥,从而进行破解,类似的还要使用JavaScript技术跨平台的移动开发框架等,若开发者不注意,很容易被逆向破解。
2.2 网络传输方面:
一般而言,API在网络中经http/https协议传输,有可能被黑客截取,修改数据包内容,伪造通讯数据获取重要信息。如手机连接到非法免费的wifi上,有可能安装了嗅包软件,并进行中间人攻击。以下是https中间人攻击的一个例子
image.png
3. 应对方法
3.1 客户端方面:
有些客户端使用的框架避免反编译是不可能的,常见anroid, 和使用javascript技术跨平台开发的框架如:reactnative, uniapp等。对于这种方案,最好把加/解密算法,密钥放置在native程序或动态库中,并增加混淆,增加破解难度。
3.2 网络传输方面:
- 不要使用http等明文通讯手段,使用https;
- 根据自己的业务场景使用合适的加密手段,常见有对称加密(3DES)与非对称加密(RSA)
3.2.1 对称加密(简单易用):
假设客户端无法被破解,使用对称加密已能被避免中间人攻击,该手段已用于各中大小厂商产品:
# 例子
客户端对称加密(3DES)-->路由器(密文传输)--> 服务器(3DES解密)
3.2.2 非对称加密RSA+数字签名:
image.png参考某支付平台(有改动),使用上可以在通讯中可使用RSA非对称加密传输,并使用MD5(传输参数+盐)对传输参数加密,防中间人篡改。可能某支付平台考虑到调试的方便,就没有对报文进行加密了。
3.总结:
采用加密会一定程度上加大研发投入与维护成本,具体需不需要就看业务需求了。E聊SDK提供了即时通讯加密方案的设计,有兴趣来探讨。
网友评论