gpg4win+thunderbird+enigmail实现电子邮件签名与加密
?
一、前言:
1.PGP:
PGP(Pretty Good Privacy)是一个基于RSA加密体系的加密软件。可以用来对邮件进行加密以防止非授权者阅读,对邮件加上数字签名从而使收信人可以确认邮件的发送者,并能确信邮件没有被篡改。
?
2.GPG:
即GnuPG,是PGP标准的一个免费实现。
?
3.非对称加密:
公钥、私钥互补存在,公钥加密的只能用私钥解密,私钥加密的只能用公钥解密。可以创建口令来保护私钥不被盗~~窃滥用。创建了以后后,在解密信息、数字签名、加密文件的时候需要键入私钥保护口令。
?
4.数字签名和邮件加密:
甲给乙发邮件,甲先用消息摘要算法(MD5)生成一个该邮件的128位特征值,然后甲用自己的私匙将上述的128位的特征值加密,附加在邮件后,再用乙的公匙将整个邮件加密。这样这份密文被乙收到以后,乙用自己的私匙将邮件解密,得到甲的原文和签名,乙的PGP也从原文计算出一个128位的特征值来和用甲的公匙解密签名所得到的数比较,如果两者一致就说明这份邮件确实是甲寄来的且传递过程中未被篡改。
?
更多详情请参考度娘:
http://baike.baidu.com/view/7607.htm
二、gpg4win的安装与使用1.首先,下载并安装gpg4win下载地址:http://gpg4win.org/
安装过程中须手动勾选上gpa选项,其他部分按照默认选项进行安装即可。安装完成后在控制台输入命令“gpg --version”,可以见到gpg的版本号信息:gpg (GnuPG) 2.0.17 (Gpg4win 2.1.0)libgcrypt 1.4.6Copyright (C) 2011 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.。。。
在程序菜单中可以见到:

?其中GPA主要用于密钥管理,Kleopatra可用于文件加密/解密。
2.创建自己的密钥对(1)使用命令行方式创建密钥:在命令行中输入gpg --gen-key然后以问答形式依次输入密钥的算法、大小、失效时间,通常使用默认值即可。接着gpg还会询问你的名字、电子邮件地址和对密钥的备注。最后一步是提供一个私钥保护口令:

?输入完私钥保护口令后随即点几下鼠标、在键盘敲几个字符以帮助密钥对的生成,然后就大功告成啦:

?(2)使用gpa界面创建密钥:运行gpa,点击:Keys --》New Key...:

?依次指定所用的加密算法、密钥长度、用户名、邮箱、备注和密钥失效日期(可选项),然后点击OK:

?3.备份私钥个人的私钥十分重要,万一不慎丢失将不能解密以往所加密过的文件和邮件,因此进行私钥的备份并妥善保管是十分必要的。(1)在命令行中使用如下命令进行私钥的备份:gpg -o keyfilename --export-secret-keys KeyID如果没有KeyID则是备份所有的私钥,-o表示输出到文件keyfilename中,如果加上-a的参数则输出文本格式的信息,否则输出的是二进制格式信息。
(2)通过gpa界面进行私钥备份:在所需备份的密钥上右击,选择Backup...

?然后选择备份文件放置的位置并设定文件名,点击Save

?4.导出自己的公钥(1)可以使用如下命令导出公钥:gpg -o -a mypublickey.txt --export KeyID
(2)通过gpa界面导出公钥:在所需导出的密钥对上右击,选择Export Keys

?然后选择导出的位置和设定文件名,点击Save

?5.发布自己的公钥到公钥服务器上(1)使用gpa界面进行发布a.选择需要发布到的服务器菜单 --》 Edit --》 Preferences,选择自定义的Default keyserver,然后点击OK

?b.发布在所需发布的密钥上右击,选择Send Keys

?然后Yes

?(2)你也可以选择一个其他的公钥服务器(譬如pgp.mit.edu)进行公钥发布。打开网址http://pgp.mit.edu/,把刚刚导出的mypublickey.txt里的文本内容贴到输入框,然后点击Submit:




点击KeyID可进入查看详情:?

?
6.与朋友交换公钥
在做完了以上几步以后,你就可以与其他同样创建了自己的密钥对的好友们进行公钥交换了。你可以使用如下任一种方式导入其他人的公钥:
(1)朋友直接把他的公钥以文件形式发送给你,这时候你可以:
a.通过命令行导入
gpg --import filename
?
b.通过gpa界面导入

(2)从公钥服务器导入:a.通过命令行导入gpg --keyserver hkp://pgp.mit.edu --recv-keys KeyID
b.通过gpa界面导入点击Server --》 Retrieve Keys...

?输入要导入的公钥ID,然后点击OK

?至此,关于gpg4win的使用已经大致讲解完,其他功能可留待诸位看官自行摸索挖掘: )?接下来讲讲如何在邮件客户端中使用gpg进行邮件签名和加密
三、使用Thunderbird+Enigmail进行邮件签名和加密1.下载并安装Thunderbirdhttp://www.mozilla.org/zh-CN/thunderbird/安装过程大部分按照默认配置即可
2.设置Thunderbird邮件帐户请参考:http://hanning5137.blog.51cto.com/2914528/792787
还有:http://www.heibai.net/book/html/wangluogongju/youjiangongju/2010/1021/3564.html
3.安装Enigmail插件打开网址:http://enigmail.mozdev.org/download/index.php.html选择对应的版本进行下载
然后打开Thunderbird菜单,工具,附加组件

?浏览选择刚刚下载好的Enigmail插件的放置位置,确定

?安装插件完成后需要重启Thunderbird。
4.Enigmail插件配置右击邮件帐户,选择设置,可以见到多了一个OpenPGP安全的选项

?选择所需使用的密钥并设定发送邮件的安全选项,点击确定完成设置。
5.向已经导入了自己公钥的联系人发送含有自己数字签名的邮件(1)选择邮箱帐户,新建邮件,确认数字签名邮件已经勾选

(2)然后点击发送,输入私钥保护口令

(3)发送过程中可以见到邮件已经被签名?

?
6.接收带有数字签名的邮件
输入私钥保护口令以查看收件箱

带有对方数字签名的邮件,Enigmail会自动校验其签名合法性以及是否被篡改

?
7.向已经交换了密钥的联系人发送签名并加密的、带附件的邮件
撰写邮件,添加附件,勾选上安全菜单的数字签名和加密邮件选项:

?
?
然后键入私钥保护口令:

选择邮件加密签名方式:

发送过程中,签名并加密邮件,会稍微影响处理速度,稍微忍耐下吧: )

然后,在接收方看到的邮件就是这样的:

?
如此一来,就算客官你用的是雅虎邮箱,也不用怕怕啦~Hope you enjoy it~
?
?
?
参考资料:
http://baike.baidu.com/view/7607.htm
?
http://terrychen.info/encryption-gpg4win
?
http://blog.sina.com.cn/s/blog_44abafb201008zjo.html
?
http://blog.sina.com.cn/s/blog_44abafb201008zgc.html
?
http://www.ithov.com/linux/104420_2.shtml
?
http://blog.sina.com.cn/s/blog_44abafb201008y95.html
?
http://hanning5137.blog.51cto.com/2914528/792787
?
http://www.heibai.net/book/html/wangluogongju/youjiangongju/2010/1021/3564.html
?