6

私のiOS4+アプリでは、いくつかの場所でAES暗号化を使用しており、アプリ全体が非常に安全である必要があります。これを行うには、このアプリでいくつかのキーをハードコーディングする必要があります。これらのキーは、何かを暗号化する必要があるときにランダムに選択されます...

私の質問は、それらの秘密鍵をどのように保存するかです。を使用してそれらをハードコーディングするのは安全NSStringですか?または

#define SecretKeyString @"febd9a24d8b65c1c787d50a4ed3619a9"

ユーザーがこのアプリをインストールしてiPhoneを脱獄した場合、ハードコードされたキーを取得できませんでしたか?どうすればそれらを最も効果的に隠すことができますか?

提案をありがとう...

4

2 に答える 2

5

他のアプリが行うことは、ユーザーがアプリを使用する前に「ログイン」する必要があることです。次に、ユーザーID /パスワードをキーとして使用してキーを暗号化するか、セキュリティで保護されたWebサービスを使用してそのユーザーのキーを取得します。

#defineまたはNSStringを使用する場合は、キーを推測する方法があります。明らかに、コンパイルされたコードでこれらのキーを見つけるために本当に多くの時間を費やす必要がありますが、探しているセキュリティのレベルと防御している人々によっては、これが問題になる可能性があります。

于 2012-05-10T13:41:29.190 に答える
2

難読化によるセキュリティに関するいくつかの記事を読むことをお勧めします。これは本質的にあなたが達成しようとしていることであり(少なくともすべての推奨事項が言っていることです)、最終的には安全ではありません。

ただし、iOSのサンドボックスは、最初で最も効果的なセキュリティ形式です。

次に、入力の検証は、アプリに必要な次の最も重要なセキュリティ機能になります。すべての入力(ユーザーが入力した情報から、スキームを介したアプリの起動へのネットワーク応答まで)を検証しない限り、暗号化をすべて行うことは何の意味もありません。

結局、安全な暗号化は、必要な場合、ハードコアでない(またはハードコーディングを難読化しない)場合にのみ安全です。mprivatは正しいので、ユーザーが生成したデータ(ログイン)、公開鍵暗号化(含まれていない秘密鍵のみが復号化できる)、またはトランスポートにSSLを使用するサーバー側暗号化のいずれかを使用する必要があります。

また、キーチェーンAPIを使用するデバイスでのみ安全なデータを維持する場合は、特に、アイテムを取得するためにユーザーがログインする必要があるフォームを使用するようにしてください。

デバイスと別のデバイス(サーバーなど)の両方で復号化されるデバイスで暗号化するデータがある場合は、基本的なアーキテクチャ上の欠陥があります。暗号化-復号化は、クライアントクライアント(別名、ユーザーのデバイスのみ)またはクライアントサーバー(ユーザーデバイスからサーバー、またはサーバーからユーザーデバイス)のみであることが非常に重要です。2つを混在させると、脆弱性が発生します。私はここで特に同じ暗号化メカニズムを意味しています。クライアントクライアントとクライアントサーバーに別々の暗号化を使用することは問題ありません(場合によっては必要です)。

安全なコードを書く必要がある人のために必読です:http: //www.amazon.com/gp/aw/d/0735617228

于 2012-05-10T14:22:30.283 に答える