有关杀毒软件的设计问题

有效的杀毒软件用来寻找已经被传播的病毒或者计算机操作系统的异常活动。理想的杀毒程序应能发现所有的病毒,包括那些还没有进一步发展或传播的病毒。如果不管给定什么样的输入,一个程序都不会改变操作系统,那么称这个程序是安全的。假设有一个理想的查找病毒程序Safe,对任一程序P,它都能判断是否P对于输入I是安全的。
SafePI=
其中,Safe(PP)代表一个当用P自己的拷贝作为输入来运行P时,P是否安全。
假设有这么一个程序Deceptive,给定程序P作为输入,调用Safe作为子程序,其定义为:
DeceptiveP)=
那么当用Deceptive自己的拷贝作为输入而运行Deceptive时,他是安全的吗?

1
)首先让我们假设他是安全的。那么,有Deceptive的定义,子程序Safe对自变量对(DeceptiveDeceptive)的返回值一定是“false”。这与Safe的假设相矛盾。

2
)假设相反情况成立。即在Deceptive本身上运行Deceptive时,他的确改变了操作系统,因此Deceptive是不安全的。这种情况的出现或者由
1
)调用程序Deceptive作这个改变,或者由
2
)子程序Safe作这个改变。我们检查每一种可能性。
ASafe返回值true,与Safe的假设相矛盾。
BSafe返回值false,在这种情况下,Safe是正确的,而Deceptive本身是不安全的。因为Deceptive的定义中只有两种陈述,即一个是对Safe的调用,一个是写一个陈述句,对Safe的调用肯定改变了操作系统。因此,Safe本身是不安全的。


试分析上面的结论是否成立?
如果你觉得结论不成立,请指出错误发生在何处,并试着指出设计一个安全杀毒软件的关键在哪里,说明理由。
如果你觉得结论成立,那你是否觉得设计杀毒软件是没有意义的工作,因为其本身的安全性无法保证,能否试着给出一个安全杀毒软件的原型。






有谁能帮忙解答一下吗?一点点也行啊 。

用户系统信息:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30618)