2

モバイル アプリ (Android と iPhone の両方) を作成しており、クライアント側の SSL 認証を要求する予定です。これを行うために、私のアプリにはクライアント証明書ファイルが組み込まれています。Android 側では、これは秘密鍵を含むキー ストアです。キー ストアとキーの両方にパスワードがあります。

私の質問: キーストアとキーへのパスワードをどのように/どこに保存すればよいですか?

アプリ コードは、サーバーへの SSL 接続を確立するときにキー ストアを開くためにこれらを必要とするため、アプリからアクセスできる必要があります。

アプリのソース コードに難読化された文字列として格納する必要がありますか? または、私が見ていない、これを行うためのより一般的に受け入れられている(読み取り:より良い)方法がありますか?

4

2 に答える 2

1

キーストアの保護に使用される暗号化はパスワードに基づいているため、(1)そのパスワードをクライアントのどこかに保存するか、(2)ユーザーがクライアントアプリを起動するときにパスワードを要求する必要があります。何をする必要があるかは、ユースケースによって異なります。(2)が受け入れられる場合、クレデンシャルは暗号化され、パスワードはどこにも保存されないため、リバースエンジニアリングから保護されています(ただし、ユーザーは毎回パスワードを入力する必要があります)。(1)を実行すると、誰かがクライアントをリバースエンジニアリングし、パスワードを取得し、キーストアを取得し、秘密鍵と証明書を復号化して、サーバーに接続できる別のクライアントを作成できるようになります。これは事実です。このパスワードをどこに保存するかに関係なく(コンパイルされたアプリケーションコード、APK /パッケージ内のリソース、SharedPreference、データベースなどで; それはまだそこにあり、ある時点で理解できる形で存在するでしょう。

これを防ぐためにできることは何もありません。コードのリバースエンジニアリングを(難読化などによって)難しくすることはできますが、それを不可能にすることはできません。これらのアプローチで軽減しようとしているリスクとは何か、そしてそれを軽減するためにどれだけの作業を行う価値があるかを判断する必要があります。

于 2012-04-24T17:08:04.350 に答える
0

http://developer.android.com/guide/topics/data/data-storage.htmlによると

Androidでの目的のために、SharedPreferencesまたは単純なSQLiteデータベースを使用する必要があります。

iOSもそれをサポートしているため、SQLiteアプローチを好むため、一部のコードを再利用できます。

于 2012-04-24T15:31:34.637 に答える