源代码作为密码

信息安全 密码 密码管理 源代码 密码破解
2021-08-17 09:07:52

混合了字母、数字和特殊字符的密码有时很难记住。使用少量令人难忘的源代码作为“密码”是否安全?

例如,在 Go 中使用一个简单的 for 循环: fori:=1;i<5;i++{fmt.Println(i)}

普通人只会看到晦涩难懂的语法,但作为有编程背景的人,这可能更容易记住。它至少和普通密码一样安全吗?

4个回答

您可以使用源代码作为密码。

但是,我强烈建议不要使用源代码作为密码。
原因是熵。
密码/密码短语需要提供大量熵(100 位以上),并且编程语言通常对指令的制定提出严格的限制,因此即使使用标准密码短语,每个字符的熵也更少。

除此之外,您可以使用包含许多复杂指令且不可机器编码的源代码文件(100 行以上)作为密钥文件。

像大多数密码生成算法一样,这个算法依赖于隐蔽性的安全性。

只要没有人怀疑你使用这种方法,就没有人会使用破解工具来尝试随机有效的源代码片段,并且规则strength = possible_characters ^ number_of_characters将保持有效。但是一旦有人怀疑你可能正在使用它,或者当它甚至因为你开始在网站上宣传它是“一个非常好的想法”而成为一种常用方法时,这种情况就会改变。

一旦有人觉得有必要编写一个量身定制的破解程序,你就必须看看你的源代码中到底有多少熵。而且,当您仅限于“通用编程语言中的小而难忘的代码片段”时,您可能只有几十亿个可能的密码短语,这不足以承受严重的蛮力尝试。

最好使用一种即使每个人都使用它也能保持安全的方法。您不必担心,它可以让您与其他人协作,将方法调整为最安全,因为您不必对方法保密。

这种“敌人知道系统”的方法是信息安全创新和进步的巨大动力。否则,您将拥有独立的小组,每个小组都根据自己的晦涩、据说出乎意料的设计和原则开展工作。

此外,您无法量化您的系统的安全性,因为这完全取决于心理学和其他人对您的了解。

在某些行业中,您需要具有创造性,并根据您必须保密的一些个人、独特的见解制定策略,但信息安全并非如此。

乍一看,这似乎是个好主意。像许多与密码有关的建议一样,在某些情况下,它甚至可能是一个不错的解决方案。但是,当您更详细地考虑它时,会发现许多不足之处。

如果我试图破解某人的密码,我要做的第一件事就是尽可能多地找出有关此人的信息。如果我知道您是一名程序员,那么我很可能会猜测您使用了一些密码作为密码。我现在缩小了可能的搜索空间。

如果我知道您首选的编程语言是什么,那么我现在已经进一步缩小了搜索空间。我只需要考虑您首选语言的法律形式。

现在,当我考虑您首选语言所允许的法律形式时,我进一步缩小了搜索空间。如果密码短语有一个已知的最大字符限制,那么搜索空间就会更小 - 事实上,对于大多数语言来说,只有极少数可能的法律形式适合许多人的允许字符限制密码。

正如其他答案所示,“聪明”密码/密码短语方案的真正问题是它们依赖于其他人无法猜测您的方案是什么。随着计划的普及程度增加,该计划的好处会减少。最重要的是,您选择的任何方案都必须是不容易与您关联的东西。

聪明的密码方案的另一个问题是它们很少像你想象的那么聪明。如果您分析从被盗密码存储库中转储的密码,您会惊讶于这些巧妙方案中的许多“常见”。您可能还会对聪明的方案与密码来自的域相关的频率感到惊讶。例如,我看到一个空军系统的密码被盗,你猜怎么着,绝大多数密码要么来自各种飞机名称和型号,要么来自电影或以军事或空军为主题的书籍中的角色名称。同样,几年前从一个基督教约会场所倾倒的密码有大量密码,其中包括圣经中的短语、章节和经文编号。如果我要尝试破解 github 密码,

使用代码的一个小好处是您可能会拥有更长的密码/密码,这通常与底层复杂性一样重要或更重要。人们经常使用短密码,因为它们输入起来简单快捷。这些天来,我认为大多数人最好确保他们尽可能使用 2 因素身份验证或 2 步身份验证,并使用密码管理器,它会为您生成随机密码,并且在大多数情况下,您无需记住它们。