在密码中包含和存储字符输入顺序作为增强的安全措施

信息安全 密码 密码学 密码策略 随机的
2021-08-25 13:24:30

如果这是一个愚蠢的想法,或者已经尝试过,我相信我会很快得到纠正。我的问题是:这个想法以前有没有尝试过?如果没有,是否有充分的理由它不起作用,或者不会提高安全性?

通过输入四个不同的部分,我更容易记住我当前的密码算法。为了正确输入这些片段,我必须四处移动光标,例如,首先我可能会输入(不是这样,只是类似):

ihate

然后我可能会这样做:

Dirtyihate

和:

DirtyihateCommies

最后:

Dirtyi9?7hateCommies

我突然想到:作为密码确认的一部分,您为什么不能不仅使用密码本身的文本,还使用输入的ORDER ......?

我看不出有任何理由这在技术上是不可能的。确实,让人们利用它需要改变用户心态,并且可能会有非常大的学习曲线。但是,与此同时,我假设 99% 的输入密码的人每次都以完全相同的方式输入密码,因此对于那些(绝大多数)他们不会受到更改的影响,除非他们愿意。

我还假设大多数人每次都直接按顺序输入他们的 PW(除非他们犯了错误并回去纠正它),所以他们不太可能注意到它。只有想要利用额外安全性的人才会受到影响。

包括输入每个字符的顺序会为密码增加大量额外的随机性(并且随机性的大小会随着添加的每个额外字符而增加 - 例如,对于 8 个字符的密码,如果我的数学是正确的,它会添加8! 更多可能的迭代,10! 用于 10 个字符的 pw,等等)。

另一个好处,我认为这可能是这个想法的最大潜力,就是您可以将密码(加密)字符串本身与服务器上的(也是加密的)订单分开存储。这样,如果攻击者想要窃取密码并使用它们,攻击者必须拥有两组数据才能使用它们!一个 20 个字符的密码——例如,从一张不小心存储的纸上获得——仍然有 >10^18 次可能的迭代。

因此,您(即比我聪明的人)可以想出一种方法来存储 - 完全分开 - 这两种交错形式的身份确认,这样每一种都同样难以窃取,但在输入密码时都会检查它们。

存储密码顺序也很容易。只需将其作为列表整数即可。因此,对于我上面的示例密码,20 个字符的顺序可能存储如下:

6 7 8 9 10 1 18 19 20 2 3 4 5 11 12 13 14 15 16 17

也许这个想法也可以扩展到诸如私钥之类的东西,尽管我对这个主题的了解还不够明确,无法如此明确地说出来。

编辑:

也许移动光标的要求太费力了。富文本密码呢?为什么不允许斜体、粗体、下划线等作为密码输入的一部分?颜色呢?与之前的想法一样,没有人会受到影响。只有那些选择受影响的人才会受到影响,并且与之前的想法类似,您可以将样式信息单独存储在服务器上,以增强对密码数据库的盗窃保护。

2个回答

这将是一个次优的安全方案有几个原因。这里有几个:

  1. 安全密码的最大问题是我们的记忆力,或者我们记住密码的能力有限。我们正在挑战我们的记忆极限,并且一直在努力设计新的技巧来帮助更好地记住更安全的密码。该方案引入了必须记忆的新组件,而记忆技术没有任何进步。这意味着,如果我们已经达到记忆极限,但现在还必须记住进入顺序,则需要给出其他东西,并且鉴于进入顺序本身并不是特别令人难忘,我们必须在其他方面做出牺牲的密码可能非常大。

  2. 减少或消除屏蔽密码的能力。对于一个重要的方案(IE,不仅仅是附加和前置密码段),几乎不可能像我们今天所做的那样在输入过程中屏蔽密码。如果我们要在某个地方的密码中间插入字符串,以任何合理的速度和准确性保证来做到这一点,我们需要能够看到已经输入的内容。这意味着您不能用一串星号或圆盘来掩盖密码,这样就可以进行肩部冲浪和照片纯文本密码捕获。

  3. 将需要新一代的密码管理器。目前,密码管理器能够自动输入密码。如果顺序很重要,您必须能够让他们按特定顺序自动输入,或者如果您使用密码管理器,则继续使用按顺序排列的密码。在第二种情况下,这是当今的首选机制,并且可能会继续受到首选,除了额外的复杂性之外,您从入门订单方案中没有任何收获。

  4. 这一切都必须在客户端捕获。在您指定的场景中,(Web 应用程序)在将请求发送到服务器时,密码只是一个字段值,并且 HTML 表单不支持将输入值的方式与要求。因此,您需要一种方法来捕获挂单,然后将其与请求一起提交。它需要与每个输入机制一起工作,为每个客户端用户代理工作。

  5. 作为用户,增加的输入复杂性可能是一个重大障碍。触摸设备就是这将成为问题的一个例子。在手机上输入数据已经够难的了,而这正在成为使用网络的最普遍的形式因素。当你输入密码时,必须在字段中来回移动,这会让你想用棍子刺你的眼球。而且,如果您认为这很难,那么对于某些客户端而言,这基本上是不可能的,例如通过允许残疾用户说出他们想要输入的值来帮助残疾用户的语音到文本工具。

