Можно ли использовать bcrypt или scrypt в качестве альтернативы PBKDF2 в SJCL?

Я использовал эту библиотеку, и она мне очень нравится, но из того, что я прочитал, PBKDF2 немного более уязвим для атак методом грубой силы, чем bcrypt или scrypt. Я столкнулся с проблемой добавления поддержки скриптов, но, похоже, четкий ответ.

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

Если бы это было возможно, вы могли бы довольно легко использовать что-то вроде этой реализации bcrypt на чистом JS.


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