目录
- Android安全存储
- 零、 对于目前的研究做出的简单总结
- 一、android对隐私数据的保护现状
- 二、目前对于SD卡安全的研究
- 三、 示例1——Android系统用户隐私数据加密技术实现
- 1. 加密选项及确认模块
- 2. 底层加密实现
- 示例2:基于Android系统的手机隐私数据的加密研究
- 1. 加密算法解释
- 2. SD卡加密设计
Android安全存储
最近在实习的公司遇到了一些有关于android安全存储的问题。
有很多内容存储在sd卡上,毫无安全性可言,将SD卡转移到别的地方读取或篡改数据就非常危险。
因此进行了这个有关Android安全存储的调研(SD卡为主)。
参考资料附在文末。1,2,3,4,5
零、 对于目前的研究做出的简单总结
由于SD卡本身只是一个外部存储卡,类似U盘,没有对文件进行权限控制,因此程序只需要有SDCard的读写操作权限,就可以对所有的SDCard文件进行读写,电脑也可以访问SDCard文件。所以得出结论——解决SD卡内部的数据安全问题只有一下几种方案:
- 放弃SD卡的内部存储,转为存储到手机或服务器上。(前者可能会面临内存不足的问题,后者可能会面临存取速度不够快的问题)
- 利用对Android系统的调用和源码修改,实现安全存取SD卡数据。(不容易实现,就算理解了技术也很难有机会保证用户的设备上的系统能够正常操作)
- 利用其他人对于第2点的研究,试图把加密算法从整个SD卡或者是整个Android系统中提取出来单独作用在我们需要的文件上(目前我个人觉得比较靠谱,但是为了实现这一步必须要对第2种加密的方式有一定的理解)
一、android对隐私数据的保护现状
Android系统对于隐私数据的保护机制仅有 权限机制 、签名机制、沙箱机制 等保护效果较差的安全机制。
所以随之而来的安全问题吸引了很大一部分的学者和制造商都进行了一系列研究,提出了很多防护手段,其中最主要的两个防护手段是:数据加密 和 行为拦截。
对于这两种防护手段我们先来做一下具体解释:
- 数据加密:
数据加密方法主要是对用户手机中的隐私数据执行加密操作,从问题的源头来保护手机中的隐私数据。该方法更加彻底的保护了用户手机中的隐私数据,但是该方法实现起来更加的繁琐,然而加密过后的数据安全级别是基于它的密钥。一旦密钥被窃取,直接失效! - 行为拦截:
行为拦截主要是对于Android手机上数据访问进行的拦截,和本文所重点研究的SD卡存储关联性不大——毕竟,SD卡本身只是一个外部存储卡,类似U盘,没有对文件进行权限控制,因此程序只需要有SDCard的读写操作权限,就可以对所有的SDCard文件进行读写,电脑也可以访问SDCard文件。而所谓的行为拦截大多是指对于手机上的某些数据的访问进行限制,只有特定的应用才能访问特定的部分。
参考 NetMarketShare.com 的数据,得知Android目前仍然还是市场上占比最大的操作系统(37.4%),更是移动设备上占比最大的操作系统(67.1%),【数据更新于2018.11】,详细可以参考一下图表:
所以现在对于Android安全的调研一直没有停止,而且也不会停止。
二、目前对于SD卡安全的研究
在陈凯煜的《Android系统用户隐私数据加密技术实现》这篇论文4中,表示:
用户的隐私数据主要存储于两个位置:
- 内部存储中的SQLite数据库文件(/data/data/ <package name>/databases)
- 用户插入设备的SD卡
两处位置中。
考虑到我们项目的实际情况,基本符合上述说明,重点研究后一个存储未知的安全性。
董婷婷的这篇论文1中指出,陈凯煜的论文4中提出的SD卡加密方法虽然切实可行,确实是对SD卡中的隐私数据进行部分文件加密的保护方案,但是SD卡执行加密操作过后,用户对于数据的存取速率有所降低(原文说是“急速降低”),问题是因为作者(陈凯煜)直接在底层实现数据加密函数,然后再访问SD卡时调用,对SD卡实行了全卡加解密方案,用户虽然有选择的权利,但这是对整个SD卡中数据的加解密操作,因此直接拉低了对SD卡操作的速率,这一缺陷对于资源受限制的Android手机而言是致命的。
不过首先我们还是来研究一下陈凯煜论文中所介绍的加密方法。
三、 示例1——Android系统用户隐私数据加密技术实现
该加密方法(我们直接单独取原文中的SD卡加密模块部分)通过向原生Android系统中增加SD卡加密功能【注:是对Android系统进行操作,不适合于本项目,但是其中的加密算法可以用来理解。】
这个加密方法由加密选项及确认模块,和底层加密模块两部分组成。
1. 加密选项及确认模块
这一个模块主要就是写出一个pseudo-activity进行加密,并且征求用户同意,而且要正确输入密钥,才能够开始加密。(还有一些对于手机电量等情况的检测)。
2. 底层加密实现
由于Android创建、挂载和卸载SD卡都是由Vold(Volume Daemon,详情可以参考文末注解5)负责的,所以实现加密也是通过vold实现。
后续的话发现这个方法直接对整个SD卡进行了加密:
步骤很清晰,主要的内容都在加密函数,但是是对盘卷进行加密,所以肯定不能使用到项目中了。
示例2:基于Android系统的手机隐私数据的加密研究
董婷婷的这篇文章也是从android的系统结构开始讲起,讲了很多加密的理论知识。最后关于SD卡的部分做出了如下总结:
对SD卡的加密方式使用系统提供的AES加密算法来实现。
1. 加密算法解释
那么就对AES加密算法进行一个简单的解释:
AES对称加密算法:该算法是高级加密的标准,明文数据长度固定为128bit,不过加密使用的密钥长度没有规定,128bit,192bit或者是256bit都是可以设定的。密钥的长度不同决定加密时的循环次数,分别为10,12,14次循环,加密步骤也和DES不同,具体步骤为密钥扩展、N轮加密循环。不过该加密循环的第一轮和最后一轮不同于其他的每轮循环。
该加密算法采用不同于DES的对称block密码算法和代换-置换网络,其安全性能和速度是DES、3-DES等算法所不可比拟的,并且相对于DES和3-DES而言,该算法占用的资源也更少,更受世人喜爱。
2. SD卡加密设计
这次的方案还相对适合我们的项目一些,提出了一个通过加密SD卡中数据防止恶意软件操作来保护其安全的方案:不更改原来系统的情况下,增加一个不同于系统文件加密的API,新增函数需要得到用户正确的加密密语和密钥便可以在应用程序的代码中调用该API来执行加密操作。
相关的加密代码如下:
- 董婷婷. 基于Android系统的手机隐私数据的加密研究[D]. 2017. ↩︎ ↩︎
- netmarketshare操作系统数据网站 ↩︎
- 陈凯煜. Android系统用户隐私数据加密技术实现[D]. 2015. ↩︎ ↩︎ ↩︎