GPG配置、命令、實例與apt-key密鑰測試

環境

Ubuntu18.04
gpg version 2.24

參考文檔

GnuPG

栗子文檔

阮一峯

key Management

簡介

他人用公鑰來加密,自己用私鑰來解密

自己用私鑰來簽名,他人用公鑰來驗證

The public key is given out to the world; the private key must be kept a secret. Anyone possessing the public key can encrypt a message so that it can only be read by someone possessing the private key. It's also possible to use a private key to sign a file, not encrypt it. If a private key is used to sign a file, then anyone who has the public key can check that the file was signed by that key. Anyone who doesn't have the private key can't forge such a signature.

通信流程

  • Say S wants to send a message to G. To do that:
    • S looks for G's public key.
    • S encrypts the message using G's public key.
    • S signs the encrypted message with his own private key.
  • G receives an encrypted signed message. The untrusted email header says it is from S.
    • G looks for S's public key.
    • G verifies the signature using S's public key. Now, G is convinced message is from S.
    • G decrypts message using his own private key.

The whole scheme relies on the assumption that public keys are trustworthy

https://security.stackexchange.com/a/133393

詞彙

簡寫 含義
key pair 密鑰對(包含兩部分)
primary key [master key] 主密鑰(包括主公鑰,主私鑰)
public key pub 公鑰
secret key sec 私鑰
sub-key sub 子公鑰
secret sub-key ssb 子私鑰
key fingerprint 密鑰指紋

文件/目錄

/private-keys-v1.d/

私鑰存放的地方

/pubring.kbx

以其他格式存放的公鑰環,與gpgsm共享

/trustdb.gpg

存放信任數據

/openpgp-revocs.d/

gpg存儲預先生成的吊銷證書的目錄。文件名對應於相應密鑰的OpenPGP指紋。建議備份這些證書

GnuPG 功能

  • 跟算法有關,有些算法不支持某些功能

  • 有些功能是私鑰部分的,例如 認證[C]、簽名[S]、解密

    刪除私鑰部分則無法完成操作

  • 有些功能是公鑰部分的,例如 驗證簽名、加密[E]

    刪除私鑰部分可以完成操作

    # 解密
    lfp@legion:~$ gpg --homedir ~/.gnupg-test -o ~/bin/a.de.txt --decrypt ~/bin/a.en.txt
    gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
    gpg: 由 4096 位的 RSA 密鑰加密,鑰匙號爲 0x9B690269F3C16E7B、生成於 2020-05-05
          “usmile <[email protected]>”
    gpg: 解密失敗:沒有祕匙
    # 簽名
    lfp@legion:~$ gpg --homedir ~/.gnupg-test --sign ~/bin/test.txt 
    gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
    gpg: no default secret key: 沒有祕匙
    gpg: signing failed: 沒有祕匙
    

S: sign

簽名功能

E: encrypt

加密功能

A: authenticate

作用

  1. 身份驗證功能

  2. 在其他協議中用於身份驗證,例如SSH TLS

    https://superuser.com/a/1286352

其他

  1. 只能通過 --expert 選項製作具有該功能的子公鑰

C: certify

主密鑰必備能力,且只有主密鑰具有

作用

  1. 認證具有不同功能的子密鑰)

特性

  • 在key id 之後輸入!,將強制使用該key

  • 當多個密鑰同時具有某個功能的時候,優先使用最新未吊銷的密鑰

    例如有兩個具有[S]的子密鑰, 在未指定使用哪個密鑰簽名的情況下,優先使用最新未被吊銷的密鑰

  • 密鑰的過期時間相當於一個自簽名(自己的私鑰給公鑰簽名),公鑰可以驗證自身的簽名

    修改過期時間就會給自己新增加一個自簽名(覆蓋舊簽名,但不刪除)

    Updating a key's expiration time

  • 公鑰、私鑰的keyID是相同的,一起被創建,每個公鑰對應一個私鑰

  • 一個主密鑰可以綁定多個子密鑰,平時加密解密使用的都是子密鑰,主密鑰只有在某些特定的情況下才使用的,比如新建一個子密鑰,撤銷廢除一個子密鑰,簽名認證別人的密鑰等。

    這樣設計的好處的是子密鑰遺失和泄漏不影響主密鑰的信用,只需要撤銷廢除子密鑰,然後再發布到密鑰服務器,告訴其它人這個子密鑰已經作廢了,主密鑰的公鑰長久積累下來的多人簽名認證可以長久保留下來

    如果重建這層信任還要再讓別人再簽名認證你的新密鑰,很麻煩。所以主密鑰特別重要的,如果它泄漏了,那這個主密鑰下所有子密鑰全都報廢

  • 正確的使用姿勢是導出主私鑰備份,刪除本機的主私鑰,本機只保留子私鑰用於日常操作,哪怕子密鑰被人盜取,也不影響主密鑰,盡最大程度保護你的主密鑰。

    https://www.zhihu.com/question/53042506/answer/306354115

命令

gpg --armor

以ASCII 形式輸出

gpg --output

gpg -o file

指定輸出文件名

gpg --version

不能縮寫,打印版本和許可信息

gpg --homedir

僅在命令行有效

指定生成的密鑰環以及其他數據保存的地方

默認是~/.gnupg 目錄

mkdir ~/.gnupg-test
gpg --homedir  ~/gnupg-test

gpg --expert

允許用戶執行某些荒謬或“愚蠢”的事情,例如對已過期或已撤銷的密鑰進行簽名,或某些潛在的不兼容的事情,例如生成異常的密鑰類型。這還會禁用有關潛在不兼容操作的某些警告消息。顧名思義,此選項僅適用於專家。如果您不完全瞭解它允許您執行的操作,請不要進行此操作

在創建具有身份驗證功能[A]的子密鑰時需要添加此參數,不加此參數,缺少一些可選項

gpg --full-gen-key

可以自定義密鑰的參數,具有所有的可選項

gpg --gen-key

使用當前默認的參數快速生成密鑰

同時會生成密鑰的撤銷證書

生成的主密鑰默認具有[SC] 兩項功能

In addition to the key a revocation certificate is created and stored in the ‘openpgp-revocs.d’ directory below the GnuPG home directory

gpg --list-keys

gpg -k

列出公鑰,如果沒有指定則列出所有

