Предположим, что я хотел бы иметь «пароль-производные байты» в качестве ключа 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-битных длинных хэшей не является опцией)
, чтобы быть здесь ясно (эхо ntoskml), ваша безопасность НИКОГДА не будет 160 бит. получение хэша плохого пароля не дает вам большей безопасности - злоумышленник может также принимать хэш каждого слова в словаре. –
@ andrewcooke: Вы правы, и я знал об этом. Я мог бы быть более точным. Я имею в виду, что SHA-1 ограничивает безопасность до 160 бит. Независимо от того, как сильный пароль, который я использую с помощью SHA-1, ограничит его безопасность максимальным * 160 бит. –
pbkdf wil дает вам столько байтов, сколько вам нужно. для чисто «образовательных целей», если у вас есть пароль с энтропией более 160 бит, вы можете сгенерировать ключ, сохраняя это, выполняя «sha1 (пароль) + sha1 (байт (0) + пароль)» и беря от него 256 бит. вы можете добавить что-либо к паролю во втором случае. хотя я должен признать, что у меня нет ссылки на это, но вы можете видеть идею из того факта, что изменение любого бита в пароле имеет 50% -ный шанс изменить любой из бит в 256 бит, независимо. –