GUIDs是好的密码吗?

29

优点:

  1. 我无法记住“好”密码,所以记住它们并不是问题。
  2. 它们看起来不像密码。
  3. 它们几乎不可能被猜到(128位的熵)。
  4. 容易生成(解决了“好 PRNG”问题)。

缺点:

  1. ???

特别是针对电脑自动输入的密码,例如一些设置中的数据库登录密码,有什么需要注意的吗?


3
无论其格式如何,我认为一个低劣的伪随机数生成器都无法产生一个好的密码。 - Mehrdad Afshari
1
@BCS:有些系统会接受您在密码字段中输入的任何内容,但只使用前n个字符。在检查之前,较长的密码会被静默截断。我当然不是说这些是的系统,只是它们存在! - Greg Hewgill
@BCS 呃?使用MD5(password)是一个可怕的想法,因为这已经在其他地方广泛讨论过了,但它不会截断任何内容。 - tialaramex
@tialaramex:MD5哈希值长度为128位,假设使用60个字符的字母表,则密码长度约为20-22个字符。因此,如果您的密码超过22个字符,MD5就会丢失信息,因为可以产生的密码数比MD5输出还要多,因此从暴力攻击的角度来看,MD5具有与截断密码相同的效果。 - BCS
在https://security.stackexchange.com/上查阅这个问题,我相信那里已经有答案了。从技术上讲,这是不相关的话题。 - Tegra Detra
显示剩余5条评论
13个回答

32

一个主要的问题是,正如原问题所述,您不一定拥有“128位熵”。

许多GUID算法中嵌入了可预测模式的信息,例如计算机的MAC地址、日期/时间或递增序列。对WinAPI GUID的密码分析表明,在给定初始状态的情况下,可以预测由函数UuidCreate返回的接下来的250,000个GUID。

例如,我猜测第三组数字的第一个位置的第一个数字有约50%的几率是1(用于V1 GUID)或4(用于V4 GUID)。

来源:http://en.wikipedia.org/wiki/Globally_Unique_Identifier


6
好主意。现在只要他们能够将6个月前我电脑上的初始状态删除就好了。 :) - BCS
1
嗯,一种方法是从他们使用同一台计算机和算法生成的密码中逆向工程出来。 - JohnFx
2
非常好的观点。GUID被设计成唯一且不是随机和安全的。有很多不同的方法可以生成随机数据。 - Dirk Vollmar
1
更多细节请参见Eric Lippert的这里 - Cosmin
1
我同意BCS的观点,黑客没有初始状态,他们只有一个哈希值来匹配。更有趣的是,GUID是否产生良好的哈希值,即是否存在某种奇怪的数学方法,使得从GUID生成的哈希值更容易发生冲突? - Luke Puplett
显示剩余2条评论

13

缺点:

  1. 你必须将它们记录在某处。
  2. 如果需要告诉其他人,你可能会通过电子邮件发送它们,或再次写下来。
  3. 它们可能对某些系统而言过长。
  4. 由于几乎不可能记住它们,因此你可能会比预期更频繁地更改它们。

因此,除非它们是很少更改的系统密码,否则我怀疑它们是否是好的密码。


请参考第1点并向宫城编码者发表评论。我最终仍然会遇到这些问题。 - BCS
解决这个问题的方法是 - 生成既安全又容易记忆的密码 - qu1ckr8dducck! - MrTelly
3
同意。将短语、引语或歌词的每个单词的第一个字母取出来,然后使用它们。例如,“is this the real life, is this just fantasy, caught in a landslide” 变成了 ittrlitjfcial,对你来说易于记忆,但稍微难以破解。再加上个人规则(例如大写第二个字母,将第一个a改为4或者第一个e改为3等),你就得到了一个很好的密码!iTtrlitjfci4l - esac
@esac - 不知道3年后有多少人会把iTtrlitjfci4l作为密码 :) - The_Butcher
2
@The_Butcher 糟糕,我忘记了这个评论。我现在应该改变我的银行密码 :( - esac

8

缺点:

几乎不可能记住一个32字节的字母数字字符串。


4
我无法记住我的密码,所以我会让电子钱包或浏览器来管理它们。 - BCS
1
32个字节,对吧?假设你将它们写成十六进制。我猜这是相当明智的选择。 - Samir Talwar

5
如果您真的想要一个安全的密码,请考虑使用“口令”而不是单一的密码。一个长的口令容易记忆,且很难被强行破解。请参考这里了解更多信息。

1
好的,我倾向于使用最喜欢的歌曲歌词。 噫,我的秘密被揭露了!> . < - Bayard Randel
除非你知道你在听什么类型的音乐。 - BCS

4

缺点:

  • 一些系统对密码的最大长度有限制。如果您只使用十六进制数字,这可能会将熵限制为仅有32位。

2

缺点:

  1. 密码字段长度不总是足够长。
  2. 输入更为困难 - 您可能会在程序中存储密码,而不是记在脑海中。这是一个安全问题...

... 优点:

  1. 没有人能强迫你透露密码。

已经有使用大型随机密码的解决方法了。它们被称为OTP(一次性密码),比你所建议的更加安全,因为它们会随时间变化,并且通常由安全设备生成。当然,只有当您设计密码系统时才相关。


3
坏家伙手持大枪:告诉我你的密码!!! 我:1CF92C3-CFD3-4a9....等等,不对是5A6E6559-AC... 嗯... 抱歉,我记不得了! - BCS
在“持有大枪的坏人”这种情况下,你肯定想告诉他你的密码……但是如果你已经死了,这些数据还有什么用呢? - Arafangion
我想要给他密码,或者让他相信无论他做什么我都不能给他密码。但是,另一方面,我没有任何值得为之付出代价的密码。 - BCS

1

有人需要将其作为密码输入吗?还是您只想将其用作一次性的东西?因为说实话,没有人想在密码字段中输入GUID。人们已经很难输入WEP/WPA2 wifi网络密钥了。而且大多数情况下,这些都是一次性的。

@Miyagi:当然,这是最明显的缺点。他们必须把它写下来。


1

从技术上讲,它们是好的密码。但在现实生活中,它们是糟糕的密码。

你最终会不得不写下这些密码,使用密码管理器或其他形式来实际使用密码... 以某种方式将失败点从密码转移到另一个方面。

考虑使用口令短语。用某些字母或其他字符替换句子中的某些字母,并对数字进行处理,使用SHIFT键输入它们,将易于记忆的数字转换为定义明确的字符序列。

例如,bcs19850101bcs 可以变成 bcs!(*%)!)!bcs


你的生日是密码吗?开玩笑的。 - NotMe
即使有这样的系统,我仍然会忘记短语或很快用尽我能记住的短语。 - BCS
我愿意承担我的计算机的物理安全,因此我将忽略有人从我的密码管理器中提取密码的问题。 - BCS
也许你应该考虑一些治疗记忆丧失的方法? - Hejazzman
4
不是失忆,更像是记忆获取的失败! - BCS
除非有人知道你的密码只包含按住Shift后打出的字母和数字,否则你只有36个可能的字符 - 并不比包括普通数字在内的36个字符更好。 - Seb

1
如果您想要一个安全的密码,并希望将其留给UNIX类系统上的密码管理器,那么最好从/dev/random中获取一个密码并将其编码为可读的格式。对于128位熵,您可以使用一些简单的方法,例如:
head -c 16 /dev/random | openssl enc -a -e

这将生成一个像 5eqIviKu4pFTqSPnYosVKg== 这样的密码。

不算过长,又安全、随机,不必为了记住而自杀。

编辑:与UUID相比,此方法的额外好处包括在PRNG (/dev/random)中提供了更高的安全性和较短的密码,类似的缺点。


更适合在 PW 字段中,但除此之外,与 GUID 大致相同。 +1 - BCS
这与GUID / UUID非常接近,因为其中一种变体可以从随机数生成。稍微短一些(因为base64每个字符表示6位,标准UUID使用16进制,每个字符4位),但并没有非常不同。 - StaxMan
这篇文章推荐使用/dev/urandom - Alex Beynenson
@AlexBeynenson - 虽然使用/dev/urandom确实可以提供更高质量的熵,但如果您正在生成大量熵,则有可能耗尽池并阻塞应用程序。 - Peter Hanneman

1

我最近编写了一段代码,将校验和的前64位转换为四个英文单词的序列。这样做可以生成一个很好的校验和(比十六进制混乱的字符串容易记忆),但我不确定是否可以将其作为密码来信任。如果您要保护某些安全内容,应该使用一个强密码并记住它,不要写下来。如果不是,那么任何旧密码都可以使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接