gpg --list-secret-keys

gpg -K

列出私鑰,如果沒有指定則列出所有

lfp@legion:~$ gpg --homedir ~/.gnupg-test -k
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
/home/lfp/.gnupg-test/pubring.kbx
---------------------------------
pub   rsa4096/0x5AF8B6B68CC7F785 2020-05-05 [SC]		# 後面沒有日期的是永不過期
      密鑰指紋 = 0298 F65F 32F5 A7CA D764  A941 5AF8 B6B6 8CC7 F785
uid                   [ 絕對 ] usmile <[email protected]>
sub   rsa4096/0x9B690269F3C16E7B 2020-05-05 [E]			   # 後面沒有日期的是永不過期
sub   rsa3072/0x8EF9605115CB7A14 2020-05-05 [S] [有效至:2020-05-12]

gpg --gen-revoke

爲整個密鑰(主密鑰以及所有子密鑰)生成撤銷證書,如果僅僅想撤銷某個子密鑰則通過--edit命令完成

gpg --gen-revoke keyId --output path/revoke.asc

gpg --edit-key

gpg --edit-key <keyid>

編輯該keyid代表的密鑰

gpg --delete-keys

gpg --delete-keys <key-id>

從密鑰環中刪除該密鑰的公鑰部分,但是需要先刪除私鑰部分

gpg --delete-secret-keys

gpg --delete-secret-keys <key-id>

從密鑰環中刪除該密鑰的私鑰部分,公鑰部分還存在

gpg --delete-secret-and-public-key

gpg --delete-secret-and-public-key <key-id>

從密鑰環中刪除該密鑰對,先刪除私鑰再刪除公鑰

gpg --encrypt

gpg --recipient <uid> --output <file-name_en> --encrypt <file-name>

gpg --homedir ~/.gnupg-test -r 0x8EF9605115CB7A14 -o ~/bin/a.en.txt --encrypt ~/bin/a.txt

指定用誰的公鑰加密文件,並指定加密後的文件名

gpg --decrypt

gpg --output <fine-name_de> --decrypt <file-name_en>

解密文件,並指定解密後生成的文件名

gpg --sign

採用二進制儲存,生成[.gpg]文件

默認情況下選擇最新未被吊銷的具有[S]功能的密鑰

可以通過--local-user--default-key指定

gpg --clearsign

採用ASCII碼形式儲存,生成[.asc]文件

gpg --detach-sign

與文件內容分開存放,生成單獨的簽名文件[.sig](二進制形式)

gpg --detach-sign --armor

生成單獨的簽名文件[.asc](ASCII碼形式)

gpg --verify

gpg --verify [.gpg]

驗證簽名

gpg --export

gpg --homedir ./gnupg-test --export --armor --o public-keys.gpg 0xD93D03C13478D580

導出所有密鑰的公鑰部分 (master + subkeys)

可以指定具體某個密鑰

gpg --export-secret-keys

gpg --homedir ./gnupg-test --export-secret-keys --armor --o secret-keys.gpg 0xD93D03C13478D580

導出所有密鑰的私鑰部分 (master + subkeys)

gpg --export-secret-subkeys

gpg --homedir ./gnupg-test --export-secret-subkeys --armor --o secret-subkey_sign.gpg 0x1ED73636975EC6DE!

導出某個子密鑰的私鑰部分

公鑰服務器

hkp(HTTP Keyserver Protocol):http密鑰服務器協議

公鑰服務器可以通過交換機制同步新上傳的公鑰

公鑰服務器沒有檢查機制,任何人都可以用你的名義上傳公鑰,所以沒有辦法保證服務器上的公鑰的可靠性

一般可以通過公鑰的指紋來覈對,但是指紋也會被僞造

key server

hkp://keyserver.ubuntu.com:80
hkp://keyserver.ubuntu.com
hkp://pgp.mit.edu:80
hkps://pgp.mit.edu

配置文件

默認的配置文件是 ~/.gnupg/gpg.conf~/.gnupg/dirmngr.conf.

不會自動創建,需要手動創建並添加需要的配置

Those files are not there by default, create blank files instead, then use gpg(1) and see the FILES section to configure what you want.

You do not need any sort of default files.

創建配置文件

# 創建配置文件
gpg.conf

# 添加如下內容
################################################################################
# GnuPG View Options

# 顯示keyId 16位 16進制數字
# Select how to display key IDs. "long" is the more accurate (but less 
# convenient) 16-character key ID. Add an "0x" to include an "0x" at the 
# beginning of the key ID. 
keyid-format 0xlong

# 顯示指紋標識
# List all keys with their fingerprints. This is the same output as --list-keys 
# but with the additional output of a line with the fingerprint. If this 
# command is given twice, the fingerprints of all secondary keys are listed too.
with-fingerprint

# 保存退出

生成主密鑰

lfp@legion:~$ mkdir ~/.gnupg-test
lfp@legion:~$ vim ~/.gnupg-test/gpg.conf
lfp@legion:~$ gpg --homedir ~/.gnupg-test --expert --full-gen-key
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: keybox '/home/lfp/.gnupg-test/pubring.kbx' created
請選擇您要使用的密鑰種類:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (僅用於簽名)
   (4) RSA (僅用於簽名)
   (7) DSA (自定義用途)
   (8) RSA (自定義用途)
   (9) ECC and ECC
  (10) ECC (sign only)
  (11) ECC (set your own capabilities)
  (13) Existing key
您的選擇? 8

RSA 密鑰可能的操作: 簽名 驗證 加密 認證 
目前允許的操作: 簽名 驗證 加密 

   (S) 選擇是否用於簽名
   (E) 選擇是否用於加密
   (A) 選擇是否用於認證
   (Q) 已完成

您的選擇? s

RSA 密鑰可能的操作: 簽名 驗證 加密 認證 
目前允許的操作: 驗證 加密 

   (S) 選擇是否用於簽名
   (E) 選擇是否用於加密
   (A) 選擇是否用於認證
   (Q) 已完成

您的選擇? e

RSA 密鑰可能的操作: 簽名 驗證 加密 認證 
目前允許的操作: 驗證 

   (S) 選擇是否用於簽名
   (E) 選擇是否用於加密
   (A) 選擇是否用於認證
   (Q) 已完成

