1

サーバーに送信されるメッセージに署名するために公開鍵証明書を使用する Android アプリケーションを開発しています。ユーザーがログインすると、x509 証明書を受け取ります。ここで、サーバーにメッセージを送信する場合、証明書の公開鍵を使用してメッセージに署名し、メッセージと一緒にサーバーに送信する必要があります。私はセキュリティに不慣れで、これについてどうすればよいかわかりません。これらは私が持っている質問の一部です:

  1. アプリがサーバーに送信されるメッセージに署名するために証明書を使用できるように、電話に証明書を安全に保存するにはどうすればよいですか?

  2. また、キーのローテーションも随時行う予定です。したがって、サーバーは更新された証明書をユーザーに送信し、アプリは電話に保存されている証明書を更新する必要があります。

チュートリアルや、慎重に処理する必要がある問題を教えていただければ、本当に助かります。ありがとう

4

2 に答える 2

3

自問すべき最初の質問は、メッセージに署名するか暗号化するかということです。署名したい場合 (= メッセージがトランスポート途中で変更されていないことを受信者に証明し、送信者が実際にあなたのアプリであることを証明する)、秘密鍵で署名し、サーバーに公開鍵で署名を検証させる必要があります。鍵。メッセージを暗号化したい場合は、サーバーの公開鍵で暗号化し、サーバーに秘密鍵で復号化してもらう必要があります。

2 番目の問題は、証明書の転送です。中間者がアプリケーションのメッセージを改ざんすることを懸念している場合、この攻撃者は、アプリに送信している証明書を傍受し、メッセージに署名することもできます。

質問に答えるには:

  1. 電話に何かを安全に保存するために私が考えることができる唯一の方法は (攻撃者が root 権限を取得したとしてもアクセスできないようにするため)、デバイスには保存されていないが、ユーザーが入力する必要があるユーザー パスワードで暗号化することです。証明書にアクセスするたびにユーザー。

  2. 1 つの証明書を安全にデバイスに取得できた場合 (できるとは思えません)、サーバー側で古い証明書の公開鍵を使用して新しい証明書を暗号化することで、キーのローテーションを実行し、それをデバイスに送信できます。そこで、秘密鍵で復号化できます。

于 2012-08-29T07:26:07.627 に答える
0

これは本当にあなたの目標に依存します。有効な認証済みユーザーがリクエストを送信したことを表明することが目標である場合、公開鍵を使用して署名することはできません。送信者があなたが思っている人であることを識別するために、秘密鍵で署名し、公開鍵で検証します。ただし、環境によっては、クライアントが秘密鍵を秘密にしておくことが問題になる場合があります。

目標が単に不正開封防止である場合は、おそらくHMAC(キー付きハッシュ)がより効率的な方法である可能性があります。

于 2012-08-28T14:04:50.803 に答える