web-dev-qa-db-ja.com

gpgはパスフレーズのない鍵をロック解除できません: "gpg:公開鍵の復号化に失敗しました:パスフレーズが指定されていません"

古いgpgバージョンで開始したgpgセットアップがあり、その当時はパスフレーズを使用していませんでした。プロンプトが表示されたら、直接Enterキーを押します。それが鍵が暗号化されていないのか、それとも空のパスフレーズで暗号化されているのかはわかりません。

とにかく、最近送られてきたものを解読しようとすると、gpgは秘密鍵にアクセスする必要があり、パスフレーズの入力を求めますが、空のパスフレーズを使用できなくなりました。 gpgは失敗します:

$ gpg -d foo.asc
(X dialog that prompts me for passphrase, I just press enter)
gpg: public key decryption failed: No passphrase given
gpg: decryption failed: No secret key

鍵をまた使えるようにしたいのですが。これからパスフレーズを設定してもかまいませんが、方法はわかりません。

$ gpg --passwd [email protected]
(X dialog that prompts me for current passphrase, I just press enter)
gpg: key xxxxxxxxxxxxxxxx/aaaaaaaaaaaaaaaa: error changing passphrase: No passphrase given
gpg: key xxxxxxxxxxxxxxxx/bbbbbbbbbbbbbbbb: error changing passphrase: No passphrase given
gpg: error changing the passphrase for '[email protected]': No passphrase given

OpenSUSE 15.0でgpg(GnuPG)2.2.5とlibgcrypt 1.8.2を実行しています。

4
knarf

この問題を解決するには、キーのある古いシステムを使用しました。

  • 空のパスフレーズ入力が機能する古いシステムに新しいパスフレーズを設定しました。
  • 古いシステムの秘密鍵をエクスポートして、新しいシステムにコピーする
  • 新しいシステムのgpg状態をクリーンアップ(.gnupgを.gnupg.bakに移動)
  • 空でないパスフレーズの秘密鍵をインポートする

ここに私が実行したコマンドがあります:

# put a non-empty passphrase on current key
me@old$ gpg --passwd [email protected]
(leave empty on first Prompt)
(put a new non-empty passphrase on 2nd)
(confirm new passphrase)

# now we export it

me@old$ gpg --list-secret-keys                               
/home/xxxxx/.gnupg/secring.gpg
-------------------------------
sec   4096R/AAAAAAAA 2015-01-01
uid                  Foo Bar <[email protected]>
uid                  Bar Foo <[email protected]>
ssb   4096R/BBBBBBBB 2015-01-01

# I've used the first key id (should be 8 hex digits)
me@old$ gpg --export-secret-keys AAAAAAAA > priv.key

# copy key over new system

# backup .gnupg dir just in case
me@new$ mv .gnupg .gnupg.back
# import new priv key
me@new$ gpg --import priv.key
(type new passphrase set previously)

# done!

完全を期すために、ここに両方の​​システムのソフトウェアバージョンを示します。これは、誰かに役立つ可能性があります。

新しいシステム(空のパスフレーズを入力できない)ソフトウェアバージョン:

  • gpg(GnuPG)2.2.5
  • libgcrypt 1.8.2
  • pinentry-curses(ピンエントリ)1.1.0

古いシステム(空のパスフレーズを入力できる)ソフトウェアバージョン:

  • gpg(GnuPG)2.0.24
  • libgcrypt 1.6.1
  • pinentry-curses(ピンエントリー)0.8.3
3
knarf

これらは考えられる3つの解決策です。あなたのケースでうまくいくかどうかをお知らせください。

注意:これらを試す機会はありませんでした(私は空のパスワードのgpgキーリングを持っていません)が、manページ/ウェブページを調査して検索しました!

Passphrase-fdの使用

--passphrase-fdと組み合わせて--batchを使用すると、パイプを介して空の文字列を入力できます。

echo '' | gpg2 --batch --passphrase-fd 0 your other options

クレオパトラの使用

グラフィカルな証明書マネージャーである Kleopatra を使用してみてください。

  • 関連する鍵ペアを選択します
  • 右クリック Change passphrase
  • ポップアップウィンドウでフィールドを空白のままにします(つまり、現在のパスワードとして空のパスワードを使用します)。
  • 次のポップアップで新しいパスワードを入力して確認します。

Pinentryの使用

また、pinentryユーティリティを活用する このソリューション を試すこともできます。

1
RafDouglas