人类一次性密码算法

信息安全 密码 密码学 一次性密码 账户安全
2021-08-12 21:00:42

是否有一种一次性密码生成算法(基于预定义的密码和不断变化的值/时间/计数器/等),它足够简单,可以由普通人处理,但足够安全,无法通过几个密码找到密码密码(比如 5-10)?

我已经看到有关各种特定密码方案及其安全性的问题。但我想更广泛地了解是否存在一些众所周知的算法。

直觉告诉我,如果某个东西很容易被人类处理,那么它也很容易被破坏。但话又说回来,我对非对称加密或安全密钥交换(DH)是可能的感到非常惊讶。所以,给我惊喜!


编辑:一些澄清。

当我在思考户外使用的两因素身份验证时,这个问题出现了。安全环境(家庭、办公室等)的典型双因素身份验证在设备或手机上使用密码和 OTP 生成器。您松开设备/电话,仍然有密码。键盘记录器窃取了您的密码,但设备/电话仍然存在。

但是,两者都可能被盗的情况呢?例如,您使用应用程序在街上拿起电动自行车或在火车站打开储物柜。有人可能会在您在手机上输入密码时观看,然后还会窃取手机本身。

该问题可以通过使用在短时间内(例如 10 分钟)内变得无用的密码来解决。此外,手机将具有个人机密(例如 SSL 客户端证书),以使针对密码身份验证的暴力攻击更加困难。

mr.spuratic 对 Blum 的 HCMU 算法的建议与我所寻找的非常接近。对于普通人来说,它仍然看起来有点太重了,但通过一些练习,它是可行的。

4个回答

有一些商业计划,例如SyferLockGridGuard声称可以这样做,但我从未使用过它们(我没有从属关系)。这依赖于用户在身份验证期间从多个选项中正确选择,而不是典型的基于时间或计数器的 OTP(这意味着没有心算)。

Solitaire ( Schneier ) 经常被引用为人类可计算的密码系统,但它需要一些适应来进行身份验证。使用共享密钥的质询-响应身份验证是可行的,但不能满足您对 OTP 的描述。

什么应该起作用(通常需要注意)是TOTPRFC6238)或HOTPRFC4226 )的实现,使用备用HMAC哈希,例如 Blum 的 HCMU(人类可计算机器牢不可破此处描述)心理可计算哈希(另请参阅更多广义OCRA (RFC6287)

TOTP/HOTP 基本上是使用 SHA-1 的 HMAC 的(截断)输出,输入是共享密钥和时间戳或计数器。不过,您需要使用严格的输入字母表示,因为 Blum 的算法仅适用于字母输入。

Blum 还与人合着了一篇关于人类可计算密码的论文(在 ArXiv 上),尽管其中大部分内容都是数学问题。没有在第 7.2 节中简要介绍 OTP。

也可以看看:

你可以有一个像一次性垫一样使用的查找表。

查找簿中的每一页都是一天的 OTP,您可以在当前日期/时间查找该簿以获取当时正确的 OTP。这模拟了 TOTP。您可以在安全性(TOTP 更改的频率)和查找簿的厚度之间进行权衡。

史蒂夫·吉布森(Steve Gibson)整理了一个名为“完美纸质密码”的东西,以展示如何做到这一点。https://www.grc.com/ppp有详细信息。该站点具有可下载的代码,可用于构建更复杂的实现。

这不是基于时间的,而只是一系列一次性密码,只能按顺序使用。即使当前密码被嗅探,它也不会提供有关下一个密码的信息。每个密码的字符数和“字母”是可调的。

在此处输入图像描述

这里我们看到代码 1A-D 已经被使用了,接下来要使用的代码是 E1 (Tygq)。

老实说,即使是官方的 TOTP 算法也不是很复杂,尽管你必须非常专注于在脑海中计算 HMAC。但是,这确实表明您可以合理地使用大多数相同的构建块来计算基于时间的密码系统。

主要问题是人们在很多事情上不如计算机:

  • 人们没有内置的时间源,因此您需要足够的灵活性来处理某人从源“退出”的合理时间长度。从最小化计算错误的角度来看,您可能不能指望某人在正确的时间内超过 5 分钟,甚至更长的时间可能会更好。
  • 人们的计算速度很慢。您可以依靠计算机在一秒钟内执行数百万次计算。一旦获得所需的值,一个人可能可以管理一个计算。这也意味着您需要让某人输入有效值的时间更长。
  • 人们在重复操作时会犯错误。这意味着如果他们在过程中犯了一个错误,他们更有可能需要输入多个值。每次尝试都需要一些时间。

因此,直接调整 TOTP 算法将涉及:

  1. 用普通人在精神上可以做的事情代替 HMAC 步骤
  2. 定义一个人类可以从精神上计算出差异的时代——可能是当天的午夜,并进行一些基于日期的修改
  3. 定义一个足够长的时间间隔,人类既可以在其中执行一些计算,也可以将其识别为所选时期的给定数量的时间间隔 - 五分钟是可行的,因此在 0912 计算代码将是(9*12 + 2*5 = 118 作为值)
  4. 使用带有值和记忆密钥的 HMAC 替换。
  5. 将值转换为适当的范围,可能通过丢弃它的位。

这将不如基于计算机的安全,因为攻击者将能够快速计算大量潜在值,因此您还希望限制在给定时间间隔内允许的尝试次数。

不,我不知道合适的 HMAC 替代品是什么......