40多年以来,IT界一直在密码战役中屡战屡败。前段时间的的明星iCloud帐号入侵事件只是我们众多引人注目的失败案例之一。因此,如密码这样看似简单的事情,为何却如此困难?
密码安全的问题在于它是如此简单,事实上它又如此矛盾困难。在安全方面,世界上最危险的事情是‘你认为你知道’,因为这样你就不会怀疑你的知识。如果你问一位典型的IT安全专家是否理解密码,绝大多数会自信及坚决地回答”是”。但如果真这么绝对的话,为何与密码相关的数据泄密却又如此普遍?
我们不是在讨论保护密码存储的技术问题。相反,我们是在讨论人为部分。人们继续选择糟糕的密码。典型的例子,2013年最常见密码是"123456",第二位为"password"一词,第三位"12345678"。是的,久负盛名、最受喜爱的"iloveyou"、"letmein"、"abc123",以及"princess"每年也都在常用密码名单内。
那么为什么用户很少关注他们的密码呢?部分原因是人们(包括明星)认为不会有人谋求他们的帐号。这是老旧的”这不会发生在我身上”的心态。且其原因也在于我们传递给用户的密码信息通常也有错误。
IT安全界持续犯的最大错误之一在于:推动用户执行特别复杂的密码,但并没有就此真实含义提供实际的指导。如果我们使得用户记住一个密码过于困难,"123456"是必然的最终结果。在极少数情况下,用户确实创建了一个复杂的密码,但它通常太短且被用于他们所有的网站(在家或者工作中的)包括电子购物和网上银行。这意味着任何一个站点上的数据泄露可能导致潜在的破坏性后果。
揭穿复杂密码的真相
“复杂密码”这一术语也许是IT界被误解最深的术语,也是今天众多密码问题的原因所在。往往"复杂密码"等同于"无法记住"。我们必须意识到复杂度仅仅是很小的一方面。不仅仅是复杂度的问题,还有不可预测性(密码熵是一个有用的密码可预测性衡量方法)。这正是一个好密码的关键所在。
一个不可预测的密码可能是用户易于记住的。使用大小写、数字及特殊字符(经典复杂性规则)为佳,只要我们不只专注于那些规则。例如,采用字符串"Iwentfishing4timeslastmonth?"。这个密码(或者更准确是一个密码短语)易于记忆且易于输入。它不是可预测的,它还是一个复杂密码,其中包含了我们一直建议的大写/小写/数字/特殊字符。
任何易于用户记忆的简短句子或格言都可以作为密码。采用格言且增加少许复杂性规则,你立刻会拥有极强的密码,它将不会在黑客字典中被发现,且只能通过暴力方式被破解。根据Gibson研究公司暴力破解密码计算器,暴力破解上述"Iwentfishing4timeslastmonth?" 例子,即使以每秒100万亿的猜测速率,也将需要花费76.43*1030世纪。那是一个相当强的密码短语。
用户可以遵循这种方式选取几个字符串,并开发一个公式,通过修改字符串使其适用不同站点。例如, 设置一个Facebook密码,可以添加"FB"和该用户的毕业时间,这样密码就成了"FB89Iwentfishing4timeslastmonth?"等等。我会建议使用较这个简单例子更为复杂的公式,但原理相同。使用这种方法,用户现在能拥有一个极强的、易于记忆和易于输入的密码,且在每个他们访问的站点使用不同的密码。这样就完美了吗?当然它还不是。但是它远胜于用"123456"这样的密码用于30个不同站点。
另一个技巧是尽可能创建唯一的用户名。尽管许多站点要求用户以电子邮件地址作为用户名,但某些金融机构会允许创建特殊的用户名。如果用户将他或她的电子邮件地址设置为所有站点的用户名(尤其还有着相同密码),任何一个站点的用户名信息被泄露,那么追踪用户的其他站点信息将变得简单。对于涉及钱的任何站点使用唯一用户名将是一个好办法,正如在这些关键站点使用不同密码短语字符串。
作为一个安全社区,我们必须做好信息传达,告诉用户如何创建好的密码。我们必须让用户了解"123456"并不是一个可行的密码,而且难于记忆的密码也是不必要的。要成功传递这条消息意味着,我们自身必须更好地理解密码的不可预测性。只有到那时,我们才有希望向我们的用户解释这条信息。