encrypted-core-data:使用 SQLClipher 对 CoreData 的 SQLite 存储进行加密

encrypted-core-data

encrypted-core-data将Core Data存储的内容进行加密。除了初始化方法,其他用起来就和Core Data一样,并且可以用于已经使用了Core Data的项目中。

Core Data易遭攻击的地方

1.SQLite数据库并没有进行加密,内容存储方式是纯文本

  • CWE-311: 缺少对敏感数据的加密

2.SQLite数据库文件的保密方式是4位数字密码

  • CWE-326: 加密强度不充分
  • SRG-APP-000129-MAPP-000029 Severity-CAT II:移动应用必须提供操作系统没有提供的,全自动机制来强制进入控制限制

项目设置

  • 创建项目时候勾选Use Core Data
  • 终端进入你的项目,然后克隆encrypted-core-data 工程代码

  • 将encrypted-core-data下的Incremental Store添加进你的项目
  • SQLCipher作为一个git子模块存储在ECD中。运行git submodule init和git submodule update ,在 sqlcipher子模块目录下,发现并将sqlcipher.xcodeproj添加进你的工程
  • 在XCode中使用SQLCopher中的CommonCrypto:
  1. 在sqlcipher工程设置>Build Settings> Custom Compiler Flags> Other C Flags中添加-DSQLCIPHER_CRYPTO_CC和-DSQLITE_HAS_CODEC
  2. 在你的工程设置>Build Phases中将sqlcipher加入Target Dependencies,同时libsqlcipher.a 和Security.framework添加到Link Binary With Libraries
  • 注意:随着CommonCrypto的版本变化,我们已经将SQLCipher从v2.0.6升级到了v3.1.0。v2.0.6版本下创建的数据库在v3.1.0版本下不能直接读取,并且ECD不支持旧版本的数据迁移。

使用CocoaPod安装

  • 还没安装CocoaPods的话,终端运行$ sudo gem install cocoapods(更多详情请看CocoaPods网站

在你的项目目录下运行pod init来创建一个Podfile文件

  • 在Podfile中加入

  • 运行pod install
  • 在AppDelegate.m文件中加入#import “EncryptedStore.h”

使用EncryptedStore

iOS6.0到9.2都可以成功运行EncryptedStore

如果你想自己设置缓存大小或者自定义数据库URL地址:创建一个字典,设置EncryptedStore的customPasscode、customCacheSize,和/或customDatabaseURL:

在AppDelegate.m文件中添加

如果你创建了带有自定义选项的字典,将你的字典替代下面这行代码的options

或者替代这行代码

确保将“SOME_PASSCODE”替代成你自己的密码

让后在同样的文件中导入EncryptedStore.h

有问题可以添加-com.apple.CoreData.SQLDebug 1查看encryted-cored-data生成的状态日志

特性

  • 一对一关系
  • 一对多关系
  • 多对多关系(新的)
  • 谓语
  • 实体继承

其余特征和已知的bug在这

示意图

下面的是两张图表展示了NSSQLiteStore和EncryptedStore的差别。注意实际上SQLite的调用与它的包装层耦合性非常高

diagram

字符串上的比较

下面是在一个样例应用的.sqlite文件中运行strings命令的输出,可以看到默认的persistentce store的信息是纯文本形式

stringOutput

开源地址:https://github.com/project-imas/encrypted-core-data

1 1 收藏

资源整理者简介:西西里的仔仔

简介还没来得及写 :) 个人主页 · 贡献了12个资源 · 13 ·   


直接登录

推荐关注

按分类快速查找

关于资源导航
  • 伯乐在线资源导航收录优秀的工具资源。内容覆盖开发、设计、产品和管理等IT互联网行业相关的领域。目前已经收录 1439 项工具资源。
    推送伯乐头条热点内容微信号:jobbole 分享干货的技术类微信号:iProgrammer