Ziyan Zhou
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

普及计算机知识系列,懂PGP的GEEK们就不用看了

为什么要加密?
简单地说,你用的邮件服务不安全,邮件可以被随时随地截获,你没有隐私。如果你认为那有什么所谓,你大可不必读完本文,你根本不珍重自己的隐私权。

电子邮件的历史已经很长久了,在电子邮件面世时,极少数人拥有计算机,极少数黑客,导致电子邮件设计上从来就没有考虑安全性。电子邮件本意并不是想让大家到Gmail或163这种服务提供商集中申请邮箱。每一台电脑都有独立接受发送邮件的能力,每一台电脑都是服务器。电子邮件也从来没有身份确认的方法,也没有传递过程中邮件加密的保护措施。所以,想冒充别人发邮件,或者截获别人的邮件是非常容易的,特别是处在局域网的用户,一个不道德的网管可以轻易截获你们的邮件。

当然,现在有很多相对比较安全的收发邮件方法,如Gmail。但注意,请永远使用https://mail.google.com/mail,永远记得 https,而不是http。HTTPS对你正在访问的网页加密,而Gmail的安全证书应该是由Thawte Consulting (Pty) Ltd.确认的,要是不能核实,就证明中间有人冒充Gmail从而盗取密码和信件。如果不用HTTPS访问Gmail,等于没有加密。别的邮箱提供商,如 163,QQ,没有任何保护措施,您就当写公告就没错了。

既是Gmail,使用HTTPS登陆,您的大部分邮件仍然会被公开。为什么呢?如果是Gmail邮箱发邮件到Gmail邮箱,你的邮件只在Google的内部网络里晃了一圈,那还算安全。不过如果是Gmail邮箱发邮件到163邮箱或是新浪或是QQ或是中国任何一家邮箱提供商,由于他们的服务器根本不支持 SSL加密的邮件接受方式,为了邮件的准确到达,Gmail也只能以明文方式发送,邮件可以截获。

怎么加密才算“绝对”安全?
考虑这样一个问题,我要发一封秘密邮件给你,我可以用一个强密码加密后把秘密发给你。就如我把东西放在一个保险箱里,然后上了密码锁。但你需要知道我的密码才能解密,才能打开保险箱,我如何才可以安全地把我使用的密码告诉你呢?

有个解决办法,一种加密机制叫公匙密匙加密
1. 公匙:任何人都知道,用以加密信息,以及确认电子签名,但不能解密
2. 私匙:绝对只有你知道,用以解密信息,以及生成电子签名,但不能加密,可用强密码保护

这样的话,如果我要发一封秘密邮件给你,我先获取你的公匙,因为那是公开的,任何人都知道。我用你的公匙加密后,就可以把邮件发给你了。而公匙是不能用来解密的,世界上只有唯一的一把私匙可以用来解密,而那把私匙只在你手中掌握着。你便可用私匙解密。如果我不小心把用别人公匙加密后的邮件发给了你,你也没有办法解密。

如果你要回复我的邮件,你则需要找到我的公匙,用我的公匙加密的要回复的内容,然后发给我,我便可以用我的私匙解密。

这样就不存在交换密码所带来的风险。

但是,既然任何人都知道你的公匙,别人也可以用你的公匙加密信息然后冒充我发给你,你怎么知道是我发的信息呢?这就牵扯到电子签名了。签名的原理也很简单,首先使用常用的Message Digest算法,如SHA或MD5,为邮件内容提供一个唯一的标识(如果你改动一个字,这个标识就会大不一样)。然后用我的密匙在这个标识运行解密算法,把结果传给你,然后你就可以用大家都知道的我的公匙运行一次加密算法,就可以确认消息是否真的来自于我。由于只有我有我的密匙,也就只有我可以生成这个签名。大家都有我的公匙,那么谁都可以来确认我的签名。

那么完整的版本是,我要发邮件给你,我先用你的公匙加密,然后再用我的私匙签名,发给你。这样,世界上只有你有你的私匙可以用来解密,你也可以同时确认我的签名。你回复我的时候,就要用我的公匙加密,然后用你的私匙签名。这样,只有用我的私匙才能解密,我也可以用你的公匙来确认你的签名。你我的身份就可以彼此确认,你我之间的消息,只有你我才可能解开。

为什么“绝对”要加引号?
世界上没有绝对的事情,忘了告诉你,你可以确定你的公匙私匙的长度。越长的,加密解密时间越长,而越安全。目前2048bit长度的钥匙可以维持安全到2015年左右。用计算机蛮力是可以破解的,但一般只有政府部门有这种资源,而且还要花上数十年的时间。一般秘匙是有生命周期的,例如本人的密匙一年左右之后就会过期,然后本人就会重新生成一个密匙和对应的公匙,过期后的公匙会自动变得无效。随着计算机运算能力的发展,你的密匙可以变得越来越长,但蛮力破解所需时间也会越来越短。总的而言,目前这种加密方式是“绝对”安全的。

另外,计算机没有绝对随机数,由于你的密匙是随机生成的,而你的随机数生成规律被获知(如生成的时间,键盘和鼠标动作,当时CPU温度等等被记录),则别人可能模拟出你的随机数,从而知道你的密匙。但一般来说,在自己电脑上生成,这种可能性比较小。

