SQLite数据库加密的分析与设计

2014-01-15 10:00褚龙现
电子设计工程 2014年16期
关键词:加密算法应用程序密钥

褚龙现

(平顶山学院 河南 平顶山 467000)

SQLite作为一个开源的嵌入式数据库管理系统[1],被应用在Android操作系统中,用以保存用户重要信息[2]。Android系统的开源性使得其发展速度非常快,这一方面带来了用户更好地体验,另一方面不可避免地出现了威胁系统安全的风险[3]。就数据安全而言,风险主要体现在非法用户恶意破坏Android手机中数据,究其原因主要是因为不能很好地限制用户对数据文件的直接访问。

尽管SQLite满足存储效率高、查询速度快和运行时占用内存小等特点,但是它并没有提供安全控制机制[4]。在Android系统中,具备数据库文件读写权限的用户可以方便地使用文本编辑器获得数据信息,数据库中存储的重要数据未能受到保护。本文在分析SQLite数据库安全机制的基础上,设计了数据加密功能。

1 关系数据库安全分析

目前的应用程序绝大部分是以数据为中心的,数据库中保存着应用程序处理的各类数据,其在应用程序中的地位显得非常重要。数据库的安全直接关系到应用程序的安全,成为信息安全的核心组成部分[5]。在众多数据库产品中,关系数据库的使用最为广泛,为了保护关系数据库不被非法用户使用,同时拒绝合法用户的非法操作,主要从存取管理、安全管理和数据加密等方面进行控制[6]。常见的安全控制策略如表1所示。

表1 数据库管理系统中常见的安全控制策略Tab.1 The safety control strategy of database management system

2 SQLite加密分析

为了满足嵌入式数据库系统的轻便性、高效率访问与存储的要求,SQLite只使用单一文件来保存数据库中的数据与结构[7]。为了更好地保护SQLite数据库安全,在分析SQL安全策略的基础上提出数据加密的必要性。

2.1 SQLite安全分析

因为SQLite中没有用户管理功能,所以只要具备数据库文件的操作权限都可以直接访问数据库文件。如果想从用户身份验证角度保护数据库安全,可以从两个方面考虑进行控制。

1)对登录操作系统的用户权限做详细配置,只有具备数据库操作权限的用户才能访问数据库文件;2)通过修改源码增加口令认证,在用户访问数据库时必须提供正确的口令,正确的才能进行进一步操作。

为了进一步加强数据库安全性,结合Android操作系统特点,可以将修改、删除和插入数据的操作记录在文本文件中,也可以在应用程序中实现详细记录日志的功能,以此来替代数据审计控制策略。但是,对于应用程序而言,一般不会直接通过操作系统读写数据文件,此时数据加密成为保持数据库安全的重要途径。

2.2 数据加密

关系数据库常见的加密方式主要有操作系统层加密、应用程序层加密和数据库管理系统层加密3种方式[8]。

操作系统层加密的特点是当需要对数据进行更新操作时必须全部加密或解密数据库,这种方式将会消耗大量资源[9],对于嵌入式数据库系统是不合适的。

应用程序层加密主要通过在程序中对数据库的指定属性值进行加密,写入数据前加密,读出数据后解密,这样大大增加了应用程序的负载[10],结合Android系统下为每个进程分配24 M空间的现实,也不合适应用于SQLite中。

数据库管理系统层加密又分为内核层加密和外核层加密[11]。内核层加密主要是在数据物理存储前完成加密,取出数据前进行解密。这种方式进行的加密功能较强,并且基本不影响数据库管理系统的功能;外核层加密主要是在数据库管理系统外加一层加密系统,这种方式能够灵活配置数据库加密,但是数据库操作效率较低,不太适合嵌入式数据库系统。

综上考虑,本文通过修改SQLite源代码的方式,设计出数据库管理系统内核层加密功能。

3 SQLite加密设计

