加密工具GPG入門教程

jopen 11年前發布 | 50K 次閱讀 GPG 安全相關

        前兩篇文章,我介紹了 RSA 算法

        今天,就接著來看,現實中怎么使用這個算法,對信息加密和解密。這要用到 GnuPG 軟件(簡稱 GPG),它是目前最流行、最好用的加密工具之一。

        一、什么是 GPG

加密工具GPG入門教程

        要了解什么是 GPG,就要先了解 PGP

        1991 年,程序員 Phil Zimmermann 為了避開政府監視,開發了加密軟件 PGP。這個軟件非常好用,迅速流傳開來,成了許多程序員的必備工具。但是,它是商業軟件,不能自由使用。所以,自由軟件基金會決定,開發一個 PGP 的替代品,取名為 GnuPG。這就是 GPG 的由來。

        GPG 有許多用途,本文主要介紹文件加密。至于郵件的加密,不同的郵件客戶端有不同的設置,請參考 Ubuntu 網站的介紹

        本文的使用環境為 Linux 命令行。如果掌握了命令行,WindowsMac OS 客戶端,就非常容易掌握。GPG 并不難學,學會了它,從此就能輕松傳遞加密信息。建議讀者一步步跟著教程做,對每條命令都自行測試。

加密工具GPG入門教程

        二、安裝

        GPG 有兩種安裝方式。可以下載源碼,自己編譯安裝。

./configure

make

make install

</blockquote>

        也可以安裝編譯好的二進制包。

# Debian / Ubuntu 環境

sudo apt-get install gnupg

# Fedora 環境

yum install gnupg

</blockquote>

        安裝完成后,鍵入下面的命令:

gpg --help

</blockquote>

        如果屏幕顯示 GPG 的幫助,就表示安裝成功。

        三、生成密鑰

        安裝成功后,使用 gen-ken 參數生成自己的密鑰。

gpg --gen-key

</blockquote>

        回車以后,會跳出一大段文字:

gpg (GnuPG) 1.4.12; Copyright (C) 2012 Free Software Foundation, Inc.

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

請選擇您要使用的密鑰種類:

(1) RSA and RSA (default)

(2) DSA and Elgamal

(3) DSA (僅用于簽名)

(4) RSA (僅用于簽名)

您的選擇?

</blockquote>

        第一段是版權聲明,然后讓用戶自己選擇加密算法。默認選擇第一個選項,表示加密和簽名都使用 RSA 算法。

        然后,系統就會問你密鑰的長度。

RSA 密鑰長度應在 1024 位與 4096 位之間。

您想要用多大的密鑰尺寸?(2048)

</blockquote>

        密鑰越長越安全,默認是 2048 位。

        接著,設定密鑰的有效期。

請設定這把密鑰的有效期限。

0 = 密鑰永不過期

<n> = 密鑰在 n 天后過期

<n>w = 密鑰在 n 周后過期

<n>m = 密鑰在 n 月后過期

<n>y = 密鑰在 n 年后過期

密鑰的有效期限是?(0)

</blockquote>

        如果密鑰只是個人使用,并且你很確定可以有效保管私鑰,建議選擇第一個選項,即永不過期。回答完上面三個問題以后,系統讓你確認。

以上正確嗎?(y/n)

</blockquote>

        輸入y,系統就要求你提供個人信息。

您需要一個用戶標識來辨識您的密鑰;本軟件會用真實姓名、注釋和電子郵件地址組合成用戶標識,如下所示:

"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

真實姓名:

電子郵件地址:

注釋:

</blockquote>

        "真實姓名"填入你姓名的英文寫法,"電子郵件地址"填入你的郵件地址,"注釋"這一欄可以空著。

        然后,你的"用戶 ID"生成了。

您選定了這個用戶標識:

"Ruan YiFeng <yifeng.ruan@gmail.com>"

</blockquote>

        我的"真實姓名"是 Ruan YiFeng,"電子郵件地址"是 yifeng.ruan@gmail.com,所以我的"用戶 ID"就是"Ruan YiFeng <yifeng.ruan@gmail.com>"。系統會讓你最后確認一次。

更改姓名(N)、注釋(C)、電子郵件地址(E)或確定(O)/退出(Q)?

</blockquote>

        輸入O表示"確定"。

        接著,系統會讓你設定一個私鑰的密碼。這是為了防止誤操作,或者系統被侵入時有人擅自動用私鑰。

您需要一個密碼來保護您的私鑰:

</blockquote>

        然后,系統就開始生成密鑰了,這時會要求你做一些隨機的舉動,以生成一個隨機數。

我們需要生成大量的隨機字節。這個時候您可以多做些瑣事(像是敲打鍵盤、移動鼠標、讀寫硬盤之類的),這會讓隨機數字發生器有更好的機會獲得足夠的熵數。

</blockquote>

        幾分鐘以后,系統提示密鑰已經生成了。

gpg: 密鑰 EDDD6D76 被標記為絕對信任

公鑰和私鑰已經生成并經簽名。

</blockquote>

        請注意上面的字符串"EDDD6D76",這是"用戶 ID"的 Hash 字符串,可以用來替代"用戶 ID"。

        這時,最好再生成一張"撤銷證書",以備以后密鑰作廢時,可以請求外部的公鑰服務器撤銷你的公鑰。

gpg --gen-revoke [用戶 ID]

</blockquote>

        上面的"用戶 ID"部分,可以填入你的郵件地址或者 Hash 字符串(以下同)。

        四、密鑰管理

        4. 1 列出密鑰

        list-keys 參數列出系統中已有的密鑰.

gpg --list-keys

</blockquote>

        顯示結果如下:

/home/ruanyf/.gnupg/pubring.gpg

