天天看點

使用GPG加密通訊,設定git送出驗證密鑰

使用指令行建立 GPG 密鑰

使用以下 shell 指令:

gpg2 --full-gen-key
           

此指令生成由公鑰和私鑰組成的密鑰對。其他人使用您的公鑰來驗證和/或解密您的通信。分發您的公共密鑰盡可能廣泛地,尤其是你知道将要收到你正宗的通信,如郵件清單誰的人。例如,Fedora 文檔項目要求參與者在他們的自我介紹中包含一個 GPG 公鑰。

一系列提示将指導您完成整個過程。如果需要,按Enter鍵配置設定預設值。第一個提示要求您選擇您喜歡的鍵類型:

請選擇您想要的密鑰類型:
   (1) RSA 和 RSA(預設)
   (2) DSA 和 Elgamal
   (3) DSA(僅簽名)
   (4) RSA(僅簽名)
你的選擇? 
           

在幾乎所有情況下,預設值都是正确的選擇。RSA/RSA 密鑰不僅可以讓您簽署通信,還可以加密檔案。

接下來,選擇密鑰大小:

RSA 密鑰的長度可能在 1024 到 4096 位之間。此處幾乎總是推薦更大的,但您的用例和安全模型可能另有規定。
你想要什麼鍵大小?(2048)
           

同樣,預設值對于幾乎所有使用者來說都足夠了,并且代表了極強的安全級别。

接下來,選擇密鑰何時到期。最好選擇一個到期日期而不是使用預設值,即無。 例如,如果密鑰上的電子郵件位址無效,到期日期将提醒其他人停止使用該公鑰。

請指定密鑰的有效期。
         0 = 密鑰不會過期
      <n> = 密鑰在 n 天後過期
      <n>w = 密鑰在 n 周後到期
      <n>m = 密鑰在 n 個月後到期
      <n>y = 密鑰在 n 年後到期
密鑰對什麼有效?(0)
           

1y

例如,輸入值使密鑰有效期為一年。(如果您改變主意,您可以在生成密鑰後更改此到期日期。)

gpg

程式要求簽名資訊之前,會出現以下提示:

這是否正确(是/否)?
           

輸入

y

以完成該過程。

接下來,輸入您的姓名和電子郵件位址。 請記住,此過程是關于驗證您是一個真正的個體。 是以,請包括您的真實姓名。不要使用别名或句柄,因為它們會僞裝或混淆您的身份。

輸入您的 GPG 密鑰的真實電子郵件位址。如果您選擇了一個虛假的電子郵件位址,其他人将更難找到您的公鑰。這使得驗證您的通信變得困難。例如,如果您使用此 GPG 密鑰 在郵件清單中進行自我介紹,請輸入您在該清單中使用的電子郵件位址。

使用注釋字段包含别名或其他資訊。(有些人出于不同目的使用不同的鍵,并用注釋辨別每個鍵,例如“Office”或“開源項目”。)

在确認提示時,如果所有條目都正确,則輸入字母O以繼續,或者使用其他選項來解決任何問題。

最後,為您的密鑰輸入密碼。該

gpg

程式要求您輸入密碼兩次以確定您沒有打字錯誤。

最後,

gpg

生成随機資料以使您的密鑰盡可能唯一。在此步驟中移動滑鼠、鍵入随機鍵或在系統上執行其他任務以加快程序。完成此步驟後,您的密鑰就已完成并可以使用:

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: /home/liran/.gnupg/trustdb.gpg: trustdb created
gpg: key AA605BD95861C17D marked as ultimately trusted
gpg: directory '/home/liran/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/liran/.gnupg/openpgp-revocs.d/C3DE08A566518301A589E395AA605BD95861C17D.rev'
public and secret key created and signed.

pub   rsa3072 2021-08-31 [SC] [expires: 2021-09-02]
      C3DE08A566518301A589E395AA605BD95861C17D
uid                      liran (i am liran) <[email protected]>
sub   rsa3072 2021-08-31 [E] [expires: 2021-09-02]
           

導出公鑰

現在您的密鑰對已經生成,您需要導出公鑰以分發給其他人。在終端中運作指令:

gpg --export --armor [email protected] > liran-pubkey.asc
           

“確定更改”[email protected]’生成PGP密鑰時提供的電子郵件位址。現在您将在目前目錄中看到一個名為我的鑰匙.asc. 将此檔案發送給您希望能夠向您發送加密郵件的任何人。

列印公鑰,并上傳到 伺服器

[[email protected] ~]$ gpg --armor --export [email protected]
-----BEGIN PGP PUBLIC KEY BLOCK-----

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
=x+Rh
-----END PGP PUBLIC KEY BLOCK-----
           

導入公鑰

與您現在可以與其他人共享您的公鑰一樣,其他人也将與您共享他們的公鑰。當您收到某人的公共PGP密鑰時,将檔案儲存到一個目錄,并從同一目錄通路終端,運作:

gpg --import key.asc
           

這将把此人的公共PGP密鑰導入gnupg,允許您開始向他們發送加密消息。您可以随時檢視gnupg中目前可用的所有PGP密鑰的清單:

gpg --list-keys
           

您将看到一組類似于下面的條目,gnupg中每個鍵對應一個條目:

gpg: checking the trustdb
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: next trustdb check due at 2021-09-02
/home/liran/.gnupg/pubring.kbx
------------------------------
pub   rsa3072 2021-08-31 [SC] [expires: 2021-09-02]
      C3DE08A566518301A589E395AA605BD95861C17D
uid           [ultimate] liran (i am liran) <[email protected]>
sub   rsa3072 2021-08-31 [E] [expires: 2021-09-02]
           

您需要注意的唯一資訊是條目的名稱和電子郵件位址,其中說明了該密鑰的所有者。加密郵件時,您隻需要收件人的電子郵件位址。

通過pgp加密消息

例如,您可能需要将一些敏感資訊發送給您的web設計師,他是您已在電子郵件位址下導入的PGP密鑰designe[email protected]。鍵入所需的消息并将其儲存到文本檔案中,例如。消息.txt. 在終端和目錄内消息.txt請運作以下指令:

gpg -e -a -r '[email protected]' message.txt
           

讓我們快速分解上述指令:

  • -e指定我們正在加密資料
  • -a表示我們希望輸出為ASCII或純文字格式
  • -r代表收件人,是以後面跟着設計師的電子郵件位址
  • 最後是我們想要加密的消息檔案

很可能這會要求您确認您确實希望加密到這個公鑰,您隻需點選Y鍵就可以了。一個新的消息.txt.asc檔案将被建立,如果您在文本編輯器中打開該檔案,您将看到類似的内容:

-----BEGIN PGP MESSAGE-----
hQGMAzCBDnMltq9zAQv/ZHQ3tJq+feazdLa3thzQE2bhPx+7WaPZcX7SdkoyuKvw
 9faS7h9OwBjQ4vUyDKespSq3ZNf1pRgNoXijjs3MGEi5IsYxDgNWo1ZJv2qQqp36
 .....
 -----END PGP MESSAGE-----
           

這是新生成的加密形式的消息。您可以将此檔案附加到電子郵件中,也可以将此檔案的内容複制并粘貼到電子郵件的正文内容中。

然後,接收者将能夠使用他們的私鑰對消息進行解密,進而確定在傳輸過程中看到此消息的任何人都無法檢視純文字版本。

加密二進制檔案

上面的部分解釋了如何加密文本消息,但是二進制檔案呢?它的工作原理基本相同,例如加密一個名為圖檔.zip,在終端中運作指令:

gpg -e -r '[email protected]' images.zip
           

唯一的差別是-a選項與輸出檔案的名稱一起被删除。然後像以前一樣,如果提示确認公鑰的使用,隻需按Y鍵即可。

一個名為圖檔.zip.gpg将被建立,這是我們的zip檔案的加密版本,我們可以通過電子郵件作為附件發送給我們的設計師。然後他們可以使用私鑰解密ZIP檔案。

解密消息

您還需要一種方法來解密發送給您的消息。請記住,為了讓某人向您發送加密郵件,您必須首先與他們共享您的公共PGP密鑰。您将得到一個加密的文本塊,它看起來與加密消息相同,例如:

-----BEGIN PGP MESSAGE-----
hQGMAzCBDnMltq9zAQv/ZHQ3tJq+feazdLa3thzQE2bhPx+7WaPZcX7SdkoyuKvw
 9faS7h9OwBjQ4vUyDKespSq3ZNf1pRgNoXijjs3MGEi5IsYxDgNWo1ZJv2qQqp36
 .....
 -----END PGP MESSAGE-----
           

将此文本塊儲存到檔案中,例如消息.asc,并在終端中運作指令:

gpg -d message.asc > message.txt
           

系統将提示您輸入密碼,該密碼與最初生成PGP密鑰對時提供的密碼相同。成功輸入密碼後消息.txt将建立一個檔案,其中包含明文形式的消息的解密版本。就這些!

gpg加密git

配置 git 簽名時使用的 key,,如果不知道

KEYID

可以通過

gpg --list-key

檢視。

git config --global user.signingkey YOUR_KEYID
           

設定 git 自動簽名

git config --global commit.gpgSign true
git config --global tag.forceSignAnnotated true
           

恭喜,你的通訊現在安全了!

通過本指南,您了解了通過PGP加密正確定護通信安全所需的一切。您已經學習了如何生成PGP密鑰對、導出要共享給其他人的公鑰、導入其他人的公鑰,以及如何加密和解密消息。

下次您需要通過電子郵件發送敏感資訊時,您現在可以放心,隻有預期的收件人才能看到郵件的内容,使郵件遠離不受歡迎的客人。加密快樂!