我应该如何在道德上处理用户密码存储以便以后可以以明文形式检索?

9 浏览
0 Comments

我应该如何在道德上处理用户密码存储以便以后可以以明文形式检索?

随着我不断构建更多的网站和Web应用程序,人们经常要求我以一种可以在用户遇到问题时检索密码的方式存储用户的密码(无论是通过电子邮件发送忘记密码链接,还是通过电话指导等)。当我能够时,我会强烈反对这种做法,并进行大量“额外”的编程工作,以便在不存储实际密码的情况下实现密码重置和管理帮助。

当我无法反对它(或无法取胜)时,我总是以某种方式对密码进行编码,以至少不以明文形式存储在数据库中,尽管我知道如果我的数据库被黑客攻击,罪犯很容易破解密码,这让我感到不安。

在理想的世界中,人们会经常更新密码,并且不会在许多不同的网站上重复使用相同的密码-不幸的是我认识很多人,他们的工作/家庭/电子邮件/银行密码是相同的,甚至在他们需要帮助时自愿提供给我。如果我的数据库安全程序因某种原因失败,我不想成为导致他们财务灭亡的人。

从道德和伦理角度来看,我觉得我有责任保护对某些用户来说可能是他们生活来源的东西,即使他们对待它的尊重远远不够。

我相信有很多途径可以处理盐值哈希和不同的编码选项,但是在必须存储它们的情况下是否有单一的“最佳实践”?在几乎所有情况下,我都在使用PHP和MySQL,如果这在处理具体细节时有所区别,请告诉我。

额外信息

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

在下面的备注中,我指出,面向老年人、智力受限或非常年轻人的网站在要求他们执行安全的密码恢复程序时可能会令人困惑。虽然在这些情况下我们可能觉得这很简单和乏味,但是一些用户需要额外的帮助,要么有一个服务技术员帮助他们进入系统,要么直接通过电子邮件/显示给他们。

在这种系统中,如果用户没有得到这种级别的访问帮助,这些人群的流失率可能会使应用程序陷入困境,请在回答时考虑到这样的设置。

感谢大家

这是一个有很多争议的有趣问题,我很喜欢。最后,我选择了一个既保持密码安全性(我不需要保留明文或可恢复密码),又使我指定的用户群能够登录系统而不会遇到我从正常密码恢复中发现的重大缺点的答案。

总是有大约5个答案出于不同原因我想标记为正确的,但我必须选择最好的一个-其他都得到了+1。谢谢大家!

此外,感谢Stack社区中投票支持这个问题和/或将其标记为收藏的每个人。我认为达到100个赞是一种称赞,并希望这个讨论对有同样担忧的其他人有所帮助。

0
0 Comments

如何在道德上处理用户密码存储以便以后以明文检索?这个问题的出现的原因是,用户需要能够检索他们设置的密码,但通常情况下他们并不记得密码是什么。因此,我们需要能够提供给他们可用的密码,而不是他们设置的密码。

为了解决这个问题,可以采取另一种方法,即提供自动生成的密码,这些密码是更自然的文本,而不是一串随机字符。这样的自动生成密码可以由几个随机单词串联而成,单词之间用空格分隔,这样任何能阅读的人都可以识别和输入。相比起一串随机字符,使用不同长度的六个随机单词可能更容易准确地输入,并且它们的熵也可以更高。例如,从包含大写字母、小写字母、数字和10个标点符号(一共72个有效符号)的字符集中随机选择一个10个字符的密码的熵为61.7比特。而使用一个包含7776个单词的词典(例如Diceware使用的词典),可以从中随机选取六个单词来生成一个短语,这个短语的熵为77.4比特。

我知道我宁愿输入短语,并且通过复制粘贴,这个短语的使用也不比密码更难。当然,如果你的网站(或受保护的资产)不需要自动生成的短语具有77比特的熵,那么可以生成更少的单词(我相信你的用户会欣赏这一点)。

我理解的观点是,虽然有一些受密码保护的资产可能并没有很高的价值,所以密码泄露可能并不是世界末日。例如,如果我在各个网站上使用的80%的密码被泄露,我可能并不在意:所有可能发生的事情只是有人冒充我一段时间进行垃圾邮件或发帖。虽然这并不好,但他们并不会侵入我的银行账户。然而,鉴于很多人在他们的网站论坛上使用与他们的银行账户(以及可能的国家安全数据库)相同的密码,我认为即使是这些“低价值”的密码也最好不要恢复。

赞成使用口令短语,目前看来它们似乎在密码强度和用户记忆方面提供了最好的平衡。

还有一种方法是使用完整的句子,例如"The <adjective> <noun> is <verb> <adverb>"。可以为每个类别准备一个词汇表,每个类别都有1024个选择,这样可以获得40比特的熵。

对于避免密码重用,我给予+1的支持。

这是一个我觉得很蠢的情况,因为我没有考虑过。很好的解决方案,并且解释得很好!

对于密码重置链接是否在合理时间内失效,我觉得这是一个不错的主意。

我正在重新设计一个遗留系统的密码检索机制,而不是使用一个随机数字代码,我将使用一个简短的随机短语。我更喜欢这种方法,即使人们很可能会剪切和粘贴。

我认为限时的密码重置链接比发送一个新密码更用户友好。

你试过KeePass吗?(keepass.info)我喜欢将其描述为您密码的分布式版本控制系统 - 对于您的使用情况非常适合。

关于口令短语,它们是否应该包含空格?提前感谢。

开头的段落是我一次又一次用来反驳那些坚持要求能够检索密码而不更改密码的人的逻辑。"如果你记不住它,你为什么在乎它是否改变?"

