我可以放多少信任计算机系统?我如何衡量信任?

时间:2009-04-08 23:13:44

标签: operating-system reliability

我可以在运行Windows的标准计算机中放多少信任?我可以肯定它会以我写的方式运行我的代码吗?我怎么能确定如果我声明像“int j = 5;”这样的东西,j总是5?有没有办法衡量标准x86计算机系统的信任?有什么样的保护措施可以确保j = 5?

我正在考虑关键系统,即使只有一点也没有任何东西可以关闭,一切都必须完全按照它的运行方式运行。

4 个答案:

答案 0 :(得分:4)

如果“即使只有一个位也无法关闭”,一般来说,这样做的唯一方法就是拥有三台计算机:

  • 所有必须使用不同的硬件
  • 所有必须使用不同的OS; s
  • 应用程序软件必须由不同的人编写
  • 必须使用不同的编译器编译应用程序

所有三台计算机都有相同的输入并计算输出。如果两个或多个输出相同,则接受此操作,否则将标记错误条件。

你可能会发现这个完整的系统从未在实践中使用,althogh变体用于航空电子设备和类似的关键系统。

答案 1 :(得分:2)

是否有人恶意改变您的代码以执行您未编程的操作?或者它是否有可能随机错误搞乱你的计算?在后一种情况下,您可能不必担心,因为现代计算机上的错误率大约是10 ^ 17中的错误率 - 每年每个处理器少于1个,即使这是不可容忍的,您也可以使用错误纠正算法将有效错误率降低到接近零(以需要更多时间进行给定计算为代价)。

如果是黑客,你会担心,但是......根本就没有安全的期望。原则上,对计算机进行物理控制的人可以对其进行修改以完成任何可以由计算机完成的操作。如果他们愿意,他们可以随意拆解代码并随意修改汇编指令,使程序按照他们的意愿行事。但是,我们通常不会在实践中担心这一点,因为我们大多数人都没有写任何值得努力破解的东西。那些是,例如设计军事加密硬件或核导弹控制芯片的程序员可以依靠防篡改硬件,这使得改变代码非常困难。 (但那些东西可能很贵)

你可能想看看Ross Anderson所着的一本名为“安全工程”的书,该书描述了一些防篡改硬件,以及真正需要保护他们的人的一般情况。代码可以这样做。

答案 2 :(得分:1)

基本上没有。您应该阅读this文章,并考虑重新评估您的信任概念。 : - )

答案 3 :(得分:1)

像“j = 5”这样简单的东西不能绝对信任。

有很多方法可以产生单个位错误:

  • CPU确实有勘误表。
  • 硬盘驱动器在老化时可能会返回错误
  • 记忆可能被宇宙射线破坏
  • 松/脏/等。系统中任何地方的连接。
  • 驱动程序会破坏内存(包括代码页)。