2

私のアプリケーションでは、SSL 接続を確立する必要があります。現在、BKSタイプのキーストア ファイルがありますが、apk にファイルとして保存したくありません。私の知る限り、秘密鍵はアプリケーションコード内に文字列などとして埋め込むことができ、難読化できます。私の質問は次のとおりです。

1) それは本当に可能で、資産フォルダーに「mykey.bks」ファイルとして保存するよりも安全ですか?

2) bks ファイルの内容をコピーしてアプリケーション コードに貼り付ける方法と、それにアクセスしてソケット ファクトリを作成する方法を教えてください。

ありがとう

4

3 に答える 3

4

1)それは本当に可能で、資産フォルダーに「mykey.bks」ファイルとして保存するよりも安全ですか?

APKデコンパイラ ツールを使用して、誰でも簡単に APK からアセット フォルダを抽出できるため、答えはノーです。

解決:

a)。mykey.bksファイルを安全なサーバーに置く

b)。 C++ または C で getter メソッドを使用して単純なクラスを作成し、実行時にサーバー URL を返すことにより、JNI を使用してサーバー URL を保護します (apk からファイル URL を抽出しないようにするため)。

c)。アプリケーションで使用する必要がある場合は実行時に「mykey.bks」ファイルを ダウンロードし、ユーザーがアプリケーションを閉じるときに削除します

于 2013-03-15T09:24:20.287 に答える
1

コメントで述べたように、秘密鍵を秘密にしておくか、誰もが安全なサービスにログインできるようにする必要があります。(したがって、秘密鍵という名前)

それを本当にプライベートに保つ唯一の方法は、それを他人に渡さないことです. たとえば、アプリケーションの UI を使用して秘密鍵を提供します。このキーが存在しない場合、ユーザーはサービスにアクセスできません!

少なくともあなたの質問について理解していることからすると、これはあなたの現在の状況では不可能に思えます。したがって、次善の策は、キーをパスワードで保護することです。ただし、ユーザーにパスワードを提供する必要があります。これは、キー自体をユーザーに提供するのとまったく同じです (前のオプション)...

最悪の選択肢は、キーをパスワードで保護せずにアプリケーション/APK に埋め込むことです。熟達したユーザーなら誰でも、アプリケーションが使用するのと同じアルゴリズム (難読化解除、ダウンロード、ファイルの読み取りなど) を使用してキーを取得できます。

結論として、あなたのサービスが秘密鍵を必要とし、その鍵を (すべて? の) ユーザーに渡すというのはばかげているように思えます。誰もがサービスに接続できるように... なぜサービスにアクセスするために秘密鍵が必要なのですか?

最後に、キーを提供する方法の選択はあなた次第です!


更新(コメントには長すぎました)

キーを使用するときの一般的な考え方は、クライアントが (カスタム生成された)秘密/公開キー ペアを持っているということです。次に、公開鍵部分がサービスに送信されます。また、クライアントは秘密鍵を使用して認証できます (クライアントが実際に秘密鍵部分を持っていることを証明することにより)。

あなたの状況では、公開鍵をストレージ/サービスに送信する方法を提供する必要があります。問題は、アクセスを許可したいクライアントに公開鍵が属していることを何らかの方法で確認する必要があることです。これは管理者が手動で確認できます... そうしないと、だれでも意味のないサブスクリプションを作成できます。

独自のアプリケーションをより具体的にするため。SSL 公開/秘密キー ペア ジェネレーターを含めることができます。新しい鍵ペアが生成された後、アプリケーションから公開鍵をサービスに送信できます。

サービスは認証を受ける必要があり、その瞬間まで、クライアントは (認証されていないキーペアを使用して) 読み取り専用 (ゲスト) サブスクリプション (たとえば) にサービスに接続できます。

繰り返しますが、実際の実装の選択はあなた次第です。これらはポインタにすぎません。

于 2013-03-15T09:40:03.507 に答える
1

この記事は、Android でのプライベート データの保存に関する参考資料です

于 2013-03-15T10:06:17.727 に答える