转载来源:http://blog.huichen.org/archives/82

 

在互联网上,没有人知道你是只狗[*]。 

所以,在互联网上,也没有人能100%地确信你就是你自己!

虽然,网上有很多场合你可以以匿名的方式存在,但也有很多时候你需要让对方确信你的身份,比如电子邮件。盗用Email地址是很容易的事情,你不需 要高深的技术手段就可以让你发出的信看上去来自另外一个人的Email地址。危险离你我都很近,identity theft一旦发生,后果可能十分严重,比如“马贝贝”事件。

你需要安全感,所以你需要给自己的Email“签名”或者加密。GnuPG(GNU Privacy Guard)方便地提供了这样一种工具。

GnuPG的原理如下:
首先,你有一段人人都能读懂的文字(明文),你需要一个函数将这段明文转化成一段密文,密文是经过加密的。这个函数 称为Hash函数,它需要有如下特征:正方向使用Hash函数容易(从明文得到密文),逆函数(从密文得到明文)非常困难(比如超级计算机需要几十年的时 间才能破解)。函数的使用如下:信息的发送方和接受方都各自有两把钥匙,加密钥匙(密匙)和公开钥匙(公匙),密匙只有发送方和接受方各自自己有,公匙是 在互联网公开的,公匙和密匙每个人都是不一样的。首先发送方通过自己的密匙和接受方的公匙将明文Hash加密,然后通过公开的途经将密文传送给接受方,然 后接受方使用自己的密匙和发送方的公匙将密文解码成明文。这个Hash函数的好处在于:

  • 只有使用接受方的特定密匙才能解开密文,从而实现了加密
  • 只有使用发送方的特定公匙才能解开密文,从而接受方能够确定是某个特定发送方发出的
  • 密文是公开的,从而能够公开传送,就好想恋人之间的暗号,可以在熙熙攘攘的大街上传送爱意但即使被其他人看到也不知道什么意思

另外,在很多场合,你并不需要只是让特定的接受方才能阅读你的信息,你需要的只是给信息“签名”,也就是说让阅读者确定这个信息是你发出的。 GnuPG也可以做到:你使用你的密匙对明文处理生成一段“数字签名”,然后你把这段数字签名附加在明文后面传送出去。这样互联网上的人都可以看到并阅读 到你的明文,并且通过你的公匙可以验证那段数字签名是不是和明文匹配,从而确定信息是不是来自于你。好处在于:

  • 明文没有加密,可以直接阅读
  • 只有使用你的公匙才能验证那段数字签名是不是和明文匹配
  • 如果明文被改动了,数字签名和明文便不再匹配,从而可以知道信息发送途中有人窜改信息

说得有些深奥了,下面是一个数字签名的具体例子:

—–BEGIN PGP SIGNED MESSAGE—–
Hash: SHA1

陈先生,

您的网站是我们火星公民们了解地球的一扇窗口,为了感谢您为火地友谊作出的贡献,我们火星联合王国委员会决定向您捐款1000万美元,请
您将您在火星美旗银行的帐号发送给我们。

敬礼,
火星联合王国委员会主席 马斯.拉佛尔
—–BEGIN PGP SIGNATURE—–
Version: GnuPG v1.4.0 (MingW32) – GPGshell v3.40

iD8DBQFC5TILdw367vdkn6gRAnA3AJ4oQuOTDA36h+A7r+aJv+nMwRxQSQCgvF/0
jds6l+1vu3GuSKiT91aijhM=
=p+w7
—–END PGP SIGNATURE—–

解释:在”Begin pgp signed message”和”Begin pgp signature”之间的部分(除去Hash: SHA1和下面的空行)就是明文了, pgp=pretty good privacy。Hash: SHA1表明使用的Hash函数是SHA1。在”Begin pgp signature”和”End pgp signature”之间的部分是数字签名(除去”Version: GnuPG v1.4.0 (MingW32) – GPGshell v3.40″一行和下面的空行)。我的公开钥匙在这里,你可以试试检验一下这封信是不是我伪造火星联合王国委员会主席发出的。

原理解释清楚了,使用什么样的软件来实现呢?

如果你使用的是*unix,请参考GnuPG的网站http://www.gnupg.org/,我在这里就不赘述了。

如果你使用的是Windows(我的网站的访问记录告诉我90%以上的读者属于这种情况),请参考以下步骤:

有关于使用这篇帖子中提到的软件的任何问题,请回帖发问,谢谢!

[*]注:狗在美国是受到宠爱的动物。

发表评论

电子邮件地址不会被公开。 必填项已用*标注