我正在开发一个较小的系统,需要输入一次性密码(OTP,不要与 One-Time-Pad 混淆)来下载将交付给用户的敏感文件。
最初的想法是,在预先设定的时间限制内通过 SMS 发送 OTP。
但由于 SMS 不够安全,我开始考虑任何其他替代方案来向我的用户提供 OTP。
我可以建议我的用户使用 Signal,然后向他们传递信息,但在这种情况下,我担心这对他们来说太复杂了。
有什么想法还是我应该遵循我的主要想法?
我正在开发一个较小的系统,需要输入一次性密码(OTP,不要与 One-Time-Pad 混淆)来下载将交付给用户的敏感文件。
最初的想法是,在预先设定的时间限制内通过 SMS 发送 OTP。
但由于 SMS 不够安全,我开始考虑任何其他替代方案来向我的用户提供 OTP。
我可以建议我的用户使用 Signal,然后向他们传递信息,但在这种情况下,我担心这对他们来说太复杂了。
有什么想法还是我应该遵循我的主要想法?
为什么不能使用大多数身份验证器应用程序支持的标准 TOTP 或 HOTP?
当人们注册您的服务时,他们需要通过扫描包含用于生成代码的秘密种子的 QR 码来注册他们的身份验证器应用程序。
在随后的访问中,该站点会提示他们输入应用程序生成的代码,而无需任何网络访问,因为代码是在设备上本地生成的。
作为奖励,由于您使用的是标准协议,您的用户可能已经安装了兼容的身份验证器应用程序,如果没有,可以推动他们使用该应用程序获得更多服务(他们的 Google 帐户等)。最终,用户更安全,每个人都赢了。
由于问题是关于想法的:
在拼写 OTP 之前使用 PIN 码验证进行自动语音呼叫。
对于没有经验的用户来说非常容易 - 不需要额外的软件,实时给出的说明,例如:
您好,这是mirsad的验证系统。请输入您的 PIN 以听取下载密码
谢谢,您的密码是.....,请在五分钟内使用。请记住,不要将此密码提供给其他任何人!
要求用户记住 PIN 码
比 SMS 更安全 - 防止被动密码检索(攻击者无法从无人看管设备的屏幕上读取)
需要采取措施防止窥探,例如:
收听方在 PIN 输入期间产生随机可听音,并通过计算差异来检索用户提供的代码(我的银行这样做)
要求用户从较长的 PIN 中输入一组不同的随机数字,即“按您的 PIN 的第 6 位,按您的 PIN 的第 3 位”(我的另一家银行会这样做)
如前所述,TOTP 和 HOTP 都是作为通过 SMS 发送一次性代码的替代方案而存在的标准。
TOTP 是基于时间的代码,通常可以使用Google Authenticator等应用程序或作为 RSA SecurID 样式的fobs或卡使用。
HOTP 基于 HMAC,通常可通过令牌生成软件获得,包括 Google Authenticator 和类似平台。
还有由 Yubico 在早期型号 Yubikeys 中实现的 OTP 标准,其中硬件 USB 加密狗模拟键盘以输入极长的一次性密码。
最后,如果我们要提出不是严格意义上的 OTP,但可以作为第二个因素的选项:
U2F,一个开放的第二因素标准(代表U niverseal 2 nd F actor)。它依赖于质询-响应机制,在硬件注册时发生密钥交换。Yubikeys 可能是目前最流行的 U2F 遥控钥匙。
因为它们还依赖于密钥交换和质询响应机制,所以可以想象 SSH 密钥可以用作身份验证时的第二个因素。然而,这种方法并未得到广泛使用。
同样,PGP 密钥也可用于此目的 - 就像 SSH 密钥一样,据我所知,将 PGP 用作第二个因素的应用程序目前是有限的。