Сторінка не перевірена
bcrypt — адаптивна криптографічнафункція формування ключа, що використовується для безпечного зберіганняпаролів. Розробники:Нільс Провос[en] і David Mazières. Функція заснована на шифріBlowfish, вперше представлена наUSENIX у 1999 році[1]. Для захисту від атак за допомогоюрайдужних таблиць bcrypt використовує сіль (salt); крім того, функція є адаптивною, час її роботи легко налаштовується і її можна сповільнити, щоб ускладнити атаки перебором.
Шифр Blowfish відрізняється від багатьох алгоритмів обчислювально складною фазою підготовки ключів шифрування.Провос і Mazières скористалися цією особливістю, але змінили алгоритм підготовки ключів, отримавши шифр «Eksblowfish» (expensive key schedule Blowfish). Кількість раундів у підготовці ключів має бути ступенем двійки; конкретна ступінь може задаватися при використанні bcrypt.
Спочатку реалізовано функції crypt вOpenBSD. Існують реалізації для Java, Python, Nim, C#, Ruby,Perl,PHP 5.3,Node.js та деяких інших.
Алгоритм bcrypt використовує алгоритм налаштування ключів з «Eksblowfish»:
EksBlowfishSetup(cost,salt,key)state InitState()state ExpandKey(state,salt,key)repeat (2cost)state ExpandKey(state, 0, key)state ExpandKey(state, 0, salt)returnstate
Функція InitState відповідає оригінальній функції з шифру Blowfish; для заповнення масиву P і S-box використовується дробова частина числа.
Функція ExpandKey:
ExpandKey(state,salt,key) for(n = 1..18) Pnkey[32(n-1)..32n-1] Pn //treat the key as cyclicctext Encrypt(salt[0..63]) P1ctext[0..31] P2ctext[32..63] for(n = 2..9)ctext Encrypt(ctextsalt[64(n-1)..64n-1]) //encrypt using the current key schedule and treat the salt as cyclic P2n-1)ctext[0..31] P2nctext[32..63] for(i = 1..4) for(n = 0..127)ctext Encrypt(ctextsalt[64(n-1)..64n-1]) //as above Si[2n]ctext[0..31] Si[2n+1]ctext[32..63]returnstate
Для обчислення хешу bcrypt обробляє вхідні дані еквівалентно шифруванню 'eksblowfish(посилений_ключ, input)':
bcrypt(cost,salt,key,input)state EksBlowfishSetup(cost,salt,key)ctextinputrepeat(64)ctext EncryptECB(state,ctext) // шифрування стандартним Blowfish в режимі ECBreturn Concatenate(cost,salt,ctext)
В різних ОС (linux, OpenBSD), використовують алгоритм bcrypt в стандартній функції crypt (3), в якості input подається константа «OrpheanBeholderScryDoubt»[2].
bcrypt був розроблений в 1999 році і був захищений від ефективного перебору на апаратних засобах того часу. В даний час одержали широке поширенняПЛІС, в яких bcrypt реалізується ефективніше. У 2009 був створений алгоритмscrypt, що вимагає для своєї роботи значний обсяг пам'яті (з випадковим доступом), об'єм пам'яті налаштовується[3].
У порівнянні зPBKDF2, алгоритм розширення ключа в bcrypt практично не досліджувався криптографами[4].
{{cite web}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)