web-dev-qa-db-ja.com

鍵を明かさずに暗号化されたメッセージを複数の受信者に配信する方法

私が秘密鍵と公開鍵を生成したとしましょう。メッセージを作成し、公開鍵で暗号化します。この暗号化されたメッセージと秘密鍵を複数の受信者に配信します。

なぜこれを行うのですか?

解読のみ可能なメッセージを配信したい。だれもがダミーのメッセージを暗号化して、それが私からのものであると想定してすべての受信者に配信できるようにしたくありません。

私はRSAを使用して正しい方向に進んでいると思います-しかし、どういうわけか、それをすべて逆に必要としています。

また、秘密鍵を公開し、公開鍵を安全に保管している場合、秘密鍵自体を使用するだけで新しい公開鍵を生成できると私は信じていますか?

私の問題の例を見てみましょう。

公開鍵を使用して暗号化されたメッセージを作成します。

ajjfjdksdjkdfjfjdjfd

エンドユーザーは、秘密鍵を使用してそれを復号化し、次のことを行います。

green:1234:table

これまでのところすべて良い。上記のメッセージと認証は、基本的に:内の3つの文字列をチェックします。

ただし、これらの暗号化されたメッセージは信頼できないソースからのものである可能性があるため、信頼できないソースが単純な形式を知っているため、これらのメッセージを作成できないようにしたいと思います。私が提供するキーが、公開キーをリバースエンジニアリングするのに十分なものにしたくありません。

私は説明するのが難しいと思います、これが答えられることを望んでいます。

5
Chris Denman

ここでは、公開鍵暗号をすべて手に負えなくなったと思います。

  1. あなたは秘密鍵を与えません。限目。彼らは理由のために「プライベート」と呼ばれています。

  2. 暗号化されたメッセージは、同じチャネルで送信することはできません。同時に、解読に必要な唯一のキーを送信するためです。それはそもそも暗号化の目的を完全に無効にします。

  3. 鍵ペアは、使用前に受信者(または信頼できるサードパーティ)によって公開鍵が検証されている場合にのみ、認証(つまり、デジタル署名)に役立ちます。

では、どのようにして、暗号化および署名されたメッセージを複数の当事者に配信し、見返りにあなたになりすますことはできないのでしょうか。答えは#1にあります2人が同じ秘密鍵を保持することはありません。

あなたがあなたの秘密署名鍵のコピーを持っている唯一の人である場合、誰もあなたになりすますことはできません。暗号化を行う前に、秘密署名鍵でメッセージに署名するだけです。受信者は、メッセージを復号化した後、公開署名鍵を使用してメッセージの信頼性を確認します。

暗号化の部分はまったく別の問題です。そのためには、いくつかのオプションがあります。

  1. 暗号化なし署名して配信するだけです。信頼性は関係なく保護されますが、この方法では機密性は提供されません。

  2. 事前共有キー(PSKで暗号化)強調事前共有-これはメッセージと一緒に出荷されません。事前にグループ間で共有する必要があります。できれば、帯域外で共有する必要があります。 PSKは暗号化/復号化にのみ使用されます。署名鍵は、信頼性を提供するものです。

  3. 公開鍵で個別に暗号化します。署名されたメッセージを受け取り、各受信者のコピーを作成します。次に、各コピーを1人の受信者の公開鍵で暗号化して、一緒に送信します。受信者は自分の秘密鍵を使用してメッセージを復号化します。

  4. 秘密キーを共有キーのキー暗号化キー(KEK)として使用します。メッセージのサイズによっては、公開キー暗号化の利点を維持しながら#3よりも高速になる場合があります。ランダムな1回限りの使用の共有キーを生成します。これを使用して、署名されたメッセージを暗号化します。各受信者の共有キーのコピーを作成します。キーの各コピーを1人の受信者の公開キーで暗号化します。すべての暗号化された鍵を暗号化されたメッセージと一緒にバンドルし、その同じバンドルのコピーを各受信者に送信します。各受信者は、自分の秘密鍵を使用して、共有鍵の各コピーの復号化を試みます。コピーが見つかるまで、そのコピーを使用してメッセージを復号化します。

ここでも、メッセージの信頼性と検証可能な送信元を保護する主なものは、あなただけprivate署名に使用されたキー。さらに、認証の目的でのみ、メッセージが実際に暗号化されているかどうかは関係ありません。これらの各プロセスの最後に、受信者が署名されたメッセージのクリアテキストコピーを持っている場合、public署名キーは、送信元と整合性を確認するために使用するものです。

14
Iszi

クリスは、アリスとボブにメッセージを送りたいと思っています。

クリスは、デイブがアリスとボブにメッセージを送信することを望んでおらず、クリスからのものであると主張しています。

したがって、アリスとボブがクリスからの本物のメッセージとデイブによる模倣を区別できる方法がなければなりません。クリスのサインみたいなもの。このメソッドは存在し、(適切に) signature と呼ばれます。

概念的には、クリスがクリス以外の人(特にデイブ)ができないこと(アリスとボブが受け入れるメッセージを送信すること)ができるようにしたいので、クリスは知っているがデイブは知らない秘密の値が必要ですなぜなら、暗号学では知識は力です。さらに、この秘密の値はプロセスで漏洩してはならず、特に、アリスとボブにそれを学習させたくない(そうでなければ、アリスはボブをデービファイする、つまり、彼女がクリスであるかのようにボブにメッセージを送信する) 。

したがって、秘密自体を漏らすことなく、受信側で検証可能なアクションの送信側の秘密の値。これがまさにデジタル署名の概念です。

これは、暗号化の概念に関係なく成立します。これは完全に直交する議論です。

2
Tom Leek

キーを公開する必要はありません。これが公開キー暗号化システムの主要なポイントです。

Gnupgリストの this message では、複数の受信者メッセージを作成する方法が説明されています。

これに基づいて、次のようなものを作成できます。

  1. ランダムな対称鍵を生成するS1

  2. S1でメッセージ全体を暗号化し、暗号文C1を作成します

  3. 受信者の各公開鍵でS1を暗号化し、D1D2、...、Dn

  4. S1の安全なハッシュを生成し、H1を作成します

  5. 次のようにメッセージを生成します。

-- BEGIN CYPHERTEXT --
C1
-- END CIPHERTEXT --
-- BEGIN HASH --
H1
-- END HASH --
-- BEGIN KEYS --
D1
D2
D3
-- END KEYS--

みんなにメッセージを送ってください。それらはD1Dnに復号化してS1。結果をメッセージのハッシュと比較すると、対称鍵を取得したことがわかります。

対称鍵を使用すると、他の鍵を知らなくても、メッセージを個別に復号化できます。

認証可能なメッセージを作成するには、メッセージ全体に署名を追加します。秘密鍵を取得しない限り、誰もあなたを装ったメッセージを作成できません。

1
ThoriumBR