1

最初はデータをサーバーに安全に送信できる必要がある Android アプリケーションを作成しています。そこで、RSA を考えました。

公開鍵をユーザーに送信し、必要なことを実行させてから、返信を受け取り、秘密鍵を介して復号化します。それはすべて問題ありません。

しかし今では、反対側にも何らかの暗号化が必要なようです。つまり、メッセージを暗号化してユーザーに送信し、特定のユーザーだけがそれを読むことができるようにする手段が必要です。

これは、2 組のキーを持ち、一方のペアから公開鍵を、もう一方のペアから秘密鍵をユーザーに送信し、残りをサーバーに保持するようなにおいがします。

対称鍵を見てきましたが、どういうわけか安全性が低いようです。

私は何かを見逃していますか、それともこれは一般的ですか? 私は暗号化シーン全体にやや慣れていません。

4

2 に答える 2

1

通常のアドバイスが適用されます。HTTPSを使用し、安全なメッセージングプロトコルを発明しようとしないでください。あなたはおそらく失敗するでしょう。これがどうしても必要な場合、通常の方法は、RSAキーを使用して対称セッションキーを暗号化し、それらを使用してデータを暗号化することです。また、RSAキーで暗号化できるデータのサイズは、キーサイズ(1024、2048などのビット)によって制限されることに注意してください。双方向通信の場合、各当事者は相手方の公開鍵を持っている必要があります。したがって、次のようになります。

  1. アリスは公開鍵(RSA)をボブに安全に渡します(以下を参照)
  2. ボブは公開鍵(RSA)をアリスに安全に渡します
  3. ボブがアリスと通信したいとき、彼はセッションキー(たとえば、256ビットのAESキー)を生成し、次に彼女の公開キーを使用して暗号化します。
  4. ボブは暗号化されたセッションキーをアリスに送信します。
  5. ボブはセッションキー(AES)を使用してメッセージを暗号化し、それをアリスに送信します。
  6. アリスは自分の秘密鍵(RSA)を使用してセッション鍵(AES)を復号化します。
  7. アリスは、セッションキー(AES)を使用してボブからのメッセージを復号化します。

他の方法で通信するために、ステップ3から7でボブのアリスの役割を逆にします。

しかしもちろん、誰かに公開鍵を送信した場合、それが私の鍵ではなく、実際にあなたの鍵であることをどのようにして確認できますか?直接手渡さずに写真付き身分証明書を提示しないと、些細なことではありません。

次に、ボブからの(暗号化された)メッセージが変更されていないことを確認する方法が必要です(半分にカットしても、有効で復号化できます。もちろん、他のより高度な攻撃もあります)。

したがって、HTTPSまたはその他の確立されたプロトコルを使用するように説得する必要がある人を説得するだけで、車輪の再発明を試みないでください。

于 2012-04-11T14:59:38.317 に答える