两个程序的爱情故事(续)

上文:两个程序的爱情故事

两个程序的爱情故事

我这个进程和她不在一个机器上, 虽然相距243毫秒,但是这并不是阻碍我们交往的理由, 我每天都通过socket 和她来通信,诉说相思之情。

不要惊讶我用时间来表示距离,人类好像也是用光年来表示宇宙间的距离吧? 在我们计算机世界, 距离不是有意义的标识,时间才是! 你看我和纽约相距1万多公里, 我和那里的机器沟通只需要花费466毫秒, 但是和北京的另外一个机器沟通竟然需要743毫秒! 可见距离近是不管用的!

最近黑客猖獗, 我和她通信的时候总是有一种被偷看的感觉, 实际上确实是这样, 那些只有我们才可以知道的悄悄话被别人偷窥,甚至曝光了。

我和她商量着要保护隐私,要对我们来往的信件加密, 可我听说加密需要密钥, 这个密钥必须双方都得事先知道才行, 我用密钥加密,她用同样的密钥解密。

2017071404

那问题就来了: 加密解密算法是公开的, 但是密钥是私有的,当我们俩通过网络协商密钥时, 黑客可能就把密钥也给偷看了, 那加密就毫无用处。

这可真是伤脑筋, 我说:“要不我到你那儿去一趟? 正好看看你, 你可以面对面的把密钥告诉我。”

她说: “你晕头了吧, 你一个进程怎么可能从一个机器来到另外一个机器?”

我自知失言,马上补救: “ 这样吧, 我们机器上有个U盘, 要不我把密钥写到那里, 这样将来可以Copy到你的机器上”

“那更不行了, Copy到U盘上更容易泄露,速度还慢! ”

我是没辙了,长时间的沉默。

她突然说:“我想起来了,我们机器有个进行数学计算的进程,知识渊博,我去问问他”

我焦急地等待,不知过了多少毫秒, 女朋友终于兴冲冲的回来了: “那个数学进程小帅哥真是厉害,我简直佩服死了, 他告诉我了一个非常简单的办法 , 能解决我们的密钥生成问题”

我心里略微不爽,但还是耐着性子,一边听她说,一边写了下来,这个算法确实很简单, 举个例子来说是这样的:

1. 首先我和她先协定一个质数 p=17以及另外一个数字g=3, 这两个数字是公开的, 黑客拿去也没有问题

2. 我选择一个随机的秘密数字x = 15, 计算a = g15 mod p并发送给她。
a = 315 mod 17 = 6.
这个a=6也是公开的

3. 她选择一个随机的秘密数字y=13, 计算b = g13 mod p并发送给我。
b = 313 mod 17 = 12.
这个b=12也是公开的

4. 我拿到她发给我的b = 12 , 计算s = b x mod p ->1215 mod 17 = 10

5. 她拿到我发给她的a = 6, 计算s = a y mod p -> 613 mod 17 = 10

(注:例子来源于wikipedia, 红色表示数字一定要保密, 绿色表示数字可以公开)

最后神奇的魔法发生了, 我们两个得到了同样的值 s = 10!

这个s 的值只有我们两个才知道, 其实就是密钥了, 可以用来做加密解密了( 当然,这只是一个例子,实际的密钥不会这么短), 我们俩的通讯从此就安全了。

“可是为什么会这样呢” 我问道。

“数学家小帅哥说了, 原因很简单,(gx mod p)y mod p 和 (gy mod p)x mod p 是相等的! ”

“那黑客不能从公开传输的 p = 17, g = 3, a = 6 , b = 12 推算出s = 10 吗?” 我问道。

“当然不能, 不过前提是需要使用非常大的p , x, y, 这样以来,即使黑客动用地球上所有的计算资源, 也推算不出来。 ”

我虽然心里不爽, 但还是暗自佩服那个数学家, 他竟然能想到把一些数字给公布出去,不怕黑客窃取, 还不泄露最终的密钥。解决了在一个不安全的通信环境下,生成密钥进行加密和解密的问题。

好吧,就用这个方法来加密通信吧。

后记:文中描述的算法叫做Diffie-Hellman Key Exchange算法, 发明人是 Whitfield Diffie 和 Martin Hellman ,他们于2015年获得了计算机科学领域的最高奖:图灵奖,以表彰他们对密码学和当今互联网安全的巨大贡献。因为他们的创造,引发了对一个新的密码学领域,即非对称密钥算法的探索,而非对称密钥算法可以看作现代密码学的基础。

上文:两个程序的爱情故事

两个程序的爱情故事

本文来自:码农翻身(微信号:coderising)

相关推荐

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址