複数の鍵による暗号化/復号化


110

いくつかの異なるキーで解読できるようにデータを暗号化することは可能ですか?

例:

key1でデータを暗号化しましたが、key 2、3、および4で復号化できるようにしたいと思います。

これは可能ですか?

回答:


170

GnuPGは標準でマルチキー暗号化を行います。

次のコマンドはdoc.txt、Aliceの公開鍵とBobの公開鍵を使用して暗号化します。アリスは自分の秘密鍵を使用して復号化できます。ボブは自分の秘密鍵を使用して復号化することもできます。

gpg --encrypt --recipient alice@example.com \
    --recipient bob@example.com doc.txt

この機能の詳細については、「ドキュメントの暗号化と復号化」というタイトルのユーザーガイドセクションをご覧ください。


同上。それを行う方法を知るのはかっこいいですが、その上に非表示のmanページを見つけることができません。
MarkusQ、2009

@ミッチ、たちの答えがあるかもしれない答えを投稿しました!(そうであるかどうかをテストして賞賛してください-かなり感謝しています!)
pythonlarry 2013

@MarkusQ、上記のミッチへのリンクを参照してください。テスト/できれば感謝します!:-)
pythonlarry 2013

したがって、これにより、暗号化された1つのファイルが生成されます。暗号化されたファイルは、キーごとに1つのファイルではなく、秘密キーを使用して読み取ることができますか
user8675309 2017

7
@ user8675309、はい。データは共通の対称鍵で暗号化されます。対称鍵のみが各受信者の公開鍵によって暗号化されます。各受信者のデータ全体を再暗号化するわけではありません。
wisbucky

55

はい、可能です

はい、複数の受信者の暗号化が可能です。また、誰かに送信したものを読むことができ、そのために受信者リストに含まれている必要があると考える場合も、当然のようです

コマンドライン

gpgコマンドラインから行う方法は次のとおりですDavid Segondsの回答で説明)。

gpg --encrypt \
  --recipient alice@example.com \
  --recipient bob@example.com \
clear-message.txt

GUIクライアント

GUIは、複数の人々のために暗号化する方法を提供する必要があります

機構

情報セキュリティ複数の受信者のGPGファイルサイズについて質問がありますか?、暗号化メカニズムを説明します

GPGは対称鍵を使用してファイルを1回暗号化し、次にターゲット鍵ペアを識別するヘッダーと対称鍵の暗号化されたバージョンを配置します。

[...]複数の受信者に対して暗号化される場合、このヘッダーは複数回配置され、各受信者に同じ対称鍵の一意に暗号化されたバージョンを提供します。


4
最後の2つの文章に対する特別な感謝:彼らは今、すべてを正確に明確にした
radistao 2016年

31

通常、GnuPGおよびPGPクライアントは、実際のデータを「セッションキー」と呼ばれる対称キーで暗号化します。次に、セッションキーは各「受信者キー」(つまり、-r /-recipientで指定したもの)で暗号化されます。これは、ハイブリッド暗号と呼ばれることもあります。現在、GnuPGはデフォルトで256ビットのセッションキーとAESを使用してプレーンテキストデータをそのAES-256セッションキーに暗号化し、受信者のキーはRSA / DSA / ECDSAなどです。この場合の非対称キー。

このようにする理由の1つは、AESのような対称暗号化アルゴリズムが、RSAのような非対称アルゴリズムよりも一般的にはるかに高速であることです。したがって、GnuPGはRSAで〜256ビット(セッションキー)を暗号化するだけでよく、AESを使用して、そのセッションキーでデータ(必要なサイズまで)を暗号化できます。Intelマシンには、ハードウェアでアルゴリズムのいくつかのステップを実行するための組み込みの命令AES-NIさえあります。これにより、GnuPGはデータの暗号化/復号化をさらに迅速にします。

この方法で行うもう1つの理由は、PGPで暗号化されたドキュメントを、ドキュメントのサイズを2倍にすることなく複数の関係者に暗号化できることです。暗号化されたドキュメントに複数の受信者を指定する場合(例gpg -ea -r Alice -r Bob -o ciphertext.asc:)、保存される暗号化されたドキュメント(ciphertext.asc)は、Aliceに暗号化した場合の2倍のサイズではないことに注意してください。

また、gpgのmanページの--show-session-keyパラメータを参照して、セッションキーだけを復号化できるようにします。たとえば、第三者が秘密キーやプレーンテキストデータを転送せずに、暗号化されたドキュメントを復号化できるようにします。


1
暗号化されたドキュメントがn倍にならないという説明に感謝します。nは署名者の数です。
theartofbeing

4

はい、可能です。まず、Googleの「マルチパーティ暗号化」。

私の知る限り、ドロップはありませんが、パッケージを使用できます。

-MarkusQ

PSそれがどのように行われるかのスケッチについては、これを考慮してください。暗号化されたメッセージは、次のもので構成されます。

  • ワンタイムパッドで暗号化されたペイロード
  • key1で暗号化されたワンタイムパッド
  • key2で暗号化されたワンタイムパッド
  • ...
  • keyNで暗号化されたワンタイムパッド

キーiを保持している受信者は、自分のキーでパッドのコピーを復号化してから、ペイロードを復号化します。

しかし、これはそれが可能であり、実際の実装としてはうんざりするという証拠にすぎません。可能であれば、独自の暗号化をローリングしないでください。あなたはなぜ理解していない場合は、次のことを行う必要があり、間違いなくあなた自身の暗号化を転がり避けます。

-----編集------------

私が間違っていて、Gnuツールがそれを行う場合は、それらを使用してください。しかし、私はそれを行う方法についての情報を見つけることができないようです。


1
これについては、ワンタイムパッドを知っていると、他のキーの暗号化された値とともに既知のプレーンテキストがあることがわかります。この情報を使用すると、他のキーが何であるかを簡単に見つけることができます。
キブビー2009

2
「マルチパーティ暗号化」をグーグルすることはあまり効果がありません。このケースも含む「ブロードキャスト暗号化」を使用すると、幸運が高まるでしょう。
staktrace 2010年

1
@Kibbee:キーは秘密ではなく、公開されています。したがって、それらが何であるかを見つけやすくすることは重要ではありません。(これらのスキームは、暗号化にのみ使用でき、復号には使用できないキーでのみ使用されます。)
David Schwartz

5
実際の実装では共有のワンタイムパッド(プレーンテキストや暗号化されたテキストと同じ大きさである必要があるため、メッセージサイズが2倍になる)は使用しないが、実際には共有の対称暗号化キーを使用する(通常、メッセージよりもはるかに小さい)。
Joachim Sauer、2011年

-16

複数(2つ以上)のキーRSAはおそらくこのようなものです-私は数学者ではないので、このアルゴリズムは必ずしも安全ではありません。

m = p * q * r; p、q、rは大きな素数です

fi(m)=(p-1)(q-1)(r-1)

d ==(e1 * e2 * e3 * ... * ei)^(-1)(mod fi(m)); e1 ... eiは任意の数で、dは次の式を満たすように計算されます

y1 == x ^ e1(mod m)

y2 == y1 ^ e2(mod m)

y3 == y2 ^ e3(mod m)

...

x == yi ^ d(mod m)

このアルゴリズムは、たとえばオニオンルーターの速度を上げるために使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.