我目前正在处理一个ssh双因素身份验证插件。
可以像这样使用:
$ ssh localhost
密码:[ssh密码]
姓名:[你的名字]
OTPCode:[您的代码]
在sqlite db中有一个用户名和OTP密码列表。
如果sqlite db泄漏,则很危险。我应该散列用户名并添加昵称来区分哪一个是哪个。这个设计会导致任何问题或是否有必要?
答案 0 :(得分:0)
说实话,如果有人清楚地掌握了数据库中的秘密,他们就不会对散列/混淆的用户名感到困扰。他们已经掌握了秘密信息。
攻击者可以在几分之一秒内针对数据库中的所有秘密生成所有OTP,然后针对任何给定的用户名尝试所有OTP。此外,如果他们过去嗅探了用户名并知道他们何时进行了身份验证(For TOTP),他们可以为该窗口的数据库中的所有秘密创建所有OTP,然后查看哪个秘密对应于该用户。
基本上如果你丢失了你的令牌的共享秘密,丢失相应的用户名将是你最不担心的。
专注于锁定数据库,甚至更好地从机器上获取身份验证机制。