@
kurtis 其实你的意思是,「用户名+密码」的方式,其根本就在于不区分用户名和密码的间隔。这样,对于破解者来说,用户名和密码连接后的字符串的长度更长更安全(某种程度上);对于使用者来说,几乎没有使用障碍,同时减少了一次按键操作。
但实际上,也可以认为传统的模式,是在用户名和密码之间用了一个回车符来区分的。所以,对于穷举者来说,在猜测用户名方面上,更困难了。举例,暴力破解后发现可登录的用户名密码字符:
abcdefghijklmn
用户名和密码的组合可能是以下几种:
abcd+efghijlmn
abcde+fghijlmn
abcdef+ghijlmn
...
对于破解者来说,原本要分别构造用户名和密码部分的字典;现在不得不把两个字典放一起来用了。但是,这样的结果是,当我要破解 abcd 的密码时,发现 abcdefghijlmn 通过验证了,于是认为该帐号的密码是 efghijlmn。当然,也可能是 abcde+fghijlmn 这样的组合——但是,who care? 反正我已经登录了,登录后我就知道我是谁了。
碰撞到其他用户的密码组合,会降低安全性,同时也影响了用户的身份确定。尝试给一个解决方案,譬如我们确定用户名必须为十位——嗯,身份可以确定了——但是,这和使用了几十年的传统用户名加密码的方式,也没有区别了吧?
——————————————
如果想要一行字符串来认证,不妨考虑上面几位提到了 SSH 登录密钥的方式,甚至目前Twitter、Weibo 提供给第三方应用的 Key。登录用的 Key 不涉及用户名和密码的明文组合,但是与系统中某一身份关联。但是对于普通用户来说,记住这样的复杂唯一的字符串,是不现实的。