我敢肯定还有其他的,这些只是我想到的一些障碍。这种方案确实为密码增加了一个复杂的元素,而今天不存在......这是真的。然而,它不是改进密码的理想方案。我们最好推广密码管理器和长的、唯一的、随机的密码,以寻找新的噱头。

说明:

如果我对您的理解正确,您有兴趣在正确使用密码所需的数据中包含输入密码的顺序。

例如,如果我的密码按如下顺序输入:'p' 'a' 's' 's' 'w' 'o' 'r' 'd'

如果有人键入 'w' 'o' 'r' 'd' 然后单击到开头并键入 'p' 'a' 's' 's',它将不起作用。

反过来也是如此。假设这是一个正确的解释,让我们深入了解这个有趣的想法!从这里开始,我将其称为“密码输入排序”或 PEO。

解决密码熵:

首先,让我们抛开 PEO 系统设计和实施的重大困难。这个新系统将获得什么好处?

如果我有一个长度为 n 的密码,那么理论上有 n-1 种可能性,可以通过单击末尾或开头或中间并添加更多文本来重新排序密码。这是假设退格或删除使此过程不完整并需要重新启动此过程。那么增加了多少熵呢?这个POE密码系统破解难度有多大?

好吧,如果我们将 PEO 视为一些独特的字符,这意味着向后或向前移动一定数量的空格(例如,表示“+3”的字符 - 向前移动三个或“-3” - 向后移动三个)结果证明 PEO 确实除非密码的长度超过 n 内所有允许字符的集合,否则不会增加密码熵超过添加单个随机字符。这是因为在长度为 n 的密码中只有 n-1 重新排序的可能性,而单个字符有 26+26+10(每个小写和大写字母和数字 - 更不用说特殊字符的可能性)可能的条目。因此,除非您使用 62 个字符的密码,否则使用额外的字符实际上会比使用“重新排序”提供更好的熵。

实现这样的系统也有一些困难:

散列算法- 安全地存储密码通常是通过称为散列的不可逆过程完成的。目前,散列算法采用任意长度的输入来计算标准长度的散列值:

哈希(“你好”)= 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

散列算法将如何处理您建议的重新排序?一种可能性是您建议的方式,计算一串数字并散列该字符串。然而,正如我们之前谈到的,那串数字实际上只增加了 n-1 量的潜在熵,因为它与 123456789101112 不同的可能性受到密码长度的限制。

另一种方法可能是像我说的那样进行重新排序,并将其设置为附加到末尾或包含在密码中的特定字符或字符块。返回 4 个字符以再次开始输入将转换为 '-4' 前进 3 转换为 '+3'。但是,为什么我们不只是想使用一些额外的字符来提供额外的安全性呢?这个想法本身也有很大的缺陷,因为一个好的密码猜测算法只会运行密码 +1 +2 +3 -1 -2 -3 按顺序附加到末尾,并快速消除这种系统的小附加熵. 此外,由于这很可能与单词结合使用,它提供了一个更容易猜测这些值何时将包含在密码中的公式。

两个数据库 您提到您希望将密码的值及其重新排序的值存储在两个不同的数据库中。如果这些密码数据库同样容易被窃取或破解,那么您是否将它们分开也没关系,窃取一个意味着您可以窃取另一个。为什么不将它们安全地存储为一个数据库呢?这不会增加太多安全性,因为如果您以不同的方式存储这两个并且需要未加密以正确计算它们,应用程序将需要反转加密。这本身就是一个巨大的安全漏洞,实际上违反了许多安全标准。

浏览器/应用程序使用 为了使用这种技术,您必须使用一种更具侵入性的密码捕获方法,该方法记录系统内发生的操作。浏览器和应用程序不是为跟踪输入的位置和顺序而构建的。HTML 和其他 Web 表单的构建是为了接受输入而不是测量并观察输入的创建方式。对于像我这样的小型设备和笨拙的手指来说,这也将是一个巨大的问题。如果我的 12 字符密码输入错误并意外点击它,这在移动设备上很容易做到,我必须重新开始吗?

下划线、字体等 。您在这里真正要求的是要包含在密码输入中的更大的潜在字符集。最终,这样做的好处只是为密码添加了一组更大的可能组件。我想你会发现有很多 - 试试这些:")*#!@:";'] 或者如果你想变得超级酷,并且这些在某些应用程序中工作,这些:c⌐◘â« 这只是来自弄乱alt和数字键盘。一件事肯定帮助将允许特殊字符、空格、标点符号等进入密码生成系统。这可能会增加仅使用数字/字母/某些特殊字符的密码系统的熵和难度。但是,我认为您会发现以独特且有点冗长的方式排序的当前可用字符集提供了足够的熵,以避免需要包含更大的基本字符集。此外,用户体验和安全挑战太大,无法使 POE 系统可行。

实用性 提高密码安全性的最实用的想法是鼓励使用加密的、随机生成的密码管理器,如 KeePass 或其他可以唯一生成 40 个字符的随机字符串的管理器。至于需要记住的强密码,有很多方法可以轻松记住和使用强密码。如果您需要一种方法的示例,请查看我在这里写的一篇文章。这当然是一个有趣的思想实验,但请记住,标准化密码学通常有充分的理由,有时添加有趣的想法会减损经过验证的安全性。