Рейтинг:0

Использование AES.MODE_EAX для шифрования AES

флаг ga

В настоящее время я пытаюсь выполнить шифрование AES в Python для файла большего размера для целей моделирования. На данный момент я пытаюсь использовать AES.MODE_EAX, как указано в документации для AES:

https://pycryptodome.readthedocs.io/en/latest/src/cipher/aes.html

Я хотел проверить, каким будет правильный подход к шифрованию файла.

На данный момент я делю файл на 16-байтовые фрагменты и использую тот же 128-битный ключ для создания шифра, чтобы зашифровать каждый фрагмент. Я запускаю следующие команды для каждого фрагмента по мере необходимости для шифрования и выполняю анализ зашифрованных результатов:

шифр = AES.новый (ключ, AES.MODE_EAX)
одноразовый номер = шифр.нонс
зашифрованный текст, тег = cipher.encrypt_and_digest(data_chunk)

Я не уверен, что мое понимание является полным. Будет ли это правильным подходом к шифрованию данных через AES? Или есть другие режимы или подходы с MODE_EAX (например, использование данных полного файла?), которые я должен рассмотреть в этом случае?

SAI Peregrinus avatar
флаг si
Есть ли особая причина, по которой вы используете pycryptodome? Аналогично, почему EAX? Это не часто используемый режим. Он медленнее, чем OCB или GCM, и не решает проблемы повторного использования nonce, как это делает SIV. Я хочу понять ограничения, с которыми вы работаете, потому что мой стандартный ответ на вопрос о правильном способе шифрования файла — «использовать возраст (age-encryption.org)».
Maarten Bodewes avatar
флаг in
Я голосую за то, чтобы закрыть этот вопрос, потому что этот вопрос был отправлен в SO, где он принадлежит.
Рейтинг:2
флаг ru

Вам не нужно разбивать данные на блоки по 16 байт и шифровать каждый блок по отдельности. Метод encrypt_and_digest справится со всем этим разделением за вас. Вместо этого вы должны вызывать метод для полного массива данных.

Шифруя каждый блок отдельно, вы создаете одноразовый номер и тег для каждого блока, а не один одноразовый номер и тег для всех ваших данных. Даже для данных среднего размера это примерно утроит размер вашей криптограммы. Единственное реальное преимущество создания одного тега на блок состоит в том, что, если целостность сообщения нарушена, вы можете сузить изменение до того блока, в котором оно произошло.

Как отмечено в комментариях, AES.GCM обычно предпочтительнее AES.EAX в современных реализациях.

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

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