解密檔案嘗試使用子金鑰,然後給出“無密鑰”錯誤

解密檔案嘗試使用子金鑰,然後給出“無密鑰”錯誤

使用: gpg (GnuPG) 2.0.22 libgcrypt 1.5.3

我正在嘗試從遠端網站解密文件。我將密鑰導出到文件中。gpg <filename>傳回:(密鑰 ID 已更改)

pub 2048R/656CC421 2018-04-19
sub 2048R/99F89J32 2018-04-19

我將其發送給寄件者並要求他們匯入、簽名並信任它。

他們給我發送了兩個不同的密鑰檔案。使用gpg <filename>傳回值:

1. pub 2048R/62568LK1 2015-09-03

2. pub 2048R/J561VE25 2015-09-23

如果我執行編輯鍵,我會得到以下資訊:

我的鑰匙:

Secret key is available.

pub 2048R/656CC421 created: 2018-04-19 expires: never usage: SC
trust: ultimate validity: ultimate
sub 2048R/99F89J32 created: 2018-04-19 expires: never usage: E
[ultimate] (1).

他們的鑰匙:

1. pub 2048R/62568LK1 created: 2015-09-23 expires: never usage: SCE
trust: full validity: full
[ full ] (1).

2. pub 2048R/99F89J32 created: 2015-09-03 expires: never usage: SC
trust: full validity: full
[ full ] (1).

我正在 bash 腳本中使用以下參數運行解密命令。

echo $passphrase | /usr/bin/gpg --verbose --passphrase-fd 0 --no-tty --output $output_file --recipient myuser --decrypt $input_file

以下是命令的輸出:

Version: GnuPG v1.2.4 (MingW32)
gpg: armor header:
gpg: public key is 99F89J32
gpg: using subkey 99F89J32 instead of primary key 656CC421
gpg: using subkey 99F89J32 instead of primary key 656CC421
gpg: cancelled by user
gpg: encrypted with 2048-bit RSA key, ID 99F89J32, created 2018-04-19
"usrname (Description) <[email protected]>"
gpg: public key decryption failed: Operation cancelled
gpg: decryption failed: No secret key

我從這一切中得出的結論是,寄件者需要以我發送給他們的相同格式向我發送他們的公鑰。例如:

pub 2048R/J561VE25 2015-09-23

sub 2048R/SOM3NUMB 2015-09-23

我認為他們發送給我的密鑰文件沒有相應的發布/訂閱信息,因此 gpg 無法驗證,因為我只有他們密鑰對信息的一部分。

誰能告訴我我的想法是錯的還是正確的?

謝謝!

答案1

Version: GnuPG v1.2.4 (MingW32)

聖球那是舊的 – 版本 1.2.4 發佈於2003年。寄件者似乎不太關心更新他們的安全軟體。

(您自己的 2.0.22 也好不了多少,發布日期是 2013 年。)

gpg: public key is 99F89J32
gpg: using subkey 99F89J32 instead of primary key 656CC421
gpg: using subkey 99F89J32 instead of primary key 656CC421

這很正常。 「主」密鑰對僅用於簽署(也稱為證明)其他密鑰;通常也用於簽署訊息。它不能用於加密——您總是有一個用於此目的的子密鑰。

(這種分離還允許離線簽署或頻繁的加密金鑰輪換等操作。)

gpg: cancelled by user
gpg: encrypted with 2048-bit RSA key, ID 99F89J32, created 2018-04-19 "usrname (Description) <[email protected]>"
gpg: public key decryption failed: Operation cancelled
gpg: decryption failed: No secret key

聽起來 GnuPG 試圖顯示解鎖密碼提示你的密鑰對,但密碼短語視窗無法打開,或者您自己不小心取消了它。

密碼提示由 GnuPG 顯示皮恩特里組件,它本身是透過啟動的gpg-代理。我真的不知道從哪裡開始解決 Windows 上的問題 – 也許較新的版本會工作得更好。 (您的 GnuPG 2.0.22 於 2013 年發布。)

從 GnuPG 2.1 開始的較新版本支援「環回 pinentry」模式,該模式無需皮恩特里成分。如果升級本身沒有幫助,請嘗試啟動此選項。

寄件者需要向我發送他們的公鑰

發送者的公鑰對於解密沒有用處,僅用於簽章驗證。

例如:

pub 2048R/J561VE25 2015-09-23

我認為他們發送給我的密鑰文件沒有相應的發布/訂閱信息,因此 gpg 無法驗證,因為我只有他們密鑰對信息的一部分。

不。、使用者 – 它總結了金鑰的類型、短(無用)ID 和到期日期。 GnuPG 可以完美地從密鑰本身提取它,但這並不是它需要的。

答案2

經過多次來回之後,我透過兩個更改找到了解決方案。

  1. gpg-agent.conf 需要pinentry-program /usr/bin/pinentry-curses加入其中。

  2. 腳本編寫者需要添加--batch到他的命令列。

完成後,gpg 就能夠取得金鑰並解密。

感謝您的回覆。感謝您的寶貴時間。

相關內容