题 我应该如何道德地接近用户密码存储以便以后的明文检索?


随着我继续构建越来越多的网站和Web应用程序,我经常被要求以一种方式存储用户的密码,如果/当用户遇到问题时可以检索它们(要么通过电子邮件发送忘记的密码链接,请通过当我能够对抗这种做法时,我会做很多“额外”编程,以便在不存储实际密码的情况下进行密码重置和管理协助。

当我无法抗争(或无法获胜)时,我总是以某种方式对密码进行编码,以至于它至少不会以明文形式存储在数据库中 - 尽管我知道如果我的数据库被黑客攻击罪魁祸首破解密码并不需要太多,所以这让我感到不舒服。

在一个完美的世界里,人们经常更新密码,而不是在许多不同的网站上复制密码 - 不幸的是,我知道许多人拥有相同的工作/家庭/电子邮件/银行密码,甚至在需要帮助时自由地给我。如果我的数据库安全程序由于某种原因失败,我不想成为他们的财务危机负责人。

在道德和道德上,我觉得有责任保护一些用户的生活,即使他们以较少的尊重对待他们。 我确信有许多途径可以用来腌制哈希和不同的编码选项,但是当你必须存储它们时,是否有一个“最佳实践”?在几乎所有情况下,我都使用PHP和MySQL,如果这对我应该处理细节的方式有任何不同。

附加信息Bounty

我想澄清一点,我知道这不是你想要做的事情,在大多数情况下拒绝这样做是最好的。但是,我不是在寻找关于采用这种方法的优点的演讲我正在寻找采取这种方法时采取的最佳步骤。

在下面的一个注释中,我指出,当人们被要求执行安全的密码恢复程序时,主要针对老年人,智障人士或非常年轻人的网站可能会让人感到困惑。虽然在这些情况下我们可能会发现它简单而平凡,但有些用户需要额外的帮助,要么让服务技术人员帮助他们进入系统,要么将其直接通过电子邮件发送/显示给他们。

在这样的系统中,如果用户没有获得这种级别的访问协助,那么来自这些人口统计数据的流失率可能会妨碍应用程序,因此请记住这样的设置。

谢谢大家

这是一个有趣的问题,有很多争论,我很喜欢它。最后,我选择了一个保留密码安全性的答案(我不必保留纯文本或可恢复的密码),但也使我指定的用户群可以登录系统而没有我从中找到的主要缺点正常的密码恢复。

由于不同的原因,我一直有大约5个答案,但我必须选择最好的答案 - 所有其他答案都是+1。感谢大家!

此外,感谢Stack社区中的每个人都投票赞成这个问题和/或将其标记为收藏。我赞成100票赞成,并希望这次讨论能够帮助其他人,让我有同样的关注。


1346
2018-02-17 19:54


起源


我想他知道这不好。他仍在寻找符合规定要求的最佳解决方案。 - stefanw
在一天结束时,您将要做的就是仔细实施可避免的漏洞。 - rook
@Michael Brooks - 我希望你知道我绝对同意CWE-257,并且每次我被要求将密码恢复为明文时,我都希望逐字引用。然而,实际上,客户和用户很少对NIST法规感兴趣,并且只是希望我这样做。 90%的时间我可以说服他们,但是在那个10%的时间我不能确定最佳行动方案 - 在那些情况下,CWE-257是我手中的灰烬(不幸的是)。 - Shane
@AviD:系统的“低值” 绝对没有影响 在这个问题上因为 人们重用他们的密码。为什么人们不能理解这个简单的事实?如果您在某些“低价值”系统上破解密码,您可能会为其他“高价值”系统提供多个有效密码。 - Aaronaught
另一点也被掩盖了,我刚刚在评论中提到了我的答案:你怎么知道要求这些要求的人是值得信赖的?如果“可用性”借口仅仅是掩盖了在未来的某个时刻窃取密码的真实意图,该怎么办?你的天真可能会让客户和股东损失数百万美元。安全专家必须多次重复此操作才能最终沉入: 最常见和最严重的安全威胁始终是内部的。 - Aaronaught


答案:


如何针对这个问题采取另一种方法或角度?问为什么密码必须是明文的:如果是这样用户可以检索密码,那么严格来说你并不需要检索他们设置的密码(他们不记得它是什么),你他们需要能够给他们一个密码 可以使用

想一想:如果用户需要检索密码,那是因为他们忘记了密码。在这种情况下,新密码与旧密码一样好。但是,目前使用的常见密码重置机制的缺点之一是在重置操作中生成的密码通常是一堆随机字符,因此用户很难简单地键入,除非他们复制n-糊。对于不那么精明的计算机用户来说,这可能是个问题。

解决该问题的一种方法是提供或多或少自然语言文本的自动生成的密码。虽然自然语言字符串可能没有一串相同长度的随机字符所具有的熵,但没有任何内容表明您的自动生成的密码只需要8个(或10或12个)字符。通过将几个随机单词串在一起来获取高熵自动生成的密码短语(在它们之间留一个空格,因此任何可以阅读的人都可以识别并输入它们)。不同长度的六个随机单词可能比10个随机字符更容易正确且有信心地键入,并且它们也可以具有更高的熵。例如,从大写,小写,数字和10个标点符号(总共72个有效符号)中随机抽取的10个字符密码的熵将具有61.7比特的熵。使用7776个单词的字典(如Diceware使用的)可以随机选择六个字密码短语,密码短语的熵为77.4位。见 Diceware FAQ 了解更多信息。

  • 一个约77位熵的密码:“承认散文耀斑表的敏锐天赋”

  • 一个大约74位熵的密码:“K:&$ R ^ tt~qkD”

我知道我更喜欢输入短语,并且使用copy-n-paste,这个短语也很容易使用密码,所以没有丢失。当然,如果您的网站(或任何受保护资产)对于自动生成的密码短语不需要77位熵,则生成较少的单词(我确信您的用户会欣赏)。

我理解存在密码保护资产的论点,这些资产确实没有很高的价值,因此破解密码可能不是世界末日。例如,我可能不会关心我在各种网站上使用的80%的密码是否被破坏:所有可能发生的事情都是有人在我的名字下发送垃圾邮件或发帖一段时间。这不会很好,但并不像他们会侵入我的银行账户。但是,鉴于许多人使用与他们的银行账户(可能是国家安全数据库)相同的密码用于他们的网站论坛网站,我认为最好将这些“低价值”密码处理为非-recoverable。


1039
2018-02-28 08:16



密码短语+1,目前似乎提供密码强度和用户召回的最佳平衡。 - Aaronaught
你也可以做一个完整的句子,例如<形容词> <名词>是<动词> <副词>。绿猫疯狂地跳跃。列出了类别。每个有1024个选项,你有40位熵。 - Dominik Weber
+1用于将密码重用视为避免密码重用的关键问题 - lurscher
“考虑一下 - 如果用户需要检索密码,那是因为他们忘记了密码” - 不一定是真的!我经常想得到我的密码,因为我在笔记本电脑上,我知道我的机器在家里有我的密码存储,或者它写在一个安全的地方,而且我不想通过获得一个新的密码来打破它。 - joachim
新IT Security SE网站上得分最高的问题 处理这种熵计算的有效性。 (从技术上讲,它处理@Pieter链接的xkcd。) - Pops


想象一下,有人已经委托建造了一座大型建筑 - 比如一个酒吧 - 并且会发生以下对话:

建筑师:  对于这样大小和容量的建筑物,这里和这里都需要消防通道。
客户:  不,这太复杂,维护成本太高,我不想要任何侧门或后门。
建筑师:  先生,消防通道不是可选的,根据城市的消防法规要求。
客户:  我不付钱给你争辩。做我所问的。

那么建筑师是否会问道如何在没有消防通道的情况下合乎道德地建造这座建筑

在建筑和工程行业,谈话最有可能像这样结束:

建筑师:  这座建筑无法在没有消防通道的情况下建造。你可以去任何其他有执照的专业人士,他会告诉你同样的事情。现在我要走了;当你准备合作时,给我回电话。

计算机编程可能不是 领有牌照 专业,但人们似乎常常想知道为什么我们的专业没有得到与民用或机械工程师相同的尊重 - 好吧,不要再看了。那些职业,当交给垃圾(或完全危险)的要求时,将简单地拒绝。他们知道说这不是一个借口,“好吧,我尽了最大努力,但他坚持说,我必须按照他的说法行事。”他们可能因为这个借口而失去执照。

我不知道您或您的客户是否属于任何上市公司,但以任何可恢复的形式存储密码会导致您失败几种不同类型的安全审核。问题不在于有些“黑客”访问您的数据库以恢复密码的难度。 绝大多数安全威胁都是内部威胁。  您需要防范的是一些心怀不满的员工走出所有密码并将其出售给出价最高者。使用非对称加密并将私钥存储在单独的数据库中绝对不能阻止这种情况;总会如此 有人 访问私有数据库,这是一个严重的安全风险。

以可恢复的形式存储密码没有道德或负责任的方式。期。


593
2018-02-18 16:05



@Aaronaught - 我认为这是一个公平有效的观点,但让我在你身上扭转这一点。您正在为公司作为员工开展项目,而您的老板说“这是我们系统的要求”(无论出于何种原因)。你是否离开了充满正义愤慨的工作?我知道当我完全控制自己有责任承担责任时 - 但如果公司选择冒险审计或责任的失败,那么我有责任牺牲我的工作来证明一点,或者我是否寻求最佳和SAFEST方式做他们说的话?只是扮演魔鬼的拥护者.. - Shane
我不是律师,但考虑一下。如果您的主管命令您做一些违反公司利益的事情,例如让他们承担轻松避免的责任,那么您的工作是服从还是礼貌地拒绝?是的,他们是你的老板,但他们有自己的老板,即使是投资者。如果你 别 当你的安全漏洞被剥削时,他们的头会翻滚?只是需要考虑的事情。 - Steven Sudit
开发人员总是试图说明我们的工作比其他工作更难,因为我们的垃圾需求一直在变化。嗯,这是一个完美的例子,为什么;我们的职业迫切需要一个支柱。我们的职业迫切需要能够说“不,这不是一个可接受的要求,这不是我真诚能够发展的事情,你可能是我的客户/雇主,但我对你的客户和公众负有专业责任,如果你想要这样做,那么你将不得不寻找其他地方。“ - Aaronaught
@sfussenegger:你不需要知道背景。这是不可接受的。你假设客户是100%值得信赖的 - 如果他特别要求这个要求怎么办,那么他以后可以用密码取消?安全性是开发中为数不多的项目之一 是 刻在石头上。有些事情你不做,存储可恢复的密码就是其中的十个。 - Aaronaught
好的,让我们在这里和现在进行风险评估。 “如果您以可恢复的形式存储密码,则会造成密码被盗的非常重要的风险。至少有些用户可能会使用相同的密码来处理他们的电子邮件和银行帐户。如果密码被盗并且银行账户已经耗尽,它可能成为头条新闻,没有人会再与你做生意,你很可能会被起诉。“我们现在可以切废话吗?你将“纳粹”这个词带入这个事实清楚地表明你没有理智。 - Aaronaught


您可以使用公钥加密密码+盐。对于登录,只需检查存储的值是否等于从用户输入+ salt计算的值。如果有时间,当需要以明文恢复密码时,您可以使用私钥手动或半自动解密。私钥可以存储在别处,并且可以另外对称加密(这将需要人工交互来解密密码)。

我认为这实际上有点类似于 Windows恢复代理 作品。

  • 密码以加密方式存储
  • 人们可以登录而无需解密到明文
  • 密码可以恢复为纯文本,但只能使用私钥,可以存储在系统外部(如果您愿意,可以存储在银行保险箱中)。

206
2018-02-17 20:07



-1密码永远不应“加密”违反CWE-257 cwe.mitre.org/data/definitions/257.html - rook
1.问题是密码应该可以恢复到明文,所以这是一个要求。我在这里使用非对称加密而不是对称加密。解密的关键不是日常操作所必需的,可以保存在银行保险箱中。链接中的论证是有效的,但不适用于这种情况。 - stefanw
没错,但你是否同意,鉴于要求,这是最负责任的做法?你可以用CWE-257整天打我,它不会改变安全存储和使用凭证的有趣问题,并且如果需要可以将它们恢复到原始形式。 - stefanw
Windows恢复代理也是一个很糟糕的例子,因为它处理的是实际加密,而不是密码管理。加密密钥是 不 与密码相同;围绕每个的规则和做法 全然 不同。加密和身份验证不一样。加密是为了 隐私  - 钥匙用于保护 数据。身份验证适用于 身分,关键 是数据 (它是一个 因子 在身份验证过程中)。所以我再说一遍 加密和身份验证不一样。 您不能有效地将一个原则应用于另一个。 - Aaronaught
+1痴迷坚持CWE-257的重点在哪里?这是一个弱点(CWE),而不是漏洞(CVE)。将可恢复密码与缓冲区溢出进行比较是比较苹果和橙子。只需确保客户理解问题(让他签署一些说明的话 - 否则他可能不记得任何问题)并继续。此外,所需的安全措施取决于系统的价值和潜在的攻击风险。如果成功的攻击者只能取消某些简报订阅,那么就没有理由争论任何问题。 - sfussenegger


不要放弃。您可以用来说服客户的武器是不可否认的。如果您可以通过任何机制重建用户密码,那么您已经给出了  客户是一种合法的不可否认机制,他们可以拒绝任何依赖于该密码的交易,因为供应商无法证明他们没有重建密码并通过自己进行交易。如果密码被正确地存储为摘要而不是密文,那么这是不可能的,因为最终客户自己执行了交易或违反了他的注意义务w.r.t.密码。在任何一种情况下,他都要承担责任。我曾经处理过数亿美元的案件。不是你想要出错的东西。


134
2018-02-18 09:59



网络服务器日志不计入法庭?或者在这种情况下,它们也会被认为是伪造的? - Vinko Vrsalovic
@Vinko Vrsalovic,网络服务器在法庭上记录SHOULDNT计数,为此,您需要证明不可否认性,真实性证据,证据链等等,哪些网络服务器日志显然不是。 - AviD
究竟。供应商必须证明这一点 只要 客户可以执行该交易。 Web服务器日志不会这样做。 - user207421
并非所有密码都是“交易”所需的,可以这么说。假设该网站用于开发网页书签列表。在这种情况下,责任限额(通常在登记到网站时在条款和条件中称为)为零,因为没有金融交易。如果网站最多没有影响他人的行为,则数据将被黑客用户丢失。该公司受到T&C的保护。 - Sablefoste
@Sablefoste在该网站上。如果用户在其他地方使用相同的密码,则会产生泄露其私人凭据的风险。如果您从未参与练习,则无法解决问题。 - user207421


您无法合乎道德地存储密码以便以后进行明文检索。就这么简单。甚至Jon Skeet也不能合乎道德地存储密码以便以后进行明文检索。如果您的用户可以以某种方式或其他方式以纯文本形式检索密码,那么在您的代码中发现安全漏洞的黑客也可能也是如此。这不仅仅是一个用户的密码被泄露,而是 他们全部。

如果您的客户遇到问题,请告诉他们存储密码是可以接受的,这是违法的。无论如何,在英国,“1998年数据保护法”(特别是附表1,第II部分,第9段)要求数据管理员使用适当的技术措施来保护个人数据的安全,同时考虑到如果数据受到损害可能造成的伤害 - 对于在站点之间共享密码的用户而言,这可能是相当大的。如果他们仍然无法解决这个问题,请将它们指向一些现实世界的例子,例如 这个

允许用户恢复登录的最简单方法是通过电子邮件向他们发送一次性链接,将其自动登录并将其直接带到可以选择新密码的页面。创建一个原型并将其展示给他们。

这是我写的关于这个主题的几篇博文:

更新: 我们现在开始对那些未能正确保护用户密码的公司提起诉讼和起诉。例: LinkedIn遭遇了500万美元的集体诉讼; 索尼因PlayStation数据黑客罚款25万英镑。如果我没记错的话,LinkedIn实际上正在加密其用户的密码,但它使用的加密太弱而无法生效。


95
2018-02-23 15:20



@jimmycakes - 这对于低安全性系统来说是一件好事,但是如果你要存储任何高价值的数据,那么你必须假设这些人的电子邮件已经被泄露,并且发送一个直接登录链接会危及你的系统。 +1用一个可行的替代方案来回答我的问题,但指出整个逻辑中的一个缺陷。我不希望Payppal发送直接登录链接EVER。这可能听起来很偏执,但我总是认为我的电子邮件帐户是腐败的 - 它让我诚实。 ;) - Shane
绝对 - 在我让我重置之前,我希望我的银行至少给我打个电话并验证我的身份(不 恢复)我的密码。我在这里概述的是密码安全的绝对最低标准,我期望从任何网站,任何地方。 - jammycakes
忽略没有你设置限制的银行或PayPal;如果您认为他们的电子邮件遭到入侵,那么在线方法有何可能?如果您通过电子邮件发送生成的密码,那怎么更安全? - Peter Coulton
我不是在谈论获取单个人的密码,而是在谈论从数据库中获取多个密码。如果系统将密码可恢复地保存为纯文本,则黑客可能会编写脚本以从数据库中提取所有密码。 - jammycakes
我想知道在电子邮件中发送链接/密码,通过未知网络节点以简单形式通过网络... - Jakub


