途牛原创|SQLite 加密解决方案

2016-02-22 途牛无线中心 熊财兴
途牛原创|SQLite 加密解决方案_第1张图片
关于SQLite
iOS中使用了苹果提供的开源免费的数据库引擎——SQLite。它在读写效率、消耗总量、延时时间和整体简单性上具有优越性,这使其成为移动平台数据库的最佳解决方案。Mac OS和iOS中的Keychain使用SQLite来存储,只是Keychain的安全级别比较高。
然而免费版的SQLite有一个致命缺点:不支持加密。这就导致存储在SQLite中的数据可以被任何人用任何文本编辑器查看到。比如某些iOS客户端的DB缓存数据就比较暴露:
途牛原创|SQLite 加密解决方案_第2张图片
SQLite加密方式
对数据库加密的思路有两种:

1、将内容加密后再写入数据库
这种方式使用简单,入库/出库只需要将字段做对应的加密解密操作即可,一定程度上解决了将数据赤裸裸暴露的问题。
不过这种方式并不是彻底的加密,因为数据库的表结构等信息还是能被查看到。另外写入数据库的内容加密后,搜索也是个问题。

2、对数据库文件加密
将整个数据库整个文件加密,这种方式基本上能够解决数据库的信息安全问题。目前已有的SQLite加密基本都是通过这种方式实现的。

SQLite加密工具
1、 SQLite Encryption Extension(SEE)
【 https://www.sqlite.org/index.html】
事实上SQLite有加密接口,只是免费版本没有实现而已,而SQLite Encryption Extension(SEE)是SQLite的加密版本,提供的加密方式:
RC4
AES-128 in OFB mode
AES-128 in CCM mode
AES-256 in OFB mode

2、 SQLiteEncrypt 【https://www.sqlite-encrypt.com/index.htm】
使用AES加密,其原理是实现了开源免费版SQLite没有实现的加密相关接口。注:收费的

3、 SQLiteCrpt
【https://sqlite-crypt.com/index.htm】
使用256-bit AES加密,其原理和SQLiteEncrypt一样,都是实现了SQLite没有实现的加密相关接口。注:也是收费的

4、 SQLCipher 【 https://sqlcipher.net/】
首先需要说明的是,SQLCipher是完全开源的代码托管在GitHub【https://github.com/sqlcipher/sqlicipher】
其次,SQLCipher使用256-bit AES加密,由于基于免费版本的SQLite,主要的加密接口和SQLite是相同的,但也增加了一些自己的接口。

此外,SQLCipher集成起来更简单,不用再添加openssl依赖库,而且编译速度更快,从功能上来说没有任何区别。

在项目中使用SQLCipher

在项目中集成免费版的SQLCipher略有复杂,官网以图文方式介绍的非常详细,集成过程请参考官网教程【https://sqlicipher.net/ios-tutorial】

注:App中核心数据应该存储到Keychain或者加密的DB中。途牛App在XMPP重构过程中已经使用SQLCipher。

你可能感兴趣的:(途牛原创|SQLite 加密解决方案)