SlideShare una empresa de Scribd logo
1 de 35
Descargar para leer sin conexión
SQLite の暗号化
Akihiro Matsuura @ Syuhari, Inc.
About me
• 松浦 晃洋
• 株式会社シュハリ 代表取締役
• Cocos2d-x ゲーム開発
• 書籍、雑誌などの執筆
• Cocos2d-x エヴァンジェリスト
普段はこんなアプリ
作ってます
Cocos2d-JS の翻訳本
Cocos2d-x Game
Development Essentials
Building Android Games 

with Cocos2d-x
海外での出版に協力
Cocos2d-x Cookbook
https://www.packtpub.com/game-development/cocos2d-x-cookbook
http://www.amazon.co.jp/dp/B013R02BMY/
2015年12月3日
発売予定
予約受付中!
SQLite を暗号化する
候補は2つ
SQLCipher
iOS でビルド OK

Android でビルド NG

SQLiteManager が対応している
wxSqlite3
C++ ライブラリでビルドも簡単
wxSqlite3 を
Cocos2d-x へ組み込む
wxSqlite3 をダウンロード
• ドキュメント
• http://wxcode.sourceforge.net/docs/wxsqlite3/

• ダウンロード
• http://sourceforge.net/projects/wxcode/files/Components/
wxSQLite3/

• 検証は Cocos2d-x ver3.6、wxSqlite3 ver3.1.1 で行いました

Cocos2d-x ver3.2 でも動作確認しました
wxSqlite を Cocos2d-x へコピー
zip内の sqlite3/secure/src を 

cocos2d/external/wxsqlite/src へコピー
iOS 用の設定
Xcode にソースを追加
wxsqlite/src 内の 

sqlite3.h 

sqlite3secure.c  
フラグを追加
Other C Flags に -DSQLITE_HAS_CODEC を追加する
#ifdef SQLITE_HAS_CODEC
/*
** Specify the key for an encrypted database. This routine should be
** called right after sqlite3_open().
**
** The code to implement this API is not available in the public release
** of SQLite.
*/
SQLITE_API int sqlite3_key(
sqlite3 *db, /* Database to be rekeyed */
const void *pKey, int nKey /* The key */
);
SQLITE_API int sqlite3_key_v2(
sqlite3 *db, /* Database to be rekeyed */
const char *zDbName, /* Name of the database */
const void *pKey, int nKey /* The key */
);
SQLITE_HAS_CODEC を定義することにより、

