陆继翔 李映
摘 要:数据加密是企业级移动设备重要的功能,防止数据被未经授权的用户或应用程序所访问。谷歌从Android3.0开始提供磁盘加密解决方案。但它只对内部存储设备进行加密。本文基于eCryptFS方法提出了对Android系统内部和外部存储设备都进行数据加密的整体方案,同时也提供了对Android应用程序级的数据加密方法,提升了Android移动设备的安全性。
关键词:Android;数据加密
1 引言
伴随着Android等移动智能终端产品消费的流行,Android 的开放性带来的各种风险(安装未知应用软件,刷第三方ROM,肆意的ROOT提权等行为)严重威胁到该平台的安全。手机上的数据保护是用户最为关心的问题,如短信、通话记录、其它手机内的私密信息等的安全性,用户都非常担心。基于数据安全性的考虑,谷歌从Android 3.0开始,在Android上提供磁盘加密解决方案。磁盘加密是保护信息的一种技术,它通过将数据转换成不可读的代码,不易被未经授权的人破译。它是对磁盘物理扇区直接操作,加密一个磁盘或磁盘卷上的所有数据,安全性高。
2 Android磁盘加密解决方案
谷歌Android磁盘加密解决方案是基于dm-crypt方法,与其它创建加密文件系统的方法相比,dm-crypt方法有着无可比拟的优越性:它的速度更快,易用性更强。除此之外,它的适用面也很广,能够运行在各种存储块设备上,即使这些设备使用了RAID和LVM也毫无障碍。dm-crypt方法之所以具有这些优点,主要得益于该技术是建立在2.6版本内核的device-mapper特性之上的。device-mapper是设计用来为在实际的块设备之上添加虚拟层提供一种通用灵活的方法,以方便开发人员实现镜像、快照、级联和加密等处理。dm-crypt使用了内核密码,应用编程接口实现了透明的加密。
dm-crypt具有动态加密的功能。动态加密(也称实时加密,透明加密等,其英文名为encrypt on-the-fly),是指数据在使用过程中自动对数据进行加密或解密操作,无需用户的干预,合法用户在使用加密的文件前,也不需要进行解密操作即可使用,表面看来,访问加密的文件和访问未加密的文件基本相同,对合法用户来说,这些加密文件是“透明的”,即好像没有加密一样,但对于没有访问权限的用户,即使通过其它非常规手段得到了这些文件,由于文件是加密的,因此也无法使用。由于动态加密技术不仅不改变用户的使用习惯,而且无需用户太多的干预操作即可实现文档的安全,因而得到了广泛的应用。
Android磁盘加密解决方案遵循下面的步骤对Android设备上的所有内部数据进行加密:
⑴Android系统得到用户的锁屏密码,然后执行“cryptfs enablecrypto inplace”命令去调用VOLD。VOLD是VOLUME DAEMON的简称,它是负责大容量存储设备挂载和删除的守护进程。
⑵如果VOLD进程通过错误检查,它将设置系统属性vold.decrypt为“trigger_shutdown_framework”。这将导致init.rc停止主类和late_start系统类的服务。VOLD进程然后停止并挂载外部设备SD卡,以及手机内部的数据文件夹。
⑶VOLD进程然后安装一个tmpfs/data(128M字节的RAM磁盘),并设置系统属性vold.decrypt为“trigger_restart_min_framework”。这将导致init.rc重新启动主类的服务。Android系统将在用户界面当前屏幕上弹出进度条,查询当前状态并每5秒更新一下进度条。
⑷VOLD进程然后设置加密映射,它创建了一个虚拟的加密存储设备块映射到实际的存储设备块,每个扇区进行加密时它是可写的,而每个扇区解密时它是只读的。
⑸VOLD进程创建和写入加密页脚。然后VOLD进程启动一个循环来读取实际设备块的每个扇区,然后把它写入加密的存储设备块。
⑹当加密设备内部存储器中的所有文件已成功完成后,VOLD进程重新引导系统。
3 摩托罗拉磁盘加密解决方案
虽然谷歌的Android磁盘加密解决方案保护了Android手机的内存或闪存等内部存储设备上的数据,但对Android手机的外部存储设备,如SD卡等却无法进行数据加密保护。为了实现对Android手机外部存储设备的数据进行加密保护,摩托罗拉提出了基于eCryptFS方法的磁盘加密解决方案,用于保护摩托罗拉Android智能手机内部存储设备和外部存储设备如SD卡上的数据。
eCryptfs是在Linux内核2.6.19版本中引入的一个功能强大的企业级加密文件系统,堆叠在其它文件系统之上(如 VFAT,YAFFS2,Ext2,Ext3等),为应用程序提供透明、动态、高效和安全的加密功能。本质上,eCryptfs就像是一个内核版本的Pretty Good Privacy(PGP)[3]服务,插在VFS(虚拟文件系统层)和下层物理文件系统之间,充当一个“过滤器”的角色。用户应用程序对加密文件的写请求,经系统调用层到达VFS层,VFS转给eCryptfs文件系统组件(后面会介绍)处理,处理完毕后,再转给下层物理文件系统;读请求(包括打开文件)流程则相反。
eCryptfs的设计受到OpenPGP规范的影响,使用了两种方法来加密单个文件:
⑴eCryptfs先使用一种对称密钥加密算法来加密文件的内容,推荐使用AES-128算法,密钥FEK(File Encryption Key)随机产生。有些加密文件系统为多个加密文件或整个系统使用同一个FEK(甚至不是随机产生的),这会损害系统安全性,因为:a.如果FEK泄漏,多个或所有的加密文件将被轻松解密;b.如果部分明文泄漏,攻击者可能推测出其它加密文件的内容;c.攻击者可能从丰富的密文中推测FEK。
⑵显然FEK不能以明文的形式存放,因此eCryptfs使用用户提供的口令(Passphrase)、公开密钥算法(如RSA算法)或 TPM(Trusted Platform Module)的公钥来加密保护刚才提及的 FEK。如果使用用户口令,则口令先被散列函数处理,然后再使用一种对称密钥算法加密FEK。口令/公钥称为FEFEK(File Encryption Key Encryption Key),加密后的FEK则称为 EFEK(Encrypted File Encryption Key)。由于允许多个授权用户访问同一个加密文件,因此EFEK可能有多份。
这种综合的方式既保证了加密解密文件数据的速度,又极大地提高了安全性。它支持加密的文件名和目录名。
eCryptFS是摩托罗拉Android内核的一部分。启用并配置为一个可加载的内核模块(CONFIG_ECRYPT_FS=M)。图1为eCrypfs的架构。
图2描绘了摩托罗拉磁盘加密解决方案的所有主要Android系统组件之间调用关系。粉红色表明是方案新引入的组件,蓝色表明需要修改的Android组件,灰色表明已经支持某些功能的Android组件,不用修改。
以加密文件系统的初始化过程为例,本文给出所涉及的组件之间的调用步骤,如图3所示:
对于外部存储设备SD卡,只有用户在用户界面上启用了“加密SD卡”选项,摩托罗拉的磁盘加密解决方案才会对它进行数据加密,因为eCryptfs支持进行动态加密,数据在使用过程中自动对数据进行加密或解密操作,无需用户的干预。图4显示了用户启用和禁用磁盘加密的内部和外部SD卡的整个流程。
因为手机的闪存不能像SD卡一样可以移动,摩托罗拉磁盘加密解决方案对Android智能手机的内部存储设备每个文件在/ data分区进行加密。为了避免ANR(应用程序长时间不相应)和其它Android的性能问题,摩托罗拉的Android设备在进入“系统恢复”模式后进行加密操作,这样没有用户交互和启动Android ANR机制。然后设备将完成的所有文件进行复制,并重新写入eCryptfs加密的文件。
4 摩托罗拉应用程序级加密解决方案
磁盘加密解决方案有一个不足:在手机安装加载的加密存储设备成功后,任何应用都可以访问存储设备上的文件,当文件被读取时,解密操作是自动完成的。降低了数据安全性。因此,摩托罗拉还提供应用程序级的加密解决方案。当用户启用应用程序级的加密,将不使用Android标准的SQL接口来读取和写入数据,而通过使用改进的SQL接口对一些重要的应用程序(日历,联系人,电子邮件)读取和保存其数据。即通过使用一个FIPS140-2授权的加密库,修改SQL接口对数据进行加密,然后才写入到应用程序的数据库,数据也将通过它被解密,从数据库中读取。
5 结论
本文对谷歌Android数据加密解决方案和摩托罗拉的数据加密解决方案进行比较,如表1:
Android提供了一个基于dm-crypt的基本磁盘加密解决方案,它仅保护Android智能手机的内部存储设备中的数据,不提供对外部存储设备如SD卡的数据保护。
摩托罗拉提供了基于eCryptfs的另一种磁盘加密解决方案,它能够保护内部存储设备和外部存储设备上的数据。摩托罗拉还提供了另一种应用程序级加密解决方案,以提高某些特定的重要应用程序的安全性。从而提升了整个Android移动设备的安全性。
[参考文献]
[1]吴剑华,莫兰芳,李湘,Android用户隐私保护系统.《网络信息安全》,2012年第09期.
[2]关于Android3.0实施加密的Android技术信息,2011,http://source.android.com/tech/encryption/android_crypto_implementation.html.