非常简单的密码生成方案;这样安全吗?

时间:2010-01-20 10:30:19

标签: security hash cryptography passwords md5

编辑/澄清:我的意思是密码生成,如“确定性地为您自己使用生成密码(例如,注册Web服务),基于某些秘密和某些特定于站点的数据”

我将MD5摘要连接到主密码和(非秘密)特定于站点的字符串。然后我取十六进制表示的前16位数字。

这种简单方案的优点是:

  • 可用于MD5可用的任何地方
  • 不必信任firefox扩展程序或为您生成密码的任何内容

这是否有任何隐藏的漏洞?显然,如果主人受到了损害,我运气不好。

(旁注:当然使用十六进制数字是每个字符的次优熵,但谁在乎密码是否更长以弥补它?)

#!/bin/bash

master=myMasterPassword
echo "$master$1" | md5sum | head -c16

4 个答案:

答案 0 :(得分:2)

已有系统使用此功能,例如SuperGenPass。一般来说,假设您的哈希函数对于preimage攻击是安全的(为此我建议使用其他而不是MD5),你可能没问题。

然而,为此目的有一个更好的结构:HMAC。它是由常规哈希函数构建的,但具有针对各种攻击的安全性证据,甚至是有限的前映像攻击。 RFC中还有一节明确涉及使用截断的HMAC。

答案 1 :(得分:1)

你是谁在防守? 妥协的影响是什么? 你如何保护你的masterPassword,特别是如果在这个脚本中输入它。

如果您使用过的机器被压缩或检查过,则希望所有密码都暴露出来。通过命令行历史记录,您的bash脚本,内存分页到磁盘。更糟糕的是你谈论可移植性,所以你将在许多机器上使用它,其中一些机器不值得信赖。如果有人在你之后使用这台机器并抓住你正在做的事情,他们不仅会获得你在这台机器上使用的密码,而且还会获得你生成的所有密码。

这个的另一个限制是具有密码组成规则的站点。 Mixxed upper和lowwer case letter,需要使用puncuation,最小位数或字母,而您对该特定站点的MD5没有。还有一些网站有最大密码长度,我的银行网站最大密码长度为8,只使用16个有效字符,你大大减少了密码的可用数量。

对于低安全性的网站来说,这对我来说似乎很好,其中妥协的效果并不差。我不相信这可以用于我的银行网站访问或访问我的工作网站。我关心的事情。

我会相信我的slashdot,facebook,flickr等密码

我使用的解决方案是Password safepeople I trust建议我通过电子邮件发送密码数据库,并在我使用的每台计算机上安装客户端。

人们一直在思考如何保护密码和密码安全是一种解决方案。

答案 2 :(得分:0)

脚本本身就是一个漏洞,因为它有明文中的主密码 - 最好在脚本中存储“特定于站点的字符串”,并始终将密码作为用户输入,同时使用一些ask password program,而不是命令读取输入的参数 - 您的命令行存储到.bash_history

另外,请注意,MD5的16个字符只有64位熵 - 例如uuencode可以提供更强大的16个字符密码。

答案 3 :(得分:-2)

嗯,你的算法依赖于一个秘密 - 即你的主密码,所以为什么不把这个短语“带有我的DOB的网站名称附加到它上面”。同样安全,不需要将算法存储在除了你的头之外的任何地方。只要你不在任何地方写下你的密码,任何人都不会猜到你的“秘密”