GPG/PGP およびその他の公開鍵暗号化では、複数の受信者の公開鍵を使用して暗号化を行うことができます。
同じことを対称暗号化のみを使用して行うことは可能ですか? 言い換えると、2 つの異なるキーを使用してファイルを対称的に暗号化することは可能ですか?
私が質問する理由は、非対称暗号化では巨大なファイルが生成されるからです。公開鍵で暗号化されたメッセージをスマートフォンに送信すると、ファイルサイズが大きくなりすぎます。特に、複数の受信者に暗号化されている場合はそうです。「Hello」という 1 つのメッセージに 2 ページ分のテキストが必要になることもあります。一方、対称暗号化は非常に強力です。
答え1
はい。ファイルをランダムキーで暗号化し、そのランダムキーを 2 つの異なる対称キーで暗号化するだけです。
答え2
現在の PGP バージョンとすべての GnuPG (GPG) は OpenPGP 標準を実装しています。以下では OpenPGP という用語のみを使用します。
OpenPGP は公開鍵暗号化と対称鍵暗号化の両方を使用します。ドキュメントを暗号化するときに、ランダムな対称鍵が生成され、公開鍵を使用して暗号化されます。受信者は、自分の秘密鍵を使用して対称暗号化 (ブロック暗号) 鍵を暗号化します。公開鍵を使用して暗号化されるのは対称鍵のみなので、オーバーヘッドは小さく抑えられます (これは David Schwartz が提案したもので、OpenPGP によってすでに実装されています)。
もちろん、暗号化されたデータと比較してこのオーバーヘッドが大きくなる可能性があるケースが 2 つあります。
- データ量が非常に少ない。これが問題になる場合は、事前共有キー(対称キー)を使用した暗号化方法を選択する必要があります。
- 受信者が多数いる場合、ブロック暗号は受信者ごとに暗号化する必要があります。これが問題になる場合は、すべての受信者間で秘密鍵 (秘密キー) を共有する必要があります。
対称暗号化を使用して、すべての受信者に秘密を渡す (または、秘密の OpenPGP キーを使用して同じことを行う) ことを避けることはできません。全員に独自の秘密を持たせたい場合は、他の誰もそのデータのバージョンを復号化できないため、このデータの別のバージョンを全員に送信する必要があります。
答え3
実際、私も同じ問題を解決しようとしていました。gpg の問題は、キー ストアなど、あまりにも多くの荷物を持ち運ぶ必要があることです。キー ペアを作成し、暗号化を行うマシンに公開キーを配置して、そのまま使用したい場合もあります。
私はまさにそれを行うためのツールを作成しました:https://github.com/galets/AsymmetricCryptLinux で実行するには mono が必要ですが、それ以外は問題なく動作し、暗号化されたキーを別のファイルに保存する必要はありません。