是否已在数学上证明防病毒软件无法检测到所有病毒?

信息安全 恶意软件 病毒 杀毒软件 检测
2021-09-06 23:50:26

布鲁斯·施奈尔 (Bruce Schneier) 写道:

病毒没有“治愈方法”。数学证明,编写任何现有防病毒程序都无法阻止的病毒总是有可能的。

摘自布鲁斯·施奈尔 (Bruce Schneier) 的《秘密与谎言》一书,第 154 页。

4个回答

在对此的一种可能解释下,这是赖斯定理的结果。如果程序执行某些恶意操作,则程序是恶意的,这使其成为语义属性。有些程序是恶意的,有些不是,这使它成为一个重要的属性。因此,根据赖斯定理,在一般情况下,程序是否恶意是不可判定的。

实际上,可以很容易地证明相反的情况:由于所有计算机病毒都以某种方式是可执行代码,因此您所要做的就是编写一个防病毒程序,它将报告任何可执行代码为病毒。从逻辑上讲,这样的程序将检测所有可能的病毒

  • 您的防病毒软件检测到所有代码 (C → D)
  • 所有病毒都是代码(V→C)
  • 您的防病毒软件检测到所有病毒 (V → D)

当然,关于这个防病毒软件吐出太多“误报”的说法是有争议的。但是,判断阳性是假还是真的标准是什么?啊! 原来良性代码和恶意代码之间的区别,诚实的“远程 PC 控制”套件和像 Netbus 这样的木马之间的区别是完全任意的,所以整个问题毫无意义。

根据维基百科:

1987 年,弗雷德·科恩 (Fred Cohen) 发表了一个论证,表明没有一种算法可以完美地检测出所有可能的病毒。

它也参考了这篇论文这可能是施奈尔先生所指的分析。

除非将其重新表述为数学命题,否则该陈述无法在数学上得到证明。

至少,这需要对什么是“病毒”有一个数学上合理的定义:这是具有挑战性的;你最终可能会得到一个在实践中没有用的抽象,因为它包含了一些人们认为完全良性和有用的行为,和/或排除了一些人们认为反社会的行为。

这里的难点在于,病毒是一种以某种方式改变其环境的程序,任何严格定义环境的尝试都会对实际使用造成太大的限制。

所以我会说不:这个命题不能被数学证明,那是因为它不能被数学公式化。