5月23日にニフティクラウド mobile backend 勉強会 #8「Cocos2d-x」が開催されました。Chukong Technologies Japanの清水氏、シュハリ社 松浦氏にお話を伺いました。
SQLiteを暗号化する
SQLiteは1ファイルで使える手軽なデータベースで、データベースファイルをコピーするだけで他の環境でも使える手軽さが利点です。ただしSQLite3のファイルはiOSのipaやAndroidのapkファイルから簡単に取り出すことができます。さらにデフォルトでは暗号化されていませんので、アプリで使っているデータ(ユーザのポイントや課金したコインの情報など)をいじってチートもできてしまいます。
そこで暗号化するのですが、候補が二つあります。SQLCipherとwxSqlite3です。SQLCipherはiOSは良いのですが、Androidではビルドができませんでした。
実際に使ってみると…
注意点としては、初回起動時に空のDBを作成して暗号化する。既存のSQLiteのファイルをコピーして暗号化することはできない。
SQLの更新が面倒
担当者ではSQLが分からないこともある。さらに更新時にSQLを作るのも大変。そこで、SQLiteファイルからビルド時に自動的にSQLをダンプするのがお勧め。それをスクリプトにして、XcodeのPost-actionに設定すれば良い。
Q. 暗号化された状態でデータを見るツールはないでしょうか
SQLCipherはSQLiteManagerを有償版にすると見ることができるようです。複合化する際にどのロジックを使うかが選択できるようになっています。その暗号化ロジックがwxSqlite3のものに対応してくれれば見られるかなと。
Q. パフォーマンスは実際、どれくらい劣化するでしょうか
Androidで1秒ごとにSELECTしても大丈夫でした。それ以上頻繁にアクセスする場合は多少の劣化が見られました。
Q. SQLiteを使うときには何かのラッパーを使うことは可能でしょうか
iOS/Android両方に対応する必要があるので、C++で書かれたラッパーを使っています。私はlibWRP-SQLite3というのを使っています。