使用GnuPG 签名来保护邮件安全 

玩电子邮件这么多年,一直没有怎么注重安全,最开始是连POP3,SMTP都是明文方式,再后来IMAP逐渐火了起来,TLS/SSL 加密协议才逐渐的被普遍使用~

不过,今天,我要正式的进入PGP/GPG时代了~因为用户的隐私是一个值得重视的问题~

于是,就在昨天我生成了我自己的密钥对(公钥和私钥),
1.首先,确认Ubuntu 已经安装了GPG(GnuPG),如下:

sharl@sharl-laptop:~/gpg$ gpg --version
gpg (GnuPG) 1.4.11
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: ~/.gnupg
支持的算法:
公钥: RSA, RSA-E, RSA-S, ELG-E, DSA
对称加密: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128,
CAMELLIA192, CAMELLIA256
散列: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
压缩: 不压缩, ZIP, ZLIB, BZIP2

2.之后,便可以使用GPG去生成我的密钥对了.

sharl@sharl-laptop:~/gpg$ gpg --gen-key
gpg (GnuPG) 1.4.11; Copyright (C) 2010 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 (仅用于签名)
您的选择? 4 #选择加密类型,一般选1,我这里为了测试选了4
RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048) 1024
您所要求的密钥尺寸是 1024 位
请设定这把密钥的有效期限。
0 = 密钥永不过期
<n> = 密钥在 n 天后过期
<n>w = 密钥在 n 周后过期
<n>m = 密钥在 n 月后过期
<n>y = 密钥在 n 年后过期
密钥的有效期限是?(0) 1 #选择密钥过期时间,一般选"0"永不过期.
密钥于 2011年09月19日 星期一 11时57分14秒 CST 过期
以上正确吗?(y/n) y #确认信息正确性

您需要一个用户标识来辨识您的密钥;本软件会用真实姓名、注释和电子邮件地址组合
成用户标识,如下所示:
“Heinrich Heine (Der Dichter) <[email protected]>”

真实姓名: Tester #输入姓名
电子邮件地址: [email protected] #输入邮箱地址
注释: Just Test #输入注释
您选定了这个用户标识:
“Tester (Just Test) <[email protected]>”

更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? O #确认数据正确性
您需要一个密码来保护您的私钥。
#这里会要求用户输入密码口令,两次。用于解开私钥。
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
+++++
+++++
gpg: 密钥 4E9638A9 被标记为绝对信任
公钥和私钥已经生成并经签名。

gpg: 正在检查信任度数据库
gpg: 需要 3 份勉强信任和 1 份完全信任,PGP 信任模型
gpg: 深度:0 有效性: 2 已签名: 0 信任度:0-,0q,0n,0m,0f,2u
gpg: 下次信任度数据库检查将于 2011-09-19 进行
pub 1024R/4E9638A9 2011-09-18 [有效至:2011-09-19]
密钥指纹 = 046D 7880 874C E825 2D36 9A47 3B53 0E6E 4E96 38A9
uid Tester (Just Test) <[email protected]>

请注意这把密钥还不能用来加密,您必须先用“--edit-key”指令
生成用于加密的子钥。

3.一般到这里,生成的密钥对应该可以用了,不过由于我之前选择的类型是"RSA (仅用于签名)",所以我还得额外的添加一个用于加密的子钥.

sharl@sharl-laptop:~/gpg$ gpg --edit-key 4E9638A9 #uid 就是之前生成的“1024R/4E9638A9” 后面部分,即用户标识
gpg (GnuPG) 1.4.11; Copyright (C) 2010 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.

私钥可用。

pub 1024R/4E9638A9 创建于:2011-09-18 有效至:2011-09-19 可用于:SC
信任度:绝对 有效性:绝对
绝对 (1). Tester (Just Test) <[email protected]>

gpg> addkey #添加子钥
密钥受保护。
#这里需要输入之前创建的私钥密码口令.
您需要输入密码,才能解开这个用户的私钥:“Tester (Just Test) <[email protected]>”
1024 位的 RSA 密钥,钥匙号 4E9638A9,建立于 2011-09-18

请选择您要使用的密钥种类:
(3) DSA (仅用于签名)
(4) RSA (仅用于签名)
(5) ElGamal (仅用于加密)
(6) RSA (仅用于加密)
您的选择? 4 #选择RSA
RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048) 1024
您所要求的密钥尺寸是 1024 位
请设定这把密钥的有效期限。
0 = 密钥永不过期
<n> = 密钥在 n 天后过期
<n>w = 密钥在 n 周后过期
<n>m = 密钥在 n 月后过期
<n>y = 密钥在 n 年后过期
密钥的有效期限是?(0) 1 #供测试,一天过期
密钥于 2011年09月19日 星期一 12时04分16秒 CST 过期
以上正确吗?(y/n) y #确认信息正确性
真的要建立吗?(y/N) y #再次确认
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
.....+++++
.+++++

pub 1024R/4E9638A9 创建于:2011-09-18 有效至:2011-09-19 可用于:SC
信任度:绝对 有效性:绝对
sub 1024R/F4A49466 创建于:2011-09-18 有效至:2011-09-19 可用于:S
绝对 (1). Tester (Just Test) <[email protected]>

