Я начинаю со слабого пароля (например, 8 строчных символов) и файла. Мне нужно зашифровать этот файл с помощью этого пароля. Результат должен быть защищен от известных атак.
Подход 1: я мог бы хэшировать пароль с помощью SHA-256, а затем использовать полученный хэш и файл в качестве входных данных для AES-256, давая мне зашифрованный файл. Я понимаю, что и SHA-256, и AES-256 работают очень быстро. Разве это не сделало бы файл уязвимым для атаки методом перебора?
Например, можно было бы взять радужную таблицу предварительно вычисленных хэшей SHA-256 и, предполагая, что это действительно маленький файл и действительно слабый пароль, попытаться расшифровать AES-256, используя каждый хеш из этой таблицы за разумное время. (несколько месяцев со специализированным оборудованием.)
Подход 2: Используйте bcrypt. Если я правильно понимаю, bcrypt лучше подходит для шифрования файлов, чем SHA-256 + AES-256, поскольку его схема генерации ключей имеет рабочий фактор, приводящий к более сильному ключу. Или я ошибаюсь?
Реализации Ruby и Python (оболочки?), Которые, как я видел, сосредоточены на использовании bcrypt в качестве схемы хеширования для паролей, а не шифра как такового. Могу ли я даже использовать bcrypt для хеширования слабого прохода И зашифровать файл «за один шаг»?
Подход 3: Используйте bcrypt для хеширования прохода, используйте этот хеш и файл в качестве входных данных в AES-256, давая мне зашифрованный файл . Это решает проблему "слишком быстрый ключ для генерации". (Предполагая, что это проблема.) Однако хэши bcrypt имеют длину 448 бит, а AES-256 требует 256-битного ключа. Наивное решение - просто отбросить конечные биты хэша и использовать их в качестве ключа для AES-256. Я бы НЕ пошел по этому пути, потому что я недостаточно знаю о криптографии, чтобы знать, каковы будут последствия.
РЕДАКТИРОВАТЬ: Я не могу использовать пропуск, так как он предназначен для автономного приложения. т.е. нет разумного места для хранения соли. Я могу солить пропуск и хранить его в незашифрованном виде вместе с зашифрованным файлом. Соли почти по своей сути являются общедоступными / видимыми, если говорят, что база данных взломана. Назначение соли - предотвратить атаку радужного стола. Спасибо Немо, ниже.