看完这部分后:

在下面的一个注释中,我指出了这一点   网站主要面向   老人,精神上的挑战,或非常   年轻人可能会让人感到困惑   当他们被要求表演时   安全密码恢复例程。   虽然我们可能会发现它很简单   在某些用户需要的情况下平凡无奇   任何一方的额外援助   服务技术帮助他们进入   系统或通过电子邮件/显示它   直接给他们。

在这样的系统中,损耗率   从这些人口统计数据可能会蹒跚   应用程序,如果用户不是   鉴于此级别的访问协助,   所以请回答这样的设置   心神。

我想知道这些要求中是否有任何要求可检索的密码系统。例如: 梅布尔阿姨打来电话说:“你的互联网程序无效,我不知道我的密码”。 “OK”说客户服务无人机“让我查看一些细节,然后我会 给你一个新密码。当您下次登录时,它会询问您是否要保留该密码或将其更改为您可以更容易记住的密码。“

然后系统设置为知道密码重置何时发生并显示“您想保留新密码还是选择新密码”消息。

与被告知旧密码相比,对于识字能力较差的人来说,这会更糟糕吗?虽然客户服务人员可以起到恶作剧的作用,但数据库本身在被破坏时更加安全。

评论我的建议有什么不好,我会建议一个实际上做你最初想要的解决方案。


