我有一個由 GPG 加密和簽署的檔案。
在裡面gpg 的手冊頁,對於該--decrypt
選項,它說:
如果解密的檔案已簽名,則簽名也會被驗證。
我想做的不僅僅是驗證簽名是否有效“如果文件已簽名” - 我想做:
- 檢查該文件是否是簽
- 檢查簽名是否來自我的金鑰環中的特定使用者或使用者子集
可以使用什麼 gpg 指令來執行此操作?
答案1
該--decrypt
選項已經完成了大部分工作。
$gpg --decrypt < 測試.gpg gpg:使用4096位元RSA金鑰加密,ID CE7B5510340F19EF,建立於2009-10-31 “重力<[電子郵件受保護]>” WELL(或稱「全球電子連結」)是前沿領域最新事物的一個例子 村莊,電腦公告牌。在這樣的小鎮裡,主街是一條 中央小型計算機(在 WELL 的情況下)多達 64 台微型計算機 可以透過電話線和稱為數據機的閃爍小盒子同時連接。 gpg:簽名於 2015-05-15T07:52:55 EEST 製作 gpg:使用 RSA 金鑰 D24F6CB2C1B52632 gpg:來自“grawity <的好簽名”[電子郵件受保護]>”[終極] gpg:又稱「重力<[電子郵件受保護]>”[終極]
對於機器可讀的信息,您可以使用--status-fd
。
[GNUPG:] ENC_TO CE7B5510340F19EF 1 0 [GNUPG:] BEGIN_DECRYPTION [GNUPG:] DECRYPTION_INFO 2 9 [GNUPG:] 明文 62 1431665575 [GNUPG:] 新聞資訊格 [GNUPG:] SIG_ID 8AaWsnfpINFLIVjEqk665x7fuKA 2015-05-15 1431665575 [GNUPG:] GOODSIG D24F6CB2C1B52632 重力 <[電子郵件受保護]> [GNUPG:] NOTATION_NAME[電子郵件受保護] [GNUPG:] NOTATION_DATA 2357E10CEF4F7ED27E233AD5D24F6CB2C1B52632 [GNUPG:] VALIDSIG 2357E10CEF4F7ED27E233AD5D24F6CB2C1B52632 2015-05-15 1431665575 0 4 0 1 10 00 2357EED65575 0 4 0 1 10 00 2357EED05575 10F23625FFJC [GNUPG:] TRUST_ULTIMATE [GNUPG:] 解密_好的 [GNUPG:] GOODDMDC [GNUPG:] END_DECRYPTION
此處GOODSIG
和VALIDSIG
都表示已檢查簽名,並TRUST_*
對應於該金鑰的認證等級。例如,您直接簽署(或 lsigned)的金鑰將具有 TRUST_FULL。
您可以將其包裝在腳本中,該腳本將根據密鑰白名單檢查 VALIDSIG 中的指紋,或僅依賴密鑰信任模型。
請注意,您不能檢查檔案是否已簽署而不先解密,因為 PGP 使用先簽署後加密。
答案2
gpg --decrypt < data.pgp > /dev/null
這將產生以下輸出:
gpg: encrypted with 4096-bit RSA key, ID B91FFCCDDEE362261A, created 2015-05-21
"Shubham Chaudhary <[email protected]>"
gpg: Signature made Mon Aug 21 23:13:03 2017 IST
gpg: using RSA key 71B6BEEFEED2DCA
gpg: issuer "Shubham Chaudhary <[email protected]>"
gpg: Good signature from "Shubham Chaudhary <[email protected]>" [ultimate]