我是一名学生,试图了解开源加密软件http://www.truecrypt.org/的机制。在TrueCrypt中,有一个用户创建的密钥和/或密钥文件,以及一个程序生成的主密钥。我想要一个链接或更好的半技术解释,该用户如何创建密码解锁头文件。我在http://www.truecrypt.org/docs/?s=technical-details阅读了TrueCrypt文档,[我会发布更多但新用户只允许两个链接],以及其他真正的加密文档。我希望在高级别解释密码如何解锁头文件,以及作为侧边栏,盐如何帮助防止彩虹攻击。
很抱歉这么频繁地添加问题,但我意识到问题的主要核心是这个。我想弄清楚密码是如何变化的。为此,我需要了解标题键与主键的关系,因为您可以更改标题键,但只有某些标题键可以与主键一起使用。必须使用标头密钥来创建主密钥,但您可以选择一个任意密码来创建一个也可以使用主密钥的标头密钥。
答案 0 :(得分:1)
Truecrypt会将您的密码传递给PBKDF2。它就像一个哈希函数,但需要更长时间,而且速度更慢 - 减慢暴力攻击。类似的密码派生算法是bcrypt和scrypt。当涉及到'哈希'密码时,这三个是“三巨头” - 其他任何东西,比如密码的简单SHA-1或MD5通常太快快是安全的。攻击者可以非常快速地对像SHA-1这样的简单哈希进行暴力攻击。 PBKDF2,bcrypt和scrypt要慢得多。
但是,理论上你可以使用所使用的参数(每个都有一些可选参数)对PBKDF2,bcrypt和scrypt进行彩虹表。 Truecrypt使用的盐旨在防御它。
http://www.truecrypt.org/docs/header-key-derivation是此的主要参考。
更具体的说是在PBKDF2和salt之后用户密钥的标题键==?
我相信派生自密码密钥用于解密包含主密钥的标头。这样,您只需使用新密码重新加密主密钥即可更改密码。
truecrypt.org/docs/?s=header-key-derivation说盐是不加密的?将未加密的盐添加到彩虹表并再试一次真的很难吗?
建立一个彩虹表是很困难的,我认为很难作为暴力行为,但我不确定。他们在同一个球场。所以你想到的威胁模型“我应该加密我的盐!”并没有真正发挥作用。另外,你需要盐来获得密钥,解密块,获得盐。鸡肉和鸡蛋。
如果使用“512位盐,这意味着每个密码有2 ^ 512个密钥,我不确定添加盐的转换方式。”
他们的意思是密码“密码”实际上有2 ^ 512种组合:password0000001,password0000002,password0000003等。