2021-05-12 14:32:11
Linux命令學習手冊-GPG命令
[功能]
GPG是加密和數位簽章的免費工具,大多用於加密資訊的傳遞。除了僅用密碼加密外,GPG最大的不同是提供了“公鑰/私鑰”對。利用你的“公鑰”別人加密資訊不再需要告訴你密碼,隨時隨地都能傳送加密資訊。而這種加密是單向的,只有你的“私鑰”能解開加密。數位簽章又是另一大使用方向。通過簽名認證,別人能確保發布的訊息來自你,而且沒有經過修改。
[原理]
對稱金鑰加密常用的演算法DES、Triple DES或IDEA加密,MD5。對稱金鑰加密通訊雙方持有同樣的金鑰對密文進行解密。
公共金鑰加密在報文和網路方面的應用已成為流行。RSA實際上用於公共金鑰加密,它是當前所能得到的最強的公共金鑰演算法。公共金鑰包含兩個同屬於一方的金鑰:一個是公共金鑰,它被所有人所共用;另一個是私有金鑰,歸個人秘密中存。與對稱金鑰加密不同,公共金鑰加密對加密與解密使用兩把金鑰。一把是秘密的,這是私有金鑰,用來對密文解密。密文字身由公共金鑰產生,公共金鑰分發給要傳送加密資訊給你的人。其他人如何得到你的公共金鑰?很容易,發布它即可。你—私有金鑰的所有者,是惟一能對資訊進行解密的人。
數位簽章常用公共金鑰加密來產生簽名,如 RSA和DSA。用公共金鑰產生數位簽章與資訊加密的工作相反。資訊通過hash函數傳送。hash處理後的資訊用私有金鑰加密。一旦資料用私有金鑰加密,任何持有公共金鑰的人都能檢驗,它是用私有金鑰產生的,這樣,資料就被驗證了。因此,任何持有公共金鑰的人都可以進行檢驗。這裡的hash函數用於產生數位簽章。Hash函數(雜湊函數)是一個提取資訊和產生一個固定長度的資訊個性特徵的數學函數。無論要進行hash方法的資訊有多大,輸出的長度都一樣。簡言之,就是將hash處理後的資訊用私鑰加密,其它人用公鑰解密恢復成功(恢復成的應該是hash處理的結果?)表示加密的人就是你也就是數位簽章的驗證就成功了。
[舉例]
**對稱加密和解密
這裡,先簡單介紹使用gpg進行對稱加密和解密,後面重點介紹公鑰加密和數位驗證。
*對稱加密myfile:
#gpg -c myfile
這樣,會提示你輸入兩次密碼,然後生成myfile的加密檔案myfile.gpg,注意不能對目錄加密,可以用-o選項指定輸出檔名稱。
*解密對稱加密的檔案:
#gpg -o mydecrypt -d myfile.gpg
這樣,會提示你輸入解密密碼,輸入之後,將會解密相應的檔案,通過-o指定生成的解密檔案,-d指定被解密的檔案。
**
**公鑰加密相關
*生成鑰匙對:
[root@lv-k ~]# gpg --gen-key
輸入之後,輸出和互動提示如下所示:
#####################以下為輸出以及互動##############################
gpg (GnuPG) 1.4.5; Copyright (C) 2006 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.
gpg: 已建立目錄‘/root/.gnupg’
gpg: 新的組態檔‘/root/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/root/.gnupg/gpg.conf’裡的選項於此次執行期間未被使用
gpg: 鑰匙環‘/root/.gnupg/secring.gpg’已建立
gpg: 鑰匙環‘/root/.gnupg/pubring.gpg’已建立
請擇您要使用的金鑰種類:
(1) DSA 和 ElGamal (預設)
(2) DSA (僅用於簽名)
(5) RSA (僅用於簽名)
您的擇?[Enter] <====輸入
DSA 金鑰對會有 1024 位。
ELG-E 金鑰長度應在 1024 位與 4096 位之間。
您想要用多大的金鑰尺寸?(2048)[Enter] <====輸入
您所要求的金鑰尺寸是 2048 位
請設定這把金鑰的效期限。
0 = 金鑰永不過期
<n> = 金鑰在 n 天後過期
<n>w = 金鑰在 n 周後過期
<n>m = 金鑰在 n 月後過期
<n>y = 金鑰在 n 年後過期
金鑰的效期限是?(0)[Enter]
金鑰永遠不會過期
以上正確嗎?(y/n)y <====輸入
您需要一個使用者標識來辨識您的金鑰;本軟體會用真實姓名、注釋和電子郵件地址組合
成使用者標識,如下所示:
“Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>”
真實姓名:linuxidc <====輸入
電子郵件地址:quiet_heart000@linuxidc.com <====輸入
注釋:test <====輸入
您定了這個使用者標識:
“linuxidc (test) <quiet_heart000@linuxidc.com>”
更改姓名(N)、注釋(C)、電子郵件地址(E)或確定(O)/退出(Q)?o <====輸入
您需要一個密碼來保護您的私鑰。
請輸入密碼:<====輸入
請再輸入一次密碼:<====輸入
我們需要生成大量的隨機位元組。這個時候您可以多做些瑣事(像是敲打鍵盤、移動
滑鼠、讀寫硬碟之類的),這會讓亂數字發生器有更好的機會獲得足夠的熵數。
++++++++++.+++++++++++++++.++++++++++.++++++++++++++++++++++++++++++.++++++++++++++++++++.+++++++++++++++++++++++++.++++++++++++++++++++>+++++.+++++........................................+++++
我們需要生成大量的隨機位元組。這個時候您可以多做些瑣事(像是敲打鍵盤、移動
滑鼠、讀寫硬碟之類的),這會讓亂數字發生器有更好的機會獲得足夠的熵數。
+++++++++++++++.+++++++++++++++.++++++++++++++++++++.+++++++++++++++++++++++++..++++++++++.+++++.+++++..++++++++++.++++++++++.++++++++++..+++++++++++++++..+++++>++++++++++>+++++...........................................................................+++++^^^
gpg: /root/.gnupg/trustdb.gpg:建立了信任度資料庫
gpg: 金鑰 DDBA2DEA 被標記為絕對信任
公鑰和私鑰已經生成並經簽名。
gpg: 正在檢查信任度資料庫
gpg: 需要 3 份勉強信任和 1 份完全信任,PGP 信任模型
gpg: 深度:0 有效性: 1 已簽名: 0 信任度:0-,0q,0n,0m,0f,1u
pub 1024D/DDBA2DEA 2011-06-14
金鑰指紋 = 790A 0F2D 6826 61F3 A749 0724 DBB2 C0A5 DDBA 2DEA
uid linuxidc (test) <quiet_heart000@linuxidc.com>
sub 2048g/2BBE2C91 2011-06-14
#####################以上為輸出以及互動##############################
這裡,首先要一個鑰匙對才能公鑰加密,這裡根據系統情況不同,可能內容為英文。需要使用者互動輸入的地方,都通過"<====輸入"這個標記指出來了。若對輸入資訊有所改動 ,可把 ~/.gnupg 目錄下除 options 以外的檔案刪除 ,再執行 gpg --gen-key 命令 ,或者使用 gpg 的 edit 選項 . 鑰匙對放在 ~/.gnupg 目錄下 .
*檢視已有的鑰匙:
[root@lv-k .gnupg]# gpg --list-keys
輸入之後,輸出如下:
#####################以下為輸出以及互動##############################
/root/.gnupg/pubring.gpg
------------------------
pub 1024D/DDBA2DEA 2011-06-14
uid linuxidc (test) <quiet_heart000@linuxidc.com>
sub 2048g/2BBE2C91 2011-06-14
#####################以上為輸出以及互動##############################
這裡,
pub(公匙)--- public key , ID : DDBA2DEA
sub(私匙)--- secret key or private key , ID : 2BBE2C91
假如沒使用root進行操作,可能會輸出如下資訊:"gpg: Warning: using insecure memory!" 警告沒有鎖定記憶體頁 ,一般是連線網上操作有關安全方面的問題 ,沒有事情的 ,可以作這樣的改動 "# chmod 4755 /usr/bin/gpg"。
*使用gpg金鑰進行加密和解密檔案:
下面我們通過一個具體的例子,演示公鑰加密,私鑰解密的過程。這裡加/解密方式採用RSA演算法,公匙與私匙是互補,理論上是不可破解,也沒有人嘗試成功過。假設我們已經使用前面的方法生成了金鑰對。
1,首先檢視待加密的檔案如下:
[root@lv-k gpg_test]# ls
mygpgtest
[root@lv-k gpg_test]# cat mygpgtest
#####################以下為輸出##############################
hello!
welcome come to here
today is 2011-06-14
#####################以上為輸出##############################
2,公鑰加密過程
1)使用如下命令加密檔案:
[root@lv-k gpg_test]# gpg -ea -r linuxidc mygpgtest
這裡,使用的金鑰就是前面建立的linuxidc,我們可以使用"gpg --list-keys"來檢視我們可以選擇用來加密的公鑰。這裡選項"-e"實際就是"--encrypt"表示加密資料;"-a"表示建立ASCII的輸出(可以不用這個選項,這樣生成的檔案就不是ASCII的內容了,並且檔案字尾是*.gpg);"-r"指定加密的使用者id名稱。
2)檢視加密之後的檔案:
[root@lv-k gpg_test]# ls
mygpgtest mygpgtest.asc
[root@lv-k gpg_test]# cat mygpgtest.asc
#####################以下為輸出##############################
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.5 (GNU/Linux)
hQIOA6PEEmMrviyREAf9HCZ5xIlSppneZ6i7Hquxb7xUjn1q0W5ccVek6x0DxSbH
q55ugy6CmCc/excLC/zblf9qHsNDcZvMV3jjD95gu78NR1lsyDtpG9r5bX/MuPii
KxYc3oOvGNmDUO9F/g3ul9VCu/rsIkQvwxZHaEGXR3G6XH/tmhKZcjNNIxb1qQiq
xE7O0NCXEhp8FpOPozY1MzZ7wv4rXLujTrGl13sNqjSVLgp1mcUzuMRCtenttXpg
q1sXDJ7FXkxQy7UvO8eMmMzPqkFm7KfLYZjkXrYo5ZhG+nfXqs3/HSuJ1fVe8m4/
+PVW1Uw2QtkfJiZVxOj60cV0lcK/P1bJHah5xEtbnQf/fI1jitFIuoJjTkoCNbeO
Sq6Kr0+LjJMaXmlCeA6kZ7RXLHak/O5aR0BpXJCPUBIEFVnu6dftolO6JPcqMbW+
5oI4NHaJunHz0eTgOuFBsV3EVjYmH7rabV832ikY0MARWRh/b/osUv+Ht9BlUHaY
pLoGPXkLeSsCDo714Z/dufLGUEFcNxx/QAmhWGiKH4MacMvKBVE+2uzcMAWqnyEW
Oaz0bI893YUtbQbti2rdQgVdHHXjWCmQ2YnMWv4pSBAwK7rPOrtehmdsmiOuit6x
FHvHPldc1o38u0Jg4d0LjCv/rRBdQwasJzr46dwJBOCv5rQ9Rkuul+6rhFQGns1G
jtJxAZIWwu8ZqD572a3jYVbIl/qBAW+dM3Fnt9NRqFUJVtdrd/AIAFm/OIwlVACF
Cbmjyxqliv/WYxNdJFL+IsHMX2Ury9TT2LMaDXxez6LRPMxJxRZSFhuyoYAqDYKT
NI1LSODDRZ1WYlCOkPXlrSfzyig=
=IN1g
-----END PGP MESSAGE-----
#####################以上為輸出##############################
這裡,??們可以看出,加密之後生成mygpgtest.asc檔案,其中的內容已經經過加密了。
3,公鑰解密過程
1)使用如下命令進行解密:
[root@lv-k gpg_test]# gpg -o mydecrypt --decrypt mygpgtest.asc
#####################以下為輸出##############################
您需要輸入密碼,才能解開這個使用者的私鑰:“linuxidc (test) <quiet_heart000@linuxidc.com>”
2048 位的 ELG-E 金鑰,鑰匙號 2BBE2C91,建立於 2011-06-14 (主鑰匙號 DDBA2DEA)
請輸入密碼:<=====輸入密碼
您需要輸入密碼,才能解開這個使用者的私鑰:“linuxidc (test) <quiet_heart000@linuxidc.com>”
2048 位的 ELG-E 金鑰,鑰匙號 2BBE2C91,建立於 2011-06-14 (主鑰匙號 DDBA2DEA)
gpg: 由 2048 位的 ELG-E 金鑰加密,鑰匙號為 2BBE2C91、生成於 2011-06-14
“linuxidc (test) <quiet_heart000@linuxidc.com>”
#####################以上為輸出##############################
這裡,使用-o指定輸出檔案,使用--decrypt指定待解密檔案。我們可以看出,解密的時候,我們需要輸入密碼,才能解密成功,而密碼就是之前我們建立鑰匙對時候輸入的那個密碼。注意,這裡因為生成金鑰,加密,解密都在一個機器上進行,所以可以成功解密,如果把加密之後的檔案拿到別的機器上面,就無法解密了,如果想要在其它機器上面解密,我們需要把本地私鑰匯出,傳送給待解密的機器,然後在解密的機器上把剛剛匯出的私鑰匯入,就行了.後面會說到如何解密。如果想要別人和你使用這個加密的方法通訊,需要把你的公鑰匯出,發給別人,然後他們把這個公鑰匯入,在使用前面加密的方法用這個公鑰加密資料並且傳送給你,你再用你自己的私鑰解密,得到解密後的原始資料,這也是公鑰加密通訊使用的常用方法。後面會詳細講述如何匯出原生的公鑰和私鑰,以及如何在其它機器上面匯入之前匯出的金鑰。
2)檢視解密生成的檔案
[root@lv-k gpg_test]# ls
mydecrypt mygpgtest mygpgtest.asc
[root@lv-k gpg_test]# cat mydecrypt
hello!
welcome come to here
today is 2011-06-14
[root@lv-k gpg_test]#
*匯出(備份)公鑰:
[root@lv-k gpg_test]# gpg -o mypubkey --export DDBA2DEA
這裡使用格式“ gpg -o keyfilename --export KeyID”,使用-o指定生成的匯出檔名稱,使用--export指定想要匯出的金鑰ID, 如果沒有KeyID則是備份所有的公鑰,如果加上-a的引數則輸出文字格式的資訊,否則輸出的是二進位制格式資訊。匯出的公鑰,可以發布,其它人只要匯入你發布的公鑰,就能用這個公鑰加密資料並且傳送給你,你再用你自己的私鑰解密,得到解密後的原始資料,這也是公鑰加密通訊使用的常用方法。
*以文字方式匯出公鑰:
[root@lv-k gpg_test]# gpg -a -o mypubkeyascii --export DDBA2DEA
匯出的檔案mypubkeyascii可以檢視其內容,這裡內容如下:
mypubkeyascii
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (GNU/Linux)
mQGiBE320yYRBACUvTPS5Jxv2xamVudHL//PBhJESyUzHQcGtb/CPzyAkOaNVQ7U
V0DEjd+m61SAv7wwWItn9D3fOjZ09EdGY/9mHeVEOGLPdB7Seo28UyRtr6vHCrrl
1qHBS6I6jQ/iATDg+07O9hgDp5eCebI4aNyRGeRARx0t5vKguIF+FEzmIwCghWM8
toTSnP/bC1VePRXEZ9Uw+OkD/0cYIH2AZIKdbtjQ9J6F7AtgiPqRnjiTL7mOj6Xa
ncjThX9XGH5DUMoqR6Gaq9/eDtlefMwHCweiqdm1TNnvU/b7qDpw1TjxVLkHHVZk
8F4f8LsSkJNuLiqOwXwOJkuevQZ+Y3quFl3nsOtURSx5nuKkekp4toOWSe3fEFWd
BQN5A/9Cxj55KWXzzYD8v+z0xiC3HvIWgUp0GTfcjSOfdhs9xtKe33LuGy7hoEt0
TfQpTnz8Il1cbHHYvtmAaaGrwBnBxoYrLrH5WrHx1n34ZdOszYK5p/yKW+g+0eLt
dv/f4uXEhfPInOk21X5PRGFcyNo3fMVGIHo1S8oiEX4fuEvwWrQqcXVpZXRoZWFy
dCAodGVzdCkgPHF1aWV0X2hlYXJ0MDAwQDEyNi5jb20+iGAEExECACAFAk320yYC
GwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRDbssCl3bot6o2bAJ918FqgoPMs
4eIQOWBDVs5sS9hSbgCfTbOggNKPJtCPJq4zr/jaPctE7Qi5Ag0ETfbTLBAIAKUn
cibGAlBwN5nW2NCN52oXWAsIXTDnUP7FmKi8K6B2PO7Bex2e95f44iOyBtLo73KF
vH64Wbl7wGQ0IOnn/AQbivoa9oaBi4+2mf9PbGMvo2Nrii8xcvBfvrh8Q7XsRoOH
obKv3inOGvxb0fkdUn1WkyYGtWCIl5aK8b1jUACuB6Sbdxtkeg3DrQp3BZjxgkVa
etgPnj70AtJfTFnn5WSIkBGJq2pbs7E9wNQC7NvIe62DHJj1nsPJg/d9ZdFWnQiW
HO6ik3bjRBLR4Iy82cjVOI2JmiaKVlPktphZ9id5F/a3BlcaOF5wSovE4ssHdZGN
cvk4QPLr0X9G43ZBTmcAAwUH/07bUjqWu61uIq5XryRK99pTNLlwd1AdsB/HTgFp
UJxSZ7MRbtozvdBPVKFehAzZ13YSjiES0f1L3oGBsEeEhCPyHY+N80R+zuLMeZTx
6kFNLlm/PEFNrnFpqGPEJZ/1HRyt+hTsfFCFM4nYzhul7s10XKGiHHN1wUMc/ixt
+tmk/dD6IA/QnhI1WUMzF2XgJ3Ql4ZmLCSNV7CXPEt044J8ZnuTT+HwO4AX7bfSt
PTpyi7LMD/BVfOikczvf38Bz/IUnXi8x1pjBglZBE7jvkqc+nqe7BYQ/ga27c374
zQDIAmAXcZ0TR35T+ZiyavQHKiRSuAG0q3T2oO74yvb8AgmISQQYEQIACQUCTfbT
LAIbDAAKCRDbssCl3bot6uJ8AJ4h8ShsY6DLjmJjitl+8iHnh5tZQACeOqHsQXjr
dei6gV8vMB87xwbWe5E=
=ynen
-----END PGP PUBLIC KEY BLOCK-----
一般,許多地方網上通過這個文字方式發布公鑰。
*匯出(備份)私鑰:
[root@lv-k gpg_test]# gpg -o mysubkey --export-secret-keys 2BBE2C91
如果沒KeyID則是備份所有的私鑰,-o表示輸出到檔案mysubkey中,如果加上-a的引數則輸出文字格式的資訊,否則輸出的是二進位制格式資訊。
*匯入私鑰:
gpg --import mysubkey
輸入之後,輸出如下:
#####################以下為輸出##############################
gpg: 金鑰 DDBA2DEA:私鑰已匯入
gpg: /home/lv-k/.gnupg/trustdb.gpg:建立了信任度資料庫
gpg: 金鑰 DDBA2DEA:公鑰“linuxidc (test) <quiet_heart000@linuxidc.com>”已匯入
gpg: 合計被處理的數量:1
gpg: 已匯入:1
gpg: 讀取的私鑰:1
gpg: 匯入的私鑰:1
#####################以上為輸出##############################
這裡,如果匯入公鑰命令是一樣的,不過指定的檔案應該是"mypubkey"了。這個命令是另外一台機器上執行的,匯入私鑰之後那個機器就可以使用這個私鑰解密資料了。一般來說我們都是發布公鑰讓人匯入,而不是匯入私鑰匙。
實踐發現,
*匯入私鑰之後,另外一台機器直接可以用對應的公鑰加密,而不用匯入公鑰;這時候另外的那個機器也可以匯出公鑰,不過有一行內容和原始機器公共鑰匙內容不一樣,但是用這個公鑰加密的資料也可以用原始的機器解密出來的。
*匯入公鑰之後,另外一台主機無法匯出私鑰,可以匯出公鑰,匯出內容和原來一樣。使用公鑰加密之後,無法解密(因為沒有私鑰)。
無論匯入的是公鑰還是私鑰,匯入之後可以通過gpg --list-keys來檢視匯入的結果,而且從結果可以看到沒有匯入的那個配對(或者私鑰或者公鑰)的KeyID。
**
**簽名與驗證
簽名作用是驗證明文、加密檔案、金鑰是來自正確的傳送者的,沒經過其它人的修改。簽名使用的也是金鑰對,與加密操作相同。只是在結果上,點不同。它只是在檔案最後添上加密的驗證資訊(簽名)。一旦檔案有所改變,簽名驗證就會出錯。比如我們Ubuntu安裝軟體時,首先要用事先儲存的金鑰(大多從hkp://keyserver.ubuntu.com獲得)驗證軟體源的簽名,以保證我們連的是正確的安全的下載伺服器。
*檢視之前的目錄和檔案如下:
[root@lv-k gpgtest]# pwd
/root/tmpTrans/gpgtest
[root@lv-k gpgtest]# ls
mydecrypt
[root@lv-k gpgtest]# cat mydecrypt
hello!
welcome come to here
today is 2011-06-14
*生成簽名,過程如下:
[root@lv-k gpgtest]# gpg -o mydecrypt.sig -s mydecrypt
#####################以下為輸出##############################
您需要輸入密碼,才能解開這個使用者的私鑰:“linuxidc (test) <quiet_heart000@linuxidc.com>”
1024 位的 DSA 金鑰,鑰匙號 DDBA2DEA,建立於 2011-06-14
請輸入密碼: <====這裡輸入你的密碼
#####################以上為輸出##############################
[root@lv-k gpgtest]# ls
mydecrypt mydecrypt.sig
這裡可以看到生成了mydecrypt.sig檔案(其內容是亂碼),其中,mydecrypt是原檔案,mydecrypt.sig包含了原檔案和簽名,是二進位制的,這個命令會要求你輸入私鑰密碼。
*產生文字格式的簽名
[root@lv-k gpgtest]# gpg -o mydecrypt.sig --clearsign mydecrypt
#####################以下為輸出##############################
您需要輸入密碼,才能解開這個使用者的私鑰:“linuxidc (test) <quiet_heart000@linuxidc.com>”
1024 位的 DSA 金鑰,鑰匙號 DDBA2DEA,建立於 2011-06-14
請輸入密碼: <====這裡輸入你的密碼
#####################以上為輸出##############################
[root@lv-k gpgtest]# cat mydecrypt.sig
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
hello!
welcome come to here
today is 2011-06-14
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (GNU/Linux)
iD8DBQFOCFkQ27LApd26LeoRAvC+AJ9xp1HLT6zup7AZtan5qpQrpQyn1QCfV0Zy
HG+z+/hxfrbs9pzo6ODYDG4=
=o1+k
-----END PGP SIGNATURE-----
這裡,通過以上可知產生的mydecrypt.sig同樣包含原檔案和簽名,檔案是文字格式的,原檔案不變。解開和驗證簽名的方法
*驗證簽名:
[root@lv-k tmp]# gpg --verify mydecrypt.sig
gpg: 於 2011年06月27日 星期一 17時58分39秒 CST 建立的簽名,使用 DSA,鑰匙號 DDBA2DEA
gpg: 完好的簽名,來自於“linuxidc (test) <quiet_heart000@linuxidc.com>”
這裡,在驗證之前,必須匯入檔案作者的公鑰,對於分離式簽名最後還要加上原檔案引數(後面會講到)。
*將簽名檔案恢復
[root@lv-k tmp]# gpg -o my --decrypt mydecrypt.sig
gpg: 於 2011年06月27日 星期一 17時58分39秒 CST 建立的簽名,使用 DSA,鑰匙號 DDBA2DEA
gpg: 完好的簽名,來自於“linuxidc (test) <quiet_heart000@linuxidc.com>”
[root@lv-k tmp]# cat my
hello!
welcome come to here
today is 2011-06-14
這裡,不需要輸入密碼,生成的檔案my和原來的檔名稱一樣。
*簽名並加密:
[root@lv-k gpgtest]# gpg -o mydecrypt.sig -ser linuxidc mydecrypt
#####################以下為輸出##############################
您需要輸入密碼,才能解開這個使用者的私鑰:“linuxidc (test) <quiet_heart000@linuxidc.com>”
1024 位的 DSA 金鑰,鑰匙號 DDBA2DEA,建立於 2011-06-14
請輸入密碼: <====這裡輸入你的密碼
#####################以上為輸出##############################
這裡,無法直接通過"gpg --verify mydecrypt.sig"對檔案mydecrypt.sig進行驗證。而是在解密恢復檔案的時候直接驗證了,後面會說到。
*恢復加密的簽名檔案:
[root@lv-k gpgtest]# gpg -o my --decrypt mydecrypt.sig
#####################以下為輸出##############################
您需要輸入密碼,才能解開這個使用者的私鑰:“linuxidc (test) <quiet_heart000@linuxidc.com>”
2048 位的 ELG-E 金鑰,鑰匙號 2BBE2C91,建立於 2011-06-14 (主鑰匙號 DDBA2DEA)
請輸入密碼: <====這裡輸入你的密碼,輸入之後提示自動消失
gpg: 由 2048 位的 ELG-E 金鑰加密,鑰匙號為 2BBE2C91、生成於 2011-06-14
“linuxidc (test) <quiet_heart000@linuxidc.com>”
gpg: 於 2011年06月27日 星期一 18時11分27秒 CST 建立的簽名,使用 DSA,鑰匙號 DDBA2DEA
gpg: 完好的簽名,來自於“linuxidc (test) <quiet_heart000@linuxidc.com>”
#####################以上為輸出##############################
[root@lv-k gpgtest]# cat my
hello!
welcome come to here
today is 2011-06-14
這裡,解密之後進行驗證,而不是直接驗證,因為不能通過"gpg --verify mydecrypt.sig"直接驗證加密的簽名檔案。
*分離式簽名:
[root@lv-k gpgtest]# gpg -o mydecrypt.sig -ab mydecrypt
#####################以下為輸出##############################
您需要輸入密碼,才能解開這個使用者的私鑰:“linuxidc (test) <quiet_heart000@linuxidc.com>”
1024 位的 DSA 金鑰,鑰匙號 DDBA2DEA,建立於 2011-06-14
請輸入密碼: <====這裡輸入你的密碼,輸入之後提示自動消失
#####################以上為輸出##############################
[root@lv-k gpgtest]# cat mydecrypt.sig
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (GNU/Linux)
iD8DBQBOCZDP27LApd26LeoRArTQAJ9q13/4jVvJbg5f83lNnoC1Gq111wCfWRm8
1awHtUl2sN9SWNt0qNoFQHw=
=ySnh
-----END PGP SIGNATURE-----
這裡,mydecrypt.sig僅包含簽名,分離式簽名的意思是原檔案和簽名是分開的。b選項表示分離式簽名detach-sign.
*對分離的簽名進行驗證:
[root@lv-k gpgtest]# gpg --verify mydecrypt.sig mydecrypt
gpg: 於 2011年06月28日 星期二 16時29分03秒 CST 建立的簽名,使用 DSA,鑰匙號 DDBA2DEA
gpg: 完好的簽名,來自於“linuxidc (test) <quiet_heart000@linuxidc.com>”
這裡,和前面的驗證方式不同,因為簽名和資料檔案是分離的,所以驗證時,指明簽名檔案"mydecrypt.sig"的同時也要指明相應的資料檔案"mydecrypt"。因為簽名是分離的,所以不需要使用"--decrypt"進行恢復,如果恢復那麼也僅僅是列印出簽名的資訊(這裡"恢復"的時候不用指明資料檔案,會提醒你指出資料檔案的位置)。
**
[其他]
**編輯公鑰
可以對公鑰進行編輯,這裡沒具體實踐,大致過程如下:
#gpg --edit-key someone
someone是別人的使用者id,輸入之後,出現命令提示字元號。
>fpr <===輸入這個表示檢視someone的指紋,核對資訊真實性,這樣之後簽署。
>sign <===輸入這個簽署公鑰,這樣以後再使用它加密的時候不會產生警告了。
>check <===輸入這個,檢查someone已有的鑰匙的簽名。
>quit <===輸入這個,退出互動,可能會提示你儲存之前的設定。
**
openSUSE下玩轉GPG圖文詳解 http://www.linuxidc.com/Linux/2015-01/112425.htm
Linux下gpg的簡單應用 http://www.linuxidc.com/Linux/2013-06/85291.htm
GPG作者差點破產,危機已過 http://www.linuxidc.com/Linux/2015-02/113004.htm
相關文章