一种安卓操作系统上的文件保密系统及其保密方法

文档序号:6439702阅读:230来源:国知局
专利名称:一种安卓操作系统上的文件保密系统及其保密方法
技术领域
本发明涉及移动终端设备技术领域,尤其涉及在安卓操作系统中实现数据安全保密的技术领域。
背景技术
随着科学技术的发展以及产品的不断成熟,移动终端设备发展迅猛,目前无论在工作,生活,娱乐都被大量普遍的使用。而目前基于安卓操作系统的智能移动终端设备由于其开放性与可扩展性成为行业的佼佼者。同时由于安卓操作系统在工作,生活,娱乐扮演着越来越重要的角色,安卓操作系统的数据安全就显得尤为重要。现有安卓操作系统自身并没有提供数据安全机制,数据都是以非加密的方式存储在存储介质中。一旦存有重要数据或私人秘密的安卓设备丢失,或上网时中病毒或木马导致系统被入侵,所有数据将会完全暴露在他人面前,后果不堪设想。所以安卓操作系统的数据安全问题是个及关重要的问题。目前在安卓操作系统上,数据安全方案主要是通过第三方软件来确保。通过第三方软件将普通文件加密,确保即使设备丢失,也不会泄露重要数据。现有的数据安全方案实现基本原理是读取普通文件然后根据加密算法加密文件中的数据并写入新文件,然后再删除原有普通文件。这种方式简单有效,却有若干缺陷, 由于本身是第三方软件,所以比较容易被攻破或窜改,也容易受病毒影响,一旦被攻破或窜改,将豪无安全可言。同时现有第三方加密软件加密过的文件不对其他软件透明,使得使用起来不是十分方便。当其他软件需要访问加密文件时则需要手动解压文件。而且第三方加密软件通常使用的加密算法単一,而且在对大批量文件加密时使用単一密钥加密。一旦加密算法被知道,攻击者可以通过丰富的加密文件进行推測破解,有安全隐患。总结而言,现有安卓操作系统上的文件保密系统主要存在以下问题
1、加密功能的通用性不够强,无法在多个应用之间共享加密数据,或只能加密应用自有数据。2、加密文件无法对其他第三方应用程序的透明,使用不方便。即第三方应用程序必须通过增加专门解密动作才能访问数据。3、加密的安全性不够好,加密算法単一,加密大量文件时使用単一密钥,加密程序本身容易被攻破。

发明内容
本发明的一种安卓操作系统上的文件保密系统旨在解决目前安卓操作系统上现有保密工具的不足,采用与以往安卓操作系统上加密方案完全不同的设计与实现方式。本发明安全系数较高,对其他第三方应用程序透明,是ー种通用的文件加密技术方案。本发明提供了一种安卓操作系统上的文件保密系统,其用于将数据加密后再传给实际存储数据的文件系统去存储或者将实际存储数据的文件系统中的数据解密后再传出,如图1所示,其包括保密箱用户界面模块(101)、保密箱本地代码模块(102)、保密箱工具库模块(103)和加密文件子系统(104)。该保密箱用户界面模块(101),用于获取用户加密或解密的属性信息,包括密钥、加密类型(如aes或des)和密钥长度,提供与用户进行交互的用户界面接ロ,并调用下层的保密箱本地代码模块;
该保密箱本地代码模块(102),用于获取用户界面模块(101)的加密或解密的属性信息,调用下层的保密箱工具库模块(10 并将加密或解密的属性信息传递给工具库模块 (103);
该保密箱工具库模块(103),用于获取本地代码模块(10 的加密或解密的属性信息并将其注入到内核,然后加载或卸载加密文件子系统;
保密箱工具库模块(10 还可以对本地代码模块(10 中加密或解密属性信息中的密钥进行散列得到散列码,使得该密钥以散列码的形式存储并注入到内核,例如可以对该密钥进行加salt散列(如SHA512)得到salt散列码。该加密文件子系统(104),是ー层虚拟的文件系统,用于根据保密箱工具库模块 (103)中的加密或解密的属性信息将任何写入的数据进行加密或者将任何读出的数据进行解密。本发明还提供了ー种利用上述文件保密系统进行文件保密的方法,将数据加密后再传给实际存储数据的文件系统去存储或者将实际存储数据的文件系统中的数据解密后再传出,具体包括以下步骤
步骤Sl 创建保密箱,获取保密箱加密或解密的属性信息,包括密钥、加密类型和密钥长度;
步骤S2 打开或关闭保密箱,通过保密箱本地代码模块去调用保密箱工具库模块将保密箱的属性信息注入到内核,然后加载或卸载加密文件子系统;
在本步骤S2中还可以对加密或解密属性信息中的密钥进行散列得到散列码,使得该密钥以散列码的形式存储并注入到内核,例如可以对该密钥进行加salt散列(如SHA512) 得到salt散列码;
步骤S3 如果保密箱是打开的,则根据加密或解密的属性信息将任何写入的数据进行加密或者将任何读出的数据进行解密;如果保密箱是关闭的,则任何写入或读出的数据都是非加密状态。本发明的技术效果是
1、本发明支持文件粒度的加密,即用户可以选择对哪些文件或目录加密。而且,应用程序不用关心文件是否被加密,可以完全透明地访问加密文件。2、本发明无需预先保留足够的空间,用户可以随时加密或恢复文件。3、本发明对单个加密文件更改密钥和加密算法比较容易。4、本发明对不同的文件可以使用不同的加密算法和密钥,増大了破解的难度。5、本发明只有加密文件才需要特殊的加密/解密处理,普通文件的存取没有额外开销。6、本发明加密文件转移到别的物理介质上吋,没有额外的加密/解密开销。


图1为本发明安卓保密文件系统的总体架构。图2为本发明安卓保密文件系统的工作流程图; 图3为本发明安卓文件保密方法的工作流程图。
具体实施例方式为了使本发明的目的、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一歩详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。本发明安卓操作系统上的文件保密系统的总体架构如图1所示。本发明从上到下共四个层组成,分别是保密箱(CryptBox)用户界面模块(101)、保密箱本地代码 (cryptbox-jni)模块(102)、保密箱工具库(ecutils)模块(10 和加密文件子系统 (ecryptfs) (104)。层次之间不跨层调用,这样的层次设计有利于系统的稳定性以及代码的可靠性。层次之间各司其职,出现问题,容易找到问题所在。保密箱用户界面模块(101),是安卓应用程序模块,其用于创建用户界面,创建安卓服务与用户交互,获取用户输入。而具体与加密有关的操作通过安卓操作系统的JNI传给用C写的保密箱本地代码模块(cryptbox-jni库)(102)。cryptbox-jni库是用安卓NDK开发的ー个jni库,作为保密箱的本地适配层。保密箱本地代码模块对应于保密箱,用干与下层的保密箱工具库模块沟通。主要提供如下操作保密箱创建,保密箱关闭,保密箱属性修改;其中创建保密箱操作,主要通过保密箱工具库模块提供的功能将用户输入的密码注入到内核,然后根据用户输入加载加密文件子系统;关闭保密箱,主要用于卸载加密文件子系统。保密箱工具库(ecutils)模块(103)是针对安卓操作系统开发的一套加密文件子系统的封装库,是安卓保密箱的核心,其封装了加密文件子系统的核心操作,用于处理加密文件子系统所需信息以及加载加密文件子系统。保密箱工具库模块(I03)将用户输入的密钥进行加salt散列得到散列码,得到的散列码就是用户密码的存储形式。用户输入的密钥可进行散列存储,否则很容易被黑客通过各种方式窃取你存储的密钥。而如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典,得到某用户的密码。加salt散列可以一定程度上解决这ー问题。所谓加salt方法,就是加点“佐料”。往密码里加点“佐料”,比如在密码后面加段数据构成新的密码。这里使用的核心散列算法是SHA512。使用SHA512算法迭代散列“加salt密码” 一定次数后,得到需要的散列码。生成的散列码即是加密文件子系统(ecryptfs) (104)获取的密钥,创建ecryptfs 密钥并注入到内核。加密文件子系统(104)的密钥是由内核的keystore模块保存,用数据结构 ecryptfs—auth—tok 来表不
struct ecryptis—auth—tok t
uintl6_t version; /氺 ecryptfs 白勺片反本号氺/ uintl6_t token_type; /*token 的类型 */ uint32 t flags; /* 标志位 */struct ecryptfs_session_key session—key; /氺会!·舌^ife 氺/ uint8_t reserved[32] ; /* 保留字节 */ union {
struct ecryptfs_password password; /* 米用对称カロ密时的密码 */ struct ecryptfs_private_key private—key; /* 如果使用非对称カロ密时的
私钥*/
} token; ) _attribute_ ((packed));
该数据结构中的password成员是一个struct ecryptfs_password结构体。 struct ecryptfs_password {
int32_t password_bytes;/* 密码字节数 */
int32_t hash_algo;/* 散列标志 */
int32_t hash_iterations;1 ^ ^ feiK */
int32_t session_key_encryption_key_bytes ; /氺会i舌密書月字节数氺/ int32_t flags;/* 标识 */
uint8_t session_key_encryption_key /* 会诂カロ密密钥 */; uint8_t signature [ECRYPTFS_PASSWORD_SIG_SIZE + 1];/* 签名 */
uint8_t salt[ECRYPTFS_SALT_SIZE];/* 加 salt 值 */
}
创建数据结构eCryptfS_auth_tok,将散列码拷贝到该数据结构的password成员的 session_key_encryption_key字段中,这个就是加密文件子系统用来加密的密钥。加 salt散列时使用的salt值拷贝到token, password, salt字段中,加密文件子系统将会使用 salt。等 ecryptis_auth_tok 白勺 token, password. session_key_encryption_key_bytes 字段设置为512,因为使用SHA512算法,散列值长度为512。将eCryptfS_auth_tok的 token_type字段设置为0表示是密钥类型的token。将生成的散列码的前8个字节拷贝到 ecryptf s_auth_tok 白勺 token, password, signature jJ1 段中作为个 ecryptf s_auth_tok 的标识。将 ecryptfs_auth_tok 的 token, password. hash_algo 字段设置为 PGP_DIGEST_ ALG0_SHA512,表示使用的SHA512算法。ecryptfs_auth_tok生成好之后,以散列码前8个字节作为标识,通过add_key系统调用将ecryptfS_auth_tok注入到内核。保密箱工具库模块(10 通过系统调用mount来加载加密文件子系统(104)。加载加密文件子系统需要传递多个參数以使得加密文件子系统正常工作。參数“sig=XXXX” 传递给加密文件子系统,作为eCryptfS_aUth_tok的标识,也就是散列码的前8个字节。加密文件子系统的密钥是由内核keystore模块保存。前面已经将eCryptfS_auth_t0k注入到内核中了,加密文件子系统通过标识获取ecryptfS_auth_tok。參数“Cipher=XXX”传递给加密文件子系统使用的加密方式,可以有多种加密方式可选,如aes,des等加密算法。參数“ecryptfS_key_byteS=XXX”为加密方式使用的密钥字节数,例如用aes_U8算法加密, 则密钥比特数为16字节。加密文件子系统(104)加载成功之后,往文件系统中写任何数据都是加密过的,对应用程序完全透明。加密文件子系统处于内核层,它根据加载文件子系统时的參数来决定加密所用的加密方法以及密钥长度。它在数据要写入文件系统的时候,先进行数据的加密,然后再将数据写入实际存储文件系统。加密文件子系统(104)通过将加密服务集成到文件系统这ー层面来解决上面的问题。加密文件的内容一般经过对称密钥算法加密后以密文的形式存放在物理介质上,即使文件丢失或被窃取,在加密密钥未泄漏的情况下,非授权用户几乎无法通过密文逆向获得文件的明文,从而保证了高安全性。与此同时,授权用户对加密文件的访问则非常方便, 不需要用户进行加解密操作,通过open,read, write等函数就可以访问文件中被加密过的内容。用户通过初始身份认证后,对加密文件的访问和普通文件没有什么区別,就好像该文件并没有被加密过,这是因为加密文件子系统自动地在后台做了相关的加密和解密的エ 作。加密文件子系统是ー层虚拟的文件系统,在实际存储数据的文件系统与用户接ロ之间, 是ー个中间层,将用户传入的数据加密然后传给实际存储数据的文件系统。由于加密文件子系统一般工作在内核态,普通的攻击比较难于奏效。如图2所示,在安卓系统中应用程序不能直接访问物理设备。加密的过程需要将数据交给内核,由内核来负责将数据写入物理介质。应用程序通过write调用将数据写入内核。而在内核里,由文件系统接收应用程序写入的数据。文件系统负责对物理设备的抽象,将物理设备抽象成文件。本发明中,数据不是直接传给实际抽象物理设备的文件系统, 而是ー个虚拟的加密文件子系统。当数据传入到加密文件子系统中,加密文件系统采用公开加密算法对数据进行加密。然后再将加密过的数据当成一般数据写入实际存储的文件系统。最后实际存储的文件系统才将数据写入物理设备。解密的过程完全相反,物理设备里存储的是加密过的数据,抽象物理设备的文件系统将加密过的数据作为文件组织起来。文件系统将单个文件中的数据传入加密文件子系统,加密文件子系统此时进行解密,然后将解密后的数据通过read函数传给应用程序。如图3所示,本发明还提供了ー种利用上述文件保密系统进行文件保密的方法, 将数据加密后再传给实际存储数据的文件系统去存储或者将实际存储数据的文件系统中的数据解密后再传出,该方法包括以下步骤
步骤Sl 创建保密箱,获取保密箱加密或解密的属性信息,包括密钥、加密类型(如 aes或des)和密钥长度;
步骤S2:打开或关闭保密箱,将保密箱的属性信息注入到内核,然后加载或卸载加密文件子系统;
在本步骤S2中还可以对加密或解密属性信息中的密钥进行散列得到散列码,使得该密钥以散列码的形式存储并注入到内核,例如可以对该密钥进行加salt散列(如SHA512) 得到salt散列码;
步骤S3 如果保密箱是打开的,则根据加密或解密的属性信息将任何写入的数据进行加密或者将任何读出的数据进行解密;如果保密箱是关闭的,则任何写入或读出的数据都是非加密状态。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所做的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种安卓操作系统上的文件保密系统,其特征在干,其用于将数据加密后再传给实际存储数据的文件系统去存储或者将实际存储数据的文件系统中的数据解密后再传出,其包括保密箱用户界面模块(101)、保密箱本地代码模块(10 、保密箱工具库模块(103)和加密文件子系统(104);该保密箱用户界面模块(101),用于获取用户加密或解密的属性信息,包括密钥、加密类型和密钥长度,提供与用户进行交互的用户界面接ロ,并调用下层的保密箱本地代码模块;该保密箱本地代码模块(102),用于获取用户界面模块(101)的加密或解密的属性信息,调用下层的保密箱工具库模块(10 并将加密或解密的属性信息传递给工具库模块 (103);该保密箱工具库模块(103),用于获取本地代码模块(10 的加密或解密的属性信息并将其注入到内核,然后加载或卸载加密文件子系统;该加密文件子系统(104),是ー层虚拟的文件系统,用于根据保密箱工具库模块(103) 中的加密或解密的属性信息将任何写入的数据进行加密或者将任何读出的数据进行解密。
2.根据权利要求1所述的文件保密系统,其特征在于,保密箱工具库模块(103)对密钥进行散列得到散列码,使得该密钥以散列码的形式存储并注入到内核,以使该散列码成为加密文件子系统的加密算法要使用的密钥。
3.根据权利要求2所述的文件保密系统,其特征在干,所述保密箱的密钥加salt散列得到salt散列码。
4.根据权利要求3所述的文件保密系统,其特征在干,所述进行加salt散列采用的散列算法是SHA512。
5.根据权利要求1所述的文件保密系统,其特征在干,所述加密类型为aes或des。
6.ー种根据权利要求1所述的文件保密系统进行文件保密的方法,其特征在于,将数据加密后再传给实际存储数据的文件系统去存储或者将实际存储数据的文件系统中的数据解密后再传出,具体包括以下步骤步骤Sl 创建保密箱,获取保密箱加密或解密的属性信息,包括密钥、加密类型和密钥长度;步骤S2 打开或关闭保密箱,通过保密箱本地代码模块去调用保密箱工具库模块将保密箱的属性信息注入到内核,然后加载或卸载加密文件子系统;步骤S3 如果保密箱是打开的,则根据加密或解密的属性信息将任何写入的数据进行加密或者将任何读出的数据进行解密;如果保密箱是关闭的,则任何写入或读出的数据都是非加密状态。
7.根据权利要求6所述的文件保密的方法,其特征在干,步骤S2中对密钥进行散列得到散列码,使得该密钥以散列码的形式存储并注入到内核。
8.根据权利要求7所述的文件保密的方法,其特征在干,对该密钥进行加salt散列得到salt散列码。
9.根据权利要求8所述的文件保密的方法,其特征在干,加salt散列采用的散列算法是 SHA512。
10.根据权利要求6所述的文件保密的方法,其特征在干,所述加密类型为aes或des。
全文摘要
本发明涉及移动终端设备技术领域,具体公开了一种安卓操作系统上的文件保密系统及其保密的方法。该文件保密系统用于将数据加密后再传给实际存储数据的文件系统去存储或者将实际存储数据的文件系统中的数据解密后再传出,该文件保密系统包括保密箱用户界面模块、保密箱本地代码模块、保密箱工具库模块和加密文件子系统。该保密系统提供给用户一个安全性高,使用方便的数据加密工具。它能够支持文件粒度的加密,无需预先保留足够的空间,对单个加密文件更改密钥和加密算法比较容易,不同的文件可以使用不同的加密算法和密钥,只有加密文件才需要特殊的加密/解密处理,加密文件转移到别的物理介质上时,没有额外的加密/解密开销。
文档编号G06F21/24GK102567688SQ201110389820
公开日2012年7月11日 申请日期2011年11月30日 优先权日2011年11月30日
发明者于朋, 兰雨晴, 刘峥嵘, 夏颖, 李斌 申请人:中标软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1