Search code examples
encryptioncryptography7zippassword-recoverycryptanalysis

How key_derivation and key_verification functions are implemented of a 7-zip archive's encryption mechanism?


I am curious about how password recovery works for password protected files. And I want to know the exact flow of the 7-zip encryption mechanism.

7-zip uses AES-256 encryption algorithm in CBC mode, to encrypt files or a folder. The key is generated from user supplied pass-phrase based on SHA-256 hash function. The SHA-256 is executed 219 (524,288) times to increase the cost of exhaustive search. Also, to help reduce the risk of dictionary attacks, salt is appended to original pass-phrase before generating hash.

My First question is how does key_derivation function work to generate a 256-bit key ? What is importance of IV for AES CBC mode and how it is generated?

My second and most important question is how key is verified to decrypt the 7-zip archive ? I mean how does its key_verification function work ?


Solution

  • The key derivation function is in the source of file 7zAes.cpp, it's called:

    void CKeyInfo::CalculateDigest()
    

    and it creates the key using a proprietary (rather dull) mechanism.

    I haven't been able to find the key_verification method yet, if it exists. I'll let you know if I do find it.