Понимание шифрования паролей Liferay

О шифровании паролей в liferay Я выяснил, что liferay по умолчанию использует алгоритм PBKDF2WithHmacSHA1/160/128000, который генерирует 160-битные хэши за 128 000 раундов.

И я могу использовать следующие типы, применив их в моем файле portal-ext.properties.

#passwords.encryption.algorithm=BCRYPT/10
#passwords.encryption.algorithm=MD2
#passwords.encryption.algorithm=MD5
#passwords.encryption.algorithm=NONE
#passwords.encryption.algorithm=PBKDF2WithHmacSHA1/160/128000
#passwords.encryption.algorithm=SHA
#passwords.encryption.algorithm=SHA-256
#passwords.encryption.algorithm=SHA-384
#passwords.encryption.algorithm=SSHA
#passwords.encryption.algorithm=UFC-CRYPT

с типом по умолчанию "PBKDF2WithHmacSHA1/160/128000" я обнаружил, что каждый пароль генерируется, начиная с префикса "AAAAoAAB9A", например: "AAAAoAAB9ACpjEM1K54bHX0UMY+3AgeAX3n50ZGERRK6MpxC"

Мне нужно знать, почему каждый пароль начинается с этого префикса при использовании упомянутого алгоритма.

Используя другой алгоритм "BCRYPT/10", я обнаружил, что мои пароли начинаются с "$2a$10", например: "$2a$10$Xyx.o1kv1mIr8rtpr9sxwOP6AC9I/u7tAIlyfrzp8Vlqcek/CGdQ"

Каким-то образом я понял, что «10» в «$2a$10» пароль хешируется солью с 10 раундами. это правильно или я ошибаюсь?


person fzkhan    schedule 11.08.2016    source источник
comment
bcrypt использует не линейное количество раундов/итераций, а скорее логарифмический коэффициент стоимости. Кроме того, у liferay открытый исходный код, поэтому вы можете просто заглянуть в исходный код.   -  person Artjom B.    schedule 11.08.2016
comment
ты прав; bcrypt (и в основном все KDF) должны знать параметры перед запуском, чтобы они знали, когда остановиться и сравнить. если это значение является постоянным в вашей системе, как в подпрограмме pbkdf2, вы можете удалить эту информацию и исправить ее позже, но зачем беспокоиться?   -  person dandavis    schedule 11.08.2016
comment
@efxeekay Вы задаете более одного вопроса в одном сообщении. Пожалуйста, извлеките свой второй вопрос в новый пост — это поможет людям сосредоточиться на одной проблеме за раз.   -  person Tobias Liefke    schedule 12.08.2016
comment
@ArtjomB помог изучить код Liferay   -  person fzkhan    schedule 12.08.2016


Ответы (2)


Liferay по умолчанию использует PBKDF2WithHmacSHA1/160/128000, зашифрованный пароль представляет собой комбинацию байтов "размера ключа, количества раундов, соли и байтов секретного ключа", помещаемых в порядок в байтовом буфере, а затем кодировку Base64 поверх комбинации.

Таким образом, причина, по которой в: "AAAAoAAB9ACpjEM1K54bHX0UMY+3AgeAX3n50ZGERRK6MpxC" присутствует префикс "AAAAoAAB9A", заключается в том, что это комбинация размера ключа и количества раундов (т.е. 160/128000) байтового буфера, который целиком кодируется в Base64. Изменяя размер ключа и количество раундов, вы получите другой префикс.

person fzkhan    schedule 12.08.2016

Возьмем ваш пример: "AAAAoAAB9ACpjEM1K54bHX0UMY+3AgeAX3n50ZGERRK6MpxC"

Закодируйте его из base64 в шестнадцатеричный: "000000a0 0001f400 a98c4335 2b9e1b1d 7d14318f b7020780 5f79f9d1 91844512 ba329c42"

Закодируйте 000000a0 из шестнадцатеричного в десятичный, вы получите 160, как размер ключа.

Закодируйте 0001f400 из шестнадцатеричного в десятичный, вы получите 128000, как итерации.

a98c4335 2b9e1b1d - ваша соль.

7d14318f b7020780 5f79f9d1 91844512 ba329c42 — хешированный пароль.

person hatim bennis    schedule 14.03.2019