不靠谱的世界

《Web性能权威指南》中,开篇就颠覆了我的三观。

在开发软件的时候,我们总是力求一切都犹如精密的齿轮一样运行起来,确保正常的异常的处理都可以如预料一样万无一失。

但是作为互联网底层的世界,却与我想象中的样子大相径庭。

在互联网的背后,一切数据传输都是横冲直撞,不顾后果的。就像是管理不善的运输公司,你的包裹能不能顺利完整的到达,都是看上天的安排。在互联网这里,暴力分拣,丢包裹,爆仓,交通堵塞,代签代发,就是不送,延迟送件比比皆是。更有甚还有层层设卡进行拆包审查的。

可怜的传输层与应用层们要在这种情况下,将自己的包裹有序的传来传去,并且不会出现问题。这样TCP就担当起了此重任,确保发货收货双方的链路顺畅,并且还能实时根据运送能力改变发件频率。简直神设计。。

关于安全

信息安全靠什么,数学。

TLS之所以安全,是因为其使用了人类目前脑洞能够想到的最安全的加密算法与安全机制了。

正常来说,使用单纯的HTTP进行数据传输的时候,下面一层直接就是TCP/IP(上篇文章讲到,是个在非常不靠谱的世界保持靠谱的存在)。这样数据包会经过层层官网,代理,转发,缓存等,如果其中一个环节有人心怀不轨,传输内容就都曝光了。

然后大救星出现,就是前SSL,现在叫做TLS的东西。

TLS的位置在HTTP的下方,TCP/IP的上方。这样保证了对应用程序的隐藏,开发者不用想太多,照常写就好了。

TLS之所以安全,是因为使用了一脑洞算法------RSA。

RSA利用了最简单的数学原理,分解质数。当然具体的算法很复杂。如果哪天有个脑洞更大的人找到了快速分解大数质数的方法,那么RSA就直接被淘汰了。不过目前并没有。

如果说RSA只是一般的加密算法,就是同样的口令,你一份,我一份,我用来加密,你用来解密,那也算不上脑洞最大的加密算法。因为如果是这样的话,加密秘钥就是解密秘钥,好家伙,每个和我进行加密通讯的人都要事先知道秘钥,那我怎么把秘钥给他啊,自己过来拿?如果谁不小心泄漏了,好家伙,那就不叫加密通讯了,和明文一样了。这样肯定不靠谱。

RSA的伟大之处在于,通过数论,弄出了非对称加密,就是钥匙有两份,一份随便公开,一份我自己留着,谁想和我说悄悄话,就自己去看公钥,然后加密,发给我,我进行解密就能看到了。别人没有私钥,就看不到。(前提是我保管好了私钥的前提下。不过这也比所有人都保管好一个密码要靠谱吧)

但是,如果TLS只使用RSA进行数据加密就毁了。因为RSA进行的大数计算很慢,所以RSA只用来加密对称加密的私钥,就是说,你用RSA加密了另一个用来加密解密的密码给我,然后我用RSA的私钥解密了密码,我就知道了咱俩该用啥通讯了。这样既满足了速度,又满足了安全。

Salesforce目前并不支持RSA公钥加密,不过有个神人自己写了一个实现。。。

 

 

题外,不得不说,这本书的翻译还真是烂。。