Encryption 用户输入的密码如何解锁TrueCrypt创建的主密钥?

Encryption 用户输入的密码如何解锁TrueCrypt创建的主密钥?,encryption,cryptography,truecrypt,Encryption,Cryptography,Truecrypt,我是一名试图理解开源加密软件机制的学生。在TrueCrypt中,有一个用户创建的密钥和/或密钥文件,以及一个程序生成的主密钥。我想要一个链接,或者一个更好的半技术性的解释,说明这个用户创建的密码是如何解锁头文件的。我已经在上阅读了TrueCrypt文档,[我会发布更多,但新用户只允许有两个链接],以及TrueCrypt文档的其余部分。我想在一个高层次上解释一下密码是如何解锁头文件的,作为一个边栏,salt如何帮助防止rainbow攻击 很抱歉这么频繁地补充这个问题,但我意识到这个问题的核心是这个

我是一名试图理解开源加密软件机制的学生。在TrueCrypt中,有一个用户创建的密钥和/或密钥文件,以及一个程序生成的主密钥。我想要一个链接,或者一个更好的半技术性的解释,说明这个用户创建的密码是如何解锁头文件的。我已经在上阅读了TrueCrypt文档,[我会发布更多,但新用户只允许有两个链接],以及TrueCrypt文档的其余部分。我想在一个高层次上解释一下密码是如何解锁头文件的,作为一个边栏,salt如何帮助防止rainbow攻击


很抱歉这么频繁地补充这个问题,但我意识到这个问题的核心是这个。我试图弄清楚密码是如何变化的。要做到这一点,我需要了解头密钥与主密钥的关系,因为您可以更改头密钥,但只有某些头密钥可以与主密钥一起使用。头密钥必须用于创建主密钥,但您可以选择任意密码来创建头密钥,该头密钥也将与主密钥一起使用

Truecrypt接受您的密码并将其传递。它类似于一个散列函数,但需要更长的时间,而且更慢——以减缓暴力攻击。类似的密码派生算法有bcrypt和scrypt。当涉及到“散列”密码时,这三个是“三大”密码——其他任何东西,比如简单的SHA-1或MD5密码,通常都太快而不安全。攻击者可以非常快速地对SHA-1等简单哈希进行暴力攻击。PBKDF2、bcrypt和scrypt的速度要慢得多

但是,理论上,您可以使用所使用的参数(每个参数都有一些可选参数)针对PBKDF2、bcrypt和scrypt创建彩虹表。Truecrypt使用的盐就是为了防止这种情况

是本文的主要参考


更具体地说,是PBKDF2和salt之后的用户键的头键==吗

我相信派生自密码的密钥用于解密包含主密钥的报头。这样,您只需使用新密码重新加密主密钥即可更改密码

truecrypt.org/docs/?s=头密钥派生表示盐未加密?将未加密的盐添加到彩虹表并重试真的有那么困难吗

建造一个彩虹桌子是困难的,我认为这和暴力强迫一样困难,但我不确定。不过他们在同一个球场上。所以你所想的“我应该加密我的盐!”的威胁模型并没有真正发挥作用。另外,您需要salt来派生密钥、解密块和获取salt。鸡和蛋

我不确定添加salt如何转换为“使用512位salt,这意味着每个密码有2^512个密钥。”


他们的意思是“password”的密码实际上有2^512个组合:password0000001、password0000002、password0000003等等。

更具体地说,头键==用户输入键吗?[在PBKDF2和salt之后]好的,这里唯一的问题是salt是纯文本的,所以任何拥有加密卷的人都有salt,所以没有鸡和蛋的问题,只是您最初创建彩虹表的问题。很抱歉这么频繁地添加这个问题,但我意识到问题的核心是这个。我试图弄清楚密码是如何变化的。要做到这一点,我需要了解头密钥与主密钥的关系,因为您可以更改头密钥,但只有某些头密钥可以与主密钥一起使用。明白了,头密钥加密主密钥,交换主密钥未加密,使用新密钥加密,然后交换回主密钥。谢谢你的帮助!更具体地说,是PBKDF2和salt之后的用户键的头键==吗?说盐没有加密?将未加密的盐添加到彩虹表并重试真的有那么困难吗?我不确定添加salt如何转换为“使用512位salt,这意味着每个密码有2^512个密钥”。我发现这是一个非常有用的技术性解释。彩虹表对于预计算非常有用。如果您想要破解的每个密码都有一个唯一的salt,那么您要么每次都需要计算一个新的rainbow表(这是毫无意义的,因为这比直接破解密码要复杂得多),要么需要一个包含所有可能salt值的大得离谱的rainbow表(这是不切实际的)。