Рейтинг:1

Чем WinZip AES отличается от обычного AES

флаг co

Я пытаюсь написать функцию в dart, которая может расшифровать файл внутри zip, зашифрованного с использованием стандарта WinZip AES-256. Документацию я нашел здесь: https://www.winzip.com/en/support/aes-шифрование/. Используя 7-Zip, я смог создать файл примера в соответствии со стандартом. Я могу извлечь ключ шифрования и зашифрованный текст в соответствии со спецификацией:

Ключ шифрования: 9f2df21ad65ff7f33b817c5686042f1dc038f0290cbe0189f2ee2bb610bf033d
зашифрованный текст: f88a3bd439b4aef91ebaa9
ожидается: 68656c6c6f20776f726c64 (привет, мир)
вывод: c5e7de168b7dd6f3b157d4

Любой инструмент или пакет, который я использую, не может расшифровать его в нужное сообщение. Итак, я посмотрел на библиотеку nodejs, которая использовала специальную реализацию для расшифровки, которая, похоже, не совсем идентична стандартному AES. Это называется конкретной реализацией Gladmann. как вы можете видеть здесь: https://github.com/gildas-lormeau/zip.js/blob/master/lib/core/codecs/sjcl.js#L590

Я загрузил этот пакет nodejs и смог подтвердить, что мои входные данные верны, поэтому мой вопрос: почему существует несколько реализаций AES? И как лучше всего реализовать это в дартс?

Я мог бы попытаться воспроизвести ту же логику в дартс, что логично, но сложно. Можно ли использовать существующую библиотеку и внести небольшое изменение, чтобы заставить ее работать? Если да, то что это будет за изменение?

К сожалению, документация в Интернете по разделению WinZip AES скудна. Единственным другим выводом, который я смог найти, была реализация самого Брайана Гладмана: https://github.com/BrianGladman/аес но ему не хватает документации, и он немного выше моих знаний.

Спасибо за помощь :)

Swashbuckler avatar
флаг mc
Еще одна вещь, которую следует учитывать: более старые версии 7-Zip использовали только 8-байтовый IV. Если вы используете более старую версию, которая может вызвать некоторые проблемы, см. https://threadreaderapp.com/thread/1087848040583626753.html.
Рейтинг:1
флаг in

Я предполагаю, что вы уже выполнили PBKDF2 с определенными статическими 1000 итераций (что, э-э, на нижнем уровне безопасности), и что два байта проверки ключа были проверены.

Сам AES ничем не отличается, и кажется, что Winzip не использует ничего особенного. Единственное, что немного странно, это то, что счетчик имеет обратный порядок байтов. Это все C-код, поэтому порядок следования байтов определяется платформой, и в основном это означает обратный порядок байтов.

Ничто не запрещает использовать счетчик с прямым порядком байтов для режима CTR, но в 99% случаев это будет обратный порядок байтов. Возможно, вам придется реализовать CTR-LE самостоятельно поверх шифра AES (или AES-ECB, что-то вроде того же).

Также обратите внимание, что стандарт ZIP определяет зашифрованный заголовок, поэтому начало расшифрованного открытого текста не будет содержимым файла.

Точно так же тег аутентификации — это просто HMAC-SHA1-80 поверх зашифрованного текста. HMAC-SHA1-80 — это просто HMAC-SHA-1, из которых используются только 80 бит, то есть половина выходного размера HMAC-SHA-1, обычно крайние левые биты.

Если вы застряли, я бы внимательно посмотрел на код, чтобы проверить, нет ли у вас каких-либо значений в обратном направлении (например, может быть, он использует самые правые байты HMAC, маловероятно, но да).

Maarten Bodewes avatar
флаг in
Тот факт, что WinZip 11 и более поздние версии хранят CRC32 поверх открытого текста для любого файла > 20 байт, просто берет верх. «Потому что для некоторых очень маленьких файлов CRC можно использовать для определения точного содержимого файла». Нет, вы *идиоты*, вы можете с высокой уверенностью определить, что файл содержит определенные данные, независимо от размера. Если вы хотите что-либо зашифровать **, не используйте для этого WinZip**.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.