您的選擇? q
RSA 密鑰長度應在 1024 位與 4096 位之間。
您想要用多大的密鑰尺寸?(3072) 4096
您所要求的密鑰尺寸是 4096 位
請設定這把密鑰的有效期限。
         0 = 密鑰永不過期
      <n>  = 密鑰在 n 天后過期
      <n>w = 密鑰在 n 周後過期
      <n>m = 密鑰在 n 月後過期
      <n>y = 密鑰在 n 年後過期
密鑰的有效期限是?(0) 1
密鑰於 2020年05月04日 星期一 19時53分23秒 CST 過期
以上正確嗎?(y/n) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <[email protected]>"

真實姓名: usmile
電子郵件地址: [email protected]
註釋: 
您選定了這個用戶標識:
    “usmile <[email protected]>”

更改姓名(N)、註釋(C)、電子郵件地址(E)或確定(O)/退出(Q)? o
# 此時需要輸入一個口令,一定要記住,後面編輯該密鑰時需要用到
我們需要生成大量的隨機字節。這個時候您可以多做些瑣事(像是敲打鍵盤、移動
鼠標、讀寫硬盤之類的),這會讓隨機數字發生器有更好的機會獲得足夠的熵數。
gpg: /home/lfp/.gnupg-test/trustdb.gpg:建立了信任度數據庫
gpg: 密鑰 0x2954C91DEAE3C032 被標記爲絕對信任
gpg: directory '/home/lfp/.gnupg-test/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/lfp/.gnupg-test/openpgp-revocs.d/76D139A8F9172972195CF33C2954C91DEAE3C032.rev'
公鑰和私鑰已經生成並經簽名。

pub   rsa4096/0x2954C91DEAE3C032 2020-05-03 [C] [有效至:2020-05-04]
      密鑰指紋 = 76D1 39A8 F917 2972 195C  F33C 2954 C91D EAE3 C032
uid                              usmile <[email protected]>

檢查是否成功

lfp@legion:~$ gpg --homedir ~/.gnupg-test -K
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg: 正在檢查信任度數據庫
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: 深度:0 有效性:  1 已簽名:  0 信任度:0-,0q,0n,0m,0f,1u
gpg: 下次信任度數據庫檢查將於 2020-05-04 進行
/home/lfp/.gnupg-test/pubring.kbx
---------------------------------
sec   rsa4096/0x2954C91DEAE3C032 2020-05-03 [C] [有效至:2020-05-04]
      密鑰指紋 = 76D1 39A8 F917 2972 195C  F33C 2954 C91D EAE3 C032
uid                   [ 絕對 ] usmile <[email protected]>

創建子密鑰[S]

lfp@legion:~$ gpg --homedir ~/.gnupg-test --expert --edit-key 0x2954C91DEAE3C032 
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

私鑰可用。

sec  rsa4096/0x2954C91DEAE3C032
     創建於:2020-05-03  有效至:2020-05-04  可用於:C   
     信任度:絕對        有效性:絕對
[ 絕對 ] (1). usmile <[email protected]>

gpg> addkey
請選擇您要使用的密鑰種類:
   (3) DSA (僅用於簽名)
   (4) RSA (僅用於簽名)
   (5) ElGamal (僅用於加密)
   (6) RSA (僅用於加密)
   (7) DSA (自定義用途)
   (8) RSA (自定義用途)
  (10) ECC (sign only)
  (11) ECC (set your own capabilities)
  (12) ECC (encrypt only)
  (13) Existing key
您的選擇? 4
RSA 密鑰長度應在 1024 位與 4096 位之間。
您想要用多大的密鑰尺寸?(3072) 
您所要求的密鑰尺寸是 3072 位
請設定這把密鑰的有效期限。
         0 = 密鑰永不過期
      <n>  = 密鑰在 n 天后過期
      <n>w = 密鑰在 n 周後過期
      <n>m = 密鑰在 n 月後過期
      <n>y = 密鑰在 n 年後過期
密鑰的有效期限是?(0) 1
密鑰於 2020年05月04日 星期一 19時57分58秒 CST 過期
以上正確嗎?(y/n) y
真的要建立嗎?(y/N) y
我們需要生成大量的隨機字節。這個時候您可以多做些瑣事(像是敲打鍵盤、移動
鼠標、讀寫硬盤之類的),這會讓隨機數字發生器有更好的機會獲得足夠的熵數。

sec  rsa4096/0x2954C91DEAE3C032
     創建於:2020-05-03  有效至:2020-05-04  可用於:C   
     信任度:絕對        有效性:絕對
ssb  rsa3072/0x6E3823DE57F89766
     創建於:2020-05-03  有效至:2020-05-04  可用於:S   
[ 絕對 ] (1). usmile <[email protected]>

# 注意一定要保存才能生效
gpg> save

查看是否創建成功

lfp@legion:~$ gpg --homedir ~/.gnupg-test -K
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
/home/lfp/.gnupg-test/pubring.kbx
---------------------------------
sec   rsa4096/0x2954C91DEAE3C032 2020-05-03 [C] [有效至:2020-05-04]
      密鑰指紋 = 76D1 39A8 F917 2972 195C  F33C 2954 C91D EAE3 C032
uid                   [ 絕對 ] usmile <[email protected]>
ssb   rsa3072/0x6E3823DE57F89766 2020-05-03 [S] [有效至:2020-05-04]

lfp@legion:~$ gpg --homedir ~/.gnupg-test -k
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
/home/lfp/.gnupg-test/pubring.kbx
---------------------------------
pub   rsa4096/0x2954C91DEAE3C032 2020-05-03 [C] [有效至:2020-05-04]
      密鑰指紋 = 76D1 39A8 F917 2972 195C  F33C 2954 C91D EAE3 C032
uid                   [ 絕對 ] usmile <[email protected]>
sub   rsa3072/0x6E3823DE57F89766 2020-05-03 [S] [有效至:2020-05-04]

創建子密鑰[A]

lfp@legion:~$ gpg --homedir ~/.gnupg-test --expert --edit-key 0x2954C91DEAE3C032 
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

私鑰可用。

sec  rsa4096/0x2954C91DEAE3C032
     創建於:2020-05-03  有效至:2020-05-04  可用於:C   
     信任度:絕對        有效性:絕對
