2012-04-11 13 views
1

私はAndroidアプリケーションを作成しています。まず、サーバーに安全にデータを送信できるようにする必要がありました。だから私はRSAを考えました。1人のユーザーの複数の非対称キーペア?

私は公開鍵をユーザに送り、彼は自分がしなければならないことをさせ、それから私的に受け取って戻し、復号化します。それは大丈夫です。

しかし、今では、もう一方の側にある種の暗号化もあるはずです。つまり、メッセージを暗号化してユーザーに送信する手段があり、特定のユーザーだけがメッセージを読むことができるようにする必要があります。

これは2組の鍵を持ち、1組の公開鍵ともう1組の秘密鍵をユーザーに送信し、残りの部分をサーバーに保管するような匂いがします。

私は対称キーを見ましたが、何とか私にはあまり安全ではないようです。

私は何かが見つからないのですか、これはよくあることですか?私は暗号化のシーン全体に幾分新しいです。

+0

プレーンHTTPSの使用は機能しませんか? – Thilo

+0

さまざまな理由から、私は制御できませんでしたが、HTTPSは今の選択肢ではありません。 –

+0

各ユーザーには1つのキーペアが必要です。他の方向に送るには、その人の公開鍵で暗号化します。 – CodesInChaos

答えて

1

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

  • アリスに(下記参照)しっかりボブへ
  • ボブの手を自分の公開鍵(RSA)を渡し

    1. :だから、このような何かを行きますボブはアリスと通信したいと思って、セッションキー(例えば、256ビットのAESキー)を生成し、公開キーを使ってそれを暗号化します。
    2. ボブは、暗号化されたセッションキーをアリスに送信します。
    3. ボブは、セッション鍵(AES)を使用してメッセージを暗号化し、それをアリスに送信します。
    4. アリスは、自分の秘密鍵(RSA)を使用してセッション鍵(AES)を復号します。
    5. アリスは、セッションキー(AES)を使用してBobからのメッセージを復号化します。

    他の方法で通信するために、手順3〜7でBobのアリスの役割を逆にします。

    もちろん、公開鍵を誰かに送信した場合、実際に自分の鍵ではなく、自分の鍵であることをどのように確認できますか?あなたがそれを手渡して写真のIDを表示しないと、これは簡単ではありません。

    Bobからの(暗号化された)メッセージが変更されていないことを確認する必要があります(半分に減らすことができますが、それでも有効で復号化が可能です。 )。

    HTTPSやその他の確立されたプロトコルを使用することを納得させ、ホイールを再発明しようとしないでください。

  • +0

    いくつかの説得力のあるHTTPSがありましたが、内部のものに使用される重要な魔法が少しありました。ありがとう! –

    関連する問題