Шифрование openssl aes gcm с аутентификацией TAG; командная строка

Я пытаюсь зашифровать файл в режиме AES-GCM с помощью 'openssl' th/ командной строки

openssl enc -aes-256-gcm -p -iv 000000000000000000000000 -K 00000000000000000000000000000000000000000000000000000000000000 -nosalt -in file.raw -out file.enc`

Шифрование работает, но я не смог найти способ получить итоговый тег GCM.Есть ли способ получить это?

В этом документе ( ссылка) я обнаружил "Обратите внимание, что теперь даже можно использовать режим аутентификации, такой как CCM или GCM", но до сих пор нет информации, как это сделать.

Или есть ли какой-нибудь другой стандартный инструмент macos, который мог бы сделать то же самое?


PS: мне интересно делать это с помощью распространенных инструментов командной строки, это не вопрос написания собственной утилиты

3 ответа

Решение

Примечание: как указал пользователь dave_thompson_085 ниже, результаты в оставшейся части ответа не относятся к текущим версиям OpenSSL. Я случайно использовал LibreSSL openssl, Чтение текущей версии документации OpenSSL для enc инструмент, он содержит следующее предложение

Программа enc не поддерживает аутентифицированные режимы шифрования, такие как CCM и GCM. Утилита не сохраняет и не извлекает тег аутентификации.

Это ответ на ваш вопрос, я полагаю - в зависимости от того, какую версию OpenSSL вы используете.


Оригинальный ответ, полученный с помощью LibreSSL openssl который поставляется с macOS:

Тег GCM не сохраняется в выходном файле при использовании openssl enc приложение. Вы можете видеть это из следующей строки:

$ echo -n 'abcdefghijklmnop' | openssl enc -aes-256-gcm -K 0 -iv 0  | hexdump -C
00000000  af c5 23 59 28 06 0c 06  6e 24 ae bf d7 9d f2 68  |..#Y(...n$.....h|
00000010

Размер вывода точно такой же, как и размер ввода, нигде нет байтов тега.

Вы также можете увидеть это, проверив реализацию enc.c. Это не делает никаких EVP_CIPHER_CTX_ctrl() позвоните, чтобы разобраться с тегом GCM, как объяснено на странице OpenSSL Wiki в разделе Аутентифицированное шифрование и дешифрование EVP. Другими словами, данные тега теряются.

При расшифровке с aes-256-gcm Сам инструмент также игнорирует отсутствие тега. Сообщение bad decrypt испускается stderr но это, кажется, исходит из другого уровня, чем приложение, которое радостно печатает результат:

$ echo -n 'abcdefghijklmnop' | openssl enc -aes-256-gcm -K 0 -iv 0  | openssl enc -aes-256-gcm -K 0 -iv 0 -d
bad decrypt
abcdefghijklmnop

Давно это было опубликовано, но для других:

Когда дело доходит до "общедоступных инструментов командной строки", AES GCM недоступен. Наиболее близким к нему, вероятно, является AESCRYPT, который имеет преимущество в виде документированного формата файла и реализаций на нескольких языках. Подробности см. На сайте aescrypt.com.

Просто из любопытства, как вам удалось заставить работать GCM?

Согласно руководства страницеOpenSSL в ПОДДЕРЖИВАЕМЫХ ШИФРАХ:

Программа enc не поддерживает аутентифицированные режимы шифрования, такие как CCM и GCM, и не будет поддерживать такие режимы в будущем.

Другие вопросы по тегам