PGP 暗号化

Mule は、Pretty Good Privacy (PGP) を使用して、メッセージのすべての部分を暗号化できます。PGP は、データ圧縮とデータ暗号化を組み合わせてメッセージを保護します。圧縮により、ペイロードのサイズが削減されて、後でアプリケーションで送信するときの時間が短縮されます。

PGP 暗号化は複雑であるため、JCE または XML 暗号化よりも負荷の高いタスクになります。

このセクションは、次のシナリオに対応します。

  • 暗号化: 別のパーティの公開キーを使用して、Mule アプリケーションで送信メッセージを暗号化する。

  • 復号化: 独自の非公開キーを使用して、Mule アプリケーションで受信メッセージを復号化する。

前提条件

このドキュメントは、PGP 暗号化や、公開キー、非公開キー、非対称暗号化の概念についてある程度理解していることを前提としています。

暗号化

PGP 暗号化を使用する場合、メッセージの送信者は受信者の公開キーを使用してそのコンテンツを暗号化する必要があります。そのため、他の誰かの公開キーを使用して Mule アプリケーションでメッセージを暗号化する場合、公開キーをキーリングに追加する必要があります。新しい PGP 設定を Mule アプリケーションに追加する場合、キーリングファイルを指定し、暗号化モジュールがそこから公開キーを取得してメッセージを暗号化できるようにする必要があります。

  1. GPG Suite などのツールを使用して、他のパーティの公開キーをインポートします。詳細は、以下を参照してください。

  2. 同じツールを使用し、出力形式として binary を選択して公開キーをエクスポートします。これにより、拡張子が .gpg のキーリングファイルが生成されます。

  3. 実行時に Mule アプリケーションがアクセスできる場所にキーリング (.gpg) ファイルが保存されていることを確認します。

例: PGP 設定
<crypto:pgp-config name="encrypt-conf" publicKeyring="pgp/pubring.gpg">
    <crypto:pgp-key-infos>
        <crypto:pgp-asymmetric-key-info keyId="myself" fingerprint="DE3F10F1B6B7F221"/>
    </crypto:pgp-key-infos>
</crypto:pgp-config>

次の例では、ASCII アーマー形式の暗号化ペイロードを返します。これは、プレーンテキストチャネルを送信する場合に適しています。

例: Encrypt 操作の使用
<crypto:pgp-encrypt config-ref="encrypt-conf" keyId="myself"/>

代わりにバイナリ出力を返するには、pgp-encrypt-binary 操作を使用します。

<crypto:pgp-encrypt-binary config-ref="pgpConfig" keyId="recipient"/>

バイナリ出力は、ASCII アーマー形式を使用する場合よりも短時間で生成できます。ただし、標準出力ではないため、他のシステムに送信して復号化するのに適してしない場合があります。

後でそのようなペイロードを別のシステムに送信する必要がある場合、ASCII アーマー形式に変換できます。

<crypto:pgp-binary-to-armored/>

上記の操作には、1 つの入力パラメータ (変換するメッセージペイロード) があります。

復号化

PGP 復号化を使用する場合、メッセージの受信者はその非公開キーを使用して、公開キーで暗号化されたメッセージのコンテンツを復号化する必要があります。 そのため、受信者はその公開キーを送信者 (公開キーを使用して暗号化されたメッセージを送信するユーザ) に配信する必要があります。

例: PGP 設定
<crypto:pgp-config name="decrypt-conf" privateKeyring="pgp/secring.gpg">
    <crypto:pgp-key-infos>
        <crypto:pgp-asymmetric-key-info keyId="myself" fingerprint="DE3F10F1B6B7F221" passphrase="mule1234"/>
    </crypto:pgp-key-infos>
</crypto:pgp-config>

上記の例では、decrypt 操作で非公開キーリングを使用できるようにするために少なくとも 3 つのパラメータを指定する必要があります。

  • キー ID (keyId): 操作からこのキーを参照できるようにする内部 ID。

  • キーフィンガープリント (fingerprint): 外部 GPG ツール (GPG Keychain など) から取得できるキーフィンガープリントの末尾の 16 文字。

  • パスフレーズ (passphrase): 非公開キーのパスフレーズ。

例: Decrypt 操作の使用
<crypto:pgp-decrypt config-ref="decrypt-conf"/>

署名

例: Sign 操作の使用
<crypto:pgp-sign config-ref="sign-conf" keyId="myself"/>

署名の検証

例: Validate 操作の使用
<crypto:pgp-validate config-ref="validate-conf" value="#[payload]" expected="#[vars.expected]"/>

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub