gpg (GnuPG)

gpg (GnuPG)

秘匿情報をgpgファイルから取得する

init.el に直接書きたくない秘匿情報の扱いに困ることがたまにあって、 gpgファイルについて調べた。よく分かってないこともあるが、以下で自分に必要な最低限のことはできる。 (※対象環境はMacOS)

インストール

pgppinentry-mac をインストール

brew install gnupg
brew install pinentry-mac

pinentry-macはパスフレーズを入力するためのUIで、 PGPファイルをパスフレーズで暗号化するときに使用する。

インストールしたら、 .bashrc で以下の環境変数を設定し、

export GPG_TTY=$(tty)

さらに、pgp-agent.confでpinentry-programを指定する。

echo "pinentry-program /opt/homebrew/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf

gpgをインストールしただけだと、パスフレーズ入力のタイミングでエラーになるので注意

Error while encrypting with “/opt/homebrew/bin/gpg”:

gpg: problem with the agent: Inappropriate ioctl for device gpg: error creating passphrase: Operation cancelled gpg: symmetric encryption of ‘[stdin]’ failed: Operation cancelled

PGPファイルの作成

~/.authinfo.gpg に以下の形式でgpgファイルを作成する。

machine gcal-client-id login your-client-id password 123456789-abcdefghijklmnopqrstuvwxyz.apps.googleusercontent.com
machine gcal-client-secret login your-client-secret password ABCDEF-GhIjKlMnOpQrStUvWxYz
  • machine はサービスや識別子を指定する。 elisp から :host で指定する
  • login は本来ユーザー名らしいけど、今回は使わない
  • password の後に実際の値(クライアントIDやクライアントシークレット)を記述する。

elisp

elispからは auth-source パッケージの auth-source-pick-first-password を使って設定した password の値を取得できる

(setq auth-sources '("~/.authinfo.gpg"))
(setq gcal-client-id
      (auth-source-pick-first-password :host "gcal-client-id"))
(setq gcal-client-secret
      (auth-source-pick-first-password :host "gcal-client-secret"))

あとで読みたい