Как лучше всего зашифровать файл с помощью openssl и пароля?

Я использую команду для шифрования и дешифрования файлов на основе пароля:

openssl aes-256-cbc -a -salt -in secrets.txt -out secrets.txt.enc --pass pass:mypassword

а также

openssl aes-256-cbc -d -a -in secrets.txt.enc -out secrets.txt.new -pass pass:mypassword

Кто-то упомянул, что это может быть подвержено атакам методом грубой силы (чтобы попытаться расшифровать файл с помощью пароля).

Есть ли более безопасный / лучший способ зашифровать файл с помощью пароля, чем этот? Был также упомянут параметр -pbkdf2, но я не могу найти много на нем.

У меня сложилось впечатление, что AES-256 с солью - действительно хороший выбор для шифрования файла паролем.

Если пароль длинный и очень сложный, это также поможет ситуации?

1 ответ

Решение

Лучший вариант? Не используйте openssl, вместо этого используйте gpg

Видимо ваша команда использует enc команда (хотя man-страница openssl даже не упоминает aes-256-cbc на всех, и openssl help выводит в stderr, так что просто отправить его на меньший объем - это рутина, также, к вашему сведению, у него нет документов -v особенность), и это оставляет желать лучшего, см. мой другой ответ для более подробной информации, но они в основном:

  • Нестандартный формат шифрования.
  • Нет указаний на алгоритм шифрования; Вы должны следить за этим самостоятельно.
  • Процесс, с помощью которого пароль и соль превращаются в ключ, а IV не документируется, но анализ исходного кода показывает, что он вызывает специфичную для OpenSSL функцию EVP_BytesToKey(), которая использует специальную функцию вывода ключа с некоторым повторным хэшированием, Это нестандартная и недостаточно проверенная конструкция (!), Которая использует хеш-функцию MD5 с сомнительной репутацией (!!); эта функция может быть изменена в командной строке с недокументированным -md флаг (!!!); "количество итераций" устанавливается enc команда 1 и не может быть изменена (!!!!). Это означает, что первые 16 байтов ключа будут равны MD5(пароль || соль), и все.

    Это довольно слабый! Любой, кто знает, как писать код на ПК, может попытаться взломать такую ​​схему и сможет "пробовать" несколько десятков миллионов потенциальных паролей в секунду (сотни миллионов могут быть получены с помощью графического процессора). Если вы используете "openssl enc", убедитесь, что ваш пароль имеет очень высокую энтропию! (т.е. выше, чем обычно рекомендуется; стремитесь к 80 битам, как минимум). Или, желательно, не используйте его вообще; вместо этого перейдите к чему-то более надежному ( GnuPG при симметричном шифровании пароля использует более сильный KDF со многими итерациями базовой хэш-функции).

У GPG десятилетия безопасного и проверенного использования, все простые ошибки были исключены / исправлены, и, если их правильно использовать, они могут поставить под удар крупную мировую сверхдержаву.

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