sqlite3_key や sqlite3_rkey が使えるようになる
sqlite3.h
Android 用の設定
cocos2d/external/wxsqlite/Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := wxsqlite3_static
LOCAL_MODULE_FILENAME := libwxsqlite3
LOCAL_CFLAGS += -DSQLITE_HAS_CODEC
LOCAL_SRC_FILES := src/sqlite3secure.c
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/src
LOCAL_C_INCLUDES := $(LOCAL_PATH)/src
include $(BUILD_STATIC_LIBRARY)
(新規作成)
• 赤文字は削除
• 青文字は修正
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := cocos_localstorage_static
LOCAL_MODULE_FILENAME := liblocalstorage
LOCAL_SRC_FILES := LocalStorage.cpp 
LocalStorageAndroid.cpp
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/..
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../..
LOCAL_CFLAGS += -Wno-psabi
LOCAL_CFLAGS += -DSQLITE_HAS_CODEC
LOCAL_EXPORT_CFLAGS += -Wno-psabi
LOCAL_WHOLE_STATIC_LIBRARIES := wxsqlite3_static
LOCAL_STATIC_LIBRARIES := cocos2dx_internal_static
include $(BUILD_STATIC_LIBRARY)
$(call import-module,.)
$(call import-module,external/wxsqlite3)
cocos2d/cocos/storage/local-storage/Android.mk
cocos2d/cocos/storage/local-storage/
LocalStorage.cpp
#include "LocalStorage.h"
#include "platform/CCPlatformMacros.h"
//#if (CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID)
#include <stdio.h>
#include <stdlib.h>
L 33 と L157 をコメントアウトする
proj.android/jni/Android.mk
LOCAL_SRC_FILES := hellocpp/main.cpp 
../../Classes/AppDelegate.cpp 
../../Classes/HelloWorldScene.cpp 
../../cocos2d/external/wxsqlite/src/sqlite3secure.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../cocos2d/external/wxsqlite/src/
LOCAL_CFLAGS += -DSQLITE_HAS_CODEC
実際に使ってみる
DBへのアクセス方法
sqlite3_open(path.c_str(), &database);
DB オープン後にパスワードを指定するだけ
sqlite3_key(database, password, (int)strlen(password));
注意点
• 初回起動時に空の DB を作成して暗号化すること
• SQLite のファイルをコピーしてきて暗号化するこ
とはできない
• SQL の更新が面倒
• 暗号化されるとデバッグしにくいので暗号化は仕上げの段階で行う方
がいい
• ただ暗号化後のパフォーマンスチェックは大事
• 普段は暗号化せずにリリースビルドとチェック時のみに暗号化する
• パフォーマンスは若干低下
• 頻繁なアクセスは出来るだけしないようにする
実際に使ってみて
• SQL の更新が面倒
• 暗号化する、しないを簡単にかつ確実に行いたい
問題点
結構変更あるし、DB にデータ挿入してるし
SQL 作るのが面倒
問題点1:DB の更新が面倒
SQLite ファイルからビルド時に自動的に SQL
をダンプするスクリプトを作成
SQLite をダンプするスクリプト
#!/bin/sh
commandline()
{
sleep 1; echo ".output ../Resources/data/data.sql"
sleep 1; echo ".dump"
sleep 1; echo ".exit"
}
commandline | sqlite3 ../Resources/data/data.sqlite
Xcode の Pre-action に設定
SQL を読み込み暗号化した

データベースを作成
sqlite3 *database = NULL;
sqlite3_open(dbpath.c_str(), &database);
sqlite3_key(database, DB_PASSPHRASE, (int)strlen(DB_PASSPHRASE));
auto util = FileUtils::getInstance();
std::string path = util->fullPathForFilename(“path/to/sql”);
std::string sql = util->getStringFromFile(path);
sqlite3_exec(database, (char*)sql, 0, 0, NULL);
sqlite3_close(database);
問題点2:暗号化する設定を変える
#if !defined(COCOS2D_DEBUG) ||
COCOS2D_DEBUG == 0 ||
SQLITE_ENCRYPT==1
sqlite3_key(database,
DB_PASSPHRASE, (int)strlen(DB_PASSPHRASE));
#endif
COCOS2D_DEBUG >0 または
SQLITE_ENCRYPT==1 のときのみ暗号化
リリースビルドでは絶対に暗号化される
Demo
https://github.com/syuhari/wxSqlite3
Cocos2d-x で
開発したいエンジニア
大募集中!
• @syuhari
• facebook.com/syuhari

Más contenido relacionado

La actualidad más candente

NTT研究所インターン 感想
NTT研究所インターン 感想NTT研究所インターン 感想
NTT研究所インターン 感想
Makoto Kawano
 
レイトレ空間構造入門
レイトレ空間構造入門レイトレ空間構造入門
レイトレ空間構造入門
Toru Matsuoka
 

La actualidad más candente (20)

C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点
C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点
C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
 
Cartographer を用いた 3D SLAM
Cartographer を用いた 3D SLAMCartographer を用いた 3D SLAM
Cartographer を用いた 3D SLAM
 
オープンソース SLAM の分類
オープンソース SLAM の分類オープンソース SLAM の分類
オープンソース SLAM の分類
 
WebSocketでカメラの映像を共有してみた
WebSocketでカメラの映像を共有してみたWebSocketでカメラの映像を共有してみた
WebSocketでカメラの映像を共有してみた
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
FlutterでBLEを
いい感じにする
FlutterでBLEを
いい感じにするFlutterでBLEを
いい感じにする
FlutterでBLEを
いい感じにする
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
NTT研究所インターン 感想
NTT研究所インターン 感想NTT研究所インターン 感想
NTT研究所インターン 感想
 