55
2018-02-25 11:27



@john - 我认为这是一个非常可行的解决方案。尽可能准备好了解内部威胁!你知道,如果我用中间密码重置(技术手动设置密码作为临时方法并告诉Mabel键入1234作为她的密码),那么它可能在不包含重要数据的系统上运行良好。如果它是一个高安全性环境,但我们遇到的问题是,cust服务可以将CEO的密码设置为1234并直接登录。没有完美的解决方案,但这个解决方案适用于很多实例。 (1) - Shane
我刚刚注意到这个答案。 @Shane,我不明白为什么你预测会因为“内部威胁”而受到抨击。更改密码的能力不是一个显着的弱点;问题是能够发现可能用于的密码 其他 服务 - 她的电子邮件,她的银行,她存储CC信息的在线购物网站。这种弱点在这里没有表现出来;如果Bob重置Mabel的密码并通过电话告诉她,那么这并不能让他访问她的任何其他帐户。但是,我会 力 而不是“建议”登录时重置密码。 - Aaronaught
@Aaronaught - 我确实看到了你的观点,但我想到的是甚至客户服务人员被锁定在系统的某些区域(例如工资单,会计等)并允许他们直接设置密码的时间一个安全问题本身。虽然我问这个问题的系统类型与内部会计系统有很大不同,但我确实看到了你的观点。我们可能会对其中的专有内部系统和密码安全性进行完全不同的讨论。 - Shane
@Shane:那么这个问题就更没意义了。我以为你想让别人通过电话给他们读密码。如果你想通过一些自动化的自助服务系统通过电子邮件向用户发送密码,那么你也可以完全免除密码,因为它被一些更弱的东西“保护”了。也许您需要更具体地了解您尝试支持哪种可用性方案。也许该分析随后将向您显示甚至不需要可恢复的密码。 - Aaronaught
支持人员提供的代码不一定是新密码。它可以是一次性代码,解锁密码重置功能。 - kgilpin


