加密是一種將純文本數據嵌入到外界無法解碼的過程。 有必要對數據進行加密以防止濫用。 GNU Privacy Guard (GPG) 應用程序允許您加密和解密信息. 它基於一對密鑰的使用,一個是公開的,一個是私有的(或秘密的)。 用一個密鑰加密的數據只能用另一個密鑰解密。 為了加密發送給您的消息,有人會使用您的公鑰創建一條只能用您的私鑰解鎖的消息。 要簽署信息,您可以使用您的私鑰鎖定它,允許任何人通過使用您的公鑰解鎖來驗證它來自您。
現代 Linux 發行版已經安裝了 gpg。 如果不存在,請安裝它。
在 Centos
#yum install gnupg
在 Ubuntu 上
#apt-get install gnupg
1) 創建 gpg 密鑰
在安裝 gnupg 包時,我們也需要了解使用 gpg 的概念。
生成新的密鑰對
要加密您的通信,首先要做的是創建一個新的密鑰對。 GPG 能夠創建多種類型的密鑰對,但主密鑰必須能夠進行簽名。
# gpg --gen-key
Please select what kind of key you want:
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
Please specify how long the key should be valid.
Key is valid for? (0) 0
Is this correct? (y/N) y
GnuPG needs to construct a user ID to identify your key.
Real name: my_name
Email address: [email protected]
Comment: my-key-pair
You selected this USER-ID:
"my_name (my-key-pair) <[email protected]>"
You need a Passphrase to protect your secret key.
We need to generate a lot of random bytes.
.......+++++
pub 4096R/BAC361F1 2017-03-30
Key fingerprint = 0397 AD65 6EE6 074A 2B95 EEF1 D2A7 4997 BAC3 61F1
uid my_name (my-key-pair) <[email protected]>
sub 4096R/9742DE56 2017-03-30
uid:
請注意 用戶身份 結果中提到。 我們將使用它的值來做一些操作。pub:
它代表公鑰。 這 鍵名 是 BAC361F1. 你的會不一樣sub:
它代表子鍵,與主鍵一起。 通常用於加密。
如果您看到下面的消息,您的提示可以處理很長時間而不完成
"Not enough random bytes available. Please do some other work to give
the OS a chance to collect more entropy! (Need 285 more bytes)"
該問題是由缺乏熵(或隨機系統噪聲)引起的。 所以取消這個過程並檢查可用的熵
$ cat /proc/sys/kernel/random/entropy_avail
14
你可以看到這還不夠。 我們可以安裝一個包來解決熵的缺乏 rngd 這是一個隨機數生成器實用程序,用於立即檢查可用熵
# apt-get install rng-tools
# cat /proc/sys/kernel/random/entropy_avail
3075
現在可以重新開始 gpg --gen-key
命令,過程會很好。 我們只安裝了它,沒有其他任何東西。 在某些發行版中,您需要在 gpg 進程之前使用 rngd。
# rngd -f -r /dev/urandom
3) 生成撤銷證書
創建密鑰對後,如果您的私鑰以任何方式被洩露或丟失,您應該立即生成撤銷證書以撤銷您的公鑰。 創建密鑰時創建它。 該過程需要您的私鑰,密碼。
$ gpg --output revoke_key.asc --gen-revoke BAC361F1
sec 4096R/BAC361F1 2017-03-30 my_name (my-key-pair) <[email protected]>
Create a revocation certificate for this key? (y/N) y
(Probably you want to select 1 here)
Your decision? 0
Enter an optional description; end it with an empty line:
> revocation if key compromised
>
Reason for revocation: No reason specified
Is this okay? (y/N) y
You need a passphrase to unlock the secret key for
user: "my_name (my-key-pair) <[email protected]>"
4096-bit RSA key, ID BAC361F1, created 2017-03-30
Revocation certificate created.
參數 BAC361F1 是密鑰 ID. 它必須是一個密鑰說明符,可以是您的主密鑰對的密鑰 ID,也可以是標識您的密鑰對的用戶 ID 的任何部分,例如 [email protected]。 生成的證書將保存在 revoke_key.asc
文件。 將其存儲在其他人無法訪問的地方,因為任何有權訪問它的人都可以撤銷您的密鑰,使其變得無用。 如果 --output
省略選項,結果將放在標準輸出上。
4) 製作公鑰的 ASCII 裝甲版本
某些密鑰服務器允許您粘貼公鑰的 ASCII 裝甲版本,以便直接上傳。 這種方法是首選,因為密鑰直接來自可以看到密鑰已成功上傳的用戶。
$ gpg --output armored_key.asc --export -a BAC361F1
5) 交換鑰匙
為了與他人通信,您必須交換公鑰。 為此,您必須能夠列出您的密鑰。 有一些命令可以列出您的公鑰環
gpg --list-keys:
列出公共密鑰環中的所有密鑰,或僅列出命令行中給出的密鑰。gpg --list-secret-keys:
列出密鑰環中的所有密鑰或僅列出命令行中給出的密鑰gpg --list-sigs:
與 –list-keys 相同,但也列出了簽名。
$ gpg --list-keys
/home/ubuntu/.gnupg/pubring.gpg -------------------------------
pub 4096R/BAC361F1 2017-03-30
uid my_name (my-key-pair) <[email protected]>
sub 4096R/9742DE56 2017-03-30
導出公鑰
現在您已經生成了一個密鑰對,下一步是在 Internet 上發布您的公鑰 ( Keyservers ),以便其他人可以使用它向您發送消息。 您可以使用密鑰 ID 或用戶 ID 的任何部分來標識要導出的密鑰。 有兩個命令,但對於第一個命令,密鑰以二進制格式導出,當它通過電子郵件發送或發佈在網頁上時可能會很不方便。 因此,我們將使用 ASCII 裝甲方法的第二個命令。
$ gpg --output to-bob.gpg --export BAC361F1
$ gpg --armor --export BAC361F1 > my_pubkey.gpg
輸出將被重定向到 my_pubkey.gpg 文件,該文件包含用於通信的公鑰內容。
將您的公鑰提交給密鑰服務器
一旦你有了這個 ASCII 鎧裝公鑰,你可以手動將它粘貼到公鑰服務器上的表單中,比如 pgp.mit.edu
$ gpg --keyserver pgp.mit.edu --send-keys BAC361F1
gpg: sending key BAC361F1 to hkp server pgp.mit.edu
因為似乎有人向您發送了他們的公鑰,所以除非您對其進行驗證,否則沒有理由相信它來自該人。
導入公鑰
由於其他人可以使用您的公鑰向您發送消息,因此您可以從您信任的人導入 public 以與他們通信。
gpg --import bob_public_key.gpg
結論
現在我們對使用和生成公鑰的原則有了概念。 您知道 GnuPG 是如何運作的,並且可以將其用於安全通信。 GPG 加密只有在雙方都使用良好的安全實踐並保持警惕時才有用。
另請閱讀:
- 如何在 Linux 中使用 GPG 加密/解密文件