布鲁斯·施耐尔(Bruce Schneier)写道时,他指的是什么分析?在数学上已经证明,总是有可能编写任何现有的防病毒程序都无法阻止的病毒。 />

评论

我认为首先要对计算机病毒的含义进行完整而正式的定义已经不可能,也就是说,要确切描述“恶意”是什么。但是,为了辩论可决定性与不可决定性的问题,需要这样的定义。但是,即使您找到了一种有用的尽管定义不完美的方法,但由于停顿问题,它仍可能是不确定的。

帖子已被锁定,因为它引起了大量的猜测和见解。问题是询问另一篇文章中引用的论文的来源。

这个问题让我想起了道格拉斯·霍夫斯塔特(Douglas R. Hoffstadter)的一次对话,解释了哥德尔的不完全性定理:genius.com/Douglas-hofstadter-contracrostipunctus-annotated
停止问题说是?如果您不能确定程序是否停止运行,则似乎会发现您也无法确定程序是否存在恶意行为/是病毒。

您的标题提出的问题与报价中提出的问题不同。引用声称并非所有病毒都可以被阻止。这显然不同于询问是否都可以像您的标题中一样检测到它们。 (这是真实的情况,因为可以在不检测到病毒的情况下将其停止)

#1 楼

在一种可能的解释下,这是赖斯定理的结果。如果程序执行某些恶意操作,则该程序是恶意的,这使其成为语义属性。有些程序是恶意的,而有些则不是,这使其成为不平凡的财产。因此,根据赖斯定理,一般情况下无法确定程序是否为恶意程序。

评论


更不用说,“恶意”是几乎完全主观的术语。我已经看到反汇编程序被标记为恶意软件,因为反病毒作者显然认为逆向工程是“恶意”的事情(即使我不认为有人不想在计算机上说反汇编器会终止在那里)。

– Doktor J
19年1月25日在20:17

@DoktorJ:重点是,即使您为“恶意”提出了一些严格的非语法定义(无论该定义是否遗漏了某些病毒或包含了某些非病毒),仍然不可能标记所有/仅恶意程式。

– BlueRaja-Danny Pflughoeft
19年1月25日在22:49



@StéphaneChazelas自我复制也是一个重要的语义属性,因此无法确定。

–The_Sympathizer
19年1月26日23:49



我认为赖斯定理仅在您必须提前决定程序是否为恶意程序以及是否允许误报时才适用。如果病毒扫描程序可以例如拦截API调用,修改程序(例如,插入运行时检查)并偶尔拒绝“安全”程序,则应该有可能证明安全性。基本上就是这样Java VM可以提供安全保证,不是吗?

–尼基
19年1月28日在18:07

@JeroenMostert:不,它与静态分析与运行时分析无关。区别在于定义是语义的还是语法的。 “允许程序执行的动作列表”是一个语法定义。这就是为什么编写沙箱比编写防病毒程序要容易得多的原因。

– BlueRaja-Danny Pflughoeft
19年1月28日在23:11



#2 楼

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


防病毒程序检测到所有代码(C→D)
所有病毒均为代码(V→C)
您的防病毒软件(V→D)可以检测到所有病毒。

当然,可以对这种防病毒软件拒绝过多的“误报”提出质疑。但是,确定阳性是假还是假的标准是什么?啊!事实证明,良性代码与恶意代码之间的区别,诚实的“远程PC控制”套件和类似Netbus的木马之间的区别是完全任意的,因此整个问题毫无意义。

评论


可爱。我的意思是,完全无关紧要,但又可爱又聪明。

–杰克·艾德利(Jack Aidley)
19年1月23日在14:39

@supercat,您的版本存在的问题是,您需要提出可以通过编程方式应用的“病毒行为”的定义。例如,一个Javascript比特币矿工在访问《纽约时报》网站时可能像病毒一样,但是在访问Joe's Discount Pirate Software时却表现出预期的行为。在使用FDE软件进行加密时,对硬盘驱动器的内容进行加密可能是一种好习惯,而在使用勒索软件进行加密时,则可能像病毒一样。

–马克
19年1月23日在21:17



该防病毒程序会将自己检测为病毒并关闭,使其无法检测其他任何东西。

–核糖薄饼
19年1月23日在21:43

@supercat在操作员同意的情况下会安装许多病毒,但是请执行操作员不同意的操作。但是,如果您阻止自动运行,那么重新启动会杀死它,而不会带来副作用。

– Poik
19年1月23日在22:41

听起来像是仅将想要的程序列入白名单的论点,例如在仅安装要测试的软件的存储库中(也许甚至是FOSS,与大多数Linux存储库一样),以至少避免故意安装恶意程序

– Xen2050
19年1月24日在10:53



#3 楼

据维基百科:


1987年,弗雷德·科恩(Fred Cohen)发表了一篇论证,其中没有一种算法可以完美地检测所有可能的病毒。也参考了本文。那可能就是施耐尔先生所指的分析。

评论


Schneier在此声明,这是他稍后在另一种情况下发表非常类似的声明时所指的结果:schneier.com/blog/archives/2009/07/making_an_opera.html

–史蒂夫·杰索普(Steve Jessop)
19年1月23日在11:31



@Stephan:对于每个可能的二进制文件,都有一个虚假的平台和一个虚假的平台。该定理比莱斯定理更强,因为它也适用于超级计算机。

–约书亚
19年1月23日在16:47

@ user1067003,我不是计算机科学家,但是我很确定短语“没有算法”意味着没有可能的算法,而不仅仅是没有已知的算法。否则,这将不是一个非常有趣的结果。 (尽管书面证明可能仅适用于经典计算机,但可能需要重做以涵盖量子计算机或任何其他更深刻的体系结构。)

–哈里·约翰斯顿(Harry Johnston)
19年1月24日在20:45

该答案在很大程度上依赖于外部链接来回答问题。您能否总结一下该论文的论点?

– Philipp
19年1月25日在8:52

@HarryJohnston:在可计算性方面,量子计算机等效于图灵机,所以不,它不需要重做。实际上,几乎每位计算机科学家都认为,每台可物理实现的计算机充其量都相当于图灵机。

– BlueRaja-Danny Pflughoeft
19年1月25日在22:57



#4 楼

除非将其重新表述为数学命题,否则该声明无法在数学上得到证明。并且您可能会得到一个在实践中没有用的抽象,因为它包含了一些人们认为完全良性和有用的行为,并且/或者排除了一些人们认为是反社会的行为。

这里的难点在于,病毒是一种以某种方式改变其环境的程序,任何严格定义环境的尝试都将在实际使用中受到很大限制。该命题无法在数学上得到证明,这是因为它不能用数学公式表述。

评论


一个反例:我将专门研究原始问题(失去其一般性),方法是将病毒定义为在不带参数运行时调用rm -rf / *的任何bash脚本;并且我将防病毒定义为bash解释器的版本,该版本拒绝执行rm -rf / *命令。希望您同意,我们可以严格按照数学定义“ bash解释器”,“ execute”等的含义。我只是对原始问题提出了一个较弱的说法吗?这是否证明您不能以数学方式表述?是的,是的。

– ulidtko
19年1月23日在18:36



@ulidtko不行。您不能随意将病毒定义为您想要的任何病毒。否则,我可以将病毒定义为“其名称中具有“防病毒”的软件”,这将无助于讨论,因为这是哲学的讨论,而不是安全性或数学的讨论。实际上,您对病毒的定义就像说“我将偶数集定义为{2}”。如果需要,请继续创建这样的系统,但是您并没有因此而驳斥。正如迈克尔所建议的那样,“病毒”在数学上不能以任何对该对话有用的方式定义。

–亚伦
19年1月23日在20:48

回复:“至少,这需要在数学上正确定义'病毒'是什么”:不一定。如果存在适用于“病毒”的任何定义的特征,则您可能可以在数学上形式化某些特征,而无需产生特定的完整定义。该部分表征足以让您应用赖斯定理。

–ruakh
19年1月23日在21:16

@ulidtko在同一基础上,我可以将病毒定义为发送电子邮件的任何程序。我确定我可以对此类程序进行一些推理,但是对于普通人在现实世界中被归类为病毒的程序类,它不会告诉我。

