ファイルが正しく署名されているかどうかを確認するには、次のコマンドを使用します。
gpg --verify <file_name>
出力には、ファイルが正しく署名されているかどうかが示されます。そうであれば、署名者名が表示されます。しかし、そのファイルに署名したと予想されるユーザーをコマンドライン引数で指定する可能性はありますか?
Javaからそのコマンドを呼び出しており、ユーザーがそのファイルに署名した場合は、GPGから終了コード0を取得します。期待するユーザーを指定して、GPGがゼロ以外のコードを返す場合、ファイルは他のユーザーによって署名されました。GPGコマンドの出力をユーザー名と比較できることはわかっていますが、GPGコマンドレベルで確認できるかどうかを知りたいです。
documentation を調べましたが、そこにはありませんでした。
おそらく、特定のキーのみが含まれるキーリングを使用し、コマンドラインでキーリングを指定することができます(--no-default-keyring --keyring <file>
を使用)
署名の作成に使用されたキーに署名していない限り、GnuPGの出力にあるユーザー名は確認するのに適していません。だれでも特定のユーザー名で有効なキーを生成できます。代わりにキーの指紋を確認してください。
GnuPGでは、別のキーファイルを指定せずにキーセットを制限することはできません。 --no-default-keyring
を使用して、すべてのキーを含むデフォルトのキーリングを無効にし、--keyring public-key.asc
でキーリング(単一のエクスポートされたキーにすることができます!)を指定します。必要に応じて、署名を検証する直前に鍵をエクスポートします。
gpg --export [user ID|key ID] >public-key.asc
gpg --no-default-keyring --keyring public-key.asc signature.asc
これにより、署名によるすべての信頼チェックが偽造されることに注意してください。悪意のある鍵がインポートされるかどうか完全にわからない場合は、ユーザーIDではなくフィンガープリントを指定しないでください(たとえば、一部のメールクライアントは、署名されたメールの欠落した鍵を自動的に取得しようとします)。固定キーを参照するには、ユーザーIDではなく指紋を使用することをお勧めします。
確実に固定された信頼できるキーを参照していて、署名の検証時に欠落した信頼を発行した場合は、--trust-model always
を使用するか、GnuPGの簡略版gpgv
バージョンを使用します。
あなたはJavaからこれを行っているようです。 gpgを呼び出さなくても、JavaでOpenPGPデータを操作できるBouncy Castleライブラリを確認することをお勧めします。
開始するには、この質問を見てください: https://stackoverflow.com/questions/19173181/bouncycastle-pgp-decrypt-and-verify