非“英语”密码的密码复杂性策略

信息安全 密码 密码策略 国际的
2021-09-09 12:46:22

在国际化应用程序中,密码复杂性策略的最佳实践是什么?我没有运气寻找答案。维基百科列出了密码策略的这些项目

  • 使用大写和小写字母(区分大小写)
  • 包含一个或多个数字
  • 包含特殊字符,例如@、#、$ 等。
  • 禁止在字典中找到的单词或用户的个人信息
  • 禁止使用与日历日期、车牌号码、电话号码或其他常用号码格式相匹配的密码
  • 禁止使用公司名称或缩写

如果我是非拉丁语使用者,关于大小写的规则如何运作?它不像 az 和 AZ 那样简单。字典查找和禁止某些格式怎么样?这个问题似乎对英语很熟悉,但其他语言和文化呢?

4个回答

大多数路过式密码破解尝试都会假设密码是 ASCII 字符的子集。但是,有针对性的攻击(在高级持续威胁模型下)可能会发现您的用户没有使用 ASCII 密码并改变策略。

因此,我建议以下规则:

  • 根据您的用户群确定可能使用的语言。
  • 对这些语言执行字典查找,并根据它们拒绝密码。
  • 让母语人士建议可能用作密码的常用非字典单词和短语。

如果您可以识别每个字母表的字符子集,则可以将单独的熵分数应用于它们。这使您可以要求此类密码的最低安全性。

可能最重要的部分是用户反馈。要求您的用户报告他们在您网站上发现的密码系统问题,并提出改进系统的建议。只有母语人士才能真正提前识别弱密码。

除了开玩笑,xkcd 的密码强度漫画可能在这里特别相关,因为它与语言无关:верный лошадь батарейка штапель(下面的俄语示例)充满了熵。

xkcd 漫画 936

我确实找到了一篇 Microsoft TechNet 文章,密码必须满足复杂性要求,这似乎适用于他们基于 Windows Server 的产品。这为既不是大写也不是小写的“字母”添加了另一个字符组。

密码必须包含以下五类中的三类字符:

  • 欧洲语言的大写字符(A 到 Z,带有变音符号、希腊文和西里尔文字符)
  • 欧洲语言的小写字符(a 到 z、升 s、带变音符号、希腊和西里尔字符)
  • 以 10 位为基数(0 到 9)
  • 非字母数字字符:~!@#$%^&*_-+=`|(){}[]:;"'<>,.?/
  • 任何归类为字母字符但不是大写或小写的 Unicode 字符。这包括来自亚洲语言的 Unicode 字符。

熵分析假设密码包含从已知语言派生的一组模式化的单词或短语。如果密码不是由任何语言的短语组成怎么办?换句话说,可以计算在键入的文本页面中出现某些字母的频率,并且在基于拉丁语和英语的系统中,这将对应于最常见的 ETAOINSHRDLU(感谢 Carl,来自他的书 Contact)。因此,由非语言字符串组成的密码最难破解(因此也最难记住)。有许多方法可以制定对人友好的密码,而无需将语言作为密码字符串的来源。一些字母和数字在语音上押韵,熵分析没有考虑到这一点(除非我错过了关于 soundex 库的部分的内容)。具有讽刺意味的是,我们需要保护密码免受熵和统计分析的影响也是使密码最不容易记住的方法。密码策略旨在确保最低级别的保护,无论密码是用什么语言创建的。

对于我们这些主要使用基于拉丁字符集的人来说,政策问题以及来自其他非拉丁语言的字符类型是一个很好的问题。例如,在其他语言(如泰语或阿拉伯语)中是否存在类似于拉丁语的字符?像中文这样的基于符号和对象的语言如何作为屈折变化,这是英语中描述陈述和问题之间差异的常见因素。在汉语中,屈折变化被称为拼音,拼音实际上改变了一个词的定义,而不是描述一个陈述或一个问题之间的区别。那么这些语言中是否有可以像拉丁语言中的特殊字符一样使用的特殊字符?这听起来像是这个问题的意思。