–麦凯(Michael Kay)
19年1月23日在22:07

@MichaelKay:我知道;我只提到赖斯定理作为您的陈述不正确的一个例子。很抱歉,如果不清楚。

–ruakh
19年1月23日在22:17

#5 楼

tl; dr-答案取决于您对该问题施加的要求是什么。 ,就可以了。


如果您想正确地将所有程序识别为病毒,那么在无限制的情况下是不可能的,因为分类问题可以简化为停顿问题。 。


如果您想将所有程序正确地识别为病毒还是非病毒,并且您正在考虑使用一台有限的机器,那么从理论上讲这是可行的,但实际上通常不可行。 />

如果允许计算机产生随机错误,则任何程序都可以是病毒。


情况1:完整的病毒检测
显然,将所有程序标记为病毒可以将它们全部捕获。 (Pok'e'mon!)
从这种情况开始,指出要检测所有病毒并不困难;相反,特定的理论问题是当程序是病毒时才正确分类。
情况2:在一般的无限制情况下不可能正确地分类
考虑程序:
doHaltingProblem();          //  Not a virus operation itself
installEveryVirusEver();     //  Definitely a virus operation, but will it happen?
在这种情况下,仅当停止问题停止运行时,该程序才是病毒,从而使installEveryVirusEver()发生。因此,在没有约束力的一般情况下,病毒检测可以减少停顿问题。
情况3:在受限情况下可以通过强力搜索进行搜索
在有限的机器上运行,那么您可以简单地模拟从每种可能的启动状态开始运行的机器。有限的计算机最终将循环回到先前的状态,因此它必须是有限的(如果是冗长的)分析。
案例4:可能出错的计算机可以自发出现病毒
假设一台机器可以运行被视为病毒的程序,并且随机突变将其转移到该状态的可能性不为零,那么它最终应该会进入病毒状态。

讨论问题中的报价

病毒没有“治愈方法”。数学上已经证明,编写任何现有的防病毒程序都无法停止的病毒总是可能的。在上述情况(1)中,可以通过仅将所有内容标记为病毒来标记所有病毒;这很容易。在无约束的情况下,不可能确定每个可能的程序是否都是病毒。
此外,很难确定特定程序在受约束的情况下是否为病毒。例如,考虑以下程序:如案例(3)所述,在有限的计算机上运行时,该程序可以归类为病毒或非病毒,但是这样做可能需要蛮力。 -强制使用加密的消息,在实际情况下不太可能。或者,如果您想要更可靠的安全性,则可以让防病毒程序标记任何它证明不安全的内容,从而避免了需要对每个可能程序进行分类的问题。知识渊博的攻击者将安全漏洞作为目标。在没有阅读报价来源的情况下,我怀疑这是他们试图引用的问题。

评论


情况(4)不仅无聊,而且表明了更可能的情况和有问题的情况。考虑一个包含一些调用的代码,如果(cannotHappen)installEveryVirusEver();如果机器工作正常,则无法发生在无法发生的地方,但是如果机器超频,则很可能发生。如何正确分类?

–汉斯·奥尔森(Hans Olsson)
19年1月25日在12:34

@HansOlsson是的,它需要对本体进行泛化,以捕获与确定性模型不太吻合的问题;大概我们必须考虑可能结果的整体,然后根据我们认为它们的安全性对它们进行分类,或者只是承认,即使没有设计程序,总体上它们也可能会恶意运行。我希望对诸如“行锤”之类的问题表示赞同,在该问题中,无错误操作的假设会真正使分析混乱。

–纳特
19年1月25日在12:42



“强行强制加密消息”为什么不在沙盒中运行该程序,并弄清楚它如何解密消息本身? IIRC就是某些杀毒软件已经起作用的方式。

–micsthepick
19年2月1日在5:50

@micsthepick在沙箱中运行程序是一种扩展性更好的解决方案,在非平凡的情况下通常可以胜任,所以您是对的,在实践中它通常是首选只是,在先发分析的意义上,问题是关于反病毒的。沙箱是另一个主题。

–纳特
19年2月1日在6:03