gpg> save #保存,退出

4.至此,我的密钥对算是完全建立了,也可以用了。查看下我刚刚创建的私钥:
sharl@sharl-laptop:~/gpg$ gpg -K 4E9638A9
sec 1024R/4E9638A9 2011-09-18 [有效至:2011-09-19]
uid Tester (Just Test) <[email protected]>
ssb 1024R/F4A49466 2011-09-18 [有效至:2011-09-19]

5.这时候,我得把生成的公钥上传到网络上的公钥服务器(如 pgp.mit.edu )里面去,这样的话,别人收到了我用私钥加过密的邮件,才能有办法从公共的公钥服务器上获取对应的公钥去解密。不然那封邮件就是天书了~囧

上传公钥:
sharl@sharl-laptop:~/gpg$ gpg --send-keys --keyserver pgp.mit.edu 4E9638A9
gpg: 将密钥‘4E9638A9’上传到 hkp 服务器 pgp.mit.edu

完了之后,上传的公钥就会被全世界所有的公钥服务器同步上去,也就是说任何人都可以在任意一台公钥服务器上找到我上传的公钥了。

比如:
麻省理工的服务器上:
http://pgp.mit.edu:11371/pks/lookup?op= ... 6E4E9638A9

ubuntu 的 keyserver:
http://keyserver.ubuntu.com:11371/pks/l ... ;op=vindex

注:这里有一份全球主要公钥服务器的列表,见:http://sks-keyservers.net/status/

6.待这一切都搞定后,就可以配置下本地的邮件客户端了~基本上所有的邮件客户端都是支持PGP签名的。

我是使用的Mozilla 的Thunderbird的,它不像Evolution 原生支持PGP,而是要安装一个叫“enigmail”插件.

sudo apt-get install enigmail

安装之后,重启thunderbird,菜单栏里会多出来一个"安全"项.点击“设置”,根据向导提示,完成设置即可.具体不再赘述。

7.为了方便日后使用,一般建议把密钥的用户标识设置成系统环境变量,如下:
export GPGKEY=4E9638A9
source ~/.bashrc #使之生效

之后重启下gpg-agent(没有则安装 sudo apt-get install gnupg-agent )
killall gpg-agent
eval $(gpg-agent --daemon)
即可.

8.至此,其实一切都完成了。不过根据官方的建议,即在创建完密钥对后,强烈推荐备份公钥和私钥,已经生成吊销证书,以备不时之需。

所以:
备份私钥
sharl@sharl-laptop:~/gpg$ gpg -o tester_priv.asc -a --export-secret-key 4E9638A9

备份公钥
sharl@sharl-laptop:~/gpg$ gpg -o tester_pub.asc -a --export 4E9638A9

生成、备份密钥吊销证书
sharl@sharl-laptop:~/gpg$ gpg -o tester_revoke.asc --gen-revoke 4E9638A9

sec 1024R/4E9638A9 2011-09-18 Tester (Just Test) <[email protected]>

要为这把密钥建立一份吊销证书吗?(y/N) y #选“是”
请选择吊销的原因:
0 = 未指定原因
1 = 密钥已泄漏
2 = 密钥被替换
3 = 密钥不再使用
Q = 取消
(也许您会想要在这里选择 1)
您的决定是什么? 0 #选择原因
请输入描述(可选);以空白行结束:
> Just a Test. #输入理由
>
吊销原因:未指定原因
Just a Test.
这样可以吗? (y/N) y #确认信息正确性

您需要输入密码,才能解开这个用户的私钥:“Tester (Just Test) <[email protected]>”
1024 位的 RSA 密钥,钥匙号 4E9638A9,建立于 2011-09-18
#这里需要输入私钥的口令密码
已强行使用 ASCII 封装过的输出。
已建立吊销证书。

请把这个文件转移到一个可隐藏起来的介质(如软盘)上;如果坏人能够取得这
份证书的话,那么他就能让您的密钥无法继续使用。把这份凭证打印出来再藏
到安全的地方也是很好的方法,以免您的保存媒体损毁而无法读取。但是千万
小心:您的机器上的打印系统可能会在打印过程中把这些数据临时在某个其他
人也能够看得到的地方!

生成的文件列表:
sharl@sharl-laptop:~/gpg$ ls tester* -lh
-rw-r--r-- 1 sharl sharl 2.2K 2011-09-18 12:51 tester_priv.asc
-rw-r--r-- 1 sharl sharl 1.3K 2011-09-18 12:52 tester_pub.asc
-rw-r--r-- 1 sharl sharl 398 2011-09-18 12:53 tester_revoke.asc

保存在一个隐秘的地方即可。

至此,一切都OK了~尽情享受完全隐私的互联网吧~

注:本篇文章撰写以及实践时,参考了以下链接:
http://www.gnupg.org/gph/en/manual.html
https://help.ubuntu.com/community/GnuPrivacyGuardHowto
http://fedoraproject.org/wiki/Using_GPG ... hunderbird
http://enigmail.mozdev.org/documentatio ... t.php.html
[ ] ( 2617 次浏览 ) 永久链接 ( 3 / 2923 )

<< <上一页 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 下一页> >>