8

一部のデータをAESで暗号化する必要があるプロジェクトがあります。ただし、プロジェクトでAESキーを次のようにハードコーディングします。

NSString *passwd = @"someStringAsKey";
NSData *encryptedData = [Encrypter encrypteData:unencryptedData];

誰かが私のバイナリをハックして、ハードコーディングしたAESキーを見つけたい場合、それは簡単でしょうか?もしそうなら、AESキーを保存するためのより良い方法は何ですか?

編集: キーは、データのチャンクを暗号化および復号化し、サーバーからデータをアプリでダウンロードしてから、アプリで暗号化して暗号化されたデータをディスクに保存するために使用されます。このキーはデバイスごとに使用されます。つまり、アプリが実行されるたびにキーを生成する方法を知っている限り、すべてのデバイスが独自のキーを持つことができます。

EDIT2: データのダウンロード手順は次のように保護されています。クライアントはログインするたびにランダムな秘密鍵と公開鍵のペアを生成します。公開鍵をサーバーに送信し、サーバーは公開鍵を使用してAES鍵を暗号化してから、暗号化されたAES鍵をクライアントに送信します。クライアントはAESキーを復号化し、メモリに配置します。次に、クライアントとサーバーは、そのAESキーで暗号化されたデータを転送します。

私は、ディスク上のデータをハッカーによって復号化されないように保護することを目的としています。ハッカーが取得できるのは、ディスク上のバイナリイメージとデータだと思います。また、ハッカーは自分のデバイスで私のアプリを実行し、メモリを分析することができます。

この種の攻撃を保護する必要はありません。ハッカーは非常に賢いので、ジェイルブレイクされたデバイスでウイルスが実行され、ウイルスはアプリの実行中のメモリを分析してメモリ内のキーを検索できます。したがって、ネットワーク転送の安全性について心配する必要はありません。

4

3 に答える 3

5

はい、おそらく見つけるのはかなり簡単でしょう。実際、完全に安全な方法でキーをローカルに保存することは不可能です。あなたが望むことができる最善のことは、難読化して、潜在的な攻撃者のために努力する価値がないようにすることです。たとえば、パスワードを大量のジャンク文字を含むファイルに保存し、メモリ内の正しいパスワードを選択します。パスワードが「password」であるとしましょう。

efgwhi p buobgweu a egiwhip s iph s hipwgie w hp o neifgwnp r ipndpa d(私は詳細な調査を行っていませんが、Blowfishはメモリバッファーで同様の手法を使用していると思います)

このような大きな文字列を任意のエンコーディングとして保存し(あいまいなものの方がうまくいくでしょう)、必要なビットを選択するだけです。私が見ることができる唯一の問題は、ある時点でそれをメモリに保存する必要があるということです。それがメモリにある場合、私が知る限り、決心した個人がGDBまたはLLDBでそれを取得できます。これをさらに煩わしくするために、パスワードをとしてメモリに保存することは避けてNSStringください(とどまるようにしてくださいNSData)。しかし、それは本当に価値があるはずです。残念ながら、最終的には、iOSデバイスでデータが安全になることはありません。

最良のシナリオは、このファイルがサーバー上にあることです。ファイルをダウンロードし、魔法をかけ、パスワードをキーチェーンに保存して、ファイルを削除します。それ以降は、キーチェーンの値を使用してください。

ご存知のとおり、私はセキュリティの専門家ではありません。これは私の頭に浮かんだ最初の考えです。

編集私はあなたが事前に暗号化されたデータを持っているという仮定の下で働いていました。アプリがサーバーからのデータを暗号化している場合、攻撃者がサーバーからデータをダウンロードするのを妨げるものは何ですか?そのためのシステムが整っていると仮定すると、他の回答のいくつかが言うようにキーを生成し、それを難読化された形式でキーチェーンに保存できます。そうすれば、攻撃者がそれを手に入れても、しばらくの間それをどうするかわからなくなります。

于 2013-03-04T05:36:41.007 に答える
2

文字列としてそこにとどまり、他の保護がなければ、バイナリでキーを見つけるのは簡単です。誰かが必要とするのは、シンボリックデバッガー、および/またはキーがどのように見えるべきか(キーの大きさ、および有効な値の範囲)についての適切なアイデアだけです。

iOSには、悪意のあるアプリの手の届かないところに機密データを保存できるセキュリティ機能が組み込まれているようです。問題は、その大部分がデバイスが意図したとおりに実行されていることを前提としているように見えることです。ジェイルブレイクされたデバイスで実行されているコードは、おそらくそのデータのすべてではないにしてもほとんどに到達する可能性があります。

于 2013-03-04T05:37:11.387 に答える
1
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

このメソッドは、アプリケーションの起動時に1回だけ呼び出されるため、ランダムキーを作成します。

-(NSString) generateKey{
       char data[NUMBER_OF_CHARS];
        for (int x=0;x<NUMBER_OF_CHARS;data[x++] = (char)('A' + (arc4random_uniform(26))));
        return [[NSString alloc] initWithBytes:data length:NUMBER_OF_CHARS encoding:NSUTF8StringEncoding];
}
于 2013-03-04T05:42:36.857 に答える