Как лучше всего зашифровать файл с помощью 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 десятилетия безопасного и проверенного использования, все простые ошибки были исключены / исправлены, и, если их правильно использовать, они могут поставить под удар крупную мировую сверхдержаву.