GPG在Linux上的應用主要是實現官方釋出的包的簽名機制。
GPG分為公鑰及私鑰。
公鑰:顧名思意,即可共享的金鑰,主要用於驗證私鑰加密的資料及簽名要傳送給私鑰方的資料。
私鑰:由本地保留的金鑰,用於簽名本地資料及驗證用公鑰簽名的資料。
GPG基本命令

生成祕鑰:gpg --gen-key
列出系統中已有的祕鑰:gpg --list-keys
將公鑰上傳到伺服器:gpg --send-keys [使用者ID] --keyserver hkp://subkeys.pgp.net 
使用上面的命令,你的公鑰就被傳到了伺服器subkeys.pgp.net,然後通過交換機制,所有的公鑰伺服器最終都會包含你的公鑰。
生成公鑰指紋:gpg --fingerprint [使用者ID]
由於公鑰伺服器沒有檢查機制,任何人都可以用你的名義上傳公鑰,所以沒有辦法保證伺服器上的公鑰的可靠性。通常,你可以在網站上公佈一個公鑰指紋,讓其他人核對下載到的公鑰是否為真
匯入公鑰:gpg --import [金鑰檔案]
加密:gpg --recipient [使用者ID] --output demo.en.txt --encrypt demo.txt
解密:gpg --decrypt demo.en.txt --output demo.de.txt
簽名:gpg --sign demo.txt
執行上面的命令後,當前目錄下生成demo.txt.gpg檔案,這就是簽名後的檔案。
如果想生成單獨的簽名檔案,與檔案內容分開存放,可以使用detach-sign引數。
gpg --detach-sign demo.txt
執行上面的命令後,當前目錄下生成一個單獨的簽名檔案demo.txt.sig。

RPM-GPG-KEY實現原理

實現原理(以Red Hat簽名為例):
1>RH在釋出其官方的RPM包時(如本地RHEL光碟及FTP空間包),會提供一個GPG金鑰檔案,即所謂的公鑰。
2>使用者下載安裝這個RPM包時,引入RH官方的這個RPM GPG公鑰,用來驗證RPM包是不是RH官方簽名的。
匯入GPG-KEY:
可以去https://www.redhat.com/security/team/key/或https://www.centos.org/keys/或/etc/pki/rpm-gpg查詢相應的GPG金鑰,並匯入到RPM:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY
RPM-GPG-KEY-xxx是公鑰檔案,可以從官網下載

簽名和加密概念

  • 簽名與加密不是一個概念。
  • 簽名類似於校驗碼,用於識別軟體包是不是被修改過,最常用的的就是我們的GPG及MD5簽名,原方使用一定的字元(MD5)或密碼(GPG私鑰)與軟體進行相應的運算並得到一個定長的金鑰。
  • 加密是用一定的金鑰對原資料進行修改,即使程式在傳輸中被截獲,只要它不能解開密碼,就不能對程式進行修改,除非破壞掉檔案,那樣我們就知道軟體被修改過了。