部分密码验证

时间:2015-07-03 07:59:22

标签: vb.net security passwords verification

我希望能够询问用户名,检索用户密码,然后从密码中随机选择3个字符,并要求对这些字符进行验证。基本上就像银行一样。

我找不到任何这样的例子,我已经设置了验证程序 -

 Public Function IsAuthenticated(ByVal domain As String, ByVal username As String, ByVal pwd As String) As Boolean
    Dim UserAuthenticated As Boolean = False

    If SafeString(username) And SafeString(pwd) Then
        'Is user authenticated in active directory


            Dim domainAndUsername As String = domain & "\" & username
            Dim entry As DirectoryEntry = New DirectoryEntry("", domainAndUsername, pwd)
            Dim search As DirectorySearcher = New DirectorySearcher(entry)
            search.Filter = "(SAMAccountName=" & username & ")"

            Dim result As SearchResult = search.FindOne()
            Dim obj As Object = entry.NativeObject
            UserAuthenticated = True

有没有人有任何例子

2 个答案:

答案 0 :(得分:0)

您的问题可以在这里得到解答:Password systems which ask for individual letters - what do they store?

缺点是部分密码验证会使您的数据库打开更多漏洞,因为您将不得不使用可解密的密码(非常糟糕)或存储有关密码的更多信息,这样可以更容易暴力破解你的数据库受到了损害(糟糕)。

" k-out-of-n阈值秘密共享"看起来是最安全的方法。

答案 1 :(得分:0)

您似乎正在针对Active Directory后端进行身份验证。 AD不提供验证部分密码的任何可能性。

(旁白:在将用户名包含在查询中之前,您应该使用LDAP来转义用户名,以避免查询注入攻击。)

要进行部分密码登录,您需要具有可恢复内容的密码存储。通常的做法是将密码存储在具有对称加密的数据库中。这比明文更好,因为攻击者无法通过破坏数据库/服务器来获取密码,但是如果他们可以危害Web应用程序/服务器足以读取加密密钥,他们仍然可以获取密码。 (硬件解密可以帮助使用HSM,但如果攻击者有足够的权限通过应用程序运行所有密码,则仍无用。)

添加应用程序级密码加密会增加复杂性,尤其是设置基础架构和流程以安全地管理加密密钥的生命周期。即使你做了所有这些,并考虑限速和审计来尝试检测和阻止密码数据库,它仍然比将密码存储为强哈希(如bcrypt或PBKDF2)的行业标准更弱。

(旁白:虽然原则上你可以将部分密码存储为每个n字母组合的哈希集合,这使得单个哈希中的熵数量非常低,这样即使使用强哈希也很容易粗暴 - 强制使用一个组合,然后可以逐渐破坏相邻组合。)

部分密码还有其他缺点:因为它们的熵低于完整密码,因此成功随机猜测的可能性更高(通常会强制执行更严格的锁定限制和速率限制,以补偿某些可用性和运营成本) ;他们对密码长度施加限制,使用户更有可能选择弱密码而不太可能选择令人难忘的密码;并且它们使得难以强制执行密码强度测量(例如:密码pass8R$kO本身相当强,但在提示您输入前三个字母时则不是那么多。您还需要跟踪每个用户当前想要的字母,否则获得密码的几个字母的攻击者可以直接重新加载,直到提示他们知道的字符为止。 (令人惊讶的是,有多少部分密码登录错误,使整个练习毫无意义。)

总而言之,部分密码至少具有与优势一样多的缺点,并且不是一个简单的胜利,您可以随时部署以“改善”安全性。对于某些威胁模型,以及强大的审计和app / infra安全控制机制,可以说它们有一些用处。但对于一般情况,他们通常被认为是不值得的。

  

这不会停止使用键盘记录器

没有什么能阻止使用键盘记录器,你不可能赢得控制用户交互的攻击者。任何使登录页面异常(例如部分密码,虚拟键盘或其他)的东西都将只停止最懒的通用键盘记录器。更复杂的木马程序仍将通过各种方法捕获输入,甚至(通常在银行木马中)默默地用普通密码框替换部分密码输入控件!

部分密码通常被指定为低级别网络钓鱼攻击(虚假登录表单链接)的计数器,而不是客户端木马,但目前还不清楚这种情况的效果如何。

  

人们访问客户并使用未知计算机并意外点击“记住密码”的风险

啊,这是另一回事。尽管浏览器在这里开始忽略autocomplete,但是需要更多令人讨厌的JS修复程序,所以可以解决不需要的密码管理器问题。