有效存储两个因素身份验证备份代码的最佳实践?

信息安全 验证 密码 多因素 一次性密码 一次性垫
2021-08-30 00:49:26

对于许多提供两因素身份验证的 Web 服务,在设置系统后,您会得到一个简短的备份代码列表(一次性密码),长度约为 7-10 个字符。这些适用于您无法访问第二个身份验证因素的情况,例如丢失的设备、旅行等。

有什么好的方法/想法可以随身携带您的人的备用代码,以便它们:

  1. 没有明显标识他们连接到什么服务,这样其他人就不会看到“Google Acct: 9824 24 312”
  2. 例如,窃取带有备份代码的记事卡的人不容易使用。
  3. 用户易于理解和使用,无需任何比基本计算器更高级的手段(只是一个例子,可能有根本没有任何设备的手段)
4个回答

使用One-Time Pad方法对代码进行加密。然后,只要您记住密钥,就可以用笔和纸轻松解密它们。由于 2fa 代码的字符几乎是一致的(所有字符出现在每个键位置的可能性相同),您可以使用非一致的键,例如易于记忆的短语。

加密代码的一个好处是您可以携带多个副本(一个在您的手提箱中,一个在您的钱包中,一个在公共 URL 上),而不必担心它们会丢失或被盗。

这样做的一个弱点是,如果您使用同一个密钥来使用 One-Time Pad 加密所有 2fa 备份代码并且您的代码之一被暴力破解,则攻击者可以获取密钥然后解密您的所有代码。虽然帐户提供者限制登录以帮助防止暴力攻击是标准做法,但某些帐户提供者的保护可能比其他帐户提供者更差,不应假定所有帐户提供者都有足够的保护。您的 2fa 备份代码安全性仅与最弱的帐户提供商一样好。因此,您应该为每个帐户使用不同的密钥,这否定了此方法的主要好处之一:您只需记住一个密钥。

关于2FA码的一致性

使用一次性密匙 (OTP) 加密句子时,密钥必须统一,以防止频率分析。但总的来说,无论是明文还是密钥都需要统一。Google Authenticator 和其他 2fa 提供商使用 SHA-1 生成的哈希来生成 2fa 代码,这是HOTP (RFC4226)TOTP (RFC6238)的标准。虽然 SHA-1 可能不是完全一致的,但SHA-1 几乎是一致的并且足够接近一致,以至于频率分析不是一种可行的攻击。因此,任何非显而易见的密钥,例如易于记忆的短语或句子,都可以用来加密 2fa 代码。

我的一个想法是对备份代码应用某种简单的过程(或密码),这样它们就被掩盖了,但能够通过记住这个过程来解码。也许像 ROT13 或 xor 之类的东西。之后,您将它们打印在名片模板上并将它们设置为联系信息。这归结为默默无闻的安全性,但至少部分有助于解决问题。

将它们存储在您的人身上是一个坏主意。

备份代码是绕过密码。它们本质上是通向您的 2FA 安全帐户的后门它们比常规帐户密码更强大。

考虑到这一点,您应该考虑是否要保留它们。毕竟,如果存在备用代码,它们就会变得比您的帐户密码更有价值。如果这些备份密码都不存在,您的帐户会更安全:它们与 2FA 最初存在的原因相反。您应该将它们视为一流的密码。您是否在钱包中以书面形式携带常规密码?

这些代码很有可能用于您的 GMail 帐户、iCloud 帐户或 Amazon 帐户......无需指定它们用于什么服务,最常见和最明显的将被测试并且最可能小偷是对的。话虽如此,我认为没有最佳实践。

我(仅部分)不同意建议使用一次性垫作为备份代码的答案。这样做需要您生成和记住与密码一样多的密钥,这相当于记住密码本身。密钥是否可以是容易记住的密码,你只能记住这么多(通常你会以十个为一组获得备份代码,并且你不能写下密钥)。如果您坚持写下备份代码,请考虑此解决方案。

但是我的建议是,如果您真的必须在“自己”上保留备份代码,请考虑为每个服务学习一个(或两个)并禁用其余的。请不要把它们写下来。

我建议将它们存放在一个易碎的不透明塑料容器中,例如用于美国总统的核发射代码。

这样,它们只能通过破坏容器来使用,这使得代码很难在您不知情的情况下被复制或使用。

如果我能弄清楚从哪里采购它们就好了。