KeePass有一个关键的缺陷:如果你忘记了解锁数据库的主密码(是的,我确实忘记了),那就够倒霉的了。

在提出的解决方案中,确保使用一个大的词汇表,而不是一些手工制作的词汇表。否则,攻击者可能会很容易地检索到所有的单词,然后以很快的速度进行暴力破解。

"所有可能发生的事情只是有人冒充我一段时间进行垃圾邮件或发帖" - 这可能包括对公众人物进行诽谤或对公司或其产品进行虚假指控。更不用说以您的名义进行侵犯版权了。这反过来很容易给您带来昂贵的诉讼。就您的财务状况而言,如果运气不好,这可能与直接侵入您的银行账户一样糟糕。

攻击者知道密码的结构,仍然需要破解77比特的熵。

现在还有人听说过字典攻击吗?这就是我们最初开始使用随机字符密码的原因。

即使你知道所有的密码都恰好是6个字典单词,这仍然相当于在一个拥有数万个字符的语言中的6个字符密码(有数十万甚至几百万个“单词”,但可能只选择相对常用的单词,其中仍然有数万个选择)。尝试对这样的密码进行字典攻击吧。

实际上,英文单词中常用于密码的单词只有几百到几千个,这是很容易理解的,可以查看一下最常用的密码(真的很荒谬)www.cbsnews.com/news/the-25-most-common-passwords-of-2013/,你就会明白我在说什么。因此,假设用户选择三个单词(注意:普通人通常不会选择三个单词,这对他们来说太多了,不值得他们关心和记住),并且有2,000个他们通常会选择的常用单词。这只需要八十亿次循环。我可以在我的笔记本电脑上运行它在不到1天的时间内。

刚刚编写了一个基本的字典攻击脚本并在本地运行。用时一个小时32分钟。我给它要破解的密码是"quiet rabbit balloon"。

但是,这个答案并不是在谈论在密码中常用的单词,也没有讨论用户选择这些词并且只选择了<=3个。引用一下,"解决这个问题的一种方法是提供自动生成的密码,这些密码是更自然的文本":也就是说,生成一个完整的语法英语句子,并将其交给用户记住(如果他们忘记了 - 没关系,生成一个新的给他们)。很少有密码使用"acute"这个词(如答案中的例子),但它并不古怪。

只是想指出,没有理由限制自己在一个7776(6⁵)的词典中。可以很容易地创建一个大约2^15个单词的词典,并且只使用5个单词就可以获得75比特的熵。

0
0 Comments

如何在道德上处理用户密码存储以便以后明文检索?

在讨论如何在道德上处理用户密码存储以便以后明文检索的问题时,人们提出了不同的观点和解决方案。有人建议使用公钥对密码和盐进行加密,并在登录时检查存储的值是否等于用户输入和盐计算出的值。当需要恢复明文密码时,可以使用私钥进行手动或半自动解密。私钥可以存储在其他地方,并且还可以额外使用对称加密进行加密(解密密码需要人工交互)。

然而,也有人指出将密码以可恢复的格式存储是一种漏洞,违反了CWE-257的规定。他们认为,可以通过强制用户重置密码来避免这个问题,这样做会增加系统的复杂性,但会导致系统变得更弱。

还某些情况下了Windows Recovery Agent作为一个类似的例子,但也有人认为这个例子并不适用于密码管理。加密和身份验证是不同的,加密是为了保护数据的隐私,而身份验证是为了确认身份。因此,不能将加密和身份验证的原则混为一谈。

在讨论中还提到了内部人员可能解密密码的风险,即使需要私钥也无法完全避免这个问题。另外,有人提出了使用对称密钥进一步加密密码的建议,并使用用户已知但不存储在系统中的信息作为密钥,以增加密码恢复的安全性。

讨论中提出的不同观点和解决方案表明,如何在道德上处理用户密码存储以便以后明文检索是一个复杂的问题,需要权衡不同的因素和需求。最终的解决方案应该是根据特定系统的价值和潜在风险来确定的。

0
0 Comments

如何在道德上处理用户密码的存储以便以后以明文检索?这个问题的出现原因是因为在存储用户密码时,需要考虑安全性和道德性。密码是用户的敏感信息,需要遵循一些安全标准来保护用户的隐私。以下是解决这个问题的方法:

1. 使用单向哈希算法:使用单向哈希算法对用户密码进行加密存储。单向哈希算法是一种不可逆的算法,它将密码转换为唯一的哈希值,不可逆地转换回原始密码。这样即使数据库被入侵,攻击者也无法还原密码。

2. 强制密码策略:要求用户设置强密码,包括密码长度、复杂度和有效期等要求。这样可以增加密码的安全性,降低被猜解或破解的风险。

3. 使用加密技术:使用对称或非对称加密算法对密码进行加密存储。对称加密算法使用相同的密钥对密码进行加密和解密,而非对称加密算法使用公钥和私钥对密码进行加密和解密。将私钥存储在独立的数据库中,只有授权人员可以访问,以提高安全性。

4. 实施访问控制:限制对存储密码的数据库的访问权限,只有授权人员可以访问。使用强密码来保护数据库,并定期更改访问密码,以降低内部威胁的风险。

5. 定期审计和监控:定期对密码存储系统进行审计和监控,以及时发现和处理潜在的安全漏洞和入侵行为。

通过采用以上方法,可以在道德上处理用户密码的存储,保护用户的隐私和安全。同时,开发人员还需要教育客户和用户,提高他们对密码安全的意识,避免使用相同的密码和弱密码,以进一步增加系统的安全性。

0