SQLite加密功能的设计思路是:在SQLite源代码中找出预留的设置密钥的加密接口,然后实现接口中相关密钥设置函数完成对数据本身的加密功能,最后把加密功能通过JNI接口提供给应用程序,达到Android应用更安全地访问SQLite数据库。

3.1 加密接口选择

在SQLite中预留的加密接口主要包括 sqlite3_key()、sqlite3_rekey()、sqlite3CodecGetKey()和 sqlite3CodecAttach()4个。主要功能如表2所示。

3.2 加密算法选择

加密和解密的密钥可以相同也可以不同,相同的称为对称加密算法,不同的称为非对称加密算法。常见的对称加密算法有DES、IDEA和AES等,这些算法主要适用于数据库和文件的加密,特点是速度快且适合于嵌入式系统;常见的非对称加密算法有RSA算法,特点是复杂且速度慢。

表2 SQLite加密接口Tab.2 The SQLite encryption interface

因为Android手机中硬件资源相比传统计算机来讲有很大的局限性,选择的加密算法力求速度快、安全性好和复杂度低。为此,SQLite数据库加密算法选择的是对称加密算法AES。

3.3 密钥管理方式

数据库加密秘钥可能存在泄露的风险,如果直接使用口令作为对数据进行加密的密钥,安全性将会受到限制。在Android操作系统中,对用户口令的存储方式一般是先通过Hash函数处理口令,然后将其散列值进行存储。MD5和SHA是常见的散列函数,SHA特点是安全性高,但是计算花费代价高;MD5特点是计算速度快,但相比SHA安全性低。在Android应用中,运行速度比较关键,同时加密秘钥一般不需要长期保存,所以加密设计中采用MD5作为密钥生成函数。

3.4 加密实现

通过上述分析,SQLite加密功能的设计主要分为2个环节,一是完成密钥设定和重置;二是编译更新SQLite本地库和SDK。

1)密码设定与重置

首先将用户口令经过MD5函数处理生成加密秘钥,然后使用对称加密算法AES对指定数据库进行加密。其中经MD5处理后的密钥为pKey,口令长度为 pLength,使用sqlite3*?db;语句完成数据库句柄的声明,接着使用以下4个关键函数完成密码设定与重置:

打开数据库:sqlite3_open(“数据库文件名称”,&db)打开数据库;

关联数据库、加密密钥和加密算法:sqlite3CodecAttach(db,0,pKey,pLength);

加密设定:sqlite3_key(db,pKey,pLength)完成加密,第 1个参数表示已打开的数据库句柄,第2个参数是加密密钥,第3个参数是密钥长度;

密码重置:sqlite3_rekey(db,pKey,pLength)完成修改密码,参数和sqlite3_key一样。

2)编译更新SQLite本地库和SDK

为了将加密功能提供给应用程序,方便Android应用调用,按照以下步骤完成SQLite本地库的更新。

第1步:利用Android NDK将修改后的SQLite源码编译成动态库libsqlite.so;

第2步:使用adb工具将编译好的libsqlite.so加载到Android手机或模拟器中;

第3步:调用SQLite本地库提供的JNI接口把sqlite3_key()封装成 SQLiteDataKey()函数,将 sqlite3_rekey()封装成SQLiteDataReKey()函数;

第4步:将封装后的API函数添加到Android SDK。

加密功能实现过程如图1所示。

图1 加密功能实现流程Fig.1 The encryption function realization process

3.5 实验结果

首先创建一个数据库test.db,然后创建一个数据表tb_user,包括编号、用户名和Email3个字段,编号为主键。现插入2条记录,并用实现的API对数据进行加密。

程序中自定义了DBOperate类用于定义实现数据访问操作的API,包括打开数据库的函数open()、关闭数据库的函数 close()、 添加用户的函数 addUser(String name,String email)和构造函数 DBOperate(Context ctx)。 实现的加密函数是 SQLiteDataKey(String string , int i)。

关键示例代码如下:

DBOperate dbo=new DBOperate(this);