HTTP2 最速実装 〜入門編〜
HTTP2 最速実装 〜入門編〜HTTP2 最速実装 〜入門編〜
HTTP2 最速実装 〜入門編〜
 
レイトレ空間構造入門
レイトレ空間構造入門レイトレ空間構造入門
レイトレ空間構造入門
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
 
AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦
AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦
AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦
 
僕がつくった 70個のうちの48個のWebサービス達
僕がつくった 70個のうちの48個のWebサービス達僕がつくった 70個のうちの48個のWebサービス達
僕がつくった 70個のうちの48個のWebサービス達
 
WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
 
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
 

Similar a SQLite の暗号化

cocos2d-xハンズオン勉強会 in 名古屋
cocos2d-xハンズオン勉強会 in 名古屋cocos2d-xハンズオン勉強会 in 名古屋
cocos2d-xハンズオン勉強会 in 名古屋
Tomoaki Shimizu
 
Cocos2d x-sprite3d
Cocos2d x-sprite3dCocos2d x-sprite3d
Cocos2d x-sprite3d
aktsk
 
cocos2d-xにおけるBox2Dの利用方法および便利なツール
cocos2d-xにおけるBox2Dの利用方法および便利なツールcocos2d-xにおけるBox2Dの利用方法および便利なツール
cocos2d-xにおけるBox2Dの利用方法および便利なツール
Tomoaki Shimizu
 

Similar a SQLite の暗号化 (20)

cocos2d-consoleでパッケージ管理
cocos2d-consoleでパッケージ管理cocos2d-consoleでパッケージ管理
cocos2d-consoleでパッケージ管理
 
Cocos2d-x Console @Cocos Talks #3
Cocos2d-x Console  @Cocos Talks #3Cocos2d-x Console  @Cocos Talks #3
Cocos2d-x Console @Cocos Talks #3
 
cocos2d-x公開講座 in 鹿児島
cocos2d-x公開講座 in 鹿児島cocos2d-x公開講座 in 鹿児島
cocos2d-x公開講座 in 鹿児島
 
CocosBuilderとcocos2d-x JSB
CocosBuilderとcocos2d-x JSBCocosBuilderとcocos2d-x JSB
CocosBuilderとcocos2d-x JSB
 
Cocos2d-x(JS)の紹介
Cocos2d-x(JS)の紹介Cocos2d-x(JS)の紹介
Cocos2d-x(JS)の紹介
 
Cocos2d xをさらにさわってみよう!
Cocos2d xをさらにさわってみよう!Cocos2d xをさらにさわってみよう!
Cocos2d xをさらにさわってみよう!
 
Macでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Macでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築についてMacでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Macでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
 
Cocos最新情報(2015/6/30)
Cocos最新情報(2015/6/30)Cocos最新情報(2015/6/30)
Cocos最新情報(2015/6/30)
 
cocos2d-xハンズオン勉強会 in 名古屋
cocos2d-xハンズオン勉強会 in 名古屋cocos2d-xハンズオン勉強会 in 名古屋
cocos2d-xハンズオン勉強会 in 名古屋
 
Macでcocos2d-x 3.0alphaを使用した、iOSアプリの開発環境構築について
Macでcocos2d-x 3.0alphaを使用した、iOSアプリの開発環境構築についてMacでcocos2d-x 3.0alphaを使用した、iOSアプリの開発環境構築について
Macでcocos2d-x 3.0alphaを使用した、iOSアプリの開発環境構築について
 
Cocos2d xのススメ
Cocos2d xのススメCocos2d xのススメ
Cocos2d xのススメ
 
Cocos2d x-sprite3d
Cocos2d x-sprite3dCocos2d x-sprite3d
Cocos2d x-sprite3d
 
Windowsでcocos2d-x 2.1.4を使用した、Androidアプリの開発環境構築について
Windowsでcocos2d-x 2.1.4を使用した、Androidアプリの開発環境構築についてWindowsでcocos2d-x 2.1.4を使用した、Androidアプリの開発環境構築について
Windowsでcocos2d-x 2.1.4を使用した、Androidアプリの開発環境構築について
 
