大约半年前,或者是一年前,我得到 某人(应某人要求匿名了) 的建议,开始使用 PGP 对邮件进行加密。所谓的 PGP 全称是 Pretty Good Privacy (意:很好的隐私哦~),原本是一个软件的名称,不过现在看来已经成为邮件加密和签名的标准了。
给邮件加密和签名的好处
在使用天朝公司提供的电子邮箱时,谁都不知道我们的邮件内容是不是没有被检查。连 QQ 都会对关键字进行过滤(不信的话请试图使用 QQ 向好友发送敏感词,多试几个总会试对的),邮件的话想必应该也会有相应的机制。于是我们就不能放心地在邮件中讨论糟糕的话题了,说不定哪天不明真相的相关机构人员就会请你去喝茶。但是,如果把邮件加密的话,相关机构的人再怎么厉害也不可能看到邮件内容了。
在使用一些敏感服务的时候,服务商一般都会通过电子邮件来发送通知。但是我们如何知道一份通知真的是服务商发出的呢?要伪造一封电子邮件并不是什么困难的事情。有了邮件签名,就不用费脑筋去检查一封看似可疑的邮件是不是服务商发来的了。只要确认邮件的签名是服务商签署的,那就可以确保这个邮件是服务商发送的,而不是伪造的了。
我在使用 PayPal 的时候就遇到过这个问题。PayPal 似乎不会给用户发送带有自己签名的邮件,而他们发来的邮件却又像一封欺诈邮件,当时我看了那邮件很久,然后点击了邮件中的连接(是 PayPal 的链接),最后才确定那封邮件确实是 PayPal 发来的。就是不是 PayPal 发来的,我最后也是去了 PayPal 的官网,骗子奈何不了我。实际上到现在我都还不确信那封邮件是 PayPal 官方发送的。
我记得以前在找域名注册商的时候就看到有一个服务商是提供了自己的 PGP 公钥的,用户可以选择是否让服务商签署发送给用户的邮件,以确保邮件是服务商发出的。这个就很好嘛,收到诡异的邮件也不用费劲脑筋去确认这个邮件是谁发来的了。
PGP 使用了非对称加密方法来实现邮件的加密和签名,非对称加密确实是一个很好的加密方法,特别是在两人没法很方便地交换信息的时候。非对称加密可以让双方不使用相同的密码就能实现消息的加密以及签名。双方只要事前知道对方的公钥就可以了。
在上次脖子被砍,YTS被拔网线事件发生期间,因为公安局那边说此事是公安部督办,我深感影响巨大,于是频繁通过加密邮件给我朋友通报最新情况,并表示如果我消失了的话请向公安局要人。因为说是公安部督办的,我想相关机构人员很有可能会重点监视我的邮件,虽说我的邮件是通过谷歌邮件发送的,但是谁知道我朋友接收收件的情况呢,为了保证安全,还是给邮件加密好。勿以善小而不为,勿以恶小而为之,同理,勿以险微而不防,不要因为潜在的危险很小(或者是杞人忧天那样的危险),就不防范。凡事都要考虑周到,才能把握局势。
从那之后,我就一直给能收加密邮件的人发送加密的邮件了,对方亦然以此对我。
非对称加密的过程
据猜测这个脖子可能受到相关机构人员的重点监视,所以为了表明立场,我决定不使用密码学中常用的爱丽丝和鲍勃做为演员名字,改用具有中国特色社会主义的小明、小红和小刚这三个名字来演示。小明和小红是合法用户,希望加密他们之间的通信,而小刚是一个邪恶分子,一心想破解小明和小红之间的加密通信。
现在小明有一封信,希望送给小红。因为小明和小红不在同一个城市,所以小明决定通过天朝邮政将信给小红寄过去。但是天朝邮政的口碑是差了出名了,普通邮件经常丢失。对小明来说,信件丢失没关系,只要复印一份留着就行了。小明担心的是天朝邮政的工作人员会不会偷看他的信件。为了保密,小明决定不使用平邮,而是将信件装进一个盒子里面,然后用一个锁头锁起来,再通过普通包裹寄给小红。锁头的钥匙在小红手上,盒子和锁头的防盗性能非常好,基本上可以认为除非有钥匙,否则根本无法打开盒子。这样,小明就可以安全地把信件通过不可靠的天朝邮政寄给小红了。
为了完成这个通信过程,首先需要小红制造一把锁头和与之配对的钥匙。然后,小红保管好钥匙,再做很多个相同的锁头,并把锁头寄给小明。小明收到锁头以后,用这个锁头把盒子锁起来,把盒子寄给小红。小红收到盒子之后用锁头对应的钥匙把锁头打开,这样就得到了小明的信件。
在这个过程中,信件是很安全的。首先,锁头只有小红的钥匙才能够打开,而且具有足够的安全性,别人几乎不可能根据这个锁头制造出一个可以打开锁头的钥匙。小明使用的盒子也是非常坚固的,除非打开锁头,否则是无法打开盒子的。这样,在小明用小红的锁头锁上盒子之后,盒子就只有小红才能打开,其他人都没法打开盒子,包括天朝邮政的工作人员。这样小明和小红就可以很放心地通信,而不用担心信件被别人偷看了。
在非对称加密体系中,小红制造出来的锁头和钥匙成为密钥对,一个密钥对包括一个公钥和一个密钥。公钥相当于锁头,可以随意公开。私钥相当于钥匙,必须保管好,不能让别人得到。在现实的加密过程中,小红首先生成一个密钥对,保管好自己的私钥,并将公钥发布出去。小明可以直接向小红索要公钥,也可以从公钥服务器上获取公钥。得到公钥以后,使用公钥对消息进行加密,得到消息密文,将此密文发送给小红。小红收到密文以后,用自己的私钥对密文进行解密,就得到了明文。
我发现我身边的人很不清楚公钥和私钥的作用,所以在此特别说明一下。公钥和私钥统称密钥对,其中公钥用于加密,需要公布给别人知道,这样别人才能用公钥来加密消息。而私钥必须好好保管,不能让别人知道,私钥用于解密别人用公钥加密的消息。
另在,在需要对邮件进行签名的时候,使用私钥对消息进行签名,然后别人可以使用你的公钥来验证你的签名。
一般情况下,私钥都有一个保护密码,要使用私钥解密的时候必须输入这个密码,这是为了保证私钥的安全性。如果别人不知道私钥密码,即使他得到了私钥,也很难使用这个私钥来解密密文。
中间人攻击
天朝邮政中有一个邪恶的员工,他叫做小刚。小刚这个人心术不正,有偷窥欲望,喜欢偷窥别人的信件。在以前,小红和小明没有使用盒子把信件锁起来之前,小刚经常偷看小红和小明的信件,并且乐在其中。现在小刚郁闷了,他看不到小明和小红的信件了。小刚很不满,于是他研究了小明和小红之间的通信方式,发现其中有一个很大的漏洞。利用这个漏洞,小刚又可以偷窥小明和小红的信件了。
小刚是这样做到的。他注意到小明使用的锁头都是小红寄给小明的,而锁头在邮寄过程中是要通过天朝邮政的,小刚有机会接触到锁头。于是,小刚就想出了这样一个办法。小刚自己也制作了一批锁头和一把钥匙,在小红给小明邮寄锁头的时候,他把小红的锁头换成了自己的锁头,于是小明收到的就是小刚的锁头,而不是小红的锁头。现在,小刚有了一把小红的锁头,而小明收到的是小刚的锁头。不明真相的小明不知道他收到的锁头是小刚的,还是继续用这把锁头把盒子锁上,寄了出去。
小刚在邮政系统中很容易就截获了小明寄出去的这个盒子,而盒子上的锁头正是被小刚换掉的锁头。接着,小刚用自己的钥匙打开了盒子上锁着的自己的锁头,得到了盒子中的信件。小刚猥琐地偷窥完信件内容之后,用小红的锁头锁上这个盒子,让这个盒子继续它的旅途。别忘了,小刚手上会有小红的锁头,是因为他用自己的锁头换下了小红寄给小明的锁头。
小红收到信件以后,看到盒子上的锁头还是自己的锁头,用自己的钥匙打开了锁头,得到了盒子中的信件。可她完全不知道的是,信件早就被邪恶的小刚看过了。整个偷窥过程只有小刚一个人知道,小明不知道,小红也不知道,他们都以为信件在邮寄过程中没有被别人看过。这真是一个大杯具啊。
在非对称加密中,这就叫做中间人攻击。小红发布了自己的公钥,而小明在下载小红的公钥的过程中,却遭到了小刚的干扰,下载到的是小刚的公钥,而小明却不知道自己下载回来的是小刚的公钥,仍然认为是小红的公钥。不明真相的小明用这个公钥加密了消息,直接发送给了小红。
在发送过程中,小刚又截获了这段密文,因为这段密文是小明使用小刚的公钥加密得到的,小刚自然可以使用自己的私钥解密这段密文得到明文。小刚阅读完明文之后,使用小红的公钥加密这段明文,再放行这段消息给小红。小红收到消息后,使用自己的私钥解密,完全不知道明文已经被小刚看过了。
防止中间人攻击
有一天,小明和小红终于发现小刚的恶劣行径了,也发现了他们之间通信有如此巨大的漏洞。他们要想办法解决这个漏洞。为了模拟方便,在这里我们假设,小红他们制造锁头都是一批一批制造的,每批能制造出多个完全相同的锁头和一把钥匙。但是,因为受到生产环境的影响,不同批次生产出来的锁头都会有不同的形状,而且这个形状是没法控制的,可以认为是随机出现的形状。注意到这个细节,小明和小红发现可以根据锁头的形状来确定锁头是不是小红的锁头了。
首先,小红制造一批锁头,她得到了多个形状完全一样的锁头和一把钥匙。小红仔细观察了锁头的形状,然后打电话告诉把锁头的形状告诉了小明,小明也记下了锁头的形状。小刚只是天朝邮政的职工而已,他没办法控制电话线路,就算能控制电话线路,也很难假冒小红。这样,小明就能确定电话那头小红告诉他的锁头的形状确实是小红制造出来的锁头的形状。
接下来,小红还是按着原来的方法,把锁头寄给小明,小明用锁头把盒子锁上寄回给小红。因为小明已经知道了锁头的形状,小刚就没办法替换小红的锁头了。这是因为,不同批次生产出来的锁头,形状都是不一样的,小刚没办法制造出小红的锁头形状完全一样的锁头来,这样就没法替换小红的锁头了。如果小刚使用自己的锁头换下了小红的锁头,小刚在收到锁头的时候就会发现锁头的形状和小红在电话里描述的锁头形状不一样,于是知道他收到的锁头不是小红的锁头,也就不会用这把锁头来锁盒子了。小明可以要求小红再寄一把锁头给他,小明知道,只有收到形状完全和小红在电话里描述的形状完全一样的锁头,那才是小红的锁头,才可以用来锁盒子。
在非对称加密中,上面说的锁头的形状其实就是公钥的哈希值。小红生成自己的密钥对并发布公钥之后,还要将公钥的哈希值通过可信的方式告诉小明,小明下载回小红的公钥以后,首先要计算公钥的哈希值,如果哈希值和小红告诉他的哈希值相同,才能确定这就是小红的公钥。如果哈希值不同,那就有可能是遇到中间人攻击了。
在公钥服务器上,我们可以以自己的电子邮件地址来发布公钥,别人也可以通过这个电子邮件地址来查找公钥。假设小红在公钥服务器上以“hong@gsea.com.cn”发布了自己的公钥,公钥哈希值是0×12345678,并将这个值告诉小明。小明在公钥服务器上通过“hong@gsea.com.cn”来查找公钥,找到标记为“hong@gsea.com.cn”的公钥以后,要计算一下公钥的哈希值是不是0×12345678,如果是的话,就可以确定这个是小红的公钥。
好用的 PGP 软件以及吐槽
雷鸟(Thunderbird)插件 Enimail
火狐(Firefox)插件 FireGPG
其实我也就知道这两个软件而已,其中我用着 Enimail,包子用着 FireGPG,其他人……不知道。
我觉得防止中间人那段做的比喻很不好,但是我想不出更好的方法来模拟说明。我觉得我已经把非对称加密的过程说得很清楚了,如果还看不懂的话,不要试图怀疑我的语文水平,再去找其他文章看吧。最后,欢迎吐槽。
F-22's Trace
greensea 的个人主页
sky-city
极夜奁
小樱之町
刚注意到这么一句话
“在使用天朝公司提供的电子邮箱时,谁都不知道我们的邮件内容是不是没有被检查”
时间攻击偶尔可以有效果的。。
比如每次出现某事件的时候你都恰好提前给某人发了一封邮件
目前为止经常加密的肯定是少数
虽然不太方便用这种方法查吧。。但是很可疑
orz
问我用不用twitter就是这原因啊。。
t41088
然后id都不问一下的,虽然也没必要吧。。
如果你回答用的话我才会问帐号的说
西语言的逻辑判断是灰常高效的,嗯。好吧实际上这是汇编要求高效的
啥概念,我刚注册完难道twitter挂了?
恭喜,我刚刚下课回来也发现推特挂掉了,过了一会https能访问,但是http依旧访问不能
twitter?
不上
twitter真是个浮躁地方
不过看了一下twitter有rss输出所以等我已经拖了这么长时间以后再拖一段时间终于开blog了之后顺便上一下还是很有可能的
呃,那么趁现在注册个号吧。。。所有回复都写在自己的版面是很扯淡的事而且我认识的人大概会比较杂?所以不打算说话
绝对可信的没有,几乎可信的还是有的
替换掉密钥也就必须替换掉通过加密方式发送的与这个密钥有关的东西
有人根据密钥指纹出一道数学题,有人根据密钥指纹写一首诗,拖死他
在加上几个“限n分钟之内回复”,还有多少中间人能搞定?
要是有的话他也只能搞定一两个人,互传密钥的时候低调点不说自己要干啥,顺便普及一下就可以了
不过通过程序自动验证的方法恐怕是没有
我记得QQ以前只会对群消息过滤?难道现在改了?
求那个带此功能的域名注册商
非对称加密的意义在于,公钥可以在网络上不安全的传播而不造成其它影响(除非被篡改)
还有就是每个人只需要保管自己的密钥,可以按照自己的规律更新,泄漏的风险也小一点
实际上要是两个人能够通过安全的方式交换密码并且保证不外泄的话,用密码加密也没什么不好
一般的防止中间人攻击的方法都要求有个“绝对安全”的交流方式,但是如果认为所有其他人都是邪恶的的话,这有的时候不可行
比如说在网上认识的人,如果互相没有见过,且最开始是在一个没有加密的论坛之类的地方认识,那么中间可以有人把所有的其它联系信息都改成自己可以控制的信息
要是那个论坛是加密的,但是不受两者之一的控制,论坛本身还是可以篡改这个信息
就算受两者之一控制,我们能保证加密网站的安全性是因为操作系统和浏览器都会内置CA的公钥,要是CA作恶的话还是会出问题
解决这个问题的方法,呃,主要是利用中间人的智力一般未必很高这个性质
具体还没想好,略
因为在无法直接见面的情况下没有绝对可信的通信渠道,所以只能选择一个可信度相对较高的通信渠道来交换公钥的说
话说忘记了,当时我是在找域名服务商,碰巧看到有一个域名服务商提供此功能,但是我灭有选中那个域名服务商来注册域名,现在我也不记得那个服务商是哪个了。你有耐心的话慢慢找找各大墙外域名服务商应该能找到。
顺便问下,您上推不?
呃,这样貌似更囧,应某人要求匿名是不是说此人有特殊不正当动机呢。。代孕
建议使用[url=xxx标签来屏蔽
话说不过屏蔽的留言可能我一个月以后才能看到
那删去括号好了
这条留言要删除灭?要回复1,不要回复0
吐槽1:难道你以后要去做科普作家?
貌似虽然不会,但是可能会偶尔抽风写写科普小文
啊咧?小文不就是你灭
吐槽0:
在发送过程中,小刚又截获了这段密文,因为这段密文是小明使用小刚的公钥加密得到的,小刚自然可以使用自己的【公钥】解密这段密文得到明文。
=》私钥
囧,自己把自己给写晕了,看来我处在混沌状态中