Encryption 如何实现7-zip归档文件的密钥导出和密钥验证功能';什么是加密机制?

Encryption 如何实现7-zip归档文件的密钥导出和密钥验证功能';什么是加密机制?,encryption,cryptography,7zip,password-recovery,cryptanalysis,Encryption,Cryptography,7zip,Password Recovery,Cryptanalysis,我很好奇密码恢复如何为受密码保护的文件工作我想知道7-zip加密机制的确切流程。 7-zip在CBC模式下使用AES-256加密算法对文件或文件夹进行加密。密钥是根据用户提供的基于SHA-256哈希函数的密码短语生成的。SHA-256执行219(524288)次,以增加穷举搜索的成本。此外,为了帮助降低字典攻击的风险,在生成哈希之前,将salt附加到原始密码短语中 我的第一个问题是key_派生函数如何生成256位的key?IV对于AES CBC模式的重要性是什么?它是如何生成的 我的第二个也是最

我很好奇密码恢复如何为受密码保护的文件工作
我想知道7-zip加密机制的确切流程。

7-zip
在CBC模式下使用AES-256加密算法对文件或文件夹进行加密。密钥是根据用户提供的基于SHA-256哈希函数的密码短语生成的。SHA-256执行219(524288)次,以增加穷举搜索的成本。此外,为了帮助降低字典攻击的风险,在生成哈希之前,将salt附加到原始密码短语中

我的第一个问题是
key_派生函数如何生成256位的key
?IV对于AES CBC模式的重要性是什么?它是如何生成的


我的第二个也是
最重要的问题是如何验证密钥以解密7-zip存档?我的意思是它的密钥验证函数是如何工作的?

密钥派生函数位于文件
7zAes.cpp
的源代码中,它被称为:

void CKeyInfo::CalculateDigest()
它使用一种专有的(相当枯燥的)机制创建密钥


我还没有找到
key\u验证
方法,如果它存在的话。如果我找到了,我会告诉你。

文档——包括7zip容器格式的规范——似乎在操作中丢失了。我甚至没有在crypto libs中找到一条源代码注释。我同意你的观点,我通过同样的代码来了解密钥是如何生成的。但有两件事我没有真正明白。首先,因为numRounds是使用“NumCyclesPower”计算的,它被初始化为零。那么这个“for(UInt64 round=0;roundSha256\u Update
的输入都是字节,
Password
似乎是一个
cbyteraray
,但我无法直接看到它的设置位置,有了这个代码库,我也不知道在哪里可以找到它。你试过联系其中一位作者吗?关于7zip的文档非常(非常)稀少,而且源代码是-因为没有更好的词-狗屎。@owlstead,先生,我没有试图联系任何作者。就在几天前,我开始用谷歌搜索它,但我没有发现任何与7-zip加密相关的技术文档。