一次性密码
本文约需 2 分钟阅读
一次性密码 (OTP: One-Time Password) 是仅对一次认证有效的一次性密码。与固定密码不同,即使被截获也无法再次使用,因此被广泛用作多因素认证的「持有信息」要素。它是在银行网上银行、企业 VPN 连接、云服务登录等场景中作为附加认证层日常使用的技术。
HOTP 与 TOTP - 两种生成方式
OTP 的生成方式大致分为两种。 HOTP (HMAC-based One-Time Password、 RFC 4226) 是基于计数器的方式,每次认证时都会递增计数器值,并根据共享密钥和计数器值使用 HMAC-SHA1 生成一次性代码。只要服务器和客户端的计数器保持同步就能正确工作,但存在一旦计数器出现偏差就需要重新同步的运维难题。
TOTP (Time-based One-Time Password、 RFC 6238) 是在 HOTP 基础上发展而来的基于时间的方式。由于使用当前时间 (通常为 30 秒间隔) 代替计数器,因此解决了计数器同步的问题。 Google Authenticator 和 Microsoft Authenticator 等主流认证应用全部采用 TOTP,是目前 OTP 的主流。 TOTP 是 OTP 的一种,HOTP 和 TOTP 同属于 OTP 这一大类之中。
SMS OTP 的风险
通过 SMS 发送 OTP 的方式因便捷而广泛普及,但存在严重的安全问题。最大的风险是 SIM 卡交换攻击。攻击者通过欺骗移动运营商,将受害者的电话号码转移到另一张 SIM 卡上,从而拦截 SMS OTP。 2019 年 Twitter CEO 的账户因 SIM 卡交换被劫持的事件引起了广泛关注。
更根本的问题是 SS7 (Signaling System No. 7) 协议的脆弱性。 SS7 是 1975 年设计的电话网信号控制协议,几乎没有认证或加密机制。如果攻击者能够访问 SS7 网络,从技术上就有可能拦截 SMS 消息。 NIST 早在 2016 年就将 SMS OTP 定位为「不推荐」,并建议尽可能迁移到认证应用或硬件令牌。
硬件令牌与软件令牌
OTP 的生成手段大致分为物理设备 (硬件令牌) 和应用 (软件令牌)。硬件令牌的代表是 RSA SecurID,自 1990 年代起就被用于企业的远程访问认证。它就是那种在液晶屏上显示每 60 秒变化一次的 6 位代码的小设备。由于物理上独立,不易受恶意软件影响,但丢失、故障时的应对成本以及设备分发、管理的负担是难题。也请参考硬件安全密钥的选择方法。
软件令牌 (认证应用) 只需安装在智能手机上即可使用,分发成本接近于零是其最大的优点。但是,如果智能手机本身感染了恶意软件,OTP 就存在被窃取的风险。OTP 认证的技术解说书 (Amazon)中详细解说了各方式在实现上的差异。
金融机构的使用实态
在日本的银行,网上银行转账时要求输入 OTP 是标准做法。过去以分发硬件令牌为主流,但近年来向智能手机应用的迁移正在推进。有趣的是,许多金融机构至今仍兼用 SMS OTP。这是一种将用户便利性和支持成本置于安全性之上的判断,也有照顾「无法使用认证应用的客户群体」的一面。
两步验证的采用率逐年上升,但像 MFA 疲劳攻击这样滥用 OTP 的新型攻击手法也已出现。 OTP 并非万能,它是只有与对两步验证的正确理解相结合才能发挥效果的技术。
这篇文章对您有帮助吗?