ssb  rsa3072/0x6E3823DE57F89766
     創建於:2020-05-03  有效至:2020-05-04  可用於:S   
[ 絕對 ] (1). usmile <[email protected]>

gpg> addkey
請選擇您要使用的密鑰種類:
   (3) DSA (僅用於簽名)
   (4) RSA (僅用於簽名)
   (5) ElGamal (僅用於加密)
   (6) RSA (僅用於加密)
   (7) DSA (自定義用途)
   (8) RSA (自定義用途)
  (10) ECC (sign only)
  (11) ECC (set your own capabilities)
  (12) ECC (encrypt only)
  (13) Existing key
您的選擇? 8

RSA 密鑰可能的操作: 簽名 加密 認證 
目前允許的操作: 簽名 加密 

   (S) 選擇是否用於簽名
   (E) 選擇是否用於加密
   (A) 選擇是否用於認證
   (Q) 已完成

您的選擇? s

RSA 密鑰可能的操作: 簽名 加密 認證 
目前允許的操作: 加密 

   (S) 選擇是否用於簽名
   (E) 選擇是否用於加密
   (A) 選擇是否用於認證
   (Q) 已完成

您的選擇? e

RSA 密鑰可能的操作: 簽名 加密 認證 
目前允許的操作: 

   (S) 選擇是否用於簽名
   (E) 選擇是否用於加密
   (A) 選擇是否用於認證
   (Q) 已完成

您的選擇? a

RSA 密鑰可能的操作: 簽名 加密 認證 
目前允許的操作: 認證 

   (S) 選擇是否用於簽名
   (E) 選擇是否用於加密
   (A) 選擇是否用於認證
   (Q) 已完成

您的選擇? q
RSA 密鑰長度應在 1024 位與 4096 位之間。
您想要用多大的密鑰尺寸?(3072) 
您所要求的密鑰尺寸是 3072 位
請設定這把密鑰的有效期限。
         0 = 密鑰永不過期
      <n>  = 密鑰在 n 天后過期
      <n>w = 密鑰在 n 周後過期
      <n>m = 密鑰在 n 月後過期
      <n>y = 密鑰在 n 年後過期
密鑰的有效期限是?(0) 1
密鑰於 2020年05月04日 星期一 19時59分46秒 CST 過期
以上正確嗎?(y/n) y
真的要建立嗎?(y/N) y
我們需要生成大量的隨機字節。這個時候您可以多做些瑣事(像是敲打鍵盤、移動
鼠標、讀寫硬盤之類的),這會讓隨機數字發生器有更好的機會獲得足夠的熵數。

sec  rsa4096/0x2954C91DEAE3C032
     創建於:2020-05-03  有效至:2020-05-04  可用於:C   
     信任度:絕對        有效性:絕對
ssb  rsa3072/0x6E3823DE57F89766
     創建於:2020-05-03  有效至:2020-05-04  可用於:S   
ssb  rsa3072/0x2CA24BFA9B038328
     創建於:2020-05-03  有效至:2020-05-04  可用於:A   
[ 絕對 ] (1). usmile <[email protected]>

gpg> save

查看是否創建成功

lfp@legion:~$ gpg --homedir ~/.gnupg-test -K
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
/home/lfp/.gnupg-test/pubring.kbx
---------------------------------
sec   rsa4096/0x2954C91DEAE3C032 2020-05-03 [C] [有效至:2020-05-04]
      密鑰指紋 = 76D1 39A8 F917 2972 195C  F33C 2954 C91D EAE3 C032
uid                   [ 絕對 ] usmile <[email protected]>
ssb   rsa3072/0x6E3823DE57F89766 2020-05-03 [S] [有效至:2020-05-04]
ssb   rsa3072/0x2CA24BFA9B038328 2020-05-03 [A] [有效至:2020-05-04]

添加uid

lfp@legion:~$ gpg --homedir ~/.gnupg-test --expert --edit-key 0x2954C91DEAE3C032
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

私鑰可用。

sec  rsa4096/0x2954C91DEAE3C032
     創建於:2020-05-03  有效至:2020-05-04  可用於:C   
     信任度:絕對        有效性:絕對
ssb  rsa3072/0x6E3823DE57F89766
     創建於:2020-05-03  有效至:2020-05-04  可用於:S   
ssb  rsa3072/0x2CA24BFA9B038328
     創建於:2020-05-03  有效至:2020-05-04  可用於:A   
[ 絕對 ] (1). usmile <[email protected]>

gpg> adduid
真實姓名: usmile
電子郵件地址: [email protected]
註釋: 
您選定了這個用戶標識:
    “usmile <[email protected]>”

更改姓名(N)、註釋(C)、電子郵件地址(E)或確定(O)/退出(Q)? o

sec  rsa4096/0x2954C91DEAE3C032
     創建於:2020-05-03  有效至:2020-05-04  可用於:C   
     信任度:絕對        有效性:絕對
ssb  rsa3072/0x6E3823DE57F89766
     創建於:2020-05-03  有效至:2020-05-04  可用於:S   
ssb  rsa3072/0x2CA24BFA9B038328
     創建於:2020-05-03  有效至:2020-05-04  可用於:A   
[ 絕對 ] (1)  usmile <[email protected]>
[ 未知 ] (2). usmile <[email protected]>

# 選擇上方 [未知] uid 的編號
gpg> uid 2

sec  rsa4096/0x2954C91DEAE3C032
     創建於:2020-05-03  有效至:2020-05-04  可用於:C   
     信任度:絕對        有效性:絕對
ssb  rsa3072/0x6E3823DE57F89766
     創建於:2020-05-03  有效至:2020-05-04  可用於:S   
ssb  rsa3072/0x2CA24BFA9B038328
     創建於:2020-05-03  有效至:2020-05-04  可用於:A   
[ 絕對 ] (1)  usmile <[email protected]>
[ 未知 ] (2)* usmile <[email protected]>

gpg> primary

sec  rsa4096/0x2954C91DEAE3C032
     創建於:2020-05-03  有效至:2020-05-04  可用於:C   
     信任度:絕對        有效性:絕對
ssb  rsa3072/0x6E3823DE57F89766
     創建於:2020-05-03  有效至:2020-05-04  可用於:S   
