根据我对这个问题的评论:
几乎每个人都掩盖了一个要点...我的最初反应与@Michael Brooks非常相似,直到我意识到像@stefanw一样,这里的问题已被打破。 ,但这就是它们的本质。
但是后来我想到,事实可能并非如此!这里缺少的一点是应用程序资产的潜伏价值。简而言之,对于低价值的系统,完全安全的身份验证机制(涉及所有过程)将是过大的选择,并且安全选择错误。
显然,对于银行而言,“最佳实践”是必须的,并且没有道德上违反CWE-257的方法。但是很容易想到不值得的低价值系统(但是仍然需要一个简单的密码)。
要记住,重要的是,真正的安全专业知识是在寻找适当的权衡方法,而不是教条地吐出任何人都可以在线阅读的“最佳实践”。
因此,我建议另一种解决方案:
取决于系统的价值,并且仅当系统具有适当的低价值且没有“昂贵的”资产(包括身份本身),并且存在进行适当流程的有效业务需求时,不可能(或足够困难/昂贵),并且让客户端意识到所有注意事项...
然后,可能允许简单地允许可逆加密,而无需跳过任何特殊的陷阱。
我只想说一点也不打扰加密,因为它实现起来非常简单/便宜(即使考虑可通过的密钥管理),并且它确实提供了一些保护(比实现它的成本还高)。此外,值得一看的是如何为用户提供原始密码(无论是通过电子邮件,在屏幕上显示等)。
由于此处的假设是被盗密码的值(即使是总计)也很低,因此任何这些解决方案可能是有效的。
由于正在进行激烈的讨论,实际上在不同的帖子和单独的评论线程中进行了几次活跃的讨论,因此我将添加一些说明,并对此处其他地方提出的一些很好的观点做出回应。
首先,我认为这里的每个人都很清楚,允许检索用户的原始密码是不正确的做法,通常不是一个好主意。这一点根本不存在争议。
此外,我要强调的是,在大多数情况下,即使是在大多数情况下,这都是错误的,甚至是犯规,令人讨厌和丑陋的。
但是,问题的症结在于原则,是否有任何情况是没有必要禁止这种情况发生的,如果是的话,如何以最适合这种情况的正确方式做到这一点。
现在,就像@ Thomas,@ sfussenegger和其他一些人提到的那样,回答该问题的唯一正确方法是对任何给定(或假设)情况进行彻底的风险分析,以了解存在的风险,有多少保护价值,还有哪些其他缓解措施可以提供这种保护。
不,这不是流行语,它是实时安全专家的基本,最重要的工具之一。最佳做法在某种程度上是好的(通常是针对经验不足和黑客的准则),在此之后,经过深思熟虑的风险分析将占据上风。
是的,这很有趣-我一直认为自己是安全狂热者之一,但我却处于那些所谓的“安全专家”的对立面……嗯,事实是-因为我是狂热者,以及一位真正的现实生活安全专家-我不相信没有最重要的风险分析就吐出“最佳实践”教条(或CWE)。
“要当心安全狂热者,他们会迅速应用工具带中的所有内容,却不知道他们要防御的实际问题是什么。更多的安全性不一定等同于良好的安全性。”
风险分析和真正的安全狂热者将根据风险,潜在损失,可能的威胁,补充缓解措施等,基于价值/风险进行更明智的权衡。任何“安全专家”都不能将合理的风险分析视为他们提出建议的依据,或支持逻辑上的权衡,但他们宁愿吐出教条和CWE,甚至不了解如何执行风险分析,都无济于事,但Security Hacks和他们的专业知识不值得他们印在上面。
的确,这就是我们使机场安全变得荒谬的原因。
但是,在我们讨论要在此情况下进行适当的权衡之前,让我们先看一下明显的风险(显然,因为我们没有关于这种情况的所有背景信息,所以我们都在假设-因为问题是假设的,情况可能会...)
让我们假设一个低价值的系统,但还不是很普通,以至于它是公共访问的-系统所有者想要防止随意的冒充,但是“高”的安全性并不像易用性那么重要。(是的,要接受任何熟练的脚本小子可以入侵该网站的风险是一种合理的折衷……等等,APT现在不流行吗??)
举例来说,假设我正在为一个大型家庭聚会安排一个简单的地点,让每个人都可以集思广益,确定我们今年想要进行露营的地方。我不太担心一些匿名黑客,甚至不用担心表亲弗雷德(Cousin Fred)反复提出建议回到旺塔玛纳比基里基湖(Lake Wantanamanabikiliki),因为我担心埃尔玛姨妈在需要时无法登录。现在,身为核物理学家的埃尔玛姨妈不太擅长记住密码,甚至根本不使用计算机。所以我想消除她的所有磨擦。再说一次,我不担心黑客,我只是不想犯错误的登录错误-我想知道谁来了,他们想要什么。
无论如何。
那么,如果我们对称地加密密码而不是使用单向哈希,那么这里的主要风险是什么?
- 冒充用户?不,我已经接受了这种风险,这并不有趣。
- 邪恶的管理员?嗯,也许......但同样,我不关心,如果有人可以模拟其他用户,内部或没有......反正恶意管理员是会得到你的密码,不管是什么 -如果您的管理员的坏了,它的游戏呢。
- 提出的另一个问题是,身份实际上是在多个系统之间共享的。啊! 这是一个非常有趣的风险,需要仔细观察。
首先,我断言不是共享的实际身份,而是证明或身份验证凭据。好的,因为共享密码将有效地允许我进入另一个系统(例如,我的银行帐户或gmail),所以这实际上是相同的身份,因此只是语义而已 ...除了不是。在这种情况下,身份由每个系统分别管理(尽管可能会有第三方id系统,例如OAuth-尽管如此,其与该系统中的身份是独立的,稍后再介绍)。
这样,核心是这里存在的风险是,用户会愿意将其(相同)密码输入几个不同的系统中-现在,我(管理员)或我站点的任何其他黑客都可以访问Erma姑妈的核导弹站点密码。
嗯
您觉得这里有什么事吗?
这应该。
让我们从保护核导弹系统不是我的责任这一事实开始,我只是在建立一个frakkin家庭郊游场所(针对我的家人)。那么是谁的责任呢?嗯...核导弹系统怎么样?咄。
其次,如果我想窃取某人的密码(众所周知,某人在安全站点之间和非那么安全站点之间反复使用相同的密码)-为什么要打扰您的站点?还是正在努力进行对称加密?Goshdarnitall,我可以设置一个简单的网站,让用户注册以接收关于他们想要的任何非常重要的新闻... Puffo Presto,我“偷了”他们的密码。
是的,用户培训总是会回过头来咬我们,这不是吗?
而且您无能为力...即使您要在网站上对他们的密码进行哈希处理,并做TSA可以想到的其他事情,您也要保护他们的密码,而不是一意孤行,如果他们愿意保留的话将他们的密码混杂到他们碰到的每个站点中。甚至不必费力尝试。
换句话说,您不拥有他们的密码,因此不要尝试像您一样操作。
因此,作为一位老妇人,我亲爱的安全专家曾经问温迪:“风险在哪里?”
针对以上提出的一些问题,还有几点:
- CWE并非法律,法规或标准。它是常见弱点的集合,即“最佳实践”的反面。
- 共享身份的问题是一个实际的问题,但是这里的反对者误解了(或歪曲了)。这是在自身之间共享标识的问题(!),而不是在低价值系统上破解密码。如果要在低价值系统和高价值系统之间共享密码,则问题已经存在!
- 顺便说一句,对于这些低价值系统和高价值银行系统,上一点实际上将指向使用OAuth之类的AGAINST。
- 我知道这只是一个例子,但是(不幸的是)FBI系统并不是最安全的系统。不太像猫咪的博客的服务器,但是它们也不能超过一些更安全的银行。
- 加密密钥的拆分知识或双重控制并不仅在军事上发生,事实上,PCI-DSS现在基本上要求所有商人都提供,因此,它真的不是那么遥不可及(如果价值证明了这一点)。
- 对于所有抱怨这样的问题的人来说,是什么使开发人员职业显得如此糟糕:正是这些回答使安全职业看起来更加糟糕。同样,需要以业务为中心的风险分析,否则您将变得毫无用处。除了错了。
- 我想这就是为什么不聘请常规开发人员并在他身上承担更多安全责任,而无需训练有别于他人的思维以及寻找正确的权衡因素的一个好主意。没有冒犯,对于你们这里的那些人,我全力以赴-但需要进行更多的培训。
ew。多长时间的帖子...
但是要回答您的原始问题,@ Shane:
- 向客户说明正确的做事方式。
- 如果他仍然坚持,请解释更多,坚持,争论。如果需要,请发脾气。
- 向他解释业务风险。细节很好,数据更好,现场演示通常是最好的。
- 如果他仍然坚持并提出有效的商业理由-现在是您进行判断的时候了:
该网站的价值低吗?这真的是有效的商业案例吗?对你来说足够好了吗?您是否可以考虑其他比有效商业原因大的风险?(当然,客户端不是恶意站点,就是这样)。
如果是这样,那就继续吧。(在这种假设的情况下)进行必要的过程是不值得的工作,摩擦和浪费的使用。任何其他决定(同样在这种情况下)都是一个不好的权衡。
因此,底线和实际答案是-使用简单的对称算法对其进行加密,使用强大的ACL(最好是DPAPI等)保护加密密钥,对其进行记录,并让客户端(足够资深的人来做出决定)签名它。