我正在用C#开发一个Windows窗体应用程序。我听说不应该在代码中使用内置的方法和函数,因为黑客对这些内置方法有深刻的理解并且知道如何使它们失败而是应该总是使用他的/她自己的函数和方法,如果没有,那么从那些新制作的函数中智能地调用内置函数。这是真的吗?
支持我的观点的一个支持性例子是,我看到开发人员总是开发自己的加密算法,如AES,DES,RC4和Hash函数,因为他们认为内置加密算法有很多次后门。答案 0 :(得分:4)
除非您知道特定的失败模式或应用程序将使用的内置方法的弱点,并知道如何最小化或消除它们,否则最好使用该语言提供的方法或者是图书馆设计师,它们通常比普通程序员为特定项目即时提供的服务更高效,更安全。
你的例子绝对不支持你的观点:开发你自己的加密算法,没有域中的严重背景和密码分析师审查,然后在安全关键代码中使用它,是一个配方灾害。即使开发自己的行业标准加密算法的自定义实现,也会出现问题,如果您对此缺乏经验,几乎可以肯定。
答案 1 :(得分:4)
什么?不不不!谁告诉你这个只是错误。
有一个常见的谬论是发布的源代码更容易受到“h4ckerz”的攻击,因为任何人都可以发现它的缺陷。但是,我很高兴你提到加密,因为这是一个这个行的区域推理真的很突出它的谬论。
most popular questions of all time上的https://security.stackexchange.com/之一是关于开发人员(在OP中,他给出了化名“Dave”),他们分享了对已发布代码的恐惧。像你看到的开发人员一样,戴夫正在尝试自制加密算法。这是该主题中最受欢迎的评论之一:
戴夫有一个根本上错误的前提,即算法的安全性依赖于(甚至部分)其默默无闻 - 事实并非如此。散列算法的安全性依赖于我们对数学理解的限制,并且在较小程度上依赖于强制它的硬件能力。一旦Dave接受了这个现实(并且它确实是现实,请阅读关于哈希的维基百科文章),这是一个谁更聪明的问题 - Dave自己,或者是一大群致力于解决这个特殊问题的专家。(强调补充)
事实上,就像现在一样,Security.SE上的top two memes是“不要自己动手”和“不要成为戴夫”。
虽然这一切都是关于加密的,但一般适用于大多数开源软件。后门将被发现并修复的可能性随着代码上的每一组新眼睛而上升。这应该是一个简单而无争议的前提:人们寻找的东西越多,发现的机会就越大。是的,这适用于寻找漏洞的恶意用户。然而,它也适用于高级用户,白帽黑客,安全研究人员,密码学家,专业开发人员以及其他为“好”工作的人,这些人通常(希望)超过那些为“邪恶”工作的人。这也隐含地依赖于黑客需要看到源代码做坏事的错误前提。基于源代码从未发布的专有系统(多种微软和Adobe程序浮现在脑海中)已经被漏洞淹没多年的绝对数量,这显然是错误的。也许有源代码可以让黑客的工作变得更容易,但也许不行 - 是否更容易查找源代码以寻找攻击媒介或者仅仅使用扫描工具和脚本来对付已编译的二进制文件?
tl; dr 不要成为戴夫。滚动自己意味着你必须成为最好的一切才能取得成功,而不是采用社区提供的最佳样本。
在你的评论中,你反驳:
那么为什么openSSL中的Heartbleed错误没有找到并更正[更早]?
因为没有人在看它。这是一个可悲的事实。这是区别 - 一旦有人 找到它后发生了什么?现在成千上万的安全研究人员,加密专家和其他人正在关注它。假设我之前提到过的一种专有产品中存在同样的漏洞,它很有可能。一旦它被捕获(如果它被抓住了),问问自己: