如何从头开始编译C编译器,然后从头开始编译Unix / Linux

假设我在美国/英国以外的大型服务机构工作.我们广泛使用UNIX和Linux服务器.

阅读this article它提到将后门插入C编译器很容易,然后用该编译器编译的任何代码也将包含后门.现在鉴于最近有关NSA / GCHQ要求在所有加密方法,硬件和软件中加入后门/弱点的漏洞,编译器现在是一个关键的失败点.可能所有标准的UNIX / Linix发行版都会受到攻击.我们不能让流氓*妥协我们的系统,数据和客户数据.

鉴于这些信息,我想从头开始构建一个可靠的编译器,然后我有一个安全的基础,所以我可以使用该编译器从源代码构建操作系统和应用程序.

从源代码编译编译器(一个看似鸡蛋的场景)然后从头编译可信的Unix / Linux发行版的正确(和安全方式)是什么?

您可以假设我或其他人有能力阅读和理解安全漏洞的源代码,因此源代码将在编译之前首先进行审查.我真正追求的是一个安全地从头开始生成这个编译器的工作指南,可以用来编译内核,操作系统的其他部分和应用程序.

如果我们要对操作系统或在该堆栈上运行的应用程序有信心,则安全堆栈必须从基础级别开始.是的我知道可能有硬件后门可能会在编译时将一些微代码插入到编译器中.除了可能使用非美国设计的芯片外,目前我们无能为力.让我们将这一层排序为一个开始,并假设我可以在插入任何后门之前在旧计算机上构建它.

正如Bruce Schneier所说:“对于工程师,我这样说:我们建立了互联网,我们中的一些人帮助颠覆了它.现在,我们这些热爱*的人必须解决这个问题.”

额外链接:

> http://nytimes.com/2013/09/06/us/nsa-foils-much-internet-encryption.html?pagewanted=all&_r=0
> http://theguardian.com/commentisfree/2013/sep/05/government-betrayed-internet-nsa-spying

解决方法:

AFAIK是完全确定安全性的唯一方法是用汇编语言(或modifying the disk directly yourself)编写编译器.只有这样才能确保你的编译器没有插入后门 – 这是有效的,因为你实际上完全取消了编译器.

从那里,您可以使用from-scratch编译器来引导,例如GNU工具链.然后,您可以使用自定义工具链来编译Linux From Scratch系统.

请注意,为了使自己更容易,您可以使用C语言(或其他任何语言)编写第二个中间编译器.因此,您将在汇编中编写编译器A,然后在C/C++ / Python / Brainfuck /中重写该编译器以获取编译器B,您将使用编译器A编译.然后您将使用编译器B编译gcc和朋友.

上一篇:JavaScript 运行原理


下一篇:linux – 如何继续编译?