Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Вопрос по поводу pbkdf2 (https://javascript.ru/forum/offtopic/40823-vopros-po-povodu-pbkdf2.html)

kobezzza 21.08.2013 11:49

Вопрос по поводу pbkdf2
 
Не оч силён в криптографии, так что ищу совета у знающих) Какое оптимальное количество итераций и длину ключа нужно указывать? Сейчас использую: длина ключа 512, 25 тысяч итераций.

И ещё вопрос: нужно ли результат функции пропускать дополнительно через хеш функцию?

kobezzza 21.08.2013 17:50

Цитата:

Сообщение от Дзен-трансгуманист (Сообщение 268612)
kobezzza,
Тоже не силен, но... куда и зачем ты его используешь?

Для генерации ключа на основе пароля и соли, т.к. пишут, что простое вычисление хеша от пароля - это редкостный отстой и нужно юзать эту функцию (благо она входит в стандартную библиотеку ноды).

Цитата:

Сообщение от Дзен-трансгуманист (Сообщение 268612)
Через хеш-функцию пропустить можно, если ее длина не меньше, чем длина входа (ключа pbkdf2), иначе будет возрастать вероятность практически непредсказуемых вторичных коллизий.

Спасибо!

kobezzza 21.08.2013 18:50

Цитата:

Сообщение от Дзен-трансгуманист (Сообщение 268624)
То есть для дескрипторов безопасности на сервере. А какова вероятность, что их начнут воровать? Это для открытой передачи данных и особо уязвимых хранилищ актуально усложнять алгоритм, а для закрытой от посторонних глаз БД - 25к итераций... Не знаю, но просто потестируй, во сколько миллисекунд обойдется серверу каждая авторизация или изменение пароля.

Не от того, что начнут воровать, а чтобы брутфорсом нельзя было подобрать. Эта функция не должна работать быстро (в ноде она имеет асинхронный интерфейс, т.е. поток лочится не будет), но насчёт итераций я не уверен, вот поэтому и спрашиваю. Вроде как минимум это 1к итераций. Но наверно стоит понизить, пускай будет 10к:) А по поводу длины ключа никто ничего не знает?

UPD: почитав ещё пару статей по криптографии в итоге понизил количество итераций до одной тысячи :)

kobezzza 21.08.2013 19:22

Цитата:

Сообщение от Дзен-трансгуманист (Сообщение 268637)
kobezzza,
Слушай, а почему бы тебе не задать все эти вопросы на хабре? Там уж точняк аудитория знающая есть. :)

Да, наверн так и надо сделать, не подумал:)

kobezzza 21.08.2013 19:39

http://habrahabr.ru/qa/45504/ :)

kobezzza 21.08.2013 20:56

Цитата:

Сообщение от Дзен-трансгуманист (Сообщение 268655)
Вроде бы его можно сразу с buffer'ами юзать: function pbkdf2

В противном случае, кодировку salt надо 'binary' ставить, а не 'hex', судя по всему.

Угу, вот плохо, что в доке у них не пишут формат входных данных. Пасиб за наводку:)

Но с другой стороны, судя по комментам в коде - это костыль для совместимости со старыми версиями и лучше передавать методу строки :)

kobezzza 21.08.2013 21:21

Цитата:

Сообщение от Дзен-трансгуманист (Сообщение 268670)
То есть, наоборот, старые программы использовали строки, теперь переход на буфер, который намного более эффективен.

Нужно мне подтягивать инглиш)

А в какой кодировки лучше хранить строки соль и пароль в базе? в хексе или в бинарном виде?

kobezzza 21.08.2013 21:52

Цитата:

Сообщение от Дзен-трансгуманист (Сообщение 268674)
А зачем тут хекс? Чтобы удвоить потребляемую память? ))

ЗЫ: под словом пароль ты конечно же имел в виду ключ.)

Ну да, ключ) Да я просто много где видел, где конвертят в хекс при сохранении в базу и думал, мб в этом есть какой то тайный смысл:) Спасибо за помощь!

kobezzza 21.08.2013 22:16

Цитата:

Сообщение от Дзен-трансгуманист (Сообщение 268677)
У некоторых программеров текстовый способ мышления.) Ну или если сама БД бинарку не поддерживает, хотя маловероятно.

Всё ок, теперь храню как бинарные данные :) СУБД Mongo, всё ок, только вопрос: а как сравнивать 2 буфера? toString делать ? Метода для сравнения в АПИ ноды я не нашёл (

kobezzza 21.08.2013 22:44

Цитата:

Сообщение от Дзен-трансгуманист (Сообщение 268682)
Ты уже наверно спать хочешь, раз такие вопросы задаешь.)

А ну да:) очень хочу спать, но чёртовы буферы не дают, сейчас пойду :)
Я ещё прост с недавнего времени примерил на себе шкуру бек-энд прогера, вот и задаю тупые вопросы:)


Часовой пояс GMT +3, время: 03:52.