GNU Privacy Guard加密指南
GPG是GNU Privacy Guard的縮寫。它是一種基於密鑰的加密方式,使用了一對密鑰對消息進行加密和解密,來保證消息的安全傳輸。一開始,用戶通過數字證書認證軟體生成一對公鑰和私鑰。任何其他想給該用戶發送加密消息的用戶,需要先從證書機構的公共目錄獲取接收者的公鑰,然後用公鑰加密信息,再發送給接收者。當接收者收到加密消息後,他可以用自己的私鑰來解密,而私鑰是不應該被其他人拿到的。
GPG 使用公鑰和私鑰
公鑰是你共享出來的一個公開密鑰,它可以被發給任何你希望收到加密信息的人,他們可以使用你的公鑰來加密信息。公鑰本身不能用來解密自己加密過的信息,只有你自己——那個擁有對應私鑰的人——能夠解密。私鑰是你自己的私人密碼,可以用來解密用你的公鑰加密過的信息。如果你把私鑰泄漏給別人,那麼他將可以解密並查看那些使用你的公鑰加密過的信息。
在終端里使用GPG
如今大多數的Linux發行版都默認包含了GPG。想檢查一下的話,打開終端並輸入:
$ gpg --version
然後你應該看到版本。如果是這樣的話,你不需要做其他事情了。否則,你需要從你的發行版軟體倉庫里安裝GPG。
生成密鑰
想使用GPG來加密你的通訊,你需要先創建一對密碼。首先,打開終端並運行下面的命令:
$ gpg --gen-key
然後會有如下提示:
Please select what kind of key you want:
(1) DSA and Elgamal (default)
(2) DSA (sign only)
(5) RSA (sign only)
Your selection?
這裡要選擇數字1,因為它可以用來加密和解密,第二和第三個選項只能讓你給信息簽名。按下數字1,然後按回車。
然後會有如下提示:
1 DSA key-pair will have 1024 bits.
2 ELG-E keys may be between 1024 and 4096 bits long.
3 What key-size do you want? (2048)
這裡最好輸入「2048」,就像GPG推薦的那樣。如果你不希望你的密鑰過期的話(在後面的提示里,選擇0)。如果有提示說信息是否正確的話,回答Yes,然後輸入你的真實名字,email地址,以及一個說明(可選的)。如果一切順利,按下「哦」(對應著OK)然後回車。
在這之後,會提示你輸入一個密碼,密碼會要求重複輸入一次。通常,請使用一個難於破解的加強密碼,而不推薦用名字/地址/生日/單詞等等來做密碼。
在輸好密碼之後,請按照終端里的提示信息做:我們需要生成大量的隨機數,建議您在生成素數的過程中做一下這些動作(敲擊鍵盤,移動滑鼠,讀寫硬碟),這樣會讓隨機數生成器有機會獲取更大的熵。
生成好密鑰以後,你應該會看到一條類似的提示信息:gpg: key 083C39A4 marked as ultimately trusted. public and secret key created and signed.
密鑰伺服器
密鑰伺服器是用來發布你的公鑰,並將其分發到其他人的伺服器,這樣其他用戶可以輕鬆的根據你資料庫中的名字(或者e-mail地址)來獲取你的公鑰,並給你發送加密信息。這樣可以避免把公鑰直接拷貝給你的朋友的方式,而讓其他人直接通過在線資料庫來找到你。
上傳你的公鑰到密鑰伺服器:
$ gpg --send-keys --keyserver [keyservers.address.com] [yourpublicid]
你需要把keyservers.address.com替換成你選擇的伺服器(或者用mit.edu,它會跟其他伺服器做同步),還需要把命令行中的yourpublicid替換成你的。最終執行的命令看上去會大概是下面這樣子:
$ gpg --send-keys --keyserver hkp://pgp.mit.edu 083C39A4
加密文件
如果你想給你的朋友發送一個用他的公鑰加密過的文件,可以用下面的命令:
$ gpg -o encrypted_file.gpg --encrypt -r key-id original.file
命令解釋:
-o encrypted_file.gpg = 指定輸出文件
--encrypt = 做加密
-r = 接收者的KEY-ID,比如這裡就填你朋友的KEY-ID。
original.file = 指定要加密的文件
解密文件
如果有人給你發送了一個用你的公鑰加密過的文件,你可以按下面的方式解密:
$ gpg --decrypt filename.gpg
對稱加密
你還可以使用GPG做對稱加密,來給文件加上一個密碼。這種不同於公鑰加密的方式,在對稱加密中,同一個密鑰用於加密和解密。這種方式在處理信息的時候會簡單點,但是保密性沒那麼好,因為需要把密碼告訴接收者。下面是用密碼加密文件的命令:
$ gpg -c filename.txt
解密這個文件,用下面的命令:
$ gpg filename.txt
然後,會提示你輸入密碼,之後就開始解密文件。
文檔數字簽名
數字簽名非常類似於你在信件或者重要文件的末尾簽上自己的名字,它表示這份文件確實是由你發出來的。通過數字簽名,它會計算整個文件內容的SHA1哈希值,然後把這個值附加到簽名末尾。如果文件內容被篡改,簽名的校驗就會失敗,可以用來鑒定偽造。如果用戶自己在簽名後編輯了這份文件,簽名校驗也會失敗,因為此時文件的SHA1哈希值已經和之前簽名時不同了。
對一份文件做數字簽名,運行下面的命令:
$ gpg --clearsign filename.txt
生成銷毀密鑰
銷毀密鑰可以在你的私鑰泄漏或者懷疑泄漏的時候,吊銷你的公鑰。使用下面的命令創建一個銷毀密鑰:
$ gpg --output revoke.asc --gen-revoke keyid
把銷毀密鑰保存到一個安全的地方,任何人都可以用它讓你的密鑰失效。(你可以用對稱加密方式來加密你的銷毀密鑰文件。)
在終端里使用GPG的一些技巧
通過下面的命令可以查看你已經導入的GPG密鑰:
$ gpg --list-keys
之後應該會列出來用你e-mail註冊的密鑰列表(因為這裡只有一個密鑰,它只列出了你自己的密鑰),然後,你可以看到自己的KEY-ID,就可以通過上文介紹的命令提交給密鑰伺服器。
顯示你的密鑰鏈中的私鑰和公鑰。
$ gpg --list-public-keys # 會列出來公鑰
$ gpg --list-secret-keys # 會列出來私鑰
導入密鑰
$ gpg --import KEYFILE
命令中的KEYFILE應該是需要導入的公鑰文件名。(如果文件不在主目錄中,使用cd命令切換到該文件的目錄下,再執行上面的命令)
導出公鑰到文件
用下面的命令可以將你的公鑰導出為ASCII格式:
$ gpg --export -a > publickey.asc
關於Richard White
Richard是一位技術愛好者,在不止一個場合他被稱為極客。他還是三本書的作者,最近的一本《數字時代的隱私》即將在2014年5月份出版精裝本。他還是數字時代網站的主編和驅動者,數字時代的目的是提供資源和工具來實現和維護匿名,安全和隱私。Ricard經常寫一些和隱私相關的文章,最近忙著寫《CLI藝術》,收集開源的命令行軟體。關於GNU Privacy Guard的更多信息以及如何使用GPG軟體的圖形界面工具,你可以訪問White的數字時代網站。
via: http://distrowatch.com/weekly.php?issue=20140407
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive