为什么通过默默无闻的安全是一个坏主意?

时间:2009-02-10 20:10:08

标签: security encryption security-by-obscurity

我最近遇到了一个系统,其中所有数据库连接都是由以各种方式隐藏的例程管理的,包括base 64编码,md5sums和各种其他技术。

这只是我,还是这种矫枉过正?有哪些替代方案?

14 个答案:

答案 0 :(得分:98)

通过默默无闻的安全将你的钱埋在一棵树下。使它安全的唯一因素是没有人知道它在那里。真正的安全性是把它放在锁或组合之后,比如在保险箱里。你可以把保险箱放在街角,因为它确保安全,没有人可以进入它,但

正如@ ThomasPadron-McCarty在下面的评论中提到的那样:

  

如果有人发现了密码,您只需更改密码即可。如果有人找到了这个位置,你需要挖掘钱并将其移到其他地方,这是更多的工作。如果您在程序中使用默默无闻的安全性,则必须重写该程序。

答案 1 :(得分:33)

通过默默无闻的安全可以说是不好的,因为它通常意味着默默无闻被用作主要的安全手段。在被发现之前,Obscurity是可以的,但是一旦有人找到你特别的默默无闻,那么你的系统再次受到攻击。鉴于攻击者持续存在,这相当于没有任何安全措施。

永远不应该使用晦涩作为正确安全技术的替代方案。

隐藏作为隐藏源代码以防止复制的手段是另一个主题。我对这个话题很偏袒;我可以理解为什么你可能希望这样做,我个人从来没有遇到过这种情况。

答案 2 :(得分:15)

通过默默无闻的安全是一个有趣的话题。它(正确地)被诽谤为有效安全的替代品。密码学中的典型原则是消息未知但内容不是。加密的算法通常被广泛发表,由数学家进行分析,经过一段时间后,它们的有效性会产生一些信心,但从来没有保证它们是有效的。

有些人隐藏了他们的加密算法,但这被认为是一种危险的做法,因为这样的算法没有经过同样的审查。只有拥有大量预算和数学人员的国家安全局等组织才能摆脱这种方法。

近年来最有趣的发展之一就是steganography的风险,其实践是在图像,声音文件或其他媒介中隐藏信息。隐写分析中最大的问题是确定是否存在消息,通过默默无闻来实现这种安全性。

去年我遇到了一个Researchers Calculate Capacity of a Steganographic Channel的故事,但真正有趣的是:

  

以这种方式学习一个隐秘频道   导致一些反直觉   结果:例如,在某些方面   情况,数量翻倍   寻找隐藏数据的算法可以   增加容量   隐写频道。

换句话说,用于识别消息的算法越多,其效果就越差,这与通过默默无闻的正常安全批评相违背。

有趣的东西。

答案 3 :(得分:10)

它是一个坏主意的主要原因是它不会修复潜在的问题,只是试图隐藏它们。迟早会发现问题。

此外,额外的加密会产生额外的开销。

最后过分默默无闻(比如使用校验和)会使维护成为一场噩梦。

更好的安全替代方案是消除代码中的潜在弱点,例如强制输入以防止注入攻击。

答案 4 :(得分:8)

从安全漏洞中恢复的能力的一个因素。如果有人发现您的密码,请重置密码。但是,如果有人发现你的模糊计划,你就会受到冲击。

答案 5 :(得分:6)

使用默默无闻,因为所有这些人都同意不是安全,它会花时间购买。也就是说,如果实施了一个不错的安全系统,那么添加一层额外的默默无闻仍然是有用的。让我们说明天有人在ssh服务中找到了一个无法修复的破解/漏洞,无法立即打补丁。

作为一项规则,我已在内部实施......所有面向公众的服务器仅公开所需的端口(http / https),仅此而已。一个面向公众的服务器然后将ssh暴露在互联网上的某个不起眼的高编号端口和一个端口扫描触发设置,以阻止任何试图找到它的IP。

Obscurity在安全领域占有一席之地,但不是第一道防线和最后一道防线。在上面的例子中,我没有对ssh进行任何脚本/僵尸攻击,因为他们不想花时间搜索非标准的ssh服务端口,如果他们这样做,他们不太可能在另一层之前找到它安全措施并将其切断。

答案 6 :(得分:4)

所有可用的安全形式实际上都是通过默默无闻的安全形式。每种方法都增加了复杂性并提供了更好的安全性,但它们都依赖于某种算法和一个或多个密钥来恢复加密数据。大多数人称之为“通过默默无闻的安全”,当有人选择最简单,最容易破解的算法时。

字符移位等算法易于实现且易于破解,这就是为什么它们是个坏主意。这可能比什么都没有好,但它最多只能暂时忽略数据的轻松阅读。

您可以使用互联网上的优秀资源来教育自己所有可用的加密方法及其优缺点。

答案 7 :(得分:4)

安全是指让人们根据他们所知道的,他们是谁或他们拥有的东西进入或阻止他们。目前,生物识别技术并不擅长发现自己是谁,而且总会出现问题(指纹读取器适用于发生意外事故的人,伪造的指纹等)。所以,实际上,很多安全措施都是为了模糊处理。

良好的安全性是将您必须保密的内容保持在最低限度。如果你有一个正确加密的AES频道,你可以让坏人看到密码以外的一切,你就安全了。这意味着你有一个小得多的区域可以攻击,并且可以专注于保护密码。 (这不是那么简单。)

为了做到这一点,你必须对除密码之外的所有事情都有信心。这通常意味着使用众多专家所关注的行业标准加密。任何人都可以创造一个他们无法破解的密码,但并不是每个人都可以制作一个密码,布鲁斯施奈尔无法破解。由于密码安全性缺乏理论基础,因此密码的安全性取决于许多非常聪明且知识渊博的人试图提出攻击,即使它们不实用(对密码的攻击总是变得更好) ,永远不会更糟)。这意味着加密算法需要广为人知。我对高级加密标准非常有信心,而Joe在编写和混淆的专有算法中几乎没有。

但是,加密算法的实现存在问题。很容易无意中留下可以找到钥匙的孔,或其他恶作剧。它发生在PGP的备用签名字段,以及在Debian Linux上实现SSL的弱点。它甚至发生在OpenBSD上,这可能是最安全的操作系统(我认为这可能是十年内的两次攻击)。因此,这些应该由信誉良好的公司来完成,如果实现是开源的,我会感觉更好。 (封闭源代码不会阻止一个坚定的攻击者,但它会让随机好人更难找到要关闭的漏洞。)

因此,如果我想要安全性,我会尽量让我的系统尽可能可靠,这意味着除密码外尽可能开放。

在已经安全的系统之上隐藏安全性可能对某些人有所帮助,但如果系统安全则没有必要,如果它不安全,最好的办法就是确保安全。想想那些声名狼借的“替代医学”这种声名狼借的形式 - 它不太可能有太大的帮助,虽然它本身不太可能伤害很多,但它可能会让患者不太可能找到一位称职的医生或计算机安全专家,无论哪个。

最后,我想为Bruce Schneier's blog制作一个完全不请自来且无私的插件,只不过是感兴趣的读者。我从中学到了很多关于安全的知识。

答案 8 :(得分:3)

评估,测试或改进安全产品的最佳方法之一就是让一个庞大,聪明的同行群体对其进行攻击。

依靠其安全性而成为“黑匣子”的产品无法获得此类测试的好处。当然,作为一个“黑匣子”总是引起怀疑(通常是合理的)他们无论如何都不会经受那种审查。

答案 9 :(得分:3)

我认为在一个案例中,密码保护通过默默无闻是真正的安全性。我能想到的唯一不会是STO的安全性是某种生物识别安全性。

除了那些语义和挑剔之外,STO(通过默默无闻的安全性)在任何需要真正安全性的情况下显然都很糟糕。但是,可能存在无关紧要的情况。我经常XOR填写一个我不希望任何人阅读的文本文件。但我真的不在乎他们是否这样做,我只是更喜欢它不被阅读。在这种情况下,它无关紧要,并且XOR pad是一个易于找到STO的完美示例。

答案 10 :(得分:2)

almost never这是一个好主意。同样的说,没有安全带开车是个好主意吗?当然,你可以找到一些适合的情况,但由于经验,anwser似乎很明显。

答案 11 :(得分:1)

如果操作系统是Windows,请查看使用Data Protection API(DPAPI)。它不是默默无闻的安全性,并且是存储无人参与进程的登录凭据的好方法。正如每个人都在这里所说的那样,通过默默无闻的安全并没有给你太多的保护。

http://msdn.microsoft.com/en-us/library/ms995355.aspx

http://msdn.microsoft.com/en-us/library/ms998280.aspx

答案 12 :(得分:1)

弱加密只会阻止最不具动机的黑客,所以它不是没有价值的,它不是很有价值,特别是当AES等强加密可用时。

通过默默无闻的安全性基于这样的假设:您很聪明并且您的用户很愚蠢。如果该假设基于傲慢而非经验数据,则您的用户和黑客将确定如何调用隐藏方法,启动未链接页面,反编译并从.dll中提取纯文本密码等。

也就是说,向用户提供全面的元数据并不是一个好主意,只要您使用加密,授权,身份验证和所有其他安全原则进行备份,模糊是完全有效的技术。

答案 13 :(得分:0)

我必须补充的一点是尚未触及的是互联网通过默默无闻来破坏安全的难以置信的能力。

正如已经一次又一次地展示的那样,如果你唯一的防守就是“没有人知道后门/漏洞/漏洞就在那里”,那么只需要一个人偶然发现它,几分钟之内就可以人们会知道。第二天,几乎每个想知道的人都会。哎哟。