计算我的密码的安全性

信息安全 密码
2021-08-28 08:34:09

我通常使用 GnuPG 来加密我的文件,据我所知,它的强度最终取决于我使用的密码。所以,我想知道:我如何从数学上计算我的密码有多安全?我如何知道我的密码是否安全?

3个回答

密码的强度,确切地说,是它可能是什么的衡量标准。密码学家的技术术语是“熵”。粗略的想法如下:有一组“可能的密码”——您可以选择的密码。攻击者将尝试使用该集合中的密码。如果集合足够大,攻击者将被击败,因为集合越大,攻击者击中正确密码的时间就越长(平均而言)。

例如,如果您的密码是 9 个十进制数字的序列,那么可能的密码集的大小正好是十亿 (10 9 )。如果您在该组中随机选择密码,那么平均而言,攻击者必须先尝试一半的密码,然后再尝试您的密码,即 5 亿次。

只要您真的随机且一致地选择密码,就可以随机且一致地考虑一大袋您从中选择的可能密码。这对计算机来说很容易,但对大脑来说却很难:你头骨里的果冻非常擅长很多任务(比如图像识别),但不是随机的。

要理解的重要一点是密码强度来自密码生成过程给定的密​​码“本身”并不强。这就是“密码表”完全失败的地方。“密码表”只看到您输入的密码,而不是您选择它的方式。如果您愿意,密码计站点会告诉您攻击者猜出密码需要多长时间,假设该站点攻击者,并且对您一无所知。这并不完全现实:你的敌人比 Web 上的 lambda 站点更了解你。具体来说,他在追你,而且必须假定他很聪明。

因此,要估计您的密码强度:

  1. 如果您在脑海中生成了密码,请再试一次:它很弱。从现在开始,我假设您使用随机生成器生成密码(一台计算机/dev/urandom,一些骰子,硬币翻转......选择很大)。

  2. 根据您的生成算法计算可能密码集的大小。例如,如果您使用20 面骰子生成符号(从 A 到 T 的字母),并且您启动骰子 8 次,则可能的密码集大小为 20 8 = 25600000000。

  3. 估计攻击者可能“尝试”多少密码。这就是加密细节很重要的地方。GnuPG 遵循OpenPGP 格式,其中密码通过一个本质上很慢的散列过程以可配置的方式转换为密钥(参见 RFC 4880 的第 3.7.1.3 节)。这对您和攻击者来说都是昂贵的。攻击者有几台电脑这比你多,那么他能够尝试了很多的密码,但不可笑很多。根据经验,考虑到攻击者每秒可以尝试不超过一百万个密码。

  4. 根据前两个步骤,计算攻击者平均需要多长时间才能破解您的密码。平均而言,他将不得不探索一半的可能密码。使用上面的数字(20 个符号字母表中的 8 个符号,每秒一百万次密码猜测),您会发现 12800 秒,即多于 3.5 小时。这不是很舒服......但是每个额外的符号都会将攻击者的努力乘以 20。因此,D20 的 10 个符号会使攻击时间缩短到大约两个月,此时攻击者应该声明它“不值得努力” "(这是你的目标)。

因此,强密码规则

  • 不要相信你的大脑。用电脑或骰子生成密码。
  • 接受生成结果。在找到看起来“容易记住”的密码之前,不要生成密码。
  • 坚持使用易于输入的符号。特别是,小写字母序列在智能手机上很容易。混合大小写、数字和标点符号会使密码的使用令人沮丧。
  • 使用足够多的符号,以使可能的密码集足够大。这取决于加密系统将密码散列成密钥的程度(或程度)。除非加密系统非常无能(在这种情况下您根本不应该使用它),否则 12 或 13 个字母就足够了(做数学!)。

在著名的XKCD 密码漫画中,作者建议列出 2048 个“常用词”,然后选择四个这样的词(随机,用骰子):四个词,连接起来,就是密码。那么这组可能的密码的大小为 2048 4 = 17592186044416,这非常好。作者的重点是这样的密码好记(无论你得到什么四个字,都会找到一个对应的“故事”)。就个人而言,我更喜欢较短的密码,它们只是随机字母(我的大脑,作为哺乳动物的大脑,不擅长随机性,但它非常擅长记住符号串)。

记住密码的关键是每天输入。

http://www.passwordmeter.com/

出于安全原因,不要输入您的真实密码,而是一个近似值,例如,如果您的密码是 asl6234FDS,请输入 ajk0175MAF。强密码的得分为 100%。

要自己计算密码的强度,您必须首先了解攻击者如何“破解”它。主要有以下三种方式:

  1. 字典攻击
  2. 哈希表
  3. 蛮力

现在假设你的密码是“强”(即随机长并且使用小写、大写数字和符号),那么攻击者应该被限制为暴力攻击,所以我将限制我的答案。

暴力破解意味着攻击者将尝试所有可能的密码。为简单起见,假设您的密码只有 1 个字符长,并且只使用小写字母字符(即字母表)。这意味着攻击者将从 a 开始,然后是 b、c、d、... z。现在字母表中有 26 个字母,这意味着如果您只有 1 个字符长且小写的密码,他们必须猜测 26 次(平均而言,他们应该破解密码的一半,即 13 次猜测)。通过引入大写,您可以将其翻倍(即攻击者平均需要 26 次猜测,或者换句话说,攻击者需要两倍的时间)。添加数字和符号也会增加猜测的次数,从而增加破解密码所需的时间。

通过添加第二个字符(即 2 字符长的密码),攻击者必须猜测的密码数量成倍增加。再次简单起见,让我们研究一个二进制密码(即它只能有 2 个字符 0 或 1 ):

对于 1 个字符的密码,可能的情况是:

  • 0
  • 1

这是 2 个密码,对于长度为 2 的密码,可能是:

  • 0
  • 1
  • 00
  • 01
  • 10
  • 11

现在有6种可能性。

因此,要计算密码复杂度,您需要考虑两件事:

  1. 使用的不同字符的数量(大写、小写和符号)
  2. 使用的字符的长度。