GnuPG統合に関するMutt Wikiそして、他の多くの場所(Debianのデフォルト値など)は、muttをgnupgにリンクする古典的な方法を使用しています。つまりgpg
、直接呼び出すことができる複数のコマンドを構成することです。一方、gpgme
これを標準化したいライブラリがあります。ウェブで「mutt gpgme」を検索しても、本当に役に立つ結果は出ませんでした。
set crypt_use_gpgme=yes
で使用すると、どのような長所と短所がありますか.muttrc
?なぜほとんど使用されないのですか?
ベストアンサー1
多くの人は実際にGPGMEを理解していません。既存の文書は基本的に当時書かれたコードのコメントなので、役に立ちません。ただし、GNU Privacy Guardスイート全体への完全またはほぼ完全なプログラムアクセスを許可し、libassuan、gpg-agent、およびその他のさまざまなコンポーネントへのアクセスも許可する必要があります。これが基本的にS / MIME実装を含む理由です。 90年代後半にこれを要求した会社を除いて、ほとんど誰も使用しません。
現在、GPGMEには約500以上の個別の機能が含まれており、コマンドラインからGPGで実行できるすべての機能をカバーしています。ただし、後で間違った方向に判明したいくつかの以前のデザイン選択の残留物も含まれています。たとえば、GTK 2がたくさん含まれているAPIです。明らかにこれはキャンセルされるべきです(そして時間が許すようにキャンセルされます)。今日のAPIが抱えているもう一つの問題であり、おそらく採用に対する最大の障壁は、誰かが「API」と言うとき、ほとんどのプログラマーがそのエントリにアクセスするために自分のコードでCヘッダーファイルをコンパイルすることをすぐには考えていないということですです。最近、ほとんどの人はRESTfulについて考えたり、少なくともJSON形式のデータと対話したりすることができます。 GPGMEはそれとは遠い。 JSONとうまく機能するようにすることは可能ですが、編集キーは不可能なので、決してRESTfulにすることはできません。さらに、ネットワークを介して鍵を管理することは問題を引き起こすだけです。
ソフトウェアには文書化されていない機能と側面がたくさんあり、最初からソフトウェアを使用してきた人でさえ、まだいくつかの点に驚きました。たとえば、キーリングデータのXML形式には、公式スキーマ(作成から数ヶ月前)を除くすべてが含まれます。
一方、Muttは良いことをたくさんしますが、かなり衝撃的なこともあります。たとえば、GPGMEを使用するかどうかにかかわらず、Muttがパスワードをキャッシュする理由はありません。どちらの場合も、GPG(gpg-agentの有無にかかわらず)に渡す必要があります。同様に、~/.gnupg/gpg.conf
ファイルの設定パラメータ(およびそのディレクトリの他のパラメータ)に従う必要があります。もちろん、他のアカウントに代替キーIDを設定してコマンドの呼び出し方法を変更したり、代替構成ファイルまたはディレクトリ全体を指定することもできますgpg --homedir ~/.gnupg-work/gpg.conf
。しかし、現在の状態では、Muttはパスワードやキー管理など、対話するプログラムがすでに解決した問題を解決するのに時間を無駄にしますが、GPGの一般的な機能へのアクセスを許可しません。複数の受信者または特定の受信者のためのキーの選択を無視する(常にキーを紛失したりパスワードを忘れたりする人が1人いるため、UIDと同じアドレスを持つ15個の公開キーがあり、デフォルトの動作は最初のキーを選択するです。一致しない可能性があります)。 Emacsはこの部分で少し優れていましたが、ファイルを取得できませんでした。ファイルgpg.conf
は通常、プロンプトしたい内容に自動的に応答します。
今、より有用で接線的に関連するために、GPGMEはgpgme-toolという文書化されていないもう一つの素晴らしい機能を提供します。これはGPGMEの基本インターフェイスであり、UNIXソケットで実行されます(もちろん、必要に応じてncatなどを使用してネットワークポートに配置できます)。文書化されていませんが、しばらく実行して対話した後にhelpコマンドで起動すると、説明が非常に必要です。または、次のように動作します。
echo help | gpgme-tool > gpgme-tool-cheatsheet.txt
すべての基本的な操作(暗号化、復号化、署名、確認、パスワードの変更、鍵の生成、鍵の一覧表示、秘密鍵の一覧表示、特定の鍵の検索、選択など)を楽しく実行します。 「隠し」XML形式を表示するには、次のことを試してください。
echo "KEYLIST --secret-only" | gpgme-tool > secret-key-list.xml
これはキーをエクスポートするのではなく、キーとそれに関するデータをリストします。また、実際にはXMLとして認識する前にフィルタリングする必要があるいくつかの低速出力形式にエクスポートします(一番上の行、後続の各行の最初の2文字、各行の終わりの%0Aを削除)。それにもかかわらず、gpgme-toolは、GPGMEが実際に何ができるかについてのより良いアイデアを提供することができます。たとえば、GPGME用のPyME Pythonバインディングは、GPGME関数を自動的に一致させようとします(通常は困難なくこれを行います)。 pyme.core.pygpgmeの現在の関数のリストは534です。コマンドラインと比較すると、GPG 1.4.20には322のオプションがあり、2.1.11には347のオプションがあります(2.0をスキップしたので確認できませんでしたが、その間どこかにあります)。
一致するキーコマンドに関する以前の回答と同様に、これは完全に設定オプションとMuttがGPGへのフルアクセスを「許可」するかどうかによって決まります。私は現在GPGMEでMuttを使用していますが、上記の2つの機能(メッセージキーと抽出キー)は問題ありません。 Muttが割り当てられていると、PGP /インラインコンテンツを認識するのに問題があるか、テキスト/一般コンテンツタイプを選択するのに問題がありますが、どこかで問題が発生します。これが発生した場合は、通常Emacsまたは他のものに切り替える必要があります。それにもかかわらず、これはMuttがコンテンツが実際にテキストであるかどうかを確認する方法やOpenPGP形式のコンテンツを確認する方法に問題があるようです。私が一番言いたいのは、私たち全員がPGP / MIMEを使用する必要があるということです(そしてそうする必要があります)。残念なことに、多くの人は(WindowsのThe Bat!ユーザーのように)欲しいか必要なので、インラインの使用に固執しています。たとえば、Androidデバイスから暗号化されたメールを送信する必要があります。)
デフォルトでは、Muttは複数の部分で構成されたMIMEメッセージにのみ依存しているように見えます。そのうちの1つ以上にはキー、署名、および/または暗号化されたコンテンツが含まれており、すべての操作を実行できます。通常の電子メールで一致するものを検索するだけでは十分ではありませんが、これはGPGの誤りでもGPGMEの誤りでもありません。解決策は、これらの機能をMuttに追加するか、その機能があるもの(たとえば、デフォルトで有効にする必要があるEPA / EasyPGを持つEmacs)でメッセージを開くか、メッセージを直接コマンドにパイプする(または必要に応じてgpgme- toolを使用しますが、パイプするときは通常通常のコマンドを使用する方が簡単です)
GPGMEの場合、常にシステムにインストールされているのと同じソースバージョンでコンパイルする必要があるため、誰もが利用できるわけではありません。 GPGをアップグレードし、一致するようにGPGMEを再コンパイルしないと、問題が発生する可能性があります。一方、可能であれば、ソースからGPGをインストールすることをお勧めします。したがって、GPGMEパスに移動する場合は、GPGを更新するときに再コンパイルを実行することをお勧めします。それでは、すべてが問題ないでしょう。
そして、自分が選択したディストリビューションによって提供されるパッケージにのみ依存する人は、そのパッケージの管理者が維持しようとしているすべてのものによって影響を受け、GPGとGPGMEが一緒に機能する要件を常に理解または理解していない可能性があります。たとえば、GPGME用のMacPortsパッケージはGPG 2.0.xに依存するように設定されており、GPG 2.1.xと競合するように設定されているため、2.1をインストールするほとんどの人はGPGMEを同時にインストールできません。きっと一緒に働きそうだが。この状況でGPGMEを動作させるには、MacPortsが推奨するタスク(ポート管理システムの外部ではなく内部でコンテンツをコンパイルする/opt/local
)を実行する必要があります。一部のLinuxディストリビューションにも同様の問題がある可能性があります。
したがって、PGP / MIMEのみを使用したい場合は、GPGME統合の使用に問題がないはずです。つまり、ファイル内で特定のコマンドを設定する必要はありません.muttrc
。 PGP /インラインを扱う場合は問題が発生しますが、Muttを使用すると問題を回避する方法がないため、可能であればGPGMEを使用することをお勧めします。
免責事項:私は、C以外のすべての開発者が精密検査後にAPIを使用できるようにAPIからAPIを作成する開発に取り組んでいます。また、PyME 0.9をPython 2からPython 3に移植しました(現在の場所:GPGMEの一点Python 2バージョンのみがPyPIとpipで利用可能です。
アップデート:Python 3のPyMEポートはGPGMEのマスターブランチにあり、PyPIでpyme3として使用できるようになりました。