ssb  rsa3072/0x2CA24BFA9B038328
     創建於:2020-05-03  有效至:2020-05-04  可用於:A   
[ 絕對 ] (1)  usmile <[email protected]>
[ 未知 ] (2)* usmile <[email protected]>

gpg> save

查看是否添加成功

lfp@legion:~$ gpg --homedir ~/.gnupg-test -K
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
/home/lfp/.gnupg-test/pubring.kbx
---------------------------------
sec   rsa4096/0x2954C91DEAE3C032 2020-05-03 [C] [有效至:2020-05-04]
      密鑰指紋 = 76D1 39A8 F917 2972 195C  F33C 2954 C91D EAE3 C032
uid                   [ 絕對 ] usmile <[email protected]>
uid                   [ 絕對 ] usmile <[email protected]>
ssb   rsa3072/0x6E3823DE57F89766 2020-05-03 [S] [有效至:2020-05-04]
ssb   rsa3072/0x2CA24BFA9B038328 2020-05-03 [A] [有效至:2020-05-04]

刪除密鑰

刪除整個密鑰,而非子密鑰

lfp@legion:~$ gpg --homedir ~/.gnupg-test/ -K
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
/home/lfp/.gnupg-test/pubring.kbx
---------------------------------
sec   rsa4096/0x2954C91DEAE3C032 2020-05-03 [C] [已過期:2020-05-04]
      密鑰指紋 = 76D1 39A8 F917 2972 195C  F33C 2954 C91D EAE3 C032
uid                   [已過期] usmile <[email protected]>
uid                   [已過期] usmile <[email protected]>

sec   rsa4096/0x70105702D00EB8F4 2020-05-04 [C] [已吊銷:2020-05-04]
      密鑰指紋 = 0B19 E909 EB7D 0060 6615  693F 7010 5702 D00E B8F4
uid                   [已吊銷] usmile <[email protected]>
# 刪除密鑰
lfp@legion:~$ gpg --homedir ~/.gnupg-test/ --delete-secret-and-public-key 0x70105702D00EB8F4
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.


sec  rsa4096/0x70105702D00EB8F4 2020-05-04 usmile <[email protected]>

要從鑰匙環裏刪除這把密鑰嗎?(y/N) y
這是一把私鑰!――真的要刪除嗎?(y/N) y
pub  rsa4096/0x70105702D00EB8F4 2020-05-04 usmile <[email protected]>

要從鑰匙環裏刪除這把密鑰嗎?(y/N) y
# 已經刪除
lfp@legion:~$ gpg --homedir ~/.gnupg-test/ -K
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
/home/lfp/.gnupg-test/pubring.kbx
---------------------------------
sec   rsa4096/0x2954C91DEAE3C032 2020-05-03 [C] [已過期:2020-05-04]
      密鑰指紋 = 76D1 39A8 F917 2972 195C  F33C 2954 C91D EAE3 C032
uid                   [已過期] usmile <[email protected]>
uid                   [已過期] usmile <[email protected]>


公私鑰單獨刪除

# 無法先刪除公鑰
lfp@legion:~$ gpg --homedir ~/.gnupg-test/ --delete-keys 0x2954C91DEAE3C032
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: 公鑰“0x2954C91DEAE3C032”有對應的私鑰!
gpg: 請先使用“--delete-secret-keys”選項來刪除它。

# 先刪除私鑰部分才能刪除公鑰部分
lfp@legion:~$ gpg --homedir ~/.gnupg-test/ --delete-secret-keys 0x2954C91DEAE3C032
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.


sec  rsa4096/0x2954C91DEAE3C032 2020-05-03 usmile <[email protected]>

要從鑰匙環裏刪除這把密鑰嗎?(y/N) y
這是一把私鑰!――真的要刪除嗎?(y/N) y

加密、解密

lfp@legion:~/bin$ gpg -k
/home/lfp/.gnupg/pubring.kbx
----------------------------
pub   rsa3072/0x16A3B99FBAC538AE 2020-05-01 [SC] [已吊銷:2020-05-04]
      密鑰指紋 = 1256 45C3 0AAB 72BB D113  4A5F 16A3 B99F BAC5 38AE
uid                   [已吊銷] lfp1024 <[email protected]>

pub   rsa4096/0x92C4D0C89EAA7333 2020-05-04 [SC] [有效至:2020-05-05]
      密鑰指紋 = C95B 86BC 7919 F706 8CD6  2B08 92C4 D0C8 9EAA 7333
uid                   [ 絕對 ] usmile <[email protected]>
sub   rsa4096/0x918087E1E6101F9D 2020-05-04 [E] [有效至:2020-05-05]

lfp@legion:~/bin$ gpg --recipient 0x918087E1E6101F9D --output ~/bin/test.en.txt --encrypt test.txt
lfp@legion:~/bin$ gpg --decrypt test.en.txt --output test.de.txt
gpg: Note: '--output' is not considered an option
usage: gpg [options] --decrypt [filename]
lfp@legion:~/bin$ gpg --output test.de.txt --decrypt test.en.txt
gpg: 由 4096 位的 RSA 密鑰加密,鑰匙號爲 0x918087E1E6101F9D、生成於 2020-05-04
      “usmile <[email protected]>”

簽名

通過默認配置生成的主密鑰具有[SC]兩種功能,如果同時存在一個具有[S]功能的子密鑰,則會通過子密鑰去簽名

實際是通過密鑰的私鑰部分去簽名,然後通過該密鑰的公鑰部分去驗證簽名

# 在當前目錄生成一份包含文件內容的簽名文件 sign-test.Release.gpg 
lfp@legion:~$ gpg --homedir ~/.gnupg-test --sign sign-test.Release 
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'

# 在當前目錄生成一份包含文件內容的簽名文件 sign-test.Release.asc
lfp@legion:~$ gpg --homedir ~/.gnupg-test --clearsign sign-test.Release
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'

# 在當前目錄生成一份【不包含】文件內容的簽名文件 sign-test.Release.sig
lfp@legion:~$ gpg --homedir ~/.gnupg-test --detach-sign sign-test.Release
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'

# 在當前目錄生成一份【不包含】文件內容的簽名文件 sign-test.Release.asc
lfp@legion:~$ gpg --homedir ~/.gnupg-test --detach-sign --armor sign-test.Release
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'