-------------------------------

pub 4096R/EDDD6D76 2013-07-11

uid Ruan YiFeng <yifeng.ruan@gmail.com>

sub 4096R/3FA69BE4 2013-07-11

</blockquote>

        第一行顯示公鑰文件名(pubring.gpg),第二行顯示公鑰特征(4096 位,Hash 字符串和生成時間),第三行顯示"用戶 ID",第四行顯示私鑰特征。

        如果你要從密鑰列表中刪除某個密鑰,可以使用 delete-key 參數。

gpg --delete-key [用戶 ID]

</blockquote>

        4. 2 輸出密鑰

        公鑰文件(.gnupg/pubring.gpg)以二進制形式儲存,armor 參數可以將其轉換為 ASCII 碼顯示。

gpg --armor --output public-key.txt --export [用戶 ID]

</blockquote>

        "用戶 ID"指定哪個用戶的公鑰,output 參數指定輸出文件名(public-key.txt)。

        類似地,export-secret-keys 參數可以轉換私鑰。

gpg --armor --output private-key.txt --export-secret-keys

</blockquote>

        4. 3 上傳公鑰

        公鑰服務器是網絡上專門儲存用戶公鑰的服務器。send-keys 參數可以將公鑰上傳到服務器。

gpg --send-keys [用戶 ID] --keyserver hkp://subkeys.pgp.net

</blockquote>

        使用上面的命令,你的公鑰就被傳到了服務器 subkeys.pgp.net,然后通過交換機制,所有的公鑰服務器最終都會包含你的公鑰。

        由于公鑰服務器沒有檢查機制,任何人都可以用你的名義上傳公鑰,所以沒有辦法保證服務器上的公鑰的可靠性。通常,你可以在網站上公布一個公鑰指紋,讓其他人核對下載到的公鑰是否為真。fingerprint 參數生成公鑰指紋。

gpg --fingerprint [用戶 ID]

</blockquote>

        4. 4 輸入密鑰

        除了生成自己的密鑰,還需要將他人的公鑰或者你的其他密鑰輸入系統。這時可以使用 import 參數。

gpg --import [密鑰文件]

</blockquote>

        為了獲得他人的公鑰,可以讓對方直接發給你,或者到公鑰服務器上尋找。

gpg --keyserver hkp://subkeys.pgp.net --search-keys [用戶 ID]

</blockquote>

        正如前面提到的,我們無法保證服務器上的公鑰是否可靠,下載后還需要用其他機制驗證.

        五、加密和解密

        5. 1 加密

        假定有一個文本文件 demo.txt,怎樣對它加密呢?

        encrypt 參數用于加密。

gpg --recipient [用戶 ID] --output demo.en.txt --encrypt demo.txt

</blockquote>

        recipient 參數指定接收者的公鑰,output 參數指定加密后的文件名,encrypt 參數指定源文件。運行上面的命令后,demo.en.txt 就是已加密的文件,可以把它發給對方。

        5. 2 解密

        對方收到加密文件以后,就用自己的私鑰解密。

gpg --decrypt demo.en.txt --output demo.de.txt

</blockquote>

        decrypt 參數指定需要解密的文件,output 參數指定解密后生成的文件。運行上面的命令,demo.de.txt 就是解密后的文件。

        GPG 允許省略 decrypt 參數。

gpg demo.en.txt

</blockquote>

        運行上面的命令以后,解密后的文件內容直接顯示在標準輸出。

        六、簽名

        6. 1 對文件簽名

        有時,我們不需要加密文件,只需要對文件簽名,表示這個文件確實是我本人發出的。sign 參數用來簽名。

gpg --sign demo.txt

</blockquote>

        運行上面的命令后,當前目錄下生成 demo.txt.gpg 文件,這就是簽名后的文件。這個文件默認采用二進制儲存,如果想生成 ASCII 碼的簽名文件,可以使用 clearsign 參數。

gpg --clearsign demo.txt

</blockquote>

        運行上面的命令后 ,當前目錄下生成 demo.txt.asc 文件,后綴名 asc 表示該文件是 ASCII 碼形式的。

        如果想生成單獨的簽名文件,與文件內容分開存放,可以使用 detach-sign 參數。

gpg --detach-sign demo.txt

</blockquote>

        運行上面的命令后,當前目錄下生成一個單獨的簽名文件 demo.txt.sig。該文件是二進制形式的,如果想采用 ASCII 碼形式,要加上 armor 參數。

gpg --armor --detach-sign demo.txt

</blockquote>

        6. 2 簽名+加密

        上一節的參數,都是只簽名不加密。如果想同時簽名和加密,可以使用下面的命令。

gpg --local-user [發信者 ID] --recipient [接收者 ID] --armor --sign --encrypt demo.txt

</blockquote>

        local-user 參數指定用發信者的私鑰簽名,recipient 參數指定用接收者的公鑰加密,armor 參數表示采用 ASCII 碼形式顯示,sign 參數表示需要簽名,encrypt 參數表示指定源文件。

        6. 3 驗證簽名

        我們收到別人簽名后的文件,需要用對方的公鑰驗證簽名是否為真。verify 參數用來驗證。

gpg --verify demo.txt.asc demo.txt

</blockquote>

        舉例來說,openV*N 網站就提供每一個下載包的 gpg 簽名文件。你可以根據它的說明,驗證這些下載包是否為真。

        七、參考文檔

        1. Paul Heinlein, GPG Quick Start

        2. Ubuntu help,GnuPrivacyGuardHowto

        3. KNL, GnuPG Tutorial

        4. Alan Eliasen. GPG Tutorial

        5. GnuPG 袖珍 HOWTO (中文版)

        6. The GNU Privacy Handbook

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!