值得一提的是,可以通过简单地标记任何可能安装病毒的程序来绕过暂停问题示例(即专用字节码可以做到这一点,因此软件可以这样做)。

–user64742
20年1月3日,下午3:29

#6 楼

这取决于您对“ stop”的定义。

如果将stop定义为“提前检测到该代码可能会执行恶意操作并阻止其运行”,那么正如其他人所提到的,根据Rice定理,这是不可能的。

如果将stop定义为“检测正在运行的程序试图做某件事然后停止它”,则Rice定理不适用。您的防病毒软件不需要决定程序是否可以进行恶意操作,而只需确定它是否现在就可以进行恶意操作。实际上,对于“恶意”的任何足够具体的定义,这都是非常可行的-这本质上是沙箱操作。病毒可能尝试的所有恶意形式。开采比特币的病毒呢?还是提供海盗电影?还是代表您发送垃圾留言板?所有这些与真正希望完全执行这些操作的用户所运行的代码没有区别。因此,我怀疑(尽管我不知道有什么尝试证明)创建防病毒软件是AI完整的。

评论


定义恶意软件的问题几乎无法阻止。不同的人在建立适合他们的定义时会有不同的兴趣,但这没关系。

–R .. GitHub停止帮助ICE
19年1月23日23:55

因此,有人在网站上产生一个链接,该链接在您的计算机上安装软件以监视您正在观看的电影,并将数据提供给MegaCorp。这是病毒吗?根据“某人”是微软还是一名少年黑客,您的答案会有所不同吗?您对软件的数学评估是否考虑了发起者的可信度?简而言之,这实际上可以表述为数学问题吗?

–麦凯(Michael Kay)
19年1月24日,0:25



@Michael AI竞争是一个(我认为定义更为粗糙)的想法,即“如果不创造人造的一般智慧就无法解决这个问题”。我认为它没有像NP那样明确定义,因此它可能不适合数学证明。

–James_pic
19年1月25日在7:37

谢谢,这很有意义。我听过一个不太严格的版本,大致如下:这是五个(或10个)问题,具有很高的解决价值,但事实证明,仅解决其中一个(创建AGI / ASI)实际上也提供解决其他问题的方法(假设它不会消灭我们/使我们成为宠物/等等)

–迈克尔
19年1月25日,18:25



让我想起了一个古老的问题:“什么是杂草?”回答“您不想在花园里种任何东西”,re:您对@R的评论

–迈克尔
19年1月25日在18:27

#7 楼

是的,它在1935–36年间由Alonzo Church在数学上进行了证明,此后不久又在1936年由Alan Turing独立地进行了证明。

评论


如果该声明可以某种程度地简化为停止问题,那么有趣的一点将表明情况确实如此,而不仅是删除名称。或者,更直接地说:不,这绝对不是Church和Turing所证明的(甚至与他们打算证明的东西也不接近)。

– Jeroen Mostert
19年1月23日在13:13

是的,@ JeroenMostert,您正确。我错了。丘奇和图灵证明,没有机制可以决定是否编写检测所有病毒的程序。我对这些概念感到困惑。鲍勃叔叔正在写博客:blog.cleancoder.com/uncle-bob/2018/06/21/…

–MichałKuliński
19年1月23日在13:20



那么,这个答案是否需要删除或完全重写?

– schroeder♦
19年1月23日在13:53

马丁的博客虽然有趣,但在解释暂停问题时却犯下了一些更常见的谬论。例如,“程序的说明是在不计其数的未知数中的一个很大的Diophantine方程”是错误的,简单的和简单的。当然,这是指定程序的一种方式(如果您斜视的话),但是您需要比那更加谨慎,以便对证明可能存在和不可能做出有意义的陈述。像这样的解释往往会混淆而不是澄清-实际的数学是很微妙的,但是有充分的理由认为这些东西很微妙。

– Jeroen Mostert
19年1月23日14:15



我不太确定这个答案是错误的:如果“停止”的意思是“生成一份列出系统上所有病毒的报告,或多或少”,那么我们无法提前证明该程序将以除非我们运行它找出答案,否则正确答案。请注意,该参考文件还提到了暂停问题:web.archive.org/web/20140525233117/http://grnlight.net/…

–stevegt
19年1月23日在22:16



#8 楼

不,您不能,因为恶意软件和有用程序之间的差异完全是主观的。任何“邪恶”行为都可以是预期的行为。例如,我现在在计算机上运行以下程序:


用于加密我所有文件的程序。是密码锁勒索软件还是全盘加密工具?
允许远程访问控制我的计算机的程序。它是特洛伊木马程序还是Team Viewer?是僵尸网络还是分布式计算平台?
一个程序,可以将我的所有个人文件发送到远程服务器。它是间谍软件还是Cloud Backup?
一个程序,可以从Internet下载可执行文件并运行它们。是恶意软件删除程序还是Steam?

您无法分辨出两者之间的区别,因为从纯粹的技术角度来看,它们执行的操作完全相同。唯一的区别在于意图。一个程序欺骗用户有关其行为并损害用户利益的行为,而另一个程序则恰好执行用户希望它做的事情。但是用户真正希望从其软件中获得的东西是机器无法决定的……至少在目前的AI技术阶段还无法确定。

#9 楼

要以数学方式证明始终可以编写一种可以绕过所有现有防病毒程序的病毒,则必须首先以数学方式定义什么是病毒,并祝您好运。

也许“执行不良动作的程序”?好吧,这简直是不可能的,想象一下一个程序,该程序可以打开与PC的连接并启用远程控制。防病毒软件可以看到该程序可以执行此操作,但是它怎么知道是否需要它呢?简单的图像查看程序,采用简单的方式,您的防病毒软件将看到一个可以从您的PC读取和查看图像并打开远程连接的程序,并且它无法告诉您是否存在“所需”行为,因为它可以不知道为什么要安装该程序。

#10 楼

正如@walen指出的那样,如果允许假阳性,实际上就可以检测到所有病毒:只需将所有内容都报告为病毒即可。 -阳性。我们将提供一个IsVirus函数,该函数可以在任何程序上运行,并返回该程序是否为病毒。现在,考虑一下我们称为P的程序:

if IsVirus(P):
    exit
else:
    DoVirusThings


IsVirus(P)的值是什么?如果它是true,那么P只是不做任何事情就退出,因此我们有一个假阳性。但是如果它是false,那么P确实会病毒,并且我们有未检测到的病毒。

评论


下载者请解释原因。据我所知,这一证明是有效的。

–马修
19年1月25日在11:54

我没有投票,尽管看起来似乎有点矛盾,因为似乎没有矛盾。这就是说,如果IsVirus(P)为true,则您的脚本不是病毒式的;但是,IsVirus(P)声称P是病毒,而不是您的脚本。

–纳特
19年1月25日,12:20



实际上,没有人会担心IsVirus是否报告P确实是一种病毒,即使实际上不是P的定义也是如此。确实,将P称为病毒并非毫无道理,因为它是为做坏事而设计的如果我们尝试识别它,请和我们一起聪明。换句话说,调用IsVirus的行为可以用作不是我们自己的防病毒程序的任何程序的病毒标识符。 (有一些方法可以“修正”这条推理路线,但是它们涉及我们的定义变得更加精确。)

– Jeroen Mostert
19年1月25日在13:08

@Nat P是脚本

–马修
19年1月25日在21:25

@Matthew Hah,对不起,错过了这一部分!那时,这似乎是一个矛盾,尽管它似乎是一个自指问题,例如“此陈述是错误的。”而不是病毒分类。

–纳特
19年1月25日在21:59



#11 楼

最初的问题是“是否已经在数学上证明了防病毒不能检测到所有病毒?”

很准确地说,我们永远不能证明我们已经编写了可以检测所有病毒的代码。 br />
连接到Internet的具有下载和执行代码功能的通用计算机可能等同于通用Turing机。这种等效性包括Turing的无限磁带大小:如果计算机网络接口的带宽小于Internet可访问数据的总增长率,则计算机将永远无法到达“磁带末端”。 (很久以前,我在本文的结论中对此进行了一些介绍。尽管在实践意义上可以证明这一点,但提出数学证明可能需要添加一些约束。)是的,如果“停止”的意思是“产生一份列出系统中所有病毒的报告,或多或少”,那么我们无法事先证明该程序将以正确的答案停止;我们必须运行它才能找到答案。

如果以上两个段落都正确,那么我们将永远无法验证结果报告的正确性,因为我们永远无法汇编所有可能的病毒的完整列表来与之进行比较:这些病毒全部被排除在外。在磁带上的某个地方,它的大小是无限的,我们永远无法阅读全部内容。

如果所有三个段落都正确,那么我们将永远无法证明我们已经编写了100%正确的病毒检测器。

#12 楼

嗯,病毒的定义非常模糊。是的,它是一个恶意实体,但恶意同样模糊。根据系统及其策略,恶意实体的可能性将改变。定义一个不断变化的实体是在各个领域,数论,状态机等领域提出的,并且至少以我们所知,已经以不同的方式证明了这是不可能的。

一种方法是,可以定义允许的内容,而不是定义恶意的内容,而是一个非常严格且独立的系统,该系统仅允许执行某些特定的操作序列。这样可以保持安全。

这个问题IMO与定义随机变量一样困难。

#13 楼

病毒只是代码-如果说“我的AI割草机程序可以告诉我杂草和植物之间的区别”是一种代码-如果是这样,它是否会引起干扰?向您的联系人列表中的所有人发送电子邮件,是病毒还是垃圾邮件发送者?取决于您下载程序的原因,而不取决于程序中的任何字节。

因此,您甚至不必进行数学证明-您可以说它无法完成。

另一方面,如果您按行为定义病毒,则可以说很容易识别病毒。程序将作为更新过程的一部分进行更新,如果在此过程之外尝试更改计算机上的代码,则可以将其定义为病毒。使用此定义,您可以轻松检测出特定安装过程之外发生的更改。当您不按住按钮时,可能需要能够将代码与数据分离并锁定代码空间的硬件,但是这是可能的(如果很烦人)。在更新过程中安装的病毒本身并不是病毒,但是由于我们是根据此示例的行为来定义病毒,因此根据定义,我猜不是。

#14 楼


在数学上是否已经证明防病毒不能检测到所有病毒? />病毒无法“治愈”。数学上已经证明,编写任何现有的防病毒程序都无法停止的病毒始终是可能的。“ [0]

[0]秘密与谎言。布鲁斯·施耐尔。 154



此答案不能直接解决Bruce Schneier所指的分析问题,对陈述时主要来源有何意义感兴趣的个人应作出努力可以联系主要资料来源自己提出具体问题,以避免猜测,猜想或混乱。的英文版“关于“数学原理”和相关系统的形式不确定的命题”)时,仔细考虑该方法对于分析任何形式的系统(从计算机病毒到政治系统)都非常有启发性。 /> 1.如果是(逻辑或公理形式)系统是一致的,不能完整2。公理的一致性无法在其自身的系统中得到证明。


这些定理结束了半个世纪的尝试,始于弗雷格的著作,并以《数学原理》和希尔伯特的形式主义,找到一套足以满足所有数学要求的公理。

事后看来,不完全性定理的核心基本思想很简单。哥德尔实质上构造了一个公式,该公式声称该公式在给定的形式系统中不可证明。如果
可证明,那将是错误的。因此,将始终至少有一个
真实但无法证明的陈述。也就是说,对于任何可计算的
一组算术公理(即原则上可以由资源无限的理想计算机打印出来的一组),其中的一个公式对算术是正确的,但无法证明在该系统中。但是,为了精确起见,Gödel需要产生一种
方法来编码(作为自然数)陈述,证明和可证明性概念。他使用称为Gödel
编号的过程来做到这一点。


#15 楼

不是数学上的证明,但是AFAIK有两种检测恶意软件的方法:

签名

随着新恶意软件的开发,包括混淆或修改现有恶意软件,新的恶意软件不会出现在防病毒数据库中,因此也不会被检测到。

启发式

此方法使用自动动态和/或静态分析来了解恶意软件的行为软件,并根据其功能决定防病毒软件是否为恶意软件。