# 可以通過 --output 指定路徑及文件名,但是需要注意參數的位置,要放在 --sign 之前
lfp@legion:~$ gpg --homedir ~/.gnupg-test --output ~/bin/sign-test.Release.gpg --sign sign-test.Release
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
lfp@legion:~$ gpg --homedir ~/.gnupg-test --output ~/bin/sign-test.Release.asc --clearsign sign-test.Release
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'

驗證

  1. 通過 gpgv 工具
  2. 通過 gpg
lfp@legion:~$ gpg --homedir ~/.gnupg-test -k
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
/home/lfp/.gnupg-test/pubring.kbx
---------------------------------
pub   rsa4096/0x2954C91DEAE3C032 2020-05-03 [C] [有效至:2020-05-04]
      密鑰指紋 = 76D1 39A8 F917 2972 195C  F33C 2954 C91D EAE3 C032
uid                   [ 絕對 ] usmile <[email protected]>
uid                   [ 絕對 ] usmile <[email protected]>
sub   rsa3072/0x6E3823DE57F89766 2020-05-03 [S] [有效至:2020-05-04]
sub   rsa3072/0x2CA24BFA9B038328 2020-05-03 [A] [有效至:2020-05-04]

# gpgv 需要通過 --keyring 指定密鑰環
lfp@legion:~$ gpgv --keyring ~/.gnupg-test/pubring.kbx sign-test.Release.gpg 
gpgv: 簽名建立於 2020年05月04日 星期一 19時01分58秒 CST
#  後16位即使用的密鑰ID 0x6E3823DE57F89766
gpgv:                使用 RSA 密鑰 92E43802C92A69A4F7B069E86E3823DE57F89766
gpgv: 完好的簽名,來自於“usmile <[email protected]>”
# 因爲有兩個uid
gpgv:                 亦即“usmile <[email protected]>”

# gpg 只需要指出homedir 即可
# 通過gpg驗證可以檢查出密鑰是否過期
lfp@legion:~$ gpg --homedir ~/.gnupg-test/ --verify sign-test.Release.gpg 
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg: 簽名建立於 2020年05月04日 星期一 19時01分58秒 CST
gpg:                使用 RSA 密鑰 92E43802C92A69A4F7B069E86E3823DE57F89766
gpg: 完好的簽名,來自於“usmile <[email protected]>” [已過期]
gpg:                 亦即“usmile <[email protected]>” [已過期]
gpg: 注意:這把密鑰已經過期了!
主鑰指紋: 76D1 39A8 F917 2972 195C  F33C 2954 C91D EAE3 C032
     子鑰指紋: 92E4 3802 C92A 69A4 F7B0  69E8 6E38 23DE 57F8 9766
########################################################################

lfp@legion:~/.gnupg$ gpg -k
/home/lfp/.gnupg/pubring.kbx
----------------------------
pub   rsa3072/0x16A3B99FBAC538AE 2020-05-01 [SC] [已吊銷:2020-05-04]
      密鑰指紋 = 1256 45C3 0AAB 72BB D113  4A5F 16A3 B99F BAC5 38AE
uid                   [已吊銷] lfp1024 <[email protected]>
# 無法判定密鑰的性質
lfp@legion:~/.gnupg$ gpgv --keyring ~/.gnupg/pubring.kbx ~/bin/test.txt.gpg 
gpgv: 簽名建立於 2020年05月04日 星期一 19時17分25秒 CST
gpgv:                使用 RSA 密鑰 3142022C68CD0B034DBAA5A0CF8C3097514C5331
gpgv: 完好的簽名,來自於“lfp1024 <[email protected]>”

# 通過gpg驗證可以檢查出密鑰是否被吊銷
lfp@legion:~/.gnupg$ gpg --verify ~/bin/test.txt.gpg 
gpg: 簽名建立於 2020年05月04日 星期一 19時17分25秒 CST
gpg:                使用 RSA 密鑰 3142022C68CD0B034DBAA5A0CF8C3097514C5331
gpg: 完好的簽名,來自於“lfp1024 <[email protected]>” [絕對]
gpg: 警告:這把密鑰已經被它的持有者吊銷了!
gpg:          這表明這個簽名有可能是僞造的。
gpg: 吊銷原因: 密鑰不再使用
主鑰指紋: 1256 45C3 0AAB 72BB D113  4A5F 16A3 B99F BAC5 38AE
     子鑰指紋: 3142 022C 68CD 0B03 4DBA  A5A0 CF8C 3097 514C 5331

通過gpg --keyring驗證,測試不行

# 測試發現,不能正確驗證,無法識別密鑰
lfp@legion:~/.gnupg-test$ gpg --keyring ~/.gnupg-test/pubring.kbx --no-default-keyring --verify ~/sign-test.Release.asc
gpg: assuming signed data in '/home/lfp/sign-test.Release'
gpg: 簽名建立於 2020年05月04日 星期一 21時45分27秒 CST
gpg:                使用 RSA 密鑰 5C886AA3B13C8CD76A453E6517B875E5EB1FA9D1
gpg: 完好的簽名,來自於“usmile <[email protected]>” [未知]
gpg: 警告:這把密鑰未經受信任的簽名認證!
gpg:          沒有證據表明這個簽名屬於它所聲稱的持有者。
主鑰指紋: 0B19 E909 EB7D 0060 6615  693F 7010 5702 D00E B8F4
     子鑰指紋: 5C88 6AA3 B13C 8CD7 6A45  3E65 17B8 75E5 EB1F A9D1
     
lfp@legion:~/.gnupg-test$ gpg --homedir ~/.gnupg-test/ --verify ~/sign-test.Release.asc
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg: assuming signed data in '/home/lfp/sign-test.Release'
gpg: 簽名建立於 2020年05月04日 星期一 21時45分27秒 CST
gpg:                使用 RSA 密鑰 5C886AA3B13C8CD76A453E6517B875E5EB1FA9D1
gpg: 完好的簽名,來自於“usmile <[email protected]>” [絕對]
主鑰指紋: 0B19 E909 EB7D 0060 6615  693F 7010 5702 D00E B8F4
     子鑰指紋: 5C88 6AA3 B13C 8CD7 6A45  3E65 17B8 75E5 EB1F A9D1

吊銷整個密鑰

生成吊銷證書

