2013-11-08 8 views
2

Предположим, что я хотел бы иметь «пароль-производные байты» в качестве ключа AES. Например, у меня есть пароль «topsecret», я вычисляю хэш SHA-1 для него (160 бит), и я хочу передать эти байты в качестве ключа для AES-128.Использование хэша SHA-1 в качестве ключа AES

Должен ли я просто усекать после 128 бит или сделать что-то складное? Как насчет AES-256? Должен ли я повторять байты, pad с 0 или выполнять некоторую «разворачивающуюся» операцию?

Я знаю, что в более позднем случае безопасность остается на 160 бит, потому что пул 256-битных паролей сокращен до 2^160 возможных комбинаций, но я просто пытаюсь преодолеть технические ограничения (без AES-160) ,

Какая теория говорит? (Нет, использование MD5 для 128-битных и SHA-256 для 256-битных длинных хэшей не является опцией)

+0

, чтобы быть здесь ясно (эхо ntoskml), ваша безопасность НИКОГДА не будет 160 бит. получение хэша плохого пароля не дает вам большей безопасности - злоумышленник может также принимать хэш каждого слова в словаре. –

+0

@ andrewcooke: Вы правы, и я знал об этом. Я мог бы быть более точным. Я имею в виду, что SHA-1 ограничивает безопасность до 160 бит. Независимо от того, как сильный пароль, который я использую с помощью SHA-1, ограничит его безопасность максимальным * 160 бит. –

+0

pbkdf wil дает вам столько байтов, сколько вам нужно. для чисто «образовательных целей», если у вас есть пароль с энтропией более 160 бит, вы можете сгенерировать ключ, сохраняя это, выполняя «sha1 (пароль) + sha1 (байт (0) + пароль)» и беря от него 256 бит. вы можете добавить что-либо к паролю во втором случае. хотя я должен признать, что у меня нет ссылки на это, но вы можете видеть идею из того факта, что изменение любого бита в пароле имеет 50% -ный шанс изменить любой из бит в 256 бит, независимо. –

ответ

5

Типичный пароль имеет всего несколько десятков бит энтропии и работает с помощью функции хеширования не добавляйте к ней никакой энтропии. Поэтому такие клавиши легко атакуются с помощью словаря или грубой силы.

Наиболее распространенное решение - сделать функцию хеша очень медленной. Алгоритмы, разработанные для этого, называются «основанные на пароле функции вывода ключей». PBKDF2 и bcrypt являются одними из самых популярных.

3

Теория говорит, что это не имеет значения. Вы можете заполнить 0, вы можете прокручивать, повторяя и т. Д. Количество энтропии в вашем результате одно и то же - одинаково сложно грубой силой.

Что касается усечения его до 128 бит, не имеет значения, как вы его усекаете - все байты хеш-выхода обычно считаются одинаково случайными и некоррелированными. Нет никакой «энтропийной» стороны или чего-то еще.

Итак, технически, действуйте так, как вы, вы остаетесь таким же сильным, как ваш пароль.

+0

Как ответ полностью верен, другой дает подсказку о PBKDF2, и я должен выбрать один. Поэтому я принимаю ntoskml. –

Смежные вопросы