ニフクラmBaaSお役立ちブログ

スマホアプリ開発にニフクラmBaaS。アプリ開発に役立つ情報をおとどけ!

ニフティクラウド mobile backend 勉強会 #8「Cocos2d-x」レポート(その2)

5月23日にニフティクラウド mobile backend 勉強会 #8「Cocos2d-x」が開催されました。Chukong Technologies Japanの清水氏、シュハリ社 松浦氏にお話を伺いました。

今回はその勉強会レポートになります。その2として、シュハリ社 松浦氏の発表を紹介したいと思います。

 

SQLiteを暗号化する

SQLiteは1ファイルで使える手軽なデータベースで、データベースファイルをコピーするだけで他の環境でも使える手軽さが利点です。ただしSQLite3のファイルはiOSのipaやAndroidのapkファイルから簡単に取り出すことができます。さらにデフォルトでは暗号化されていませんので、アプリで使っているデータ(ユーザのポイントや課金したコインの情報など)をいじってチートもできてしまいます。

そこで暗号化するのですが、候補が二つあります。SQLCipherとwxSqlite3です。SQLCipherはiOSは良いのですが、Androidではビルドができませんでした。

wxSqlite3を組み込んでいく手順について。iOSはシンプル。Androidは面倒。

 

実際に使ってみると…

注意点としては、初回起動時に空のDBを作成して暗号化する。既存のSQLiteのファイルをコピーして暗号化することはできない。

さらにSQLの更新が面倒であったり、暗号化するとデバッグしづらくなるので仕上げの段階で行った方が良い(開発中は暗号化せず、リリース&チェック時のみ暗号化する)、暗号化時のパフォーマンスチェックは必要(若干低下する)。

万一にも暗号化処理を行わずにリリースすることのないよう、暗号化のする/しないを確実に管理しなければならない。

SQLの更新が面倒

担当者ではSQLが分からないこともある。さらに更新時にSQLを作るのも大変。そこで、SQLiteファイルからビルド時に自動的にSQLをダンプするのがお勧め。それをスクリプトにして、XcodeのPost-actionに設定すれば良い。

質疑応答では以下のような質問があがっていました。

Q. 暗号化された状態でデータを見るツールはないでしょうか

SQLCipherはSQLiteManagerを有償版にすると見ることができるようです。複合化する際にどのロジックを使うかが選択できるようになっています。その暗号化ロジックがwxSqlite3のものに対応してくれれば見られるかなと。

Q. パフォーマンスは実際、どれくらい劣化するでしょうか

Androidで1秒ごとにSELECTしても大丈夫でした。それ以上頻繁にアクセスする場合は多少の劣化が見られました。

Q. SQLiteを使うときには何かのラッパーを使うことは可能でしょうか

iOS/Android両方に対応する必要があるので、C++で書かれたラッパーを使っています。私はlibWRP-SQLite3というのを使っています。

 

ニフティクラウドmobile backend mbaas ご紹介 概要資料