# 生成吊銷證書
# 通過 --output 配置項指定生成文件目錄及名稱,注意順序在前
lfp@legion:~$ gpg --homedir ~/.gnupg-test/ --output ~/.gnupg-test/rev.asc --gen-revoke 0x70105702D00EB8F4
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'

sec  rsa4096/0x70105702D00EB8F4 2020-05-04 usmile <[email protected]>

要爲這把密鑰建立一份吊銷證書嗎?(y/N) y
請選擇吊銷的原因:
  0 = 未指定原因
  1 = 密鑰已泄漏
  2 = 密鑰被替換
  3 = 密鑰不再使用
  Q = 取消
(也許您會想要在這裏選擇 1)
您的決定是什麼? 3
請輸入描述(可選);以空白行結束:
> 
吊銷原因:密鑰不再使用
(不給定描述)
這樣可以嗎? (y/N) y
已強行使用 ASCII 封裝過的輸出。
已建立吊銷證書。

請把這個文件轉移到一個可隱藏起來的介質(如軟盤)上;如果壞人能夠取得這
份證書的話,那麼他就能讓您的密鑰無法繼續使用。把這份憑證打印出來再藏
到安全的地方也是很好的方法,以免您的保存媒體損毀而無法讀取。但是千萬
小心:您的機器上的打印系統可能會在打印過程中把這些數據臨時在某個其他
人也能夠看得到的地方!

導入吊銷證書

# 導入並吊銷整個密鑰
lfp@legion:~$ gpg --homedir ~/.gnupg-test/ --import ~/.gnupg-test/rev.asc 
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg: 密鑰 0x70105702D00EB8F4:“usmile <[email protected]>”吊銷證書已被導入
gpg: 合計被處理的數量:1
gpg:    新的密鑰吊銷:1
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: 深度:0 有效性:  2 已簽名:  0 信任度:0-,0q,0n,0m,0f,2u
gpg: 下次信任度數據庫檢查將於 2020-05-06 進行
使用預先生成的吊銷證書
lfp@legion:~$ gpg -k
/home/lfp/.gnupg/pubring.kbx
----------------------------
pub   rsa3072/0x16A3B99FBAC538AE 2020-05-01 [SC] [已吊銷:2020-05-04]
      密鑰指紋 = 1256 45C3 0AAB 72BB D113  4A5F 16A3 B99F BAC5 38AE
uid                   [已吊銷] lfp1024 <[email protected]>

pub   rsa4096/0x92C4D0C89EAA7333 2020-05-04 [SC] [有效至:2020-05-05]
      密鑰指紋 = C95B 86BC 7919 F706 8CD6  2B08 92C4 D0C8 9EAA 7333
uid                   [ 絕對 ] usmile <[email protected]>
sub   rsa4096/0x918087E1E6101F9D 2020-05-04 [E] [有效至:2020-05-05]
# 找不到。。。
lfp@legion:~$ gpg --import ~/.gnupg/openpgp-revocs.d/C95B86BC7919F7068CD62B0892C4D0C89EAA7333.rev 
gpg: 找不到有效的 OpenPGP 數據。
gpg: 合計被處理的數量:0

上傳至公鑰服務器

# Search your key on the key-server
gpg --keyserver <服務器地址> --search-keys <key-ID>
# Send the revoked key to the key-server
gpg --keyserver <服務器地址> --send-keys <key-ID>

https://superuser.com/questions/1526283/how-to-revoke-a-gpg-key-and-upload-in-gpg-server

吊銷子密鑰

吊銷某個uid同理,用uid 1選定某個uid,通過revuid吊銷

-delkey 只刪除密鑰的公共部分,如果已經上傳到公鑰服務器,則需要使用-revkey吊銷並上傳公鑰服務器

https://www.gnupg.org/gph/en/manual/c235.html

lfp@legion:~/.gnupg-test$ gpg --homedir ~/.gnupg-test/ --expert --edit-key 0x70105702D00EB8F4
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

私鑰可用。

sec  rsa4096/0x70105702D00EB8F4
     創建於:2020-05-04  有效至:2020-05-06  可用於:C   
     信任度:絕對        有效性:絕對
ssb  rsa3072/0x17B875E5EB1FA9D1
     創建於:2020-05-04  有效至:2020-05-06  可用於:S   
[ 絕對 ] (1). usmile <[email protected]>

# 選定某個子密鑰,下標從1開始
gpg> key 1

sec  rsa4096/0x70105702D00EB8F4
     創建於:2020-05-04  有效至:2020-05-06  可用於:C   
     信任度:絕對        有效性:絕對
# 選定該子密鑰
ssb* rsa3072/0x17B875E5EB1FA9D1
     創建於:2020-05-04  有效至:2020-05-06  可用於:S   
[ 絕對 ] (1). usmile <[email protected]>

gpg> revkey
您真的要吊銷這把子鑰嗎?(y/N) y
請選擇吊銷的原因:
  0 = 未指定原因
  1 = 密鑰已泄漏
  2 = 密鑰被替換
  3 = 密鑰不再使用
  Q = 取消
您的決定是什麼? 3
請輸入描述(可選);以空白行結束:
> 
吊銷原因:密鑰不再使用
(不給定描述)
這樣可以嗎? (y/N) y

sec  rsa4096/0x70105702D00EB8F4
     創建於:2020-05-04  有效至:2020-05-06  可用於:C   
     信任度:絕對        有效性:絕對
The following key was revoked on 2020-05-04 by RSA key 0x70105702D00EB8F4 usmile <[email protected]>
ssb  rsa3072/0x17B875E5EB1FA9D1
     創建於:2020-05-04  已吊銷:2020-05-04  可用於:S   
[ 絕對 ] (1). usmile <[email protected]>

gpg>  save

apt-key測試

測試apt-key保存的密鑰

終端執行apt-key list的時候會列出apt密鑰環中保存的密鑰,包括/etc/apt/trusted.gpg以及/etc/apt/trusted.gpg.d/中的密鑰
發現公鑰具有[SC]功能,而[C]功能具有認證子密鑰的能力,怎麼能公開呢?測試如下

查看第三方密鑰

