安全问题
首先App的安全问题主要包括以下三个方面
- 本地代码安全
可以通过代码混淆,关键字符串或者重要变量加密;
通过加壳防止二次打包 - 本地数据存储
持久化数据的加密,尽量不要保存重要信息在本地(如用户密码之类的) - 远程数据通讯安全
本文主要讨论网络通讯的安全问题
远程数据通讯安全
保证远程数据通讯安全一般方法是采用数据加密的方式,常用的数据加密无非就两种
对称加密算法(如AES)
- 对称加密强度非常高。
- 无法安全地生成和保管密钥。
- 如果每次会话都使用固定的、相同的密钥加密和解密,存在很大的安全隐患。
非对称加密算法(如RSA)
- 非对称加密主要用于密钥交换(也叫密钥协商),能够很好地解决对称加密的问题。
- 客户端和服务器每次新建会话时都使用非对称密钥交换算法协商出对称密钥,使用这些对称密钥完成应用数据的加解密和验证,整个会话过程中的密钥只在内存中生成和保存,而且每个会话的对称密钥都不相同(除非会话复用),中间者无法窃取。
- 非对称密钥交换很安全,但同时也是 HTTPS 性能和速度严重降低的“罪魁祸首”。想要知道 HTTPS 为什么影响速度,为什么消耗资源,就一定要理解非对称密钥交换的整个过程。
两个加密的问题
- 在非对称密钥交换算法出现以前,对称加密一个很大的问题就是不知道如何安全生成和保管密钥。
- 非对称密钥交换过程主要就是为了解决这个问题,使得对称密钥的生成和使用更加安全。
- 密钥交换算法本身非常复杂,密钥交换过程涉及到随机数生成,模指数运算,空白补齐,加密,签名等操作,比较耗费性能。
非对称加密的公钥私钥问题
简单来说,在非对称加密中,用公钥加密的数据只有私钥才能解密;相反的,用私钥加密的数据只有公钥才能解密。一般来说,他们负责以下内容:
- 公钥负责加密,私钥负责解密;
- 私钥负责签名,公钥负责验证。
HTTPS中的SSL 协议既用到了非对称加密技术(公钥加密),又用到了对称加密技术。
所以结合HTTPS中的SSL握手协议可知,每次新建会话,就会产生新的SSL握手,从服务器返回的证书携带公钥,客户端生成随机码的时候,使用证书中的公钥加密随机码,然后服务器接收到后,使用私钥解密获取随机码。这样的过程,就算公钥和加密后的随机码在传输过程中被截取,没有与之匹配私钥也是无法解密的。
这个过程可以成为非对称加密
SSL握手协议后期,客户端和服务器都拥有三个随机码生成的同一个对称密钥(相同的),客服端和服务器通讯的时候,使用这个相同的密钥进行加密解密。
这个过程称为对称加密
SSL的CA证书是采用非对称加密的方式实现的。包含一个公钥(加密随机码的)以及该密钥所有者的信息。证书还标明有有效期,并通过另一密钥(CA私钥)进行签名。
客户端验证证书的有效性一般是验证有效期,名字是否一样,发行者的公钥能否能验证通过。“发行者数字签名”。
让网络通讯更安全
-
不要使用HTTP通讯
因为HTTP协议使用明文传输,就算是POST方式(以body方式传送数据),一样可以轻易截获。 -
自定义的通讯方式,如手动实现TCP长连接,或者UDP通讯可以使用加密算法加密数据,如对称加密或者非对称加密。
-
使用HTTPS通讯
-
不要在本地存储密码,就算是加密过的密码,本地登录可以使用token校验,传输密码的时候使用加密后的密码,如hash散列(md5或者SHA-1),或者散列前加盐。
盐(Salt),密码学中,是指在散列之前将散列内容(例如:密码)的任意固定位置插入特定的字符串。这个在散列中加入字符串的方式称为“加盐”。其作用是让加盐后的散列结果和没有加盐的结果不相同,在不同的应用情景中,这个处理可以增加额外的安全性。