Шифрование файла со слабым паролем, bcrypt или SHA-256 + AES-256?

Я начинаю со слабого пароля (например, 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. Я бы НЕ пошел по этому пути, потому что я недостаточно знаю о криптографии, чтобы знать, каковы будут последствия.

РЕДАКТИРОВАТЬ: Я не могу использовать пропуск, так как он предназначен для автономного приложения. т.е. нет разумного места для хранения соли. Я могу солить пропуск и хранить его в незашифрованном виде вместе с зашифрованным файлом. Соли почти по своей сути являются общедоступными / видимыми, если говорят, что база данных взломана. Назначение соли - предотвратить атаку радужного стола. Спасибо Немо, ниже.

6
задан Nick Zalutskiy 3 June 2011 в 15:51
поделиться