lfp@legion:/etc/apt/trusted.gpg.d$ gpg sogou-archive-keyring.gpg 
gpg: WARNING: no command supplied.  Trying to guess what you mean ...
pub   rsa4096/0xD259B7555E1D3C58 2014-04-09 [SC]
      密鑰指紋 = 6CE3 5A4E BAB6 7609 4476  BE7C D259 B755 5E1D 3C58
uid                             Ubuntu Kylin Archive Automatic Signing Key <[email protected]>
sub   rsa4096/0xFED969A4DF6E30B5 2014-04-09 [E]

導出到文件

lfp@legion:~$ apt-key export 0xD259B7555E1D3C58 > ~/sogou-pub.asc
Warning: apt-key output should not be parsed (stdout is not a terminal)

導入本地gpg密鑰環

lfp@legion:~$ gpg --homedir ~/.gnupg-test --import ~/sogou-pub.asc 
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg: 密鑰 0xD259B7555E1D3C58:公鑰“Ubuntu Kylin Archive Automatic Signing Key <[email protected]>”已導入
gpg: 合計被處理的數量:1
gpg:               已導入:1
# 查看
lfp@legion:~$ gpg --homedir ~/.gnupg-test -k
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
/home/lfp/.gnupg-test/pubring.kbx
---------------------------------
pub   rsa4096/0x5AF8B6B68CC7F785 2020-05-05 [SC]
      密鑰指紋 = 0298 F65F 32F5 A7CA D764  A941 5AF8 B6B6 8CC7 F785
uid                   [ 絕對 ] usmile <[email protected]>
sub   rsa4096/0x9B690269F3C16E7B 2020-05-05 [E]
# 導入成功
pub   rsa4096/0xD259B7555E1D3C58 2014-04-09 [SC]
      密鑰指紋 = 6CE3 5A4E BAB6 7609 4476  BE7C D259 B755 5E1D 3C58
uid                   [ 未知 ] Ubuntu Kylin Archive Automatic Signing Key <[email protected]>
sub   rsa4096/0xFED969A4DF6E30B5 2014-04-09 [E]

編輯該密鑰

發現雖然公鑰顯示[SC],但是缺少私鑰部分,沒有認證[C]權限

lfp@legion:~$ gpg --homedir ~/.gnupg-test --expert --edit-key 0xD259B7555E1D3C58
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.


pub  rsa4096/0xD259B7555E1D3C58
     創建於:2014-04-09  有效至:永不過期       可用於:SC  
     信任度:未知        有效性:未知
sub  rsa4096/0xFED969A4DF6E30B5
     創建於:2014-04-09  有效至:永不過期       可用於:E   
[ 未知 ] (1). Ubuntu Kylin Archive Automatic Signing Key <[email protected]>

gpg> addkey
要有私鑰才能這麼做。

gpg> adduid
要有私鑰才能這麼做。

gpg> revkey
要有私鑰才能這麼做。

gpg> expire
要有私鑰才能這麼做。

gpg> quit

測試子密鑰過期/吊銷後的驗證功能

因爲apt管理的本地密鑰過期之後出現無法驗證簽名的情況

本地測試無法通過--edit-key expire立刻將子密鑰過期,所以測試將一把子密鑰吊銷

步驟

  1. 使用默認子密鑰簽名一個文件

    同時生成兩個具有[S]功能的子密鑰

    測試無法通過'--default-key' 指定使用哪個密鑰簽名

    默認選擇最新生成的具有[S]功能的有效密鑰簽名

  2. 將該子密鑰吊銷

  3. 用具有[S]功能的其他子密鑰驗證

結果

# 此時仍有一把具有[S]功能的子密鑰
lfp@legion:~$ gpg --homedir ~/.gnupg-test --verify ~/a.txt.asc
gpg: WARNING: unsafe permissions on homedir '/home/lfp/.gnupg-test'
gpg: 簽名建立於 2020年05月07日 星期四 18時43分49秒 CST
gpg:                使用 RSA 密鑰 200AA10D5E17D1CAD1FF9B1FCCA5416788D7F49C
gpg: 完好的簽名,來自於“usmile <[email protected]>” [絕對]
gpg: 警告:這把子鑰已經被它的持有者吊銷了!
gpg: 吊銷原因: 密鑰不再使用
主鑰指紋: FABD 2A75 6CF5 983C 9655  7FA0 0FC1 D26E D395 4622
     子鑰指紋: 200A A10D 5E17 D1CA D1FF  9B1F CCA5 4167 88D7 F49C
gpg: WARNING: not a detached signature; file '/home/lfp/a.txt' was NOT verified!

gpgv

gpgv 是一個 OpenPGP 簽名驗證工具,沒有配置文件,只有簡單的選項

gpgv 默認所有的密鑰都是可信賴的,不會檢查其是否過期或被吊銷

This program is actually a stripped-down version of gpg which is only able to check
signatures. It is somewhat smaller than the fully-blown gpg and uses a different (and
simpler) way to check that the public keys used to make the signature are valid. There are
no configuration files and only a few options are implemented.
gpgv assumes that all keys in the keyring are trustworthy. That does also mean that it
does not check for expired or revoked keys

選項

-v

顯示更多驗證信息

--keyring file

  • file 可以是 trustedkeys.kbx 或 trustedkeys.gpg

指定用來驗證的密鑰環

格式

gpgv pgpfile

  • pgpfile 包含數據的簽名文件

用來驗證包含數據的簽名

lfp@legion:~$ gpgv --keyring [~/.gnupg-test/pubring.kbx] [sign-test.Release.gpg ]

gpgv sigfile [datafile]

  • sigfile 簽名文件

  • datafile 數據文件,如果不指定,則會把 sigfile 後綴(.asc .sig .sign)去掉,當做數據文件

    例如谷歌

    簽名文件 dl.google.com_linux_chrome_deb_dists_stable_Release.gpg

    數據文件 dl.google.com_linux_chrome_deb_dists_stable_Release

用來驗證不包含數據的簽名(簽名文件和數據文件分離)

lfp@legion:/var/lib/apt/lists$ gpgv --keyring [/etc/apt/trusted.gpg ] [dl.google.com_linux_chrome_deb_dists_stable_Release.gpg] [dl.google.com_linux_chrome_deb_dists_stable_Release]

其他用途

git

對commit進行簽名

-----END-----
有不正確的地方,歡迎留言指正,謝謝大佬!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章