存储TOTP的密钥

Gre*_*reg 6 authentication encryption sql-server-2008 google-authenticator

我正在设置我的网站(C#/ SQL 2008)以允许使用Google身份验证器进行双因素身份验证.我有网站工作,从获取QR码到生成上一个/当前/下一个键(我很高兴接受3,以防时钟不同步).

显然,我们需要为每个用户生成一个密钥,否则每个用户都会拥有相同的一次性密码.

我的问题是存储此密钥的最佳做法是什么?我可以将它作为纯文本存储在users表中,还是应该加密?

cri*_* _b 3

为什么不是varchar?据我所知,谷歌的二维码是一个字母数字字符串(你可以手写,以防你懒得安装二维码扫描仪)

在我的个人大学项目中,我生成了一个 128 个字符长的字母数字字符串,并将其发送到我的自定义 TOTP 应用程序,我的数据库将此信息存储为 VARCHAR(128) ,

我认为最佳实践答案取决于密钥有多大以及密钥空间是如何定义的,而不是 62 个字母数字,为什么不使用整个 ascii 表?你需要将你的密钥存储为 varbyte 对吗?

  • “只要你的服务器是安全的,就不需要加密密钥”。这对我来说听起来不太正确。这不是说如果你的服务器没有被黑客攻击,那么你就不需要对用户密码进行哈希处理吗?当然,您会尽可能地保护服务器,但为了以防万一,您仍然对用户密码进行散列和加盐处理。 (7认同)
  • 我期待这个:是的,您对用户密码进行哈希和加盐,但是如果您想对 TOTP 密钥执行相同的操作,那么您的 TOTP 客户端而不是秘密密钥参数将必须管理一个密钥和一个哈希来计算另一个密钥,因此您无法避免您的 TOTP 客户端将存储密钥的清晰版本的事实 (2认同)