是否有任何安全的方法来存储 TOTP 方案中使用的密钥?

信息安全 数据库 贮存 一次性密码
2021-09-10 13:53:51

我正在编写一个演示 2 因素身份验证的小 Web 应用程序。我正在使用RFC 6238中描述的 TOTP 协议。在我们的方案中,除了每个用户的 b-crypted 密码哈希之外,我们还存储了一个密钥,用于验证一次性代码。

我正在使用 postgreSQL 作为数据库后端。让我们假设我的数据库在我不知情的情况下遭到入侵。密码都是安全的,因为我正在对它们进行加盐和加密:没有简单的攻击会泄露所有密码,除了暴力破解每个密码。

有什么方法可以安全地存储 TOTP 的密钥吗?我不能散列它,我需要它的明文进行 OTP 验证。

有没有办法安全地存储这个密钥?

1个回答

是的。在应用端加密纯文本 TOTP 密钥,并将密文保存到数据库中。如果您也不能信任该应用程序,请使用 HSM(硬件安全模块)或创建并使用它的软件版本。