迈克尔布鲁克斯对CWE-257一直很直言不讳 - 无论你使用什么方法,你(管理员)仍然可以恢复密码。那么这些选择如何:

  1. 使用加密密码 别人的 公钥  - 一些外部权威。这样你就无法亲自重建它,用户将不得不去那个外部机构并要求恢复他们的密码。
  2. 使用从第二个密码短语生成的密钥加密密码。执行此加密客户端,并且永远不会将其明确地传输到服务器。然后,要恢复,请通过从其输入重新生成密钥再次执行解密客户端。不可否认,这种方法基本上是使用第二个密码,但您可以随时告诉他们将其写下来,或使用旧的安全问题方法。

我认为1.是更好的选择,因为它使您能够指定客户公司内的某人持有私钥。确保他们自己生成密钥,并将其与指令一起存储在保险箱等中。您甚至可以通过选择仅加密并从密码向内部第三方提供某些字符来增加安全性,这样他们就必须破解密码才能猜到它。将这些字符提供给用户,他们可能会记住它是什么!


42
2018-02-18 13:56



当然,您可以使用任何秘密分裂技术来要求贵公司的多个人进行解密。但是,这些都不符合能够向用户发送密码的原始要求,或者让一些一流的电话支持者通过登录来完成这些操作。 - Christopher Creutzig


