我应该在基于OTP的双因素身份验证数据库中哈希用户名?

时间:2013-11-04 03:39:07

标签: database sqlite authentication ssh

我目前正在处理一个ssh双因素身份验证插件。

可以像这样使用:

  

$ ssh localhost
  密码:[ssh密码]
  姓名:[你的名字]
  OTPCode:[您的代码]

在sqlite db中有一个用户名和OTP密码列表。

如果sqlite db泄漏,则很危险。我应该散列用户名并添加昵称来区分哪一个是哪个。这个设计会导致任何问题或是否有必要?

1 个答案:

答案 0 :(得分:0)

说实话,如果有人清楚地掌握了数据库中的秘密,他们就不会对散列/混淆的用户名感到困扰。他们已经掌握了秘密信息。

攻击者可以在几分之一秒内针对数据库中的所有秘密生成所有OTP,然后针对任何给定的用户名尝试所有OTP。此外,如果他们过去嗅探了用户名并知道他们何时进行了身份验证(For TOTP),他们可以为该窗口的数据库中的所有秘密创建所有OTP,然后查看哪个秘密对应于该用户。

基本上如果你丢失了你的令牌的共享秘密,丢失相应的用户名将是你最不担心的。

专注于锁定数据库,甚至更好地从机器上获取身份验证机制。