2012-04-24 11 views
3

私はモバイルアプリ(AndroidとiPhoneの両方)を作成しており、クライアント側のSSL認証を要求しています。これを行うために、私のアプリにはクライアント証明書ファイルが焼き付けられています.Android側では、これは秘密鍵を含むキーストアです。キーストアとキーの両方にパスワードがあります。クライアント側のSSL認証を使用する場合のキーストアのパスワードを保存する方法と場所

私の質問:どのように/私はキーストアとキーにパスワードを格納する必要がありますか?

サーバーにSSL接続するときにキーストアを開くためにアプリケーションコードにアクセスする必要があるため、アプリケーションコードにこれらが必要です。

アプリのソースコードに難読化された文字列として格納する必要がありますか?それとも私が見ていないこれをやっているより一般的に受け入れられている(読んでいる:より良い)方法がありますか?あなたは、Androidであなたの目的のためにSharedPreferencesまたは単純なSQLiteデータベースを使用する「必要がある」http://developer.android.com/guide/topics/data/data-storage.html

によると

答えて

1

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

これを防ぐには何もできませんが、コードを難読化する(難読化など)ことはできますが、不可能にすることはできません。これらのアプローチを緩和し、それを緩和するためにどれくらいの作業を行う価値があるのですか。

+0

私はパスワードを保存する方法を尋ねています。オプション1。私はそれがコードによって生成されたとしても、アプリケーションからパスワードを取得することは決して不可能ではないことを認識しています。私が求めているのは、「アプリでパスワードを難読化するための「最良の」方法は何ですか?」私はそれを不可能にすることはできないので、「最適に困難」にする方法はありますか? – jph

+0

さて、あなたのアプリケーションコードに入れてから、本当に良い難読化処理/ツールを使ってその(あなたのクライアントアプリケーション全体)を実行することは、おそらくあなたがここでできる "最高の"ことです。 – jeffsix

0

iOSでもサポートされているので、私はSQLiteの方が好きなので、いくつかのコードを再利用できます。

関連する問題