Может ли ZIP-архив иметь 2 пароля? Почему это?
Защищенные паролем ZIP-архивы — это популярный метод безопасного сжатия и обмена файлами, начиная от конфиденциальных данных и заканчивая вредоносным кодом.
Однако знаете ли вы, что ZIP-файл может иметь до 2 правильных паролей, и оба они дают одинаковый результат при распаковке ZIP-файла?
Может ли ZIP-файл иметь два пароля?
Арсений Шароглазов, исследователь кибербезопасности в Positive Technologies, на выходных поделился, казалось бы, простым, но волшебным экспериментом. В нем он создал защищенный паролем ZIP-файл с именем x.zip.
Пароль, который Шароглазов выбрал для шифрования ZIP-файла, был игрой слов в хите Рика Эстли 1987 года Never Gonna Give You Up, который стал популярным мемом в мире технологий:
Nev1r-G0nna-G2ve-Y8u-Up-N5v1r-G1nna-Let-Y4u-D1wn-N8v4r-G5nna-D0sert-You
Но исследователь также доказал, что при извлечении файла x.zip с совершенно другим паролем он не столкнулся с какими-либо ошибками.
На самом деле, использование другого пароля позволяет успешно распаковать ZIP-файл, исходное содержимое останется нетронутым:
pkH8a0AqNbHcdw8GrmSp
Как это произошло?
Как Шароглазов может использовать два пароля для ZIP-файла? Пользователь Twitter Unblvr объясняет: При создании ZIP-файла с паролем в режиме AES-256 формат ZIP использует алгоритм PBKDF2 и хеширует введенный пользователем пароль, если пароль слишком длинный. . Пароли длиной более 64 байт (символов) будут слишком длинными.
Затем вместо выбранного пользователем пароля (в данном случае «Nev1r-G0nna-G2ve-.») вновь вычисленный хэш становится фактическим паролем файла.
Когда пользователь распаковывает файл и вводит пароль длиннее 64 байт («Nev1r-G0nna-G2ve-.»), то, что пользователь вводит снова, будет хешировано приложением ZIP и снова сравнено с правильным паролем (теперь пароль хеш). Результаты сравнения совпадают, поэтому извлечение файла прошло успешно.
Используемый в данном случае альтернативный пароль («pkH8a0AqNbHcdw8GrmSp») на самом деле представляет собой ASCII-представление хэша SHA-1 длинного пароля («Nev1r-G0nna-G2ve-.»).
Контрольная сумма SHA-1 «Nev1r-G0nna-G2ve-.» = 706b4838613041714e6248636773847726d5370.
Эта контрольная сумма после преобразования в ASCII даст: pkH8a0AqNbHcdw8GrmSp.
Однако следует иметь в виду, что при шифровании или расшифровке файла хэширование происходит только в том случае, если длина пароля превышает 64 символа.
Другими словами, более короткие пароли не будут хэшироваться ни на этапе сжатия, ни на этапе распаковки ZIP-файла.
Однако следует отметить, что ASCII-представление хэша SHA-1 длинного пароля не всегда представляет собой строку символов и цифр. Иногда он создает бессмысленный набор байтов, который нельзя ввести в поле пароля.
Самому Шароглазову также пришлось использовать инструмент для восстановления пароля с открытым исходным кодом hashcat с небольшой модификацией, чтобы найти пароль с разумным представлением ASCII. Он пробовал варианты «Nev0r, Nev1r, Nev2r». пока не придумал чистый пароль, состоящий только из букв и цифр (pkH8a0AqNbHcdw8GrmSp).
Для обычных пользователей использование ZIP-файла с паролем гарантированно безопасно. Тем не менее, этот тест дает вам представление об одной из тайн, связанных с зашифрованными ZIP-файлами, а также о том, как получить 2 пароля для ваших ZIP-файлов.