Как исправить «ПРЕДУПРЕЖДЕНИЕ: сообщение не защищено целостностью» при использовании симметричного шифрования GPG?

45

Я зашифровал файл с помощью симметричного шифрования следующим образом:

gpg --symmetric myfile

что приводит к файлу myfile.gpg.

Хорошо. Теперь давайте снова расшифруем файл:

gpg -o myfile --decrypt myfile.gpg

У меня спрашивают пароль, который я надел, и затем я вижу

gpg: CAST5 encrypted data
gpg: encrypted with 1 passphrase
gpg: WARNING: message was not integrity protected

Я не уверен насчет первой и последней строки там.

  • Что такое шифр CAST5 и является ли он безопасным? Я знаю 3DES и AES, и я знаю, что они безопасны.
  • Почему это не защищено для целостности?
  • И более того, как мне это исправить?
gertvdijk
источник
Кстати, вы можете просто gpg -c myfileзашифровать и gpg myfile.gpgрасшифровать, вывод будет расшифрован myfileпо умолчанию.
cprn
1
@CyprianGuerra gpg myfile.gpgприведет к тому, что расшифрованный вывод будет отправлен на стандартный вывод моей системы ...
gertvdijk
Интересный. У меня это по умолчанию ...
cprn
Я скачал графический интерфейс отсюда и расшифровал файл, используя его. Это сработало! pgptool.github.io
Ифтихар Ахмад Дар

Ответы:

69

Задний план

CAST-5 - это более старый алгоритм шифрования, используемый GnuPG, потому что AES еще не существовал в то время, когда GnuPG был изначально создан как исходный . Он не используется широко (кроме GnuPG по причинам совместимости).

Это WARNING: message was not integrity protectedпотому, что эта функция не включена по умолчанию во время шифрования. Если это было включено, GnuPG мог бы сказать, был ли файл изменен при передаче.

Обновление: в современных версиях GnuPG, поставляемых с Ubuntu / Debian, теперь MDC включен по умолчанию, и вы больше никогда не увидите это сообщение для всего, что подписано этими новыми версиями.

Решения

Чтобы использовать более сильный AES-256, вы должны указать его либо в командной строке, либо в файле конфигурации.

  • Командная строка: добавьте --cipher-algo AES256параметр, чтобы полная строка для шифрования стала

    gpg -o myfile.gpg --cipher-algo AES256 --symmetric myfile
    
  • Файл конфигурации (рекомендуется): добавьте следующую строку в ~/.gnupg/gpg.confфайл конфигурации.

    cipher-algo AES256
    

    Я рекомендую этот подход, потому что он будет использоваться для всех будущих операций GPG с этой учетной записью пользователя.

Пользователь ничего не сможет изменить для расшифровки файла - GnuPG обнаружит это автоматически.

Обратите внимание, что при использовании шифра AES-256 сообщение автоматически защищается для обеспечения целостности. Чтобы вручную включить защиту целостности на других шифрах, для которых она не включена (например, CAST-5), добавьте --force-mdcпараметр при шифровании.

Еще лучше: подписывайтесь!

Еще лучшим подходом было бы подписать ваши файлы с помощью пары ключей (если она у вас есть). Просто добавьте --signопцию к команде шифрования, например так:

gpg -o myfile.gpg --cipher-algo AES256 --sign --symmetric myfile

Это не только подтвердит целостность файла, но и позволит получателю файла проверить источник. Любые изменения в файле могут привести к сбою проверки подписи.

gertvdijk
источник
Разве мне не нужен сертификат для подписи?
Билал Фазлани
@bilalfazlani, чтобы подписать, вам понадобится пара ключей GnuPG, да. Не нужно обнародовать это, если вы не хотите. Просто поделитесь открытым ключом с коллегами, с которыми вы делитесь зашифрованными файлами, и они должны проверить отпечаток ключа у вас.
gertvdijk
Спасибо за подробный ответ. Можете ли вы объяснить больше о том, как использовать пару ключей?
Бен-Набий Деруш
«сообщение не защищено целостностью» происходит на стороне получателя, и вы указываете, как это исправить на стороне отправителя. Вопрос в том, как проигнорировать проблему на принимающей стороне, чтобы иметь возможность расшифровать старые сообщения (в enigmail)
Enson
@ ben-NabiyDerush Эти две статьи могут прояснить ваши вопросы о том, как (и почему) использовать открытую и закрытую пару ключей. Криптография с открытым ключом . Сеть доверия
jpaugh