Cocos2d-x でのクラウドサービス活用方法 - 週刊アスキーセミナー
Cocos2d-x でのクラウドサービス活用方法 - 週刊アスキーセミナーCocos2d-x でのクラウドサービス活用方法 - 週刊アスキーセミナー
Cocos2d-x でのクラウドサービス活用方法 - 週刊アスキーセミナー
 
Getting Started With Ore-Ore Swift Standard Library +
Getting Started With Ore-Ore Swift Standard Library +Getting Started With Ore-Ore Swift Standard Library +
Getting Started With Ore-Ore Swift Standard Library +
 
Macでcocos2d-x 2.1.3を使用した、Androidアプリの開発環境構築について
Macでcocos2d-x 2.1.3を使用した、Androidアプリの開発環境構築についてMacでcocos2d-x 2.1.3を使用した、Androidアプリの開発環境構築について
Macでcocos2d-x 2.1.3を使用した、Androidアプリの開発環境構築について
 
Windowsでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Windowsでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築についてWindowsでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Windowsでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
 
Cocos2d-x ver.3 開発の効率化
Cocos2d-x ver.3 開発の効率化Cocos2d-x ver.3 開発の効率化
Cocos2d-x ver.3 開発の効率化
 
cocos2d-xにおけるBox2Dの利用方法および便利なツール
cocos2d-xにおけるBox2Dの利用方法および便利なツールcocos2d-xにおけるBox2Dの利用方法および便利なツール
cocos2d-xにおけるBox2Dの利用方法および便利なツール
 
かんたんなcocos2d-xの紹介
かんたんなcocos2d-xの紹介かんたんなcocos2d-xの紹介
かんたんなcocos2d-xの紹介
 

Más de Akihiro Matsuura (12)

Cocos2d-xを用いたゲームアプリ「めちゃギントン」開発の裏側
Cocos2d-xを用いたゲームアプリ「めちゃギントン」開発の裏側Cocos2d-xを用いたゲームアプリ「めちゃギントン」開発の裏側
Cocos2d-xを用いたゲームアプリ「めちゃギントン」開発の裏側
 
Cocos2dx Tips - Box2d, Normal mapping
Cocos2dx Tips - Box2d, Normal mappingCocos2dx Tips - Box2d, Normal mapping
Cocos2dx Tips - Box2d, Normal mapping
 
Cocos2d-x によるスマートフォンアプリ開発のこれまでとこれから
Cocos2d-x によるスマートフォンアプリ開発のこれまでとこれからCocos2d-x によるスマートフォンアプリ開発のこれまでとこれから
Cocos2d-x によるスマートフォンアプリ開発のこれまでとこれから
 
SimpleAudioEngine のカスタマイズ
SimpleAudioEngine のカスタマイズSimpleAudioEngine のカスタマイズ
SimpleAudioEngine のカスタマイズ
 
Yidev cocos2dx
Yidev cocos2dxYidev cocos2dx
Yidev cocos2dx
 
cocos2d-x 開発の効率化
cocos2d-x 開発の効率化cocos2d-x 開発の効率化
cocos2d-x 開発の効率化
 
What I talk about When I talk about Cocos2d-x
What I talk about When I talk about Cocos2d-xWhat I talk about When I talk about Cocos2d-x
What I talk about When I talk about Cocos2d-x
 
Cocos2dx tips
Cocos2dx tipsCocos2dx tips
Cocos2dx tips
 
Cocos2dx 基本編
Cocos2dx 基本編Cocos2dx 基本編
Cocos2dx 基本編
 
Cocos2dx 勉強会
Cocos2dx 勉強会Cocos2dx 勉強会
Cocos2dx 勉強会
 
cocos2d で遊ぼう
cocos2d で遊ぼうcocos2d で遊ぼう
cocos2d で遊ぼう
 
CakePHP in iPhone App
CakePHP in iPhone AppCakePHP in iPhone App
CakePHP in iPhone App
 

Último

Último (11)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 

SQLite の暗号化