这是棘手的部分,并不是今天认为无害的一切都可能在未来。

例如20年前,使用加密库的软件可能尚未被视为恶意软件,现在我们知道这可能是某种勒索软件来加密您的数据。同时,您可以(而且应该使用)密码管理器,该管理器也使用加密库来安全地存储数据。那么,如何仅根据它加密数据这一事实来确定它是否是恶意软件呢?同样,TCP连接可用于泄漏信息或浏览网站

,唯一的区别是语义,这很难自动进行分析,因为技术不断发展,而恶意软件也适应了这种发展。毕竟,除了恶意软件所有者的恶意行为之外,其他恶意软件与其他软件没有什么不同

评论


您正在像程序员一样回答这个问题(我是)。没用的。他们的问题不是生活在现实领域,而是理论。就像当我试图说服人们,任何“人工智能”(AI)都不能邪恶或拥有灵魂一样。他们指出了一些研究或Elon Musk / Alex Jones层的文章,而我指出了“人工”一词。他们仍然不会听。与大多数人争论时,成为专家不会帮助您。

– NicVerAZ
19年1月23日在22:26

“与大多数人争吵时,成为专家不会帮助您。”的确如此,他们在网站上提问的唯一目的是询问该主题的“专家”。为什么要问别人是否不愿意接受他/她的回答?

– E先生
19年1月24日在13:09

每个人都是专家。

– NicVerAZ
19年1月26日在5:32

#16 楼

不,它尚未被证明,也不能被证明,因为它不是真的。实际上有效的防病毒程序只是运行时环境强制执行的合适的权限/访问控制模型。赖斯定理无关紧要,因为您不必提前确定程序是否安全。您只需在访问控制下运行它,然后在它试图做违反策略的操作时中止它(或拒绝访问)。如果progam是恶意的,则为肯定结果,但如果该程序不是恶意的,则可能不会停止。很好,因为测试正在运行该程序,并且只要它没有恶意,您就可以继续运行。它将与OS,运行时VM或类似组件集成在一起,而不是与单独的AV产品集成在一起)。相反,他们使用伪造的签名和启发式方法对程序进行分类。可以证明(参见其他答案)这种方法行不通。

评论


“不”什么?难道还没有被证明?但是,请阅读其他证明它已经被证明的答案吗?答案很混乱。你能澄清一下吗?

– schroeder♦
19年1月23日在16:41

否是问题主题行的直接答案。我会详细说明。

–R .. GitHub停止帮助ICE
19年1月23日在16:55

我是否可以清除使用rowhammer覆盖内核安全检查的病毒?

–约书亚
19年1月23日在17:02

@Joshua:运行时环境可以完全检测或阻止这种情况。例如,通过在解释器下运行程序。请参阅“适当的访问控制模型”。在这种情况下,硬件存在故障,并且不允许对系统的该部分进行任何直接的低级访问(向内存总线发出请求)都是不足的访问控制。

–R .. GitHub停止帮助ICE
19年1月23日在17:13



虽然很好,但它不能阻止所有病毒。 @Ray允许您使用特定示例回避问题,但情况并非总是如此。在一个用例中可以将完全相同的软件视为有用,而在另一个用例中将其视为恶意的又如何呢?考虑可以永久控制计算机的软件,该软件一开始就被编写和使用。然后其他人滥用它。当他的好友在睡觉时获得XP时,游戏玩家将其称为真棒软件,而当他们的敌人炸开令人讨厌的白噪声时,其邻居就将其视为恶意软件。一个人的垃圾是另一个人的财富。

–亚伦
19年1月23日在21:07

#17 楼

我们可以拥有可以检测所有病毒的防病毒软件吗?

不需要数学。实验时间。让我们安排病毒库,尝试防御的系统库以及不断更改/改善双方的机制。

给他们一个星球。等待数十亿年。

我们还存在病毒吗?

对我来说,已经测试的各种可能性远远不能令人满意。

关于“证明”

在这里,我想解释为什么我彻底地重新定义了您的问题。

