261.3. PGPDataFormat による暗号化

次のサンプルでは、Bouncy Castle Java ライブラリー を使用してファイルを暗号化/復号化するために一般的な PGP 形式を使用しています。

次のサンプルでは、署名 + 暗号化を実行してから、署名検証 + 復号化を実行します。署名と暗号化の両方に同じキーリングを使用しますが、明らかに異なるキーを使用できます。

または Spring を使用して:

261.3.1. 前の例を使用するには、次のものが必要です

  • データの暗号化に使用される公開鍵を含む公開キーリングファイル
  • データの復号化に使用される鍵を含む秘密キーリングファイル
  • キーリングのパスワード

261.3.2. キーリングの管理

キーリングを管理するには、コマンドラインツールを使用します。これが、キーを管理する最も簡単な方法だと思います。そうしたい場合は、http://www.bouncycastle.org/java.html から入手できる Java ライブラリーもあります。

Linux にコマンドラインユーティリティーをインストールする

apt-get install gnupg

安全なパスワードを入力して、キーリングを作成します

gpg --gen-key

ファイルを暗号化できるように、他の人の公開鍵をインポートする必要がある場合。

gpg --import <filename.key

次のファイルが存在するはずであり、例を実行するために使用できます

ls -l ~/.gnupg/pubring.gpg ~/.gnupg/secring.gpg

[Crypto-PGPDecrypting/VerifyingofMessagesEncrypted/SignedbyDifferentPrivate/PublicKeys]] です。異なる#で暗号化/署名されたメッセージの PGP 復号化/検証について秘密/公開鍵

Since Camel 2.12.2.

PGP Data Formater は、異なる公開鍵で暗号化されたメッセージや、異なる秘密鍵で署名されたメッセージを復号化/検証できます。対応する秘密鍵を秘密キーリングに、対応する公開鍵を公開キーリングに、パスフレーズをパスフレーズアクセサーに指定するだけです。

Map<String, String> userId2Passphrase = new HashMap<String, String>(2);
// add passphrases of several private keys whose corresponding public keys have been used to encrypt the messages
userId2Passphrase.put("UserIdOfKey1","passphrase1"); // you must specify the exact User ID!
userId2Passphrase.put("UserIdOfKey2","passphrase2");
PGPPassphraseAccessor passphraseAccessor = new PGPPassphraseAccessorDefault(userId2Passphrase);

PGPDataFormat pgpVerifyAndDecrypt = new PGPDataFormat();
pgpVerifyAndDecrypt.setPassphraseAccessor(passphraseAccessor);
// the method getSecKeyRing() provides the secret keyring as byte array containing the private keys
pgpVerifyAndDecrypt.setEncryptionKeyRing(getSecKeyRing()); // alternatively you can use setKeyFileName(keyfileName)
// the method getPublicKeyRing() provides the public keyring as byte array containing the public keys
pgpVerifyAndDecrypt.setSignatureKeyRing((getPublicKeyRing());  // alternatively you can use setSignatureKeyFileName(signatgureKeyfileName)
// it is not necessary to specify the encryption or signer  User Id

from("direct:start")
         ...
        .unmarshal(pgpVerifyAndDecrypt) // can decrypt/verify messages encrypted/signed by different private/public keys
        ...
  • この機能は、鍵交換をサポートするのに特に役立ちます。復号化のために秘密鍵を交換したい場合は、古いまたは新しい対応する公開鍵で暗号化されたメッセージを一定期間受け入れることができます。または、送信者が署名者の秘密鍵を交換したい場合は、古いまたは新しい署名者の鍵を一定期間受け入れることができます。
  • 技術的背景: PGP で暗号化されたデータには、データの暗号化に使用された公開鍵のキー ID が含まれています。このキー ID を使用して、秘密キーリング内の秘密鍵を見つけ、データを復号化できます。同じメカニズムを使用して、署名を検証するための公開鍵を見つけます。したがって、アンマーシャリングのためにユーザー ID を指定する必要はなくなりました。