在回答这个问题时,对用户的安全问题进行了大量讨论,但我想补充说明一些好处。到目前为止,我还没有见过 一个合法的好处 提到有一个存储在系统上的可恢复密码。考虑一下:

  • 用户是否可以通过电子邮件将密码发送给用户?不会。他们从一次性密码重置链接中获得更多好处,这有望让他们选择密码  记得。
  • 用户是否可以在屏幕上显示密码?不,出于与上述相同的原因;他们应该选择一个新密码。
  • 用户是否可以让支持人员向用户说出密码?没有;再次,如果支持人员认为用户对其密码的请求经过适当的认证,那么给予新密码和更改密码的机会更有利于用户的利益。此外,电话支持比自动密码重置更昂贵,因此该公司也没有受益。

似乎唯一可以从可恢复密码中受益的是具有恶意意图的人或者需要第三方密码交换的不良API的支持者(请不要使用所述API!)。也许你可以通过如实告诉你的客户来赢得你的论点 通过存储可恢复的密码,公司不会获得任何利益和责任

在这些类型的请求之间进行读取,您会发现您的客户可能根本不了解或甚至根本不关心如何管理密码。他们真正想要的是一个 认证系统 这对他们的用户来说并不那么难。因此,除了告诉他们他们实际上不想要可恢复的密码之外,您还应该为他们提供一些方法来减少身份验证过程,特别是如果您不需要银行的严重安全级别:

  • 允许用户使用其电子邮件地址作为其用户名。我见过无数用户忘记用户名的情况,但很少忘记他们的电子邮件地址。
  • 提供OpenID并让第三方支付用户健忘的费用。
  • 减轻密码限制。我确信当一些网站因为无法使用“你不能使用特殊字符”或“你的密码太长”或“你的密码必须启动”等无用的要求时,我们都会非常恼火一封信。“此外,如果易用性比密码强度更大,您可以通过允许更短的密码或不需要混合字符类来放松非愚蠢的要求。随着限制的放宽,用户将更有可能使用他们不会忘记的密码。
  • 不要使密码过期。
  • 允许用户重用旧密码。
  • 允许用户选择自己的密码重置问题。

