Как функции key_derivation и key_verification реализованы в механизме шифрования 7-zip-архива?
Мне интересно, как работает восстановление пароля для файлов, защищенных паролем. And I want to know the exact flow of the 7-zip encryption mechanism.
7-zip
использует алгоритм шифрования AES-256 в режиме CBC для шифрования файлов или папок. Ключ генерируется из предоставленной пользователем парольной фразы на основе хеш-функции SHA-256. SHA-256 выполняется 219 (524 288) раз, чтобы увеличить стоимость исчерпывающего поиска. Кроме того, чтобы снизить риск атак по словарю, соль добавляется к исходной парольной фразе перед генерацией хэша.
Мой первый вопрос how does key_derivation function work to generate a 256-bit key
? Какое значение имеет IV для режима AES CBC и как оно генерируется?
Мой второй и most important question
как проверяется ключ для расшифровки 7-ZIP архива? Я имею в виду, как работает его функция key_verification?
1 ответ
Функция получения ключа находится в источнике файла 7zAes.cpp
, это называется:
void CKeyInfo::CalculateDigest()
и он создает ключ, используя собственный (довольно скучный) механизм.
Я не смог найти key_verification
Способ еще, если он существует. Я дам вам знать, если найду это.