那我到底如何加密我的邮件?
目前,最流行的软件叫Pretty Good Privacy(PGP),而其所遵照的协定是OpenPGP (RFC4880):
http://tools.ietf.org/html/rfc4880
如过你是Linux或Unix或Mac OS X的用户,你可以使用gnupg,一个GNU开发的免费、开源版本。如果你使用的是Windows,你可以下载GPG for Windows:
http://ftp.gpg4win.org/gpg4win-1.1.3.exe
Windows版本的我没用过,不过步骤是差不多的,以下是以Linux为准:
1. 首先生成你的私匙:

gpg --gen-key

,一定要好好保管
2. 为你的公匙签名:

gpg --edit-key UID sign

,其中UID是你填写的名称
3. 然后生成你的公匙:

gpg --export -a

, 把这个你要发布到key server上,如http://pgp.mit.edu
导入收件人的公匙:

gpg --import key.file

加密并签名消息:

gpg -r 收件人 -ase in.file -o out.file

解密消息:

gpg -d in.file

解密时,gpg会告诉你是谁签的名

举几个例子吧
我的公匙(http://ziyan.info/pubkey):Ziyan Zhou (Joe) 72B05506

- -----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.1 (GNU/Linux)

mQGiBEirWNQRBADGJfEdj2E8W07rdPcXQB1E+VsQQpp+euc/30z64Uy/nM+Pir3T
7mhk/axeVdIt8/Y49mDhy776BoWdPvWVzDSzjml5xbn7UyOYtbpR5/qx+siPLhtw
KUFf4OGrTD3xqsFDSYx6JpjB4lIClqWwuJTdsLmptrXW34duX0HJ5CIPowCgkl93
tTuPo5MZ/+yFGKXrFO5Zd5sEAJMifmQ7yfApjsL4vRrDttgqIIpxuzWPcMA+2PK+
hwlASYYsMbDR1PxKXXUvZXQDROp7HZ/jYzzstzwN2t/J6fFiQQOk7YjAjhqjM8kS
4TYpC0cBXS8fvA1Jld95ydL15nQpvoHa7KlMbEBn0QZ5CvYOo+k61q/CO815G92q
sp0TA/4wxKTpzbMHaGBh1Y9Z1DFyYKcHoal/GUr+ENO/tDzqNU5MFSaGcPdDhBT/
ld+00DBCmzjKfq5RYYgx6wAL52kE3M56Tb9sI8Or7/DZjsJy7xFMsczIH1rQgc9/
qn9iW+DH2pELb23+vxd4j1Msvqugk8iQk4ZdngADosKeA/93VLQiWml5YW4gWmhv
dSAoSm9lKSA8emhvdUB6aXlhbi5pbmZvPohkBBMRAgAkBQJIq1jUAhsDBQkB4TOA
BgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEPHHwyxysFUGikcAn3zre9ZW3ZdRfGVr
6j980ME9WRR9AJ4gp9UU/tM4aghoEjxUnb4/JAswAbkCDQRIq1jXEAgArqlobaQ0
1Tm8b2Cg8ICETe2X819tpPR2IkOlAQswNNn9SDlHCgIKW7t8607Q+QZAy/gZFa0Y
eJcxNBL+gLMeHfzEhLgqolV+X1OQua0XhAGydNdd+YxcmXOF7qVxeH8eYLVnyUlH
XZ2EZy8ErrEscaRO7oPBnIcGfbivRZr5j4VhidWw/6fSOoriaobq5nx7BWP7kTaV
ya2kBQPstYR2xv/PRB8PEkkwzFMzdiipPSkmNxLcWp1KR6QqEXyEJW19JHiil+Se
94WRoEW+orsTqDCKAeox32RQlJMgWvXM/7fthmNQ2DsgI8DGjJvSheBnXYM+7ovb
hxy0riXyWJPhiwADBQf5AeaAgpxnHNJxtzLPpusVdP9BK03m2M/uCDqjKQTb0iIY
i/pOJGEE4XHSJinBbkUB3xjNOv6oKz7bKzQUTKVPanuomEm2ISm5ECnZuGhy6xw7
1yxjP8cdGTnWRcFnwlw5j3F5qGC5lWAO1bJOHC5qDhOkuy4DXb10TpL4oR70qDv2
A1DxG/tEBV2ysBvb37V/n7OoGqbAzOYV9DN4MnPZMP3Yh4b7rH3POjJdX33gsunx
ix/6m6jWxtW9aIJ0Gp9soAMWeejKwoyxUUsNq6pxqPXPYwb3Tx5Rvkwc+pDLyld3
hdjODtqvrNWAAkAgGMoUpLTM0a60kKYIWt74hRMksIhPBBgRAgAPBQJIq1jXAhsM
BQkB4TOAAAoJEPHHwyxysFUG0tEAoI3wtcLc/dfaiwIcWGngH5LC5cluAJ4pLfSp
uMRsWy1dg7o4okjAaNuGow==
=/Kiu
- -----END PGP PUBLIC KEY BLOCK-----

这个公匙已经签了名。如果你去pgp.mit.edu搜索ziyan,也可以找到我的公匙。

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)

iD8DBQFIs1ny8cfDLHKwVQYRAvvUAKCH2z/VURw026OapkqltblQAVXsVwCfT8yt
wtNoQP5S3t2m+nuVuc/2U+s=
=5atv
-----END PGP SIGNATURE-----

BROWSE / IN TIMELINE
«
»

BROWSE / IN SAME CATEGORY 中文
«
»

SPEAK / ADD YOUR COMMENT

如何写“绝对”安全的加密邮件


Posted on Oct 24, 2008 to category 中文, tagged as , , .
Subscribe to follow comments on this post. No comments yet. Add your thoughts or trackback from your own site.

FRESH / LATEST POSTS

Feeds