回答:
GnuPGは標準でマルチキー暗号化を行います。
次のコマンドはdoc.txt
、Aliceの公開鍵とBobの公開鍵を使用して暗号化します。アリスは自分の秘密鍵を使用して復号化できます。ボブは自分の秘密鍵を使用して復号化することもできます。
gpg --encrypt --recipient alice@example.com \
--recipient bob@example.com doc.txt
この機能の詳細については、「ドキュメントの暗号化と復号化」というタイトルのユーザーガイドセクションをご覧ください。
はい、複数の受信者の暗号化が可能です。また、誰かに送信したものを読むことができ、そのために受信者リストに含まれている必要があると考える場合も、当然のようです。
gpg
コマンドラインから行う方法は次のとおりです(David Segondsの回答で説明)。
gpg --encrypt \
--recipient alice@example.com \
--recipient bob@example.com \
clear-message.txt
GUIは、複数の人々のために暗号化する方法を提供する必要があります
情報セキュリティ、複数の受信者のGPGファイルサイズについて質問がありますか?、暗号化メカニズムを説明します:
GPGは対称鍵を使用してファイルを1回暗号化し、次にターゲット鍵ペアを識別するヘッダーと対称鍵の暗号化されたバージョンを配置します。
[...]複数の受信者に対して暗号化される場合、このヘッダーは複数回配置され、各受信者に同じ対称鍵の一意に暗号化されたバージョンを提供します。
通常、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
パラメータを参照して、セッションキーだけを復号化できるようにします。たとえば、第三者が秘密キーやプレーンテキストデータを転送せずに、暗号化されたドキュメントを復号化できるようにします。
はい、可能です。まず、Googleの「マルチパーティ暗号化」。
私の知る限り、ドロップはありませんが、パッケージを使用できます。
-MarkusQ
PSそれがどのように行われるかのスケッチについては、これを考慮してください。暗号化されたメッセージは、次のもので構成されます。
キーiを保持している受信者は、自分のキーでパッドのコピーを復号化してから、ペイロードを復号化します。
しかし、これはそれが可能であり、実際の実装としてはうんざりするという証拠にすぎません。可能であれば、独自の暗号化をローリングしないでください。あなたはなぜ理解していない場合は、次のことを行う必要があり、間違いなくあなた自身の暗号化を転がり避けます。
-----編集------------
私が間違っていて、Gnuツールがそれを行う場合は、それらを使用してください。しかし、私はそれを行う方法についての情報を見つけることができないようです。
複数(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)
このアルゴリズムは、たとえばオニオンルーターの速度を上げるために使用できます。