スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化
-
Upload
taro-matsuzawa -
Category
Technology
-
view
6.046 -
download
0
Transcript of スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化
![Page 1: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化](https://reader036.fdocument.pub/reader036/viewer/2022081803/5575661bd8b42a2e248b4847/html5/thumbnails/1.jpg)
5分で語るSQLite暗号化
Taro Matsuzawa aka. btm (@smellman)sumaben@kanto #11 Lightning Talk
![Page 2: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化](https://reader036.fdocument.pub/reader036/viewer/2022081803/5575661bd8b42a2e248b4847/html5/thumbnails/2.jpg)
SQLite
• iPhoneとかで使えるSQLデータベース
• ファイルベースで扱いが楽
• Firefoxのバックエンドにも使われてる
![Page 3: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化](https://reader036.fdocument.pub/reader036/viewer/2022081803/5575661bd8b42a2e248b4847/html5/thumbnails/3.jpg)
暗号化?
• JBされてもデータが盗まれないように
• 版権物のデータをBlobデータにつっこんでおいて盗まれないように。
![Page 4: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化](https://reader036.fdocument.pub/reader036/viewer/2022081803/5575661bd8b42a2e248b4847/html5/thumbnails/4.jpg)
sqlcipher
• SQLiteの暗号化の仕組みの実装
• SQLite自体に暗号化するための枠組みはあって、拡張として実装すると使えるようになる
• iPhoneで動くのでやってみよう
![Page 5: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化](https://reader036.fdocument.pub/reader036/viewer/2022081803/5575661bd8b42a2e248b4847/html5/thumbnails/5.jpg)
やり方 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暗号化](https://reader036.fdocument.pub/reader036/viewer/2022081803/5575661bd8b42a2e248b4847/html5/thumbnails/6.jpg)
やり方 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暗号化](https://reader036.fdocument.pub/reader036/viewer/2022081803/5575661bd8b42a2e248b4847/html5/thumbnails/7.jpg)
やり方 3
• XCodeのメニューからプロジェクト->プロジェクトに追加を選択
• OpenSSLのディレクトリのopenssl.xcodeprojを選択
• デスティネーショングループのフォルダに項目をコピーするは選択しないで追加をする。
• 同様にSQLCipherのディレクトリのsqlcipher.xcodeprojもプロジェクトに追加する
![Page 8: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化](https://reader036.fdocument.pub/reader036/viewer/2022081803/5575661bd8b42a2e248b4847/html5/thumbnails/8.jpg)
やり方 4
• SQLCipherとOpenSSLのロケーションが動くように変更する。
• sqlcipher.xcodeprojを選択して、右クリック->情報を見るを選択
• パスタイプで SQLCIPHER_SRC を基準 を選択する。
• openssl.xcodeprojを選択して、右クリック->情報を見るを選択
• パスタイプで OPENSSL_SRC を基準 を選択する。
![Page 9: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化](https://reader036.fdocument.pub/reader036/viewer/2022081803/5575661bd8b42a2e248b4847/html5/thumbnails/9.jpg)
やり方 5• XCodeのメニューからプロジェクト->アクティブターゲット"SQLCipherTest"を編集を選択
• 一般タブで、直接依存関係の項目で、+ボタンを押す。
• OpenSSLのcryptoと、SQLCipherのsqlcipherを選択
• ビルドタブに移動して、構成で「すべての構成」を選択
• 「検索パス」項目にある「ヘッダ検索パス」を編集
• $(SQLCIPHER_SRC) と $(OPENSSL_SRC) を追加し、それぞれ再帰的にチェックをいれる。
![Page 10: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化](https://reader036.fdocument.pub/reader036/viewer/2022081803/5575661bd8b42a2e248b4847/html5/thumbnails/10.jpg)
やり方 6
• sqlcipher.xcodeprojにあるlibsqlcipher.aをターゲットの「バイナリをライブラリにリンク」へコピー
• openssl.xcodeprojにあるlibcrypto.aをターゲットの「バイナリをライブラリにリンク」へコピー
• ビルドの設定でプリプロセッサマクロに SQLITE_HAS_CODEC=1 を追加
![Page 11: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化](https://reader036.fdocument.pub/reader036/viewer/2022081803/5575661bd8b42a2e248b4847/html5/thumbnails/11.jpg)
使い方• SQL文として以下のコードを流すと暗号化される。
• PRAGMA key = 'default_key';
• コマンドライン版sqlcipherもつくるとよい
• 鍵の内容をデバイスで一意になるようにしておけばよい。
• FMDatabaseなどのフレームワークは標準で対応
• FMDatabase setKey
![Page 12: スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化](https://reader036.fdocument.pub/reader036/viewer/2022081803/5575661bd8b42a2e248b4847/html5/thumbnails/12.jpg)
サンプル! 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暗号化](https://reader036.fdocument.pub/reader036/viewer/2022081803/5575661bd8b42a2e248b4847/html5/thumbnails/13.jpg)
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暗号化](https://reader036.fdocument.pub/reader036/viewer/2022081803/5575661bd8b42a2e248b4847/html5/thumbnails/14.jpg)
おまけ• コマンドラインはこんな感じで作る
$ 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';