我听过很多关于什么是好的密码的建议(很难猜到,不是字典单词或其排列,至少有一定的长度等),这样它就不会在现实的时间内被破解。但是,据我了解,密码破解技术和软件将尝试使用您通常会在美式键盘上找到的拉丁字符、数字和特殊字符。因此,在密码中包含一些非拉丁字符是否是个好主意?
例如,“密码密码rd”。
我听过很多关于什么是好的密码的建议(很难猜到,不是字典单词或其排列,至少有一定的长度等),这样它就不会在现实的时间内被破解。但是,据我了解,密码破解技术和软件将尝试使用您通常会在美式键盘上找到的拉丁字符、数字和特殊字符。因此,在密码中包含一些非拉丁字符是否是个好主意?
例如,“密码密码rd”。
可能不会 - 您会发现许多兼容性问题,具体取决于您可能需要从中输入密码的设备支持的字符集。
有两种方法可以确保您拥有强密码:
您提出的方法采用的方法是前者。后一种方法的缺点通常较少。如果您使用具有至少 128 位熵的密码,则无法在合理的时间内猜出。这是平均水平 - 如果攻击者非常幸运,他们可能会第一次猜到 - 但所有密码都是如此。
因此,要获得 128 位的熵,您要么需要一个至少包含 20 个完全随机字符的密码(使用大小写字母、数字和 ASCII 符号),要么需要 10 个随机选择的 dicewords。
所以在我看来,这已经是一个已解决的问题。如果您不需要记住它,请使用安全密码生成器创建一个随机的 20 个字符的密码,或者如果您需要,请使用 Diceware。
一般来说,是的。某些系统可能不支持或不允许非拉丁字符。在后端,需要正确设置数据库和其他系统以处理非拉丁字符,否则可能会发生意外情况。例如,一个多字节 unicode 字符可能被解释为多个单字节字符(或所使用的编码中的任何预期大小)。
如果系统接受您的输入,并且您输入密码的任何地方都允许您切换语言,那么您应该没问题。立即想到的一个问题是,是否存在允许的最大字符数,并且由于您使用的是多字节字符,您最终会超出限制,或者它是否执行某种类型的截断。假设只允许使用拉丁字符,可能还会内置某种类型的安全过滤器,并且您的输入可能会被标记或清理。所有这些条件都取决于特定系统及其支持的内容。
您可能需要测试一下,看看是否存在兼容性问题;但是,如果它需要您的单个字符并认为它是 2 个或更多,则为您加分 - 为您提供更长的密码,而您无需记住更多的部分。如果系统接受您的输入并且效果很好。如果您遇到奇怪的问题,那么您希望能够重置并使用纯拉丁文集。
作为参考,只是做一个基本的文本到二进制转换:
passw密码rd = 01110000 01100001 01110011 01110011 01110111 11100101 10101111 10000110 11100111 10100000 10000001 01110010 01100100
(9 "characters", 13 bytes)
password = 01110000 01100001 01110011 01110011 01110111 01101111 01110010 01100100
(8 "characters", 8 bytes)
在某种程度上,这是计算机真正看到的。因此,如果系统不知道 unicode,它可能会发疯,或者可能解释passw密码rd
为 passwå¯ç rd
,passw密码rd
等。如果该功能在整个系统中的实现不一致,则保存和散列密码的功能可能会以一种方式看待,而后期比较的功能哈希可能会以另一种方式进行。
是的,使用这些字符是个好主意。
passw密码rd
可能不是最好的例子,因为它距离密码只有两个字符,但它肯定比 , 或类似排列更password11
安全p4ssw0rd
。
由于这些字母在普通键盘上并不方便,因此大多数用户可能不会使用这些字符,因为在登录过程中需要额外的努力。黑客知道这一点,很可能不会经常尝试这些字符。这并不意味着使用这些字符是保护您免受暴力破解的关键,但它会提供更好的保护。使用此类 unicode 字符时,可能的字符数量会大大增加,从而增加了潜在的暴力攻击的时间。正因为如此,黑客很可能会决定瞄准“低垂的果实”,即使用较小字符集、允许较少可能性的人。
好吧,如果您必须从非受控机器(例如酒店商务中心)输入非 ascii Unicode 字符,可能会导致表示问题。首先它不能有预期的编码。例如é
U+00E9 或带有 ACUTE 的拉丁小写字母 E。它通常"\xc3\xa9"
在 UTF-8 中编码为 2 个字节,但"\xe9"
在 Latin-1 字符集中是单个字节。
此外,它有 2 种不同的归一化形式(1)。如果规范化形式 C(或规范组合)和规范化形式 D(或规范分解)为 U+00E5 U+0301,则为 U+00E9:拉丁文小写字母 E 结合尖音。根据定义,这两种形式对应于同一个字形,但几乎任何应用程序,无论该语言会说它们是不同的字符串。而且,当您从键盘输入非 ascii 字符时,您几乎无法猜测将使用哪种形式。
长话短说:当添加非 ascii 字符时,您会使熵增长,这很好,但存在无法从外部系统输入密码的风险。与添加一些非 ascii 字符相比,更大的长度通常是更高的熵增益......
(1) Unicode 规范化形式