dbo.open();

dbo.SQLiteDataKey(“123456”,6); //注释该行执行一次,取消注释执行一次

dbo.insertUser(“zhangsan”,”zhang@tom.com”);

dbo.insertUser(“lisi“,“lisi@tom.com“);

dbo.close();

测试结果发现,注释 dbo.SQLiteDataKey(“123456”,6)行时数据表显示插入的值;取消注释时,插入数据显示为加密后的密文。

4 结束语

通过对SQLite数据库管理系统安全机制的分析,针对嵌入式数据库系统的特点,提出并设计了一种数据加密方法。该加密方法属于数据库管理系统层加密,比应用程序层效率更高,适合Android手机。实验结果表明,经过加密后的数据库安全性更高。

[1]闫梅,彭新光.基于Android安全机制的权限检测系统[J].计算机工程与设计,2013,34(3):854-858.YAN Mei,PENG Xin-guang.Permission detection system based on android security mechanism[J].Computer Engineering and Design,2013,34(3):854-858.

[2]EnCk W,Ongtang M,McDaniel P.Understanding Android security[J].IEEE Security&Privacy,2009,7(1):50-57.

[3]Shabtai A,Fledek Y,Kanonov U,et al.Google android:a comprehensive security assessment[J].IEEE Security&Privacy,2010,8(2):35-44.

[4]宋杰,党李成,郭振朝,等.Android OS手机平台的安全机制分析和应用研究[J].计算机技术与发展,2010,6:152-155.SONG Jie,DANG Li-cheng,GUO Zhen-chao,etal.The security mechanism analysis and applied research of Android OS mobile platform[J].Computer Technology and Development,2010,6:152-155.

[5]廖明华,郑力明.Android安全机制分析与解决方案初探[J].科学技术与工程,2011,11(26):6350-6355.LIAO Ming-hua,ZHENG Li-ming.The security mechanism analysis and probe into the solution of android OS[J].ScienceTechnologyandEngineering,2011,11(26):6350-6355.

[6]刘琳.嵌入式数据库SQLite的安全性研究[D].昆明:昆明理工大学,2010.

[7]刘海燕,杨健康,蔡红柳,等.嵌入式数据库SQLite的安全机制分析与设计[J].装甲兵工程学院学报,2009,23(5):644-67.LIU Hai-yan,YANG Jian-kang,CAI Hong-liu,et al.Analysis and design ofthe security mechanismsofembedded database SQLite[J].Journal of Academy of Armored Force Engineering,2009,23(5):644-67.

[8]廖顺和.嵌入式数据库SQLite加密方法分析与研究[J].计算机应用与软件,2008,25(11):256-258.LIAO Shun-he.Analysis and research of the encryption method for SQLite[J].Computer Applications and Software,2008,25(11):256-258.

[9]Hacigumus H,Lyer B,Li C,et al.Efficient Executing of aggregation Queries over Encrypted Relational Datebase[C]//In the proceedings of Database Systems for Advanced Applications(DASFAA),2004:125-136.

[10]Douglas R Stinson.Cryptography:Theory and Practice.2ndEdition[M].[S.l.]:Chapman&Hall/CRC,2002.

[11]朱鲁华,陈荣亮.数据库加密系统的设计与实现[J].计算机工程,2002,28(8):60-63.ZHU Lu-hua,CHEN Rong-liang.Design and implementation of database encryption system[J].Computer Engineer,2002,28(8):60-63.

猜你喜欢
加密算法应用程序密钥
幻中邂逅之金色密钥
密码系统中密钥的状态与保护*
删除Win10中自带的应用程序
谷歌禁止加密货币应用程序
TPM 2.0密钥迁移协议研究
一种对称密钥的密钥管理方法及系统
混沌参数调制下RSA数据加密算法研究
HES:一种更小公钥的同态加密算法
基于小波变换和混沌映射的图像加密算法
对称加密算法RC5的架构设计与电路实现