0

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

它可以这样使用:

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

sqlite db中有一个用户名和OTP Secret的列表。

如果 sqlite db 泄漏,这是危险的。我应该散列用户名并添加一个昵称来区分哪个是哪个。这种设计会引起任何问题还是有必要?

4

1 回答 1

0

老实说,如果有人清楚地掌握了数据库中的秘密,他们就不会太在意散列/混淆的用户名。他们已经掌握了秘密信息。

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

基本上,如果您丢失了令牌的共享密钥,那么丢失相应的用户名将是您最不担心的事情。

专注于锁定数据库,甚至更好地让身份验证机制脱离机器。

于 2013-11-28T20:17:11.510 回答