Архив под паролем открывает имена файлов любому, у кого он есть
Мне переслали архив с документами и написали, что пароль пришлёт отдельно. Он задерживался, а я по привычке заглянул внутрь посмотреть, что там.
Он открылся. Не файлы - список файлов. Имена, размеры, даты. Пароль потребовался, только когда я попробовал вытащить один из файлов.
Проверил на своих архивах - то же самое. Так работает формат.
Что видно без пароля
Собираю тестовый архив с осмысленными именами и смотрю на него без пароля:
$ zip -P 'Passw0rd!' -r secret.zip docs
$ unzip -l secret.zip
Archive: secret.zip
Length Date Time Name
--------- ---------- ----- ----
0 2026-01-14 12:03 docs/
20000 2026-01-14 12:03 docs/Выгрузка зарплат 2026.xlsx
5 2026-01-14 12:03 docs/Договор №142 с ООО Ромашка.pdf
--------- -------
20005 3 files
Две оговорки к команде. Ключ -P кладёт пароль в историю оболочки и в список процессов - так его задают только в примерах. И zip поддерживает единственный режим шифрования - старый ZipCrypto.
Пароль при просмотре не спрашивается, потому что не нужен. В формате ZIP шифруется содержимое каждого файла по отдельности, а центральный каталог - оглавление архива - в шифруемую область не входит. Это решение формата, а не физическая необходимость: другие форматы устроены иначе.
Открытыми остаются: имена файлов и папок, размеры до и после сжатия, даты изменения, атрибуты, а в режиме ZipCrypto - ещё и контрольные суммы файлов. Это стандартное поведение, а не ошибка конкретного архиватора.
Почему этого достаточно, чтобы навредить
Возьмите список выше и представьте, что это не тест. Имя Выгрузка зарплат 2026.xlsx сообщает, что выгрузка существует, что она за 2026 год и что кто-то её пересылал. Имя Договор №142 с ООО Ромашка.pdf называет контрагента и номер договора.
В историях, которые начинаются с перехваченной переписки, ценно обычно именно это: не содержимое конкретного файла, а знание, что он есть, у кого он и как называется. Дальше запрашивают уже целенаправленно - и запрос звучит убедительно, потому что в нём правильное имя документа.
Даты и размеры дополняют картину: по ним видно, когда шла работа, насколько велика выгрузка, сколько в ней примерно записей.
AES-256 не закрывает оглавление
Первое, что приходит в голову, - включить нормальное шифрование. У ZIP есть два режима. Старый ZipCrypto держится на собственном потоковом шифре, и для него давно опубликована атака по известному открытому тексту: зная содержимое хотя бы одного файла в архиве (а это часто типовая шапка документа), содержимое остальных восстанавливают, не перебирая пароль. Второй режим - AES, и он нормальный.
Ставлю AES-256 и смотрю снова:
$ 7z a -tzip -p'Passw0rd!' -mem=AES256 secretaes.zip docs
$ unzip -l secretaes.zip
Archive: secretaes.zip
Length Date Time Name
--------- ---------- ----- ----
0 2026-01-14 12:03 docs/
20000 2026-01-14 12:03 docs/Выгрузка зарплат 2026.xlsx
5 2026-01-14 12:03 docs/Договор №142 с ООО Ромашка.pdf
--------- -------
20005 3 files
Ничего не изменилось, и меняться не должно было: стойкость алгоритма и открытость оглавления - это про разные части архива. AES отвечает за содержимое файлов, оглавления он не касается.
Одно отличие всё же есть, и его видно в подробном режиме: при AES контрольные суммы файлов обнуляются, тогда как при ZipCrypto они лежат в каталоге открытыми.
$ unzip -v secret.zip | grep xlsx # ZipCrypto
20000 Stored 20000 0% ... 1e950a86 docs/Выгрузка зарплат 2026.xlsx
$ unzip -v secretaes.zip | grep xlsx # AES-256
20000 Unk:099 20016 -0% ... 00000000 docs/Выгрузка зарплат 2026.xlsx
Это единственное, что даёт смена режима для оглавления. Имена и размеры на месте.
Здесь я и ошибся в первый раз, когда решал эту задачу: думал, что дело в устаревшем шифровании и переключение режима всё исправит.
Что действительно закрывает оглавление
Шифрование заголовков. В формате 7z оно включается отдельным ключом:
$ 7z a -p'Passw0rd!' -mhe=on secret7z.7z docs
$ 7z l secret7z.7z
Listing archive: secret7z.7z
Enter password (will not be echoed):
Пароль запрашивается при попытке посмотреть список. Без него не видно ни имён, ни количества файлов.
Снаружи остаются размер самого архива и факт его существования. Это неустранимо, и по размеру кое-что оценить можно - но это несопоставимо с полным оглавлением.
Ключ -mhe=on работает только для формата 7z. Для ZIP такого режима нет, и это ограничение самого ZIP, а не архиватора. Шифрование заголовков есть и в RAR5 - ключом -hp вместо -p; у получателей распаковщик для него встречается чаще, чем для 7z, но создать такой архив бесплатными средствами не выйдет.
Ограничения и цена решения
Совместимость, и здесь есть неприятный сюрприз. Обычный ZIP открывается везде без установки чего-либо. А вот AES-ZIP, который я только что рекомендовал вместо ZipCrypto, встроенными средствами не распаковывается: классический unzip при верном пароле отвечает need PK compat. v5.1 (can do v4.6) и пропускает файлы, встроенные распаковщики Windows и macOS ведут себя так же - список показывают, а извлечь не могут.
То есть выбор идёт не между «удобным AES-ZIP» и «неудобным 7z»: архиватор получателю придётся ставить в обоих случаях. А раз так, разумнее сразу брать формат, который закрывает и оглавление.
Пароль остаётся слабым звеном. Стойкость AES ничего не значит, если пароль короткий: перебор идёт по паролю, а не по ключу. И пароль, отправленный следующим письмом в ту же переписку, не защищает ни от чего - тот, кто читает почту, читает оба письма. Второй канал - это другой канал, а не другое письмо.
Архив под паролем - плохой способ передачи в принципе. Содержимое такого архива почтовому шлюзу недоступно, и он часто режет вложение целиком. Ссылка на файл в хранилище с доступом по списку лучше по всем параметрам: доступ отзывается, видно, кто открывал, и файл не расходится копиями по почтовым ящикам.
И самое неприятное. Имена файлов утекают не только через архив: они видны в теме письма, в теле, в уведомлениях хранилища, в списке недавних документов. Закрыв оглавление архива, вы закрыли один канал из нескольких.
Что делать прямо сейчас
Если архив под паролем всё-таки нужен - убрать из имён файлов внутри него всё, что имеет смысл само по себе: названия контрагентов, номера договоров, суммы, слова вроде «зарплаты» и «паспорта». Пусть внутри лежат doc-01.pdf и doc-02.xlsx, а что это такое - написано в теле письма. Привычка ничего не стоит и убирает большую часть проблемы независимо от формата.
Если получатель может поставить архиватор - 7z с -mhe=on.
Если данные чувствительные и передаются регулярно - не архив, а хранилище с управляемым доступом.
Что посмотреть у себя
Взять любой запароленный архив, который вы отправляли за последний месяц, и выполнить unzip -l. Посмотреть, что узнаёт человек, у которого нет пароля.
Проверить, чем формируются архивы в автоматических процессах: выгрузки, резервные копии, отправка отчётов. Имена там обычно содержательные, потому что их писали для себя.
Посмотреть, как передаётся пароль. Если ответ «вторым письмом» - это не второй канал.
Проверить, что делает ваш почтовый шлюз с запароленными архивами. Во многих компаниях он их удаляет, и тогда весь процесс держится на том, что кто-то пересылает файлы в обход почты.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.