2016-04-22 16 views
0

状況:送信者AはBにメッセージを送信する必要があります。データはRSA公開鍵暗号化を使用して保護されています。 och Bはプライベートキーと公開キーを作成し、公開キーを共有します。 Bは、暗号化されたメッセージを受信したクライアントを実行し、自分のマシンの秘密鍵を使用して復号化します。複数のクライアントに安全なRSA通信を実装する方法は?

Bは別のマシンに行き、クライアントを実行してメッセージを受信しますが、秘密鍵は存在しないため、復号化できません。

実世界のシナリオ:Skypeのようなチャットアプリケーション。 Bは、すべてのメッセージを受信できる複数のマシンでSkypeを実行できます。

秘密鍵を転送することなく、これをどのように達成できますか?これは通常どのように処理されますか?

+0

受信者が複数のマシンを持っているかどうかを送信者が認識しているかどうかを考える必要があります。そうでなければ、受信者は各マシン上で秘密鍵を転送しなければならない。 –

+0

はい、私が避けたいのは、新しいクライアントがそれを解読できるように秘密鍵を最初に暗号化できるのであれば... – CodeOrElse

+0

暗号化は常に鍵となる管理上の問題です。構想されたシステムで最高の戦略を考えることはできますが、一般的には答えられません。 –

答えて

1

GnuPGこれです。あなたは多くの人にメッセージを送ることができます。それを壊すことができます。平文メッセージMで始まる。

次に、ランダムなキーskを作成する。

シンメトリックサイファーを使用します。エースは確かな選択です。

skでMを暗号化します。 AはBとCに送信します.AはBpubとCpub、つまりそれぞれの公開鍵を取得します。

次に、各公開鍵でskを暗号化します。ヘッダ= E_Bpub(SK)& E_Cpub(SK)

A次いでBおよびC

B及びCそれら次いでHeaderのそれらの部分を復号化するために、それぞれの秘密鍵を使用して、両方の両方にHeaderemを送信skがある場合は、skを使用してメッセージを復号化します。

質問に答えるために、skypeやiMessageのようなものは、ユーザごとに複数の公開鍵を持っており、すべてのデバイスで暗号化されており、すべてのデバイスがメッセージを復号化できるようになっています。

希望に役立ちます。

Whatsappの暗号化は、ウィスパーの論文に基づいています。

https://www.whatsapp.com/security/WhatsApp-Security-Whitepaper.pdf

https://eprint.iacr.org/2014/904.pdf https://whispersystems.org/

+0

複数の鍵を使って暗号化するのは良い点ですが、Aはすべてのクライアントを認識する必要があります。 AがBとCにメッセージを送信するが、それらのクライアントは実行中ではなく、代わりに古いラップトップを起動してそこにクライアントをインストールすると仮定します。今すぐメッセージが取得されますが、彼はそれを読むことができません! – CodeOrElse

+0

パブキーはどこかに登録する必要があります。中央のサービス。その後、すべてのクライアントキーが使用可能になります。中央のサービスは、パブキーだけのメッセージコンテンツにはアクセスできません。 – Jonathan

0

私はそれを持っていると思います。

通常のメッセージのAESのみ。クライアントごとに同じキー。 新しいクライアントが接続すると、優先度メッセージを使用して送信者から新しいクライアントにAESキーを送信するようにRSAを設定します。 (受信者は送信者に「AESキーを教えてください、ここに私のRSA公開鍵があります」という要求を送信します)次に待機中のAES暗号化メッセージを処理してください!

ただし、AESキーを返信できるようにするには、送信者がオンラインである必要があります。したがって、新しいクライアントが接続すると、送信者がオンラインになり、その要求に応答できるようになるまで、彼はどんなメッセージも受け入れることができなくなります。しかし、私はそれで生きることができるかもしれません。

しかし...SENDERが別のマシンに新しいクライアントをインストールした場合、もうAESキーはありません。

1

要件を満たす方法はいくつかあります。 1)会話に参加していないが、要求に応じて特定のユーザの公開鍵を「返す」外部の「公開鍵」サーバ。 2)オニオンルーティングを使用する: "A"は "B"を知っているが、 "C"は知らないと言う。私たちはBがそれらすべてを知っていると仮定します。したがって、アイデアは明確な知識 "A-> C"なしでCにメッセージを配信するためのプロキシとして考えられます。それに加えて、より複雑なネットワークを構築するためにニンニクルーティングを使用することができます。これは非常に難しい解決方法です。 3)チャットには1つの対称キー(および対称アルゴリズム)を使用します。それは機能しますが、取り消しに問題があります:チャットグループからの誰かがもはや信頼されていないと想像してください。少なくとも次のメッセージからそれらを除外する必要がありますが、暗号鍵を知っているので、参加者間の次のすべてのハンドシェイクを認識しています。 4)セッション鍵を使用して、「メッセージごとに1つ」の一時的な鍵を生成します(例:OTRを参照)。これはより複雑な解決策ですが、最も単純な実装は方法3と同じ欠点があります。

関連する問題