目前在客户端javascript中生成一个diceware传递密码(每个客户端获取一个密码安全的伪随机种子)。
var password = this.word() + this.separtor() + this.word() + this.separtor() + this.word();
尽管生成的密码通过了我能找到的所有强度测试人员,但我担心的是攻击者不会简单地使用字符组合来强制密码,而是实际使用我的生成器对付我。
word()只有6 ^ 4 = 1296种组合
因此发电机只能产生1296 * 1296 * 1296 = 2,176,782,336种组合。
我添加了分隔符(24种组合)1296 * 24 * 1296 * 24 * 1296 = 1,253,826,625,536
CGI限制用户尝试,但一如既往,攻击者可以让我的密码哈希离线。
生成密码服务器端只会更安全,因为编译的wordlist可能仍然相对容易检索(至少对于拥有我的密码哈希值的攻击者而言)。
当我试图确保密码令人难忘时,我并不希望随机添加一个特殊字符到密码中,但这会迫使攻击者尝试每个字符组合?
p.s如果它更合适的话,将其移动到加密。
答案 0 :(得分:0)
如果您想确保密码令人难忘,您应该使用以空格分隔的five 字典字词(或根本不显示)。
您还必须假设攻击者了解算法和单词列表。
如果您使用10000个单词的单词列表(8岁的母语为英语的average vocabulary),则您有10000 ^ 5 = 10 ^ 20个组合。
在平均在线环境中,您可以预期大约1000个密码/秒,这为黑客提供了无数次的运作。这相当于一次规模较小的离线攻击。