OpenSSL 必死无疑,永远不会有改善

OpenSSL软件包大概有30万行代码,这意味着其中可能仍然存在着大约299个bug,现在就是心脏出血的bug — 这使得几乎任何人都可以检查其通常无权被访问的内部状态 — 它已经被修复了.

这的确是所有你需要知道的,但你也得清除,这不会让我消停下来,是不?

理论上要确保一个计算机网络连接的安全并不真的很艰难. 首先你可以让技术过硬的密码学专家设计一些加密的构造块. 你将会需要一个好的散列功能,一个好的对称加密算法,以及一个好的非对称加密算法. 接下来你可以让技术过硬的加密协议设计者来定义这些构造块如何以一种极为详尽的方式捆绑在一起. 然后是一个技术过硬的API设计者来定义应用程序如何通过一个带有精心选择的可靠的默认值,以及一个好的错误报告机制的,深思熟虑并且具有容错机制的API,访问到协议. 然后是让技术过硬的程序员根据API完成对算法和协议高质量的编码实现,并且全部通过分析和审核. 而在此之后,应用程序的开发者 - 他们可以是任何什么人,但通常都技术过硬 - 最后会写段代码来打开一个受保护的连接.

相关阅读:

OpenSSL TLS心跳读远程信息泄露漏洞 (CVE-2014-0160)

OpenSSL严重bug允许攻击者读取64k内存,Debian半小时修复

OpenSSL “heartbleed” 的安全漏洞

通过OpenSSL提供FTP+SSL/TLS认证功能,并实现安全数据传输

但我们的事情还没完呢.

我们需要确保编译器将高级语言写就的代码正确的翻译成机器语言指令. 而这之后技术过硬的编译器开发者才能做到啊! 我们还需要确保计算环境值得信任 — 系统库和操作系统内核中不能有漏洞,错误,后门,或者恶意软件. 而这又该由谁来负责呢? 你答对了,很明显该是技术过硬的内核开发人员! 而当然如果CPU不老老实实的去执行指令,所有这些全都白费, 技术过硬的CPU工程师无疑将发现这一点.

现在 — 直到最终 — 我们才可以保护将一张小猫图片从一台计算机到另一台计算机的传输.

这不是那么糟糕的,是不是呢?

如我所指定的这样一个梦之队也并不是完全无懈可击,就好像 OpenSSL 中会包含如下的代码:

/*
* The aim of right-shifting md_size is so that the compiler doesn't
* figure out that it can remove div_spoiler as that would require it
* to prove that md_size is always even, which I hope is beyond it.
* (向右移动md_size的目的是,由于编译器不会如我们所期望的考虑到它可以移除
* div_spoiler,这需要它先证明md_size总是偶数,我觉得这超出来它的处理能力)
*/
div_spoiler = md_size >> 1;
div_spoiler <<= (sizeof(div_spoiler)-1)*8;
rotate_offset = (div_spoiler + mac_start - scan_start) % md_size;

老实说 — 在我向你指明这点之前,你会想到会有一个成熟的,正确的,经过编译器改善的安全风险吗?

你当然不会!它已经被证明是正确了的,对吧?

而那里就是我们的安全模型——如果你称它是安全模型的话——发生故障的地方. 这里涉及如此多的代码,因而如果出问题的话,没有人会有线索.

在我的计算机上面的数量大概是:

Operating system Kernel:        2.0 million lines of code
Compiler:                      2.0 --//--
C language runtime library:    0.5 --//--
Cryptolibrary:                  0.3 --//--

涉及到每一个额外的编程语言,都将增加大约一百万行. 使用一个图形用户界面技术是这个数量的两倍, 而一个浏览器则又会再翻倍. 一个合理的估计是你读这篇文章的电脑至少有100,但更可能是1000个漏洞,这些漏洞牺牲了你的安全性. 如果这些漏洞对于你的计算机而言是独特的,那还不会太糟糕。但实际情况却不是这样的,成百万成百万的计算机上都有完全相同的漏洞,并且每一个漏洞都有爆发的潜在可能. 还有 — 因为如果这利用漏洞的难度不够大的话 — 有些人会积极地尝试去对结果搞破坏,为的是使得“情报收集”更加的简单实惠. 显然我们的梦之队的一些技术过硬的工程师和科学家会有隐藏的动机 — 否则NSA的领导们就有点太无能了.

再就是证书颁发机构。他们的工作是充当“信任锚”,这样一旦你已经建立了一个安全连接,你也可以知道你是在和谁通信。

CA的可信性是一个笑话.

你会相信:

T&Uuml;RKTRUST BİLGİ İLETİŞİM VE BİLİŞİM G&Uuml;VENLİĞİ HİZMETLERİ A.Ş (T&Uuml;RKTRUST数据通信和信息安全服务,INC).

用它来认证进入你银行的连接吗?

你甚至不知道 "G&Uuml;VENLİĞİ HİZMETLERİ" 是什么意思,对吧?

我当然不会知道啥意思,而且我也不信任他们!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/856147bda6ffa8543ca6d6303fe6f239.html