2012-03-02 25 views
2

私は機密情報を含むSQLiteデータベースを持っています。だから私の懸念は、iPhoneに保存して、安全でハッカーが手に入れることができないようにする方法です。 ipadで提供されているハードウェアの暗号化について調べましたが、その使い方を理解できませんでした。iphone ..にSQLiteデータベースを安全に保存する方法は?

+1

読み取り時に暗号化して復号化することができます。あなたのアプリケーションがオープンソースではなく、他人に暗号化の方法を伝える必要がない場合、使用するアルゴリズムは簡単なxorでもenougthになります。 – jcubic

答えて

2

あなたの問題を解決するためのさまざまな方法があります。

  • md5 + salt暗号化でCoreDataに格納された値を暗号化します。ユーザーデバイスのUUIDと、データを保存するための追加の「塩」に基づいて、特殊キーを生成することができます。注意すべき点は、Appleは今後、デバイスのパーソナル化値を下げることになるということです。しかし、反対側では、ユーザーの認証によって特殊キーを受け取って、このキーを後要求から受け取ることがあります。暗号化のために、組み込みフレームワーク:#import <CommonCrypto/CommonDigest.h>を使用することができます。あなたはウェブ上で見つけることができる多くの例があります。

  • ドキュメントフォルダ内のsqliteファイル全体を暗号化します。これは私にとってかなり難しいことです。以前はこのアプローチに直面していませんでした。

EDIT: これは、MD5データを暗号化し受信するために使用できるコードサンプルです: これは.hファイル

#import <Foundation/Foundation.h> 

@interface NSString (MyExtensions) 
- (NSString *) md5; 
@end 

@interface NSData (MyExtensions) 
- (NSString *)md5; 
@end 

あり、これは.Mファイルです:

#import "MyExtensions.h" //here should be your .h file name 
#import <CommonCrypto/CommonDigest.h> // Need to import for CC_MD5 access 

@implementation NSString (MyExtensions) 
- (NSString *) md5 
{ 
    const char *cStr = [self UTF8String]; 
    unsigned char result[16]; 
    CC_MD5(cStr, strlen(cStr), result); // This is the md5 call 
    return [NSString stringWithFormat: 
      @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", 
      result[0], result[1], result[2], result[3], 
      result[4], result[5], result[6], result[7], 
      result[8], result[9], result[10], result[11], 
      result[12], result[13], result[14], result[15] 
      ]; 
} 
@end 

@implementation NSData (MyExtensions) 
- (NSString *)md5 
{ 
    unsigned char result[16]; 
    CC_MD5(self.bytes, self.length, result); // This is the md5 call 
    return [NSString stringWithFormat: 
      @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", 
      result[0], result[1], result[2], result[3], 
      result[4], result[5], result[6], result[7], 
      result[8], result[9], result[10], result[11], 
      result[12], result[13], result[14], result[15] 
      ]; 
} 
@end 

このファイルをコードの任意の場所に含めると、次の関数を呼び出すことができます。

NSString *myStringToEncrypt = @"Confidential information"; 
NSString *myMD5 = [myStringToEncrypt md5]; 

btw:あなたが知っておくべきことは、MD5関数はデータの合計を制御するだけのハッシュ関数です。 を暗号化したい場合は、AES256暗号化方法をご覧ください。 CommonCryptoもそれを提供します。アプローチはあなたの目標に依存します。

+0

の詳細やサンプルはどこから入手できますか?私はCCCryptを使用しようとしていましたが、真剣にどのようにそれを使用するためのドキュメントを見つけることができません。 –

+0

私は自分のプロジェクトで使ったスニペットコードを提供することができます。少し待ってください:) – kokoko

+0

私はいくつかのコードサンプルを追加しました。 – kokoko

0

データベースのパスワードで保護されたzipファイルを作成できると思います。必要なときに解凍することができます。

+0

私が聞いた限りでは、パスワードで保護されたZIPファイルは、私の主な関心事は、デバイスの盗難です。デバイスが盗まれて、そのデータベースにアクセスできる方法があるかどうかを確認してください。そのため、ハードウェアアクセラレーションによるAES暗号化を検討しています。デバイスが盗まれる。 –

+0

保護するために良いパスワードを選択した場合、クラックするのは難しいでしょう。もちろん、AES暗号化は非常に優れています。しかし、データベース全体を暗号化/復号化するたびに、多くのCPU時間を消費します。私はそれが非常に効率的ではないと感じています。 – Vignesh

+0

私は毎回データベース全体を暗号化/解読することを考えていませんでしたが、それは非常に効率的で、私が考えていたのはデータベースをロックするデータベースのロックのようなものでした... hburdeによって提案されたオプション...しかし、とにかくありがとう。 –

1

http://sqlcipher.net/(SQLLite with AES Encryption)を使用することができますが、これには深刻な影響があります(エクスポートの制限があり、CoreDataと統合されません)。

関連する問題