但如果你出于某种原因(请告诉我们原因) 真的,真的,真的 需要能够拥有可恢复的密码,您可以通过为用户提供基于非密码的身份验证系统来防止用户潜在地破坏其他在线帐户。因为人们已经熟悉用户名/密码系统并且它们是一个运行良好的解决方案,这将是最后的手段,但肯定有很多创造性的替代密码:

  • 让用户选择一个数字引脚,最好不是4位数,最好只有在强力尝试受到保护的情况下。
  • 让用户选择一个简短回答的问题,只有他们知道答案,永远不会改变,他们会永远记住,他们不介意其他人发现。
  • 让用户输入一个用户名,然后绘制一个易于记忆的形状,并有足够的排列以防止猜测(见 这张漂亮的照片 G1如何解锁手机)。
  • 对于儿童网站,您可以根据用户名(类似于同一个用户名)自动生成模糊生物,并要求用户为该生物提供一个秘密名称。然后可以提示他们输入生物的秘密名称以登录。

28
2018-02-27 20:10



我回答了这里的评论,在我的答复中,因为它非常冗长 - 我认为重要的是审查分析和讨论所提出的问题。 stackoverflow.com/questions/2283937/... - AviD
用户是否可以在屏幕上显示密码?在我看来 - 绝对是的!每次我从互联网上获得晦涩的密码,我感谢Apple我可以让它显而易见,所以我不必在痛苦中重新输入100次。我可以想象残疾人的感受如何。 - Dmitri Zaitsev
为什么显示一个模糊的密码比让您选择一个您能记住的新密码更好? - Jacob
@Jacob:更多熵? - Alexander Shcheblikin


根据我就该问题所作的评论:
几乎每个人都忽略了一个重要的观点...我最初的反应与@Michael Brooks非常相似,直到我意识到,像@stefanw一样,这里的问题是破坏了要求,但这些都是它们的本质。
但是后来发生的事情甚至可能都不是这样!这里缺少的是未说出口的  应用程序的资产。简单来说,对于一个低价值的系统,一个完全安全的认证机制,涉及所有的过程,将是过度的,并且 错误 安全选择。
显然,对于银行而言,“最佳实践”是必须的,并且没有办法在道德上违反CWE-257。但是很容易想到低价值的系统,它只是不值得(但仍然需要一个简单的密码)。

重要的是要记住,真正的安全专业知识是找到适当的权衡,而不是教条地宣传任何人都可以在线阅读的“最佳实践”。

因此,我建议另一个解决方案:
取决于系统的价值,和 除非 系统是适当的低价值,没有“昂贵”的资产(身份本身,包括在内),  有正当的业务要求,使正常的过程不可能(或足够困难/昂贵),  客户了解所有警告......
那么简单地允许可逆加密可能是合适的,没有特殊的环节可以跳过。
我完全没有说过不打算加密,因为它实现起来非常简单/便宜(甚至考虑了可通行的密钥管理),并且它提供了一些保护(超过了实现它的成本)。此外,它值得研究如何通过电子邮件,在屏幕上显示等方式为用户提供原始密码。
由于这里的假设是被盗密码的价值(即使是总计)非常低,因此这些解决方案中的任何一个都是有效的。


由于正在进行热烈的讨论,实际上是在几个热烈的讨论中,在不同的帖子和单独的评论帖中,我将添加一些澄清,并回应在这里其他地方提出的一些非常好的观点。

首先,我认为这里的每个人都清楚允许检索用户的原始密码,这是糟糕的做法,通常不是一个好主意。这根本不是争议......
此外,我要强调的是,在许多情况下,即使是最重要的情况 - 甚至是错误的 犯规,讨厌,丑陋

然而,问题的关键在于 原则是否存在可能没有必要的情况 禁止这样做,如果是的话,该如何做到这一点 最恰当的方式适合于这种情况

现在,正如@Thomas,@ sfussenegger和其他一些人所提到的,回答这个问题的唯一正确方法就是彻底 风险分析 任何给定的(或假设的)情况,了解什么是利害关系,保护多少值,以及还有什么其他缓解措施可以提供这种保护。
不,它不是一个流行语,这是真实安全专业人员的基本,最重要的工具之一。在经过深思熟虑的风险分析后,最佳实践达到了一定程度(通常作为缺乏经验和黑客的指导)。

