这个创建密码的过程有多安全?

信息安全 密码 密码破解
2021-08-14 07:37:08

我一直在研究如何尽可能确保在线服务和网站的密码安全。显然有一些很大的禁忌,比如使用字典单词、对多个网站使用相同的密码、个人信息等。

我研究过密码管理器,它们似乎是个不错的主意,但也对密码管理器的安全性持怀疑态度。

我倾向于为我能记住的不同网站设​​置一个强大的唯一密码,如果你要让它们几乎完全独一无二,这几乎是不可能记住的。

这个过程有多安全?例如,如果我有一个基本密码I^l@t(h$Y1G2 (别担心,不是我实际使用的)

我会为我的所有密码使用这个基本密码,但为了使每个密码都独一无二,我会围绕将网站名称的第一个元音放在前面和第一个辅音放在最后的线条做一些事情。

所以我对 Twitter.com 的理论密码是iI^l@t(h$Y1G2T

使用这种类型的系统有多安全?

4个回答

在实践的基础上,我不得不说,一旦你的任何一个密码泄露,这种类型的系统就会非常脆弱。不管是哪一个。

例如,如果您使用 }P_-^cWi_OD~w{qjjA4f(随机生成)作为您的“核心”密码,那么您将拥有

o}P_-^cWi_OD~w{qjjA4fN 用于 NotSecureSite。

和 a}P_-^cWi_OD~w{qjjA4fB 用于 BankSite。

假设

  1. 您的 NotSecureSite 密码以某种方式被攻击者发现,可能是因为他们是纯文本攻击者并且遭受了破坏

    一个。然后那些明文密码就出来了,就像RockYou 和 Facebook 列表所做的那样

  2. 然后您所在的另一个网站遭到破坏;我们会说它是使用 MD5 散列的 BankSite(为简单起见;实际上,他们可以使用任何东西,甚至是相当合理的算法)
  3. 拥有两组数据并使用以下简单规则的攻击者将使用John the RipperoclHashcat以及以下简单规则找到您的 Paypal 密码:

    一个。命令行:

    1. ./oclHashcat64.bin --hash-type=0 --attack-mode=0 --rules-file=random.rule random.word.md5 random.dict

    一个。random.rule 中的一行读取

    1. []^a$B

      一个。[ - 删除第一个字符 a。] - 删除最后一个字符 a。^ - 添加下一个字符 a。$ - 附加下一个字符 a。请注意,如果攻击者都通过 a-zA-Z0-9 搜索每个起始密码,则只有 3,844 条规则可以彻底搜索每个起始密码的空间;您的实际方案通常可以在每个密码的 130 条规则 (5*26) 中找到。

      1. 更糟糕的是,这非常小。使用oclHashcat默认分发的规则集包括T0XlCv1.rule的12000条规则、d3ad0ne.rule的35000条规则和dive.rule的123000条规则,因此最大少于4000条是杯水车薪。

尝试使用独特的加密随机长密码和像 KeePass 这样的密码管理器来生成和存储它们;它具有适用于 Apple、iPhone、Android、Linux、Windows 等的端口。

确保进入数据库设置、安全性,并将轮数设置为至少一秒,最好是几个(有一个按钮/链接延迟 1 秒;然后将其放大),尤其是在较慢的设备上。

作为替代方案,我会提出一些非常不同的建议。它可以通过多种方式完成,但可以使用我的 github 站点上的各种 PBKDF2 实现,其中一些包括 Windows 可执行文件,其中一些是 Python 或其他常用语言。

然后,使用您的“核心”密码作为密码,网站名称作为盐,大量迭代,由于您没有或几乎没有特殊字符,您将需要比平常更长的密码,但您将能够剪切和粘贴。在这个时候我很抱歉,因为 Base64 输出还没有实现太多,虽然我正在努力。十六进制输出很好,但是,如果你使用所有它并且 -o 参数,输出长度足够长 - 只要知道十六进制是两倍长。

  • 不安全网站:

    • ./pbkdf2 -pa}P_-^cWi_OD~w{qjjA4fB -s NotSecureSite.com -a SHA-512 -i 1024000 -o 20

      • 104d58f4c9fac5063ed9ed9303ccadc740053963
    • ./pbkdf2 -pa}P_-^cWi_OD~w{qjjA4fB -s NotSecureSite.com -a SHA-512 -i 1024000 -o 20 -O base64

      • EE1Y9Mn6xQY+2e2TA8ytx0AFOWM
  • 银行网站:

    • ./pbkdf2 -pa}P_-^cWi_OD~w{qjjA4fB -s BankSite.com -a SHA-512 -i 1024000 -o 20

      • acaafd556c984e1c225369a5b95e37a38e34e48f
    • ./pbkdf2 -pa}P_-^cWi_OD~w{qjjA4fB -s BankSite.com -a SHA-512 -i 1024000 -o 20 -O base64

      • rKr9VWyYThwiU2mluV43o4405I8
  • 较长的十六进制和较短的 Base64 完全相同,因为它们来自相同的 20 个二进制位。

  • 基本密码和迭代次数必须相同

  • 请注意,NotSecureSite 和 BankSite 密码看起来完全不同,除了清晰的十六进制或 Base64 编码数据之外,没有可辨别的模式。

  • 请注意,我使用了超过一百万次迭代和 20 个字符的随机基本密码;这应该有助于防止那些已经确定您的算法的人(因为我们必须假设攻击者以某种方式弄清楚/了解了它)通过提供一个大的密钥空间并减慢它们的速度。

安全规则#1:假设攻击者比你聪明。

想象一下,如果攻击者真的想访问您拥有的帐户。

他们在网络和Pastebin上搜索过去的违规行为,发现该帐户sam@example.com涉及两次违规行为。

  • 在第一次违规中,密码被破解,它是oI^l@t(h$Y1G2G
  • 在第二次违规中,破解的密码是AI^l@t(h$Y1G2s.

对于攻击者来说,很明显有一个密码方案正在使用,尤其是每个被破坏网站的名称都是已知的。有关这方面的任何变化,请参阅规则 #1。

答案是,这取决于!

基本上这个概念的安全性与在多个网站上重复使用相同的密码相同,但在末尾添加了一些字符。

如果基本密码本身很复杂且足够长,这将导致密码更难暴力破解,假设网站后端具有适当的安全性。

这种技术的问题在于,如果一个网站将以明文形式存储您的密码,并且攻击者可以访问它的数据库,他可以在其他网站上测试您的密码系统。他将拥有您的基本密码,因此复杂性减少到两个字符,坦率地说,这并不多。

如果所有网站都正确存储了您的密码,那将是足够安全的。但是您永远不知道是否是这种情况,您永远不知道是否有人会专门针对您的帐户。

您走在正确的道路上——您可以做的最重要的事情就是为您登录的每个站点设置不同的密码。关键的好处是,如果一个网站被黑客入侵(他们每天都这样),使用弱方法来混淆你的密码的网站会让你的密码更容易被破解。到处都有相同的密码意味着如果他们知道你的密码一次,他们在很多其他地方也知道。

复杂性很重要,因为它有助于击败破解方法。但是您提到的方案可能有点棘手,因为黑客还有其他不需要破解密码的方式。

所以我强烈推荐密码管理器,在所有这些中,1Password 是我最信任的一个,因为他们的策略是永远不会将您的主密码存储在他们的服务器上。其他密码管理器也可能这样做——所以任何好的密码管理器都是值得的。密码管理器使为每个站点拥有一个长、复杂、随机和唯一的密码变得可行和方便。最好的也做得更多。

对于最重要的站点,使用它们的多因素身份验证(MFA 或 2FA)。这很痛苦,因为你需要一些东西,通常是一部电话,它可以提供二级密码。但是对于将用于确认忘记密码的电子邮件帐户,请使用它。

坏人获取密码的方式有多种。他们从 P@ssw0rd! 等常见用途中猜测它们,弱加密密码从被破坏的网站被盗,然后使用字典单词破解。你的方法解决了这些问题。

但还有第三种:安全性差或被黑的网站,或网络钓鱼/社会工程诈骗让你输入密码——黑客现在不费吹灰之力就知道了。认真对待安全的网站可以防止这种情况,并监控暗示违规行为的模式。但大多数没有。(今天,这些方法是有效获取密码的最常用方法)。

如果我们假设黑客知道您访问特定站点的密码,那么该方法现在的安全性如何?

假设密码的公共部分是一些长而复杂的字符串——我将使用 XXXX 来表示它。但是,如果您根据站点的某些内容创建一个不复杂或可猜测的后缀或前缀,例如 SXXXX,使用“stackexchange”的第一个字母,那么您现在就有一定的风险。让它更长,比如 sTaXXXX?其实更能猜。让它变得棘手,比如 sT@XXXX 或 atsXXXX ......变热了。嵌入其中,如 XsXtXaX,可能更好。

但是这种通用技术是一种广泛推广的策略,因为它是人类唯一能真正记住的策略,所以试图破解它的人知道要寻找什么。

因此,一旦您的模式被猜到,他们就会知道您的电子邮件地址,因此请尝试登录那里——如果是 Google,那么 XgXoXoX,对吗?现在,他们更改了您的 Google 密码,并开始重置您的所有其他密码。现在你真的沉没了。我怎么知道?2007年几乎发生在我身上,除了我很幸运。从那时起:1Password。

密码是一种可怕的、可怕的安全手段。你家的物理钥匙更好:你需要钥匙或副本,而且你需要在家!从 1Password 等软件生成随机密码,特别是结合关键站点的多因素身份验证是可行的方法。没有两个我有帐户的网站共享密码,而且我不知道其中一个。我家需要的都存放在一个单独的“保险库”里,有单独的密码,我是唯一知道主人的人,而且我经常更换。

希望这可以帮助!