您问题的直接答案“在数学上证明了<陈述关于现实世界>”是:不,数学家从未证明过您关于现实世界的陈述(或任何其他此类陈述)。所谓真实世界,是指当您看着窗外时看到的那个世界。定义为无法证明)。我不知道统治真正计算机病毒的公理,所以我无法证明这些。

我会尝试预测现实,并且我会经常正确,确定。但是我将使用可证伪的理论,而不是证明。

评论


您的论点在另一个方向上有点过分了-生物进化实际上可以实现的目标上存在明显的差距(没有奶牛跳上月球),并且对于某些“问题”缺乏“解决方案”很难接受作为无法完成某件事的绝对证据,除非您演示为什么我们无法做得更好。特别是,“进化”和“选择”病毒和防病毒软件的机制非常不同。对于当前的恶意软件(很少会自我复制),甚至“病毒”一词也已被误用。

– Jeroen Mostert
19年1月23日在11:18

@JeroenMostert我刚刚报告了一个事实。尽管您暗示摆弄我们内心的想法会产生更令人满意的结果,但在这种情况下,重复的次数和涉及的大量标本对我来说是足够的。也就是说,我认为人脑在这里忽略某物的可能性要比整个生物圈检查了好几代人的可能性大得多。 (但是-是的!-在其他情况下,我们的思维当然可以优越。对我们有好处!)

– Kubanczyk
19年1月23日在11:32

汽车是不可能的。证明:数十亿年的进化没有产生轮子。 Q.E.D.当然,这失败了,因为生物学和工程学之间的相似之处还很远,您甚至不需要为此假设聪明的发明者。同样的计算。我们发现复制程序与生物病毒之间的相似之处可追溯到很久以前,但是就目前而言,实际的复制程序已不仅仅只是理论上的好奇心,而恶意程序已经死了还没有被淘汰。生物平行仍然有效和有见地吗?我不会。

– Jeroen Mostert
19年1月23日在11:49



能否证明不是问题。您回避了这个问题。进行了参考,并且在这种情况下进行了构图。这是无答案的。

– schroeder♦
19年1月23日,12:11



除了先前评论中指出的缺点外,此答案(可能是偶然的)隐含地依赖关于生物病毒和计算机病毒之间等效性的错误假设。仅仅因为两者都被称为“病毒”并不意味着它们具有相同的相关属性。名称是一个隐喻,而不是准确的定义。

–康拉德·鲁道夫(Konrad Rudolph)
19年1月23日在14:56

#18 楼

我本人也同意纳吉。模型定理只能应用于形式逻辑的非常形式化的逻辑子集。我不知道可以基于某种形式的逻辑语法对现实的不完整性做出任何规定。在某些时候,这似乎是一个更大的哲学问题。也就是说,假设您可以具体描述病毒或恶意软件的含义,也就是可以将其表达为数学问题,然后确定可以将其显示出来。

计算机具有有限的资源。因此,通过蛮力可以考虑每个州,如果它是恶意的。

如果考虑到时间的状态组合,这可能会失败?我不能说自己。

#19 楼

或多或少,是的。用外行的话说,它背后的数学可以归结为Bootstrapping悖论,Bootstrapping悖论是一种时态悖论,它质疑信息的来源。与此相关的问题是,如果您拥有可以检测所有已知病毒的防病毒软件,但是第二天有人创建了新病毒,则旧病毒扫描中将没有签名来检测新病毒。如果可以想象到您可以将所有计算机病毒从某个时间段中清除掉,然后将其传播到现在之前,并从所有这些病毒中创建病毒签名,那么这些信息是从哪里来的?未来还是过去?由于普遍的共识是,出于多种数学/物理原因,不可能进行时间​​旅行,因此您无法覆盖所有病毒,而不能覆盖所有已知病毒。

评论


这依赖于未声明的假设,即“防病毒无法检测到在创建/最后更新防病毒时不存在或未知的病毒”。这是问题的关键,因此仅假设它是真实的就意味着您的答案没有实质内容。同样,对于某些病毒,此假设显然是错误的,因为启发式方法确实可以对某些病毒起作用。所有关于时间旅行的话题都只是一头雾水。

–约瑟夫·西布尔-恢复莫妮卡
19年1月24日,下午5:32