我根本不明白 KeePass 密钥派生如何提高密码数据库的安全性。首先,我将尝试解释我从这里描述的密钥推导中所理解的内容。我将使用一些伪代码:
const WORKFACTOR = 6000;
var userKey = UserEnteresPassword();
var userKeyHash = SHA256(userKey);
var randomKey = GetStoredSecureRandomKey();
var tmpKey = userKeyHash;
for(i = 0; i < WORKFACTOR; i++)
{
tmpKey = AES(tmpKey, randomKey);
}
var finalKey = SHA256(tmpKey);
然后它使用 finalfinalKey来加密密码数据库。然后将其存储在硬盘驱动器上。
如果我现在想解密密码数据库,为什么我必须使用这个密钥派生函数?我可以简单地直接猜测finalKey而不是猜测userKey并让它通过这个函数运行。所以我会节省所有我本来需要这个密钥派生函数的时间。
我知道,如果我只是猜测finalKey我将无法获得userKey,但我不需要它,因为我已经拥有了finalKey,我可以简单地解密密码数据库。我一点都不感兴趣userKey。
或者这完全是关于字典攻击以防止攻击使用众所周知的单词/密码并简单地查看数据库是否解密?