スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化

14
5分で語る SQLite暗号化 Taro Matsuzawa aka. btm (@smellman) sumaben@kanto #11 Lightning Talk

Transcript of スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化

Page 1: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化

5分で語るSQLite暗号化

Taro Matsuzawa aka. btm (@smellman)sumaben@kanto #11 Lightning Talk

Page 2: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化

SQLite

• iPhoneとかで使えるSQLデータベース

• ファイルベースで扱いが楽

• Firefoxのバックエンドにも使われてる

Page 3: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化

暗号化?

• JBされてもデータが盗まれないように

• 版権物のデータをBlobデータにつっこんでおいて盗まれないように。

Page 4: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化

sqlcipher

• SQLiteの暗号化の仕組みの実装

• SQLite自体に暗号化するための枠組みはあって、拡張として実装すると使えるようになる

• iPhoneで動くのでやってみよう

Page 5: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化

やり方 1

$ sudo mkdir -p /opt/smartphone/lib$ sudo chown -R btm:staff /opt/smartphone$ cd /opt/smartphone/lib/$ git clone git://github.com/sjlombardo/sqlcipher.git$ curl -O ftp://ftp.infoscience.co.jp/pub/Crypto/SSL/openssl/source/openssl-1.0.0a.tar.gz$ git clone git://github.com/sjlombardo/openssl-xcode.git$ tar zxf openssl-1.0.0a.tar.gz $ cp -fr openssl-xcode/openssl.xcodeproj openssl-1.0.0a/$ mv openssl-1.0.0a openssl

Page 6: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化

やり方 2

• XCodeのメニューから環境変数を開く

• ソースツリー項目で、以下を設定

• SQLCIPHER_SRC は SQLCipherの場所を選択

• SQLCIPHER_SRC:/opt/smartphone/lib/sqlcipher

• OPENSSL_SRC は OpenSSLの場所を選択

• OPENSSL_SRC:/opt/smartphone/lib/openssl

Page 7: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化

やり方 3

• XCodeのメニューからプロジェクト->プロジェクトに追加を選択

• OpenSSLのディレクトリのopenssl.xcodeprojを選択

• デスティネーショングループのフォルダに項目をコピーするは選択しないで追加をする。

• 同様にSQLCipherのディレクトリのsqlcipher.xcodeprojもプロジェクトに追加する

Page 8: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化

やり方 4

• SQLCipherとOpenSSLのロケーションが動くように変更する。

• sqlcipher.xcodeprojを選択して、右クリック->情報を見るを選択

• パスタイプで SQLCIPHER_SRC を基準 を選択する。

• openssl.xcodeprojを選択して、右クリック->情報を見るを選択

• パスタイプで OPENSSL_SRC を基準 を選択する。

Page 9: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化

やり方 5• XCodeのメニューからプロジェクト->アクティブターゲット"SQLCipherTest"を編集を選択

• 一般タブで、直接依存関係の項目で、+ボタンを押す。

• OpenSSLのcryptoと、SQLCipherのsqlcipherを選択

• ビルドタブに移動して、構成で「すべての構成」を選択

• 「検索パス」項目にある「ヘッダ検索パス」を編集

• $(SQLCIPHER_SRC) と $(OPENSSL_SRC) を追加し、それぞれ再帰的にチェックをいれる。

Page 10: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化

やり方 6

• sqlcipher.xcodeprojにあるlibsqlcipher.aをターゲットの「バイナリをライブラリにリンク」へコピー

• openssl.xcodeprojにあるlibcrypto.aをターゲットの「バイナリをライブラリにリンク」へコピー

• ビルドの設定でプリプロセッサマクロに SQLITE_HAS_CODEC=1 を追加

Page 11: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化

使い方• SQL文として以下のコードを流すと暗号化される。

• PRAGMA key = 'default_key';

• コマンドライン版sqlcipherもつくるとよい

• 鍵の内容をデバイスで一意になるようにしておけばよい。

• FMDatabaseなどのフレームワークは標準で対応

• FMDatabase setKey

Page 12: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化

サンプル! NSString* key = @"TaroMatsuzawaIsDead";! NSString* newKey = [key stringByAppendingString:        [[UIDevice currentDevice] uniqueIdentifier]];

! if (![rootViewController.encdb setKey:key])! ! NSLog(@"> Could not set key.");

Page 13: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化

URLなど• sqlcipher

• http://sqlcipher.net/

• sqlcipher document

• http://sqlcipher.net/documentation

• openssl-xcode

• https://github.com/sjlombardo/openssl-xcode

• FMDatabase

• https://github.com/ccgus/fmdb

Page 14: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化

おまけ• コマンドラインはこんな感じで作る

$ sudo port install openssl$ mkdir -p ~/develop/sqlcipher$ cd ~/develop/sqlcipher$ git clone git://github.com/sjlombardo/sqlcipher.git$ cd sqlcipher$ ./configure CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="/opt/local/lib/libcrypto.a"$ make

$ ~/develop/sqlcipher/sqlcipher/sqlite3 sqlite3.dbSQLite version 3.7.2Enter ".help" for instructionsEnter SQL statements terminated with a ";"sqlite> .read /Users/btm/develop/(秘密)/schema.sql

sqlite> PRAGMA key = 'default_key';