你知道吗,这很有趣 - 我一直认为自己是安全狂热分子之一,不知怎的,我正处于那些所谓的“安全专家”的对立面......好吧,事实是 - 因为我是一个狂热分子,和一个真实的现实安全专家 - 我不相信喷出“最佳实践”教条(或CWE),而不是那么重要 风险分析
“要小心安全狂热者谁能迅速将所有东西都应用到他们的工具带中而不知道他们正在防范什么是实际问题。更多的安全性并不一定等同于良好的安全性。”
风险分析和真正的安全狂热分子将指出基于风险,潜在损失,可能的威胁,补充缓解等基于价值/风险的更明智的权衡。任何不能指出健全风险分析的“安全专家”他们建议的基础,或支持逻辑权衡,但更愿意在没有理解如何进行风险分析的情况下兜售教条和CWE,除了安全黑客,他们的专业知识不值得他们打印的卫生纸。

实际上,这就是我们如何得到机场安全的荒谬。

但在我们讨论在这种情况下做出的适当权衡之前,我们先来看看明显的风险(显而易见,因为我们没有关于这种情况的所有背景信息,我们都假设 - 因为这个问题是假设的情况可能会...)
让我们假设一个低价值系统,但不是那么琐事,它是公共访问 - 系统所有者想要防止随意假冒,但“高”安全性并不像易用性那样至关重要。 (是的,接受任何熟练的脚本小子可能破坏网站的风险是合法的权衡......等等,现在不是APT流行......?)
例如,假设我正在为一个大型家庭聚会安排一个简单的网站,让每个人都能集体讨论今年我们想去野营旅行的地方。我不太担心一些匿名黑客,或者甚至是Cousin Fred反复提出要回到Lake Wantanamanabikiliki的建议,因为我是关于Erma姨妈在她需要的时候无法登录的。现在,作为核物理学家的艾玛姨妈不太擅长记住密码,甚至根本不使用电脑......所以我想消除她可能发生的所有摩擦。再说一遍,我并不担心黑客,我只是不想要错误登录的愚蠢错误 - 我想知道谁来了,他们想要什么。

无论如何。
那么,如果我们对密码进行对称加密,而不是使用单向哈希,那么我们的主要风险是什么呢?

  • 冒充用户?不,我已经接受了这种风险,而不是有趣。
  • 邪恶的管理员?好吧,也许......但是再一次,我不在乎是否有人可以模仿另一个用户,INTERNAL或者没有...而且无论如何恶意管理员都会得到你的密码 无论  - 如果你的管理员变坏了,无论如何它的游戏。
  • 另一个问题是,身份实际上是在几个系统之间共享的。啊!这是一个非常有趣的风险,需要仔细观察。
    让我首先断言它不是实际的 身分 那是共享的,而不是 证明或身份验证凭据。好的,因为共享密码将有效地允许我进入另一个系统(例如,我的银行帐户或gmail),这实际上是相同的身份,所以它只是语义...除此之外 不是。在这种情况下,身份由每个系统单独管理(尽管可能存在第三方ID系统,例如OAuth - 仍然,它与该系统中的身份分开 - 稍后将详细介绍)。
    因此,这里的核心风险点是,用户愿意将他的(相同)密码输入到几个不同的系统中 - 现在,我(管理员)或我网站的任何其他黑客都可以访问阿姨Erma的密码核导弹基地。

嗯。

这里有什么似乎不适合你吗?

这应该。

让我们从保护核导弹系统这一事实开始 不是我的责任,我只是建立一个frakkin家庭外出网站(为我的家人)。那么它的责任是什么呢?嗯......核导弹系统怎么样?咄。
其次,如果我想窃取某人的密码(知道在安全网站之间重复使用相同密码的人,而不是那么安全的密码) - 为什么我会打扰你的网站呢?或者与对称加密斗争? Goshdarnitall,我可以忍受 我自己的简单网站,让用户注册接收关于他们想要的任何重要新闻... Puffo Presto,我“偷”了他们的密码。

是的,用户教育总是回来咬我们的hienie,不是吗?
你无能为力......即使你想在你的网站上散列密码,并做其他TSA可以想到的事情,你也可以为他们的密码添加保护 不是一个白色如果他们要将他们的密码粘贴到他们遇到的每个网站上。不要打扰尝试。

换一种方式, 您没有自己的密码,所以不要试图像你那样行事。

所以,亲爱的安全专家,作为一位曾经要求温迪的老太太,“哪里有风险?”

