system: [SYSTEM]

user: 4. 数据安全删除方案实现 4.1. 文件系统加密 为了提供足够强度的数据加密，本文采用AES128加密方式，AES128意思是128位分组对称加密算法，AES128本身是一种分组密钥，该算法密钥有128位的长度，它的输入数据的长度也是128位。AES集高效率、安全、高性能并且灵活易用等众多优点于一身，它取代了DES数据加密算法(56位密钥)，成为美国的高级加密标准算法，是一种加密强度更高的算法，AES的128位密钥比DES的56位密钥的加密强度高出1021倍之多。 隐藏文件系统中数据的透明加密的设计与实现需要有cryptsetup功能文件来直接对文件系统进行加密。cryptsetup是Linux操作系统下的一个磁盘分区加密功能模块，cryptsetup在指定的磁盘位置进行加密，生成块设备，创建新的文件系统，然后挂载在指定的目录下。cryptsetup命令加密方式的工作环境非常靠近Linux系统的底层，几乎是纯软件加密方式所能达到的最靠近系统底层的。使用cryptsetup命令需要下载一个cryptsetup功能文件，并将功能模块存放在Android文件夹下，赋予其可运行的权限，然后为cryptsetup命令设置参数，并运行该命令就可以对指定的SD卡分区的文件进行加密，cryptsetup命令的参数包括需要加密的磁盘块(之前的dm table文件)、隐藏文件系统挂载点、需要生成的设备文件名以及自己设置的加密秘钥。加密完成后就会生成相应的设备名，并覆盖之前dm setup命令生成的文件系统名，成为加密文件系统。当有新的文件写入时，数据也会进行自动的加密，当使用文件系统卸载命令umount或者重启Android设备卸载文件系统之后，只有提供相同的密码和dm文件才能恢复加密文件系统，这就保证了隐藏文件系统中文件数据的加密安全性。 为了实现应用层可调用的数据透明加密服务，需要在Android应用框架层编写相应的System Service来调用cryptsetup功能文件。cryptsetup功能文件是己经存在的模块，将其放在/data目录下，并赋予其可执行权限，接下来需要编写应用框架层的透明加密System Service来调用cryptsetup功能文件，实现数据透明加密服务，最后在应用层开发App来调用透明加密服务，实现并验证数据透明加密的功能。 为了实现应用层可调用的数据透明加密服务，需要在Android应用框架层编写相应的System Service来调用cryptsetup功能文件。cryptsetup功能文件是己经存在的模块，将其放在//data目录下，并赋予其可执行权限，接下来需要编写应用框架层的透明加密System Service来调用cryptsetup功能文件，实现数据透明加密服务，最后在应用层开发App来调用透明加密服务，实现并验证数据透明加密的功能。 本文提出的数据透明加密系统服务在基本框架分为四个层次，自上而下分别为SDK接口层、IPC接口描述层等 [ 5 ]，图2为System Service框架图，详细介绍如下： SDK接口层：SDK接口层是安全接口可以扩展的关键。通过System Manager模块对相应的系统接口进行封装，App可以调用getService()方法 [ 6 ] 获取相应的System Manager类，同时Context对系统服务和自定义服务进行统一的命名，将该命名作为getService()的参数传递给lPC接口层来实现功能调用。 SDK接口的设计思路如下： 1) 在Android应用框架层添加自定义的System Service，获得加密服务。 2) 在Service manager文件中注册System Service，以保证System Service在Android操作系统启动后能够自动运行该服务。 3) 将自定义的System Service通过定制IPC接口描述层和SDK接口层实现外界调用接口的开发。 IPC接口描述层：IPC接口描述层调用SystemService接口并向SDK提供服务。在IPC接口层中，aidl文件是一种接口描述文件，ContextImpl文件提供Context参数，这两个文件是Binder机制的关键。 System Service功能实现层：数据透明加密服务最重要的功能函数就是在这一层实现的，System Service通过调用系统内核的函数和接口以及系统本身具有的其他System Service来实现自己的服务功能，实现功能扩展。这一层也是系统服务可扩展的关键。在Android应用框架层，System Service和System manager交互，在Service列表中注册，保证系统服务的正常启动并在系统后台运行。System server统一的注册、管理和启动所有的System Service。所以，不管是开发者自定义的System Service还是Android自身的System Service，都必须把自身相应的信息注册在System Server之中，并通过类似于ServiceManager.addService (ComtExt.OPERSYS_SERVICE)的方法来获取System Service的功能。System Server会向System Manager中提供自己的服务信息，System Manager中的函数接口可以被App或者其他的System Service调用，从而真正实现服务的调用。System Service既可以直接调用Android应用框架层的其他System Service也可以通过jni的方式调用Android kernel层中C/C一提供的系统调用。Binder实现Service之间的通信功能，App或者System Service在调用其它System Service时，需要通过Binder机制实现。实现Binder机制需要定义一个aidl文件 [ 7 ]，aidl文件是一个格式要求严格的接口文件，其内容是供外界调用的一系列接口函数。 图2. System Service框架图 在Context文件中添加上述服务后，App或者其他的System Service就可以通过方法IOpersysServi ce.Stub.asInterface(ServiceManager.getService(opersys))来调用该System Serviceo。 Android Service层：Android Service层包含所有的Android系统服务以及Android向应用层提供的接口。本文将通过封装和调用这些功能接口来实现数据透明加密服务。 4.2. 密钥管理模块 为了提升系统安全性，保障系统稳定运行。密钥管理模块应运而生。密钥存储区是这一模块管理的重点。存储区密钥生成主要由用户口令及TrustZone [ 8 ] 所内置的Key实现，其需要达到的功能为有效管理文件系统配置文件及相关密钥，全部加密文件密钥都会被集中在存储区管理。密钥管理模块负责存储区的管理。删除文件密钥就可以删除文件，确保操作更加安全。还有就是密钥管理模块可以提供紧急删除文件系统这一选择。对于预置校验口令进行对比判断，可以有效删除密钥存储区，实现对于废弃闪存页的回收。 4.3. 安全删除开销优化 由于存储特性所决定，存储块状态主要可以分为无效、有效、空闲这些类型。在具体应用当中如果存储介质面是N个块形成，这里面的每个具体块由M个页构成，由此就可以实现把整个存储介质单元阵列抽象为 N × M 二维矩阵，页作为这里面最小单位。这就可以使用到 S t a t e [ i ] [ j ] ( 1 ≤ i ≤ N ， 1 ≤ j ≤ M ) 使得表示页各种状态得到体现，i是该矩阵里面第i列(第i个物理块)，j是矩阵里面第j行(第j个页)，具体状态为： S t a t e [ i ] [ j ] = 1 ：属于无效页，数据无效，将被安全删除无效页； S t a t e [ i ] [ j ] = 0 ：属于有效页，数据有效，要保证数据安全性，避免被删除，保障用户有效访问； S t a t e [ i ] [ j ] = − 1 ：属于空闲页，没有存储数据，不存在约束。 本次研究提出的方案目的在于能够有效删除无效数据，具体方法结合到块擦除和密钥删除等方法，确保无效数据被安全删除。如无效数据出现后，可以借助于密钥删除进行数据删除操作。用 D b l o c k [ i ] 标记第i个物理块是不是启动块擦除操作，当 D b l o c k [ i ] = 1   ( 1 ≤ i ≤ n ) ，表示第i物理块会启动擦除，清除数据；当 D b l o c k [ i ] = 0 ，表示第i物理块不需要启动擦除，清除数据。同样的道理，用 D k e y [ i ] [ j ] 标记第i个物理块里面第j页，对称密钥是不是发起删除操作。当 D k e y [ i ] [ j ] = 1   ( 1 ≤ j ≤ m ) 时，第i个物理块当中第j页就会启动密钥删除的具体操作；当 D k e y [ i ] [ j ] = 0 第i物理块第j页不会启动密钥删除具体操作。 为了能够确保删除操作均符合安全删除操作要求可以实现对于无效数据的清除，确保有效数据依然可以正常访问。安全删除这类问题能够运用数学模型形式化进行具体描述： ∀ i ， j ( 1 ≤ i ≤ n ， 1 ≤ i ≤ m ) D b l o c k [ i ] + D k e y [ i ] [ i ] ≥ S t a t e [ i ] [ i ] 且当仅当： S t a t e [ i ] [ j ] = 0 ， D k e y [ i ] [ j ] ≠ 1 上面式子里面 S t a t e [ i ] [ j ] = 1 时， S t a t e [ i ] [ j ] ， D k e y [ i ] [ j ] 1 里面有一个应该是1，代表能够实现无效数据删除操作。那么 S t a t e [ i ] [ j ] = 0 时，就代表这一页所属于的物理块有其他无效页，想要在这一区域实现块擦除，则需要将数据进行转移。当 S t a t e [ i ] [ j ] = − 1 时，就表明这一页为无数据页，相应删除操作就属于无效操作。 S t a t e [ i ] [ j ] ， D k e y [ i ] [ j ] 1 满足式子要求。在达成条件背景下，进一步优化安全删除操作行为。