Възможно ли е да се използва bcrypt или scrypt като алтернатива на PBKDF2 в SJCL?

Използвах библиотеката и наистина я харесвам, но от това, което прочетох, PBKDF2 е малко по-уязвим на груби атаки от bcrypt или scrypt. Попаднах на този проблем относно добавяне на поддръжка на scrypt, но изглежда, че няма ясен отговор.

В идеалния случай бих искал просто да пусна заместител на функционалността на PBKDF2, но не съм достатъчно запознат с вътрешната работа на SJCL, за да знам дали това е възможно.

Ако беше възможно, бихте могли да използвате нещо като тази чиста JS bcrypt имплементация доста лесно според мен.


person Dominic P    schedule 26.03.2016    source източник


Отговори (1)


Да, това е възможно, но изисква повече ръчна работа. Първо трябва да компилирате sjcl с scrypt:

./configure --with-scrypt
make

След това ще трябва да използвате scrypt, за да генерирате двойка ключове:

var salt = sjcl.random.randomWords(2,0);
var key = sjcl.misc.scrypt(password, salt);
var encrypted = sjcl.json.encrypt(key, original);
var decrypted = sjcl.json.decrypt(key, encrypted);
person Nils    schedule 27.03.2016
comment
Благодаря за много полезния отговор. Ще опитам това по-късно. Има ли начин да зададете броя на рундовете или работния фактор за scrypt? - person Dominic P; 28.03.2016
comment
Само за всеки друг, който намери това. Очевидно предаването на втория 0 аргумент на sjcl.random.randomWords е само за тестови цели и ще сериозно осакати сигурността на получения ключ. Не съм сигурен колко има значение в този контекст, като се има предвид, че се използва за сол, но ще оставя това на хора, които са по-осведомени от мен. - person Dominic P; 01.09.2016
comment
Солта, същата като IV, трябва само да не се повтаря и да не е толкова произволна като ключ, така че sjcl.random.randomWords с втория аргумент 0 трябва да е добре. Това е и това, което sjcl използва вътрешно за pbkdf2. - person Nils; 03.09.2016
comment
По отношение на настройката на работния фактор за scrypt, просто погледнете документацията във файла scrypt тук: github.com/bitwiseshiftleft/sjcl/blob/master/core/scrypt.js - person Nils; 03.09.2016
comment
Благодаря за пояснението. Това е много полезно. - person Dominic P; 03.09.2016