GnuPG統合に関するMuttのwiki およびその他の多くの場所(Debianのデフォルトなど)では、muttをgnupgに接続する従来の方法を使用しています。つまり、gpg
を直接呼び出すように一連のコマンドを構成します。一方、gpgme
と呼ばれるライブラリがあり、それを正確に標準化しようとします。 「muttgpgme」のウェブを検索しても、本当に役立つ結果は得られませんでした。
set crypt_use_gpgme=yes
で.muttrc
を使用することの長所と短所は何ですか?なぜそれほど使用されないのですか?
多くの人がGPGMEを本当に理解しておらず、存在するドキュメントが基本的にその時点で書かれたコード解説であることはおそらく助けにはなりません。ただし、GNU Privacy Guardスイート全体への完全またはほぼ完全なプログラムによるアクセスが許可され、libassuan、gpg-agent、その他のさまざまなコンポーネントへのアクセスも可能になるはずです。これがデフォルトでS/MIME実装も含まれている理由です。これは、90年代後半に大声で叫んだいくつかの企業以外ではほとんど誰も使用していません。
現在、GPGMEには500以上の個別の機能などが含まれており、コマンドラインでGPGを使用して実行するほとんどすべての機能を確実にカバーしています。ただし、その後は正しい方向ではないと判断された以前の設計選択の一部の遺物も含まれています。たとえば、これはGTK2の大きなチャンクを含むAPIです。明らかに、これは進む必要があります(そして時間が許せばそうなります)。最近のもう1つの問題は、おそらく採用の最大のハードルは、誰かが「API」と言ったときに、ほとんどのコーダーがCヘッダーファイルを自分のコードでコンパイルしてそれにアクセスすることをすぐには考えないことです。それに直面してみましょう、最近ではほとんどの人がRESTfulなものを考えているか、少なくともJSON形式でデータを操作してみましょう。 GPGMEは、それから可能な限り遠く離れています。 JSONでうまく機能させることは可能であるはずですが、編集キーはできないため、RESTfulになることは決してないことに注意してください。さらに、Webを介してキーを管理することは、問題を抱えているだけです。
文書化されていない多くの機能や、ソフトウェアの開発以来、ソフトウェアを使用している人々でさえ、まだいくつかのことに驚かれるような側面があります。たとえば、正式なスキーマ以外のすべてを含むキーリングデータの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と呼ばれる、気の利いた小さな文書化されていない別のものが付属しています。これは、UNIXソケットで実行されるGPGMEへの初歩的なインターフェースです(もちろん、必要に応じて、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をスキップしたので確認できませんが、これら2つの間のどこかにあります)。
キーコマンドのマッチングに関する前の回答については、構成オプションと、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を作成する開発作業に関与しています。また、PyME 0.9をPython 2からPython 3に移植しました(現在は GPGMEのブランチ であり、Python 2バージョンのみです。 PyPIとpipで利用できます)。
更新:Python 3へのPyMEの移植は、現在GPGMEのマスターブランチにあり、PyPIでpyme3として利用できます。
一部の関数はgpgme
インターフェースと直接連携していないためです。
たとえば、次の関数が私の環境では機能していません。
^K extract-keys
<Esc>k mail-key
すべての基本的なキー機能がgpgme
で機能している場合。