另外几点,回答上面提出的一些问题:

  • CWE不是法律,法规,甚至是标准。它是一个集合 常见的弱点,即“最佳实践”的倒数。
  • 共享身份问题是一个实际问题,但被反对者误解(或歪曲)在这里。这是一个共享身份本身的问题(!),而不是破解低价值系统上的密码。如果您在低价值系统和高价值系统之间共享密码,问题已经存在!
  • 通过,前一点实际上将指向 反对 将OAuth等用于这些低价值系统和高价值银行系统。
  • 我知道这只是一个例子,但(遗憾的是)FBI系统实际上并不是最安全的。不太像你的猫的博客服务器,但它们也没有超过一些更安全的银行。
  • 加密密钥的分裂知识或双重控制不仅仅发生在军队中,实际上就是PCI-DSS 要求 这基本上来自所有商家,所以它不再那么远了(如果价值合理的话)。
  • 对于所有那些抱怨这些问题的人来说,开发人员职业看起来如此糟糕:这些问题的答案就会让安全行业看起来更糟糕。同样,以业务为中心的风险分析是必需的,否则你会使自己无用。除了错误。
  • 我想这就是为什么仅仅聘请一名普通的开发人员并在他身上放下更多的安全责任,而不进行不同的思考培训,并寻找正确的权衡,这不是一个好主意。没有冒犯,对你们这些人来说,我都是为了它 - 但是需要更多的训练。

呼。多长的帖子......
但要回答你原来的问题,@Shane:

  • 向客户解释正确的做事方式。
  • 如果他仍然坚持,再解释一下,坚持,争辩。如果需要的话,发脾气。
  • 向他解释商业风险。细节很好,数字更好,现场演示通常是最好的。
  • 如果他仍然坚持,并提出有效的商业理由 - 是时候进行判断调用了:
    这个网站是否低至无价值?这真的是一个有效的商业案例吗?这对你好吗?是否没有其他风险可以考虑,这会超过有效的商业原因? (当然,客户端不是恶意网站,但多数民众赞成)。
    如果是这样,就去吧。使用必要的流程并不值得努力,摩擦和失去使用(在这种假设的情况下)。任何其他决定(再次,在这种情况下)是一个不好的权衡。

因此,底线和实际答案 - 使用简单的对称算法对其进行加密,使用强ACL保护加密密钥,最好使用DPAPI等保护加密密钥,记录并让客户(足够高级的人做出决定)签字它。


25
2018-02-23 15:01



您的低价值网站与“没有”昂贵的资产和Facebook / GMail /您的银行之间共享的密码 是 即使在低价值网站上也是一项昂贵的资产。 - jammycakes
我认为这里的问题是上述用户群倾向于对来自许多不同安全级别(从银行业务到配方博客)的所有应用程序使用相同的密码。所以问题是,如果开发人员有责任保护用户甚至自己。我肯定会说,是的! - ercan
对不起,但身份本身 是 高价值资产,期间。没有例外,没有任何借口。无论您认为您的网站有多么小而且无关紧要。和共享密码 是 如果它允许黑客进入用户的Facebook帐户,Gmail帐户,银行帐户等,那么它就没有任何关系。它与语义无关,但它与后果无关。只要问一个受黑客攻击影响的人,比如这个: theregister.co.uk/2009/08/24/4chan_pwns_christians - jammycakes
@Jacob,因为Erma在其他系统上的账户受到了损害,你的客户会被起诉到什么世界?即使你的客户严重疏忽(这不是一个给定的,正如我所阐述的那样),并且BESIDES事实上没有办法证明其他系统因你的而被破坏,所以没有可能的合法地位。从另一个系统的一个系统索赔任何形式的损害赔偿。它会在偏见的情况下抛出法庭,并蔑视原告。但是,Erma可能因违反众多服务条款而有过错...... - AviD
@Jacob,这是非常错误的。仅仅因为密码恰好相同(这显然违反了你的ToS及其安全政策),他们没有法律地位来腐蚀这两者。多数民众议员甚至认为提供它几乎是不可能的事实。另外,我还要指出,除非特定的法规相关,否则没有法律要求随机公司不要采取宽松的安全措施。最重要的是,密码是加密的(!),所以松懈远远不是一个放弃的结论。 - AviD


中途宿舍怎么样?

使用强加密存储密码,不要启用重置。

允许发送一次性密码(必须在第一次登录时立即更改),而不是重置密码。然后让用户更改为他们想要的任何密码(前一个,如果他们选择)。

您可以将其“出售”为重置密码的安全机制。


21
2018-02-17 20:01



你知道,我已经在几种情况下使用它(通常这是我的中间地带),但是我有人告诉我,最终用户不会得到交互,而且支持需要能够“告诉他们他们的密码'由于该业务模式的情况。我同意尽管如此,这是可取的。 - Shane
你总是可以告诉你的客户他们的数据库落入邪恶之手的风险以及他们获取被盗密码的宣传......周围有很多例子。 - Oded
要求他们签署“设计”,并附加一条条款,如果你警告他们确实发生了什么,他们就不能起诉你......至少你会掩饰自己。 - Oded
-1密码永远不应“加密”违反CWE-257 cwe.mitre.org/data/definitions/257.html - rook
@Michael Brooks:没有必要一遍又一遍地对同一评论进行downvote和copy-paste;我们都知道这是不好的做法。 Shane说,他在这个问题上缺乏影响力,所以提出了下一个最好的事情。 - Johannes Gorset