作者:有赞联通顔値担当 --- 花光组合(花菜 & 封光)
1 前言
安全问题在互联网,软件领域从来都是不可忽略的,而随着联通互联网的发展,移动端不管是在设备持有量上,还是在用户数目上,都早已赶超传统PC端,成为第一大入口端。因此提升对于联通安全领域的关注,加强移动端的安全等级,是很有必要的。
而通常情况下,移动端安全大致上可以分为以下几个维度:
Web安全,主要考虑Web服务中每一层可能的漏洞,及由此衍生的一系列安全问题,如:存储层中的SQL注入问题,Nginx(容器)层的DDoS问题,前端层级的XSS跨站脚本问题等。
网络通信安全,需要考虑通信过程中信息的安全性,防止因为信息泄漏造成的其他安全问题,比如:常见的各类方式的中间人问题等。
本地安全主要指客户端本地环境与数据的安全,以及代码被破解获得所造成的安全问题,如:明文储存问题,恶意二次打包问题,越权操作问题等。
其中,本地安全功击大多发生在攻击者自己手机上,开发者和运维较难感知,所以容易被你们忽视,从而很容易成为整个链路的安全弱项。本文将注重就本地安全,公司所采取的安全图片方案跟你们做一个介绍,其中的一些细节基于安全考虑会略去,保留其基本思路,希望对你们有所帮助,也欢迎共同交流。
2 安全图片解决方案
安全图片方案解决了本地安全的几个问题:
2.1 优点
当然,该方案也存在一些问题,比如数组的存取须要走I/O以及二进制流处理,一定程度上会影响APP性能,同时安全性构建在SDK本身和安全图片安全性的基础上,容易在这一块出现安全弱项。
所幸,正常获取数组的花销时间通常都不会超过30毫秒(视具体算法而定)。而安全性问题,还是须要靠持续强化SDK安全性,强化安全图片使用的算法,来提高弱项,增大破解成本。
3 安全图片
我们的安全图片方案主要包含了安全图片生成,安全图片消费,二次打包检测,调试检测等功能,这些功能分布在安全SDK及图片生成工具(以web方式提供)中。
结构如下:
可以看见,图片文件作为信息加密和储存的中心媒介,在其中起到了极其重要的作用。其实这儿也可以用其他方式的文件,比如文本文件,视频文件,音频文件。
那么为何要用图片呢?综合来看:
所以技术选型过程中,根据实际业务形态,也可能选择音频、视频、特殊文本等其他文件作为中心媒介,比如含有大量音视频信息的APP/游戏,包含好多特殊格式电子书的电子书阅读软件,等等。
3.1 安全图片方案-流程
从结构图可以看出,我们的图片解决方案包含了”获取web端(图片生成工具)生成的安全图片”,”在APP中通过SDK使用安全图片”这两个流程。
3.1.1 获取安全图片
获取安全图片流程中,由于iOS和Android各自的包检测依赖项不一样,在输入项上会有所区别,iOS使用BundleID、Android使用keystore的数字签名SHA1值作为检查项。
在获取到用户输入信息然后,还须要一个加密的关键信息:加密秘钥。
这里可以有三种思路:
这三种形式各有利弊:
在得到了秘钥以后,结合用户输入的信息,通过对称加密算法,生成加密后的密文再写入图片之中。
写入图片的方式好多,比如如下两种:
上述方案相对比较简单,如果对安全性有更高的需求,可以从图片本身结构入手,比如通过你要加密的信息构造出RGB、alpha等信息,然后根据标准png/jpg/bmp等格式构造出一张全新的图片,也可以在中间根据某种规则穿插一些混淆数据。这样生成的图片加密程度较高,不容易破解,但相对来说开发成本较高。
3.1.2 消费安全图片
目前我们的方案中,用户领到包含密文和秘钥的安全图片以后,需要把安全图片导出工程文件中(图片可以正常使用),然后由安全SDK获取图片中的秘钥及密文,用秘钥揭秘密文后,获取用户所须要的信息。这里的过程基本就是安全图片生成流程的一个反向过程。
不过和图片生成流程不同的是,安全SDK同时须要考虑SDK本身的安全性,所须要做一些额外的事情,比如:
限于篇幅,这里暂不展开讨论。
3.2 使用
3.2.1 使用工具生成安全图片
我们的工具是基于h5和node建立的,入口置于了内部联通门户上,使用特别便捷。
界面如图:
只须要填入对应的BundleID(SHA1)/Key/Value,再传入一张APP中用到的图片,工具都会按照传入信息生成安全图片,并让用户下载至本地。
3.2.2 使用安全图片获取KEY
整合SDK到APP中,并导出安全图片后,SDK的使用方法十分简单,直接在APP中调用如下代码,即可获取所需key对应的value:
String value = SecuritySDK.get(String key);
4 总结
本文探讨了我们实现安全图片方案的基本思路,以及安全图片方案的流程。当然,其中还有一些具体实现,以及我们尚未完成但计划去构建的东西,包括但不仅限于以下:
这些在短短的一篇博客中都无法详细叙述,所以会在后续的文章中,再一一和你们详尽说明,共同阐述。也欢迎诸位不吝赐教,畅所欲言,发表自己的意见和看法。
我们积极拥抱新技术,不给自己设边界,勇于跳出舒适区