bcrypt — адаптивна криптографічна функція формування ключа, що використовується для безпечного зберігання паролів. Розробники: [en] і David Mazières. Функція заснована на шифрі Blowfish, вперше представлена на у 1999 році. Для захисту від атак за допомогою райдужних таблиць 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) return state
Функція InitState відповідає оригінальній функції з шифру Blowfish; для заповнення масиву P і S-box використовується дробова частина числа .
Функція ExpandKey:
ExpandKey(state, salt, key) for(n = 1..18) Pn key[32(n-1)..32n-1] Pn //treat the key as cyclic ctext Encrypt(salt[0..63]) P1 ctext[0..31] P2 ctext[32..63] for(n = 2..9) ctext Encrypt(ctext salt[64(n-1)..64n-1]) //encrypt using the current key schedule and treat the salt as cyclic P2n-1) ctext[0..31] P2n ctext[32..63] for(i = 1..4) for(n = 0..127) ctext Encrypt(ctext salt[64(n-1)..64n-1]) //as above Si[2n] ctext[0..31] Si[2n+1] ctext[32..63] return state
Для обчислення хешу bcrypt обробляє вхідні дані еквівалентно шифруванню 'eksblowfish(посилений_ключ, input)':
bcrypt(cost, salt, key, input) state EksBlowfishSetup(cost, salt, key) ctext input repeat(64) ctext EncryptECB(state, ctext) // шифрування стандартним Blowfish в режимі ECB return Concatenate(cost, salt, ctext)
В різних ОС (linux, OpenBSD), використовують алгоритм bcrypt в стандартній функції crypt (3), в якості input подається константа «OrpheanBeholderScryDoubt».
Недоліки
bcrypt був розроблений в 1999 році і був захищений від ефективного перебору на апаратних засобах того часу. В даний час одержали широке поширення ПЛІС, в яких bcrypt реалізується ефективніше. У 2009 був створений алгоритм scrypt, що вимагає для своєї роботи значний обсяг пам'яті (з випадковим доступом), об'єм пам'яті налаштовується.
У порівнянні з PBKDF2, алгоритм розширення ключа в bcrypt практично не досліджувався криптографами.
Дивись також
Посилання
- jBCrypt — реалізація bcrypt на Java [ 27 квітня 2018 у Wayback Machine.]
- py-bcrypt — реалізація bcrypt на Python [ 22 червня 2017 у Wayback Machine.]
- BCrypt.Net — реалізація bcrypt на C# [ 1 липня 2014 у Wayback Machine.]
- Crypt::Eksblowfish::Bcrypt — реалізація bcrypt на Perl
- bcrypt.js — реалізація bcrypt на JavaScript [ 27 березня 2016 у Wayback Machine.]
- twin-bcrypt — реалізація bcrypt на JavaScript / asm.js [ 11 червня 2018 у Wayback Machine.]
- bcrypt.go — реалізація bcrypt на Go [ 4 жовтня 2014 у Wayback Machine.]
- tutanota.com — приклад використання bcrypt в сервісі end-to-end шифрованого пошти [ 28 січня 2017 у Wayback Machine.]
Примітки
- Provos, Niels; Mazières, David; Talan Jason Sutton 2012 (1999). «A Future-Adaptable Password Scheme». Proceedings of 1999 USENIX Annual Technical Conference: 81–92.
- (PDF). Архів оригіналу (PDF) за 15 червня 2018. Процитовано 13 квітня 2018.
{{}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title () - http://www.unlimitednovelty.com/2012/03/dont-use-bcrypt.html [ 14 квітня 2018 у Wayback Machine.] «Not only does scrypt give you more theoretical safety than bcrypt per unit compute time, but it also allows you to configure the amount of space in memory needed to compute the result.»
- http://www.unlimitednovelty.com/2012/03/dont-use-bcrypt.html [ 14 квітня 2018 у Wayback Machine.] «Unlike bcrypt, PBKDF2 has been the subject of intense research and still remains the best conservative choice.»
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
bcrypt adaptivna kriptografichna funkciya formuvannya klyucha sho vikoristovuyetsya dlya bezpechnogo zberigannya paroliv Rozrobniki en i David Mazieres Funkciya zasnovana na shifri Blowfish vpershe predstavlena na u 1999 roci Dlya zahistu vid atak za dopomogoyu rajduzhnih tablic bcrypt vikoristovuye sil salt krim togo funkciya ye adaptivnoyu chas yiyi roboti legko nalashtovuyetsya i yiyi mozhna spovilniti shob uskladniti ataki pereborom Shifr Blowfish vidriznyayetsya vid bagatoh algoritmiv obchislyuvalno skladnoyu fazoyu pidgotovki klyuchiv shifruvannya Provos i Mazieres skoristalisya ciyeyu osoblivistyu ale zminili algoritm pidgotovki klyuchiv otrimavshi shifr Eksblowfish expensive key schedule Blowfish Kilkist raundiv u pidgotovci klyuchiv maye buti stupenem dvijki konkretna stupin mozhe zadavatisya pri vikoristanni bcrypt Spochatku realizovano funkciyi crypt v OpenBSD Isnuyut realizaciyi dlya Java Python Nim C Ruby Perl PHP 5 3 Node js ta deyakih inshih AlgoritmAlgoritm bcrypt vikoristovuye algoritm nalashtuvannya klyuchiv z Eksblowfish EksBlowfishSetup cost salt key state displaystyle gets InitState state displaystyle gets ExpandKey state salt key repeat 2cost state displaystyle gets ExpandKey state 0 key state displaystyle gets ExpandKey state 0 salt return state Funkciya InitState vidpovidaye originalnij funkciyi z shifru Blowfish dlya zapovnennya masivu P i S box vikoristovuyetsya drobova chastina chisla p displaystyle pi Funkciya ExpandKey ExpandKey state salt key for n 1 18 Pn displaystyle gets key 32 n 1 32n 1 displaystyle oplus Pn treat the key as cyclic ctext displaystyle gets Encrypt salt 0 63 P1 displaystyle gets ctext 0 31 P2 displaystyle gets ctext 32 63 for n 2 9 ctext displaystyle gets Encrypt ctext displaystyle oplus salt 64 n 1 64n 1 encrypt using the current key schedule and treat the salt as cyclic P2n 1 displaystyle gets ctext 0 31 P2n displaystyle gets ctext 32 63 for i 1 4 for n 0 127 ctext displaystyle gets Encrypt ctext displaystyle oplus salt 64 n 1 64n 1 as above Si 2n displaystyle gets ctext 0 31 Si 2n 1 displaystyle gets ctext 32 63 return state Dlya obchislennya heshu bcrypt obroblyaye vhidni dani ekvivalentno shifruvannyu eksblowfish posilenij klyuch input bcrypt cost salt key input state displaystyle gets EksBlowfishSetup cost salt key ctext displaystyle gets input repeat 64 ctext displaystyle gets EncryptECB state ctext shifruvannya standartnim Blowfish v rezhimi ECB return Concatenate cost salt ctext V riznih OS linux OpenBSD vikoristovuyut algoritm bcrypt v standartnij funkciyi crypt 3 v yakosti input podayetsya konstanta OrpheanBeholderScryDoubt Nedolikibcrypt buv rozroblenij v 1999 roci i buv zahishenij vid efektivnogo pereboru na aparatnih zasobah togo chasu V danij chas oderzhali shiroke poshirennya PLIS v yakih bcrypt realizuyetsya efektivnishe U 2009 buv stvorenij algoritm scrypt sho vimagaye dlya svoyeyi roboti znachnij obsyag pam yati z vipadkovim dostupom ob yem pam yati nalashtovuyetsya U porivnyanni z PBKDF2 algoritm rozshirennya klyucha v bcrypt praktichno ne doslidzhuvavsya kriptografami Divis takozhCrypt C PBKDF2 scryptPosilannyajBCrypt realizaciya bcrypt na Java 27 kvitnya 2018 u Wayback Machine py bcrypt realizaciya bcrypt na Python 22 chervnya 2017 u Wayback Machine BCrypt Net realizaciya bcrypt na C 1 lipnya 2014 u Wayback Machine Crypt Eksblowfish Bcrypt realizaciya bcrypt na Perl bcrypt js realizaciya bcrypt na JavaScript 27 bereznya 2016 u Wayback Machine twin bcrypt realizaciya bcrypt na JavaScript asm js 11 chervnya 2018 u Wayback Machine bcrypt go realizaciya bcrypt na Go 4 zhovtnya 2014 u Wayback Machine tutanota com priklad vikoristannya bcrypt v servisi end to end shifrovanogo poshti 28 sichnya 2017 u Wayback Machine PrimitkiProvos Niels Mazieres David Talan Jason Sutton 2012 1999 A Future Adaptable Password Scheme Proceedings of 1999 USENIX Annual Technical Conference 81 92 PDF Arhiv originalu PDF za 15 chervnya 2018 Procitovano 13 kvitnya 2018 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Obslugovuvannya CS1 Storinki z tekstom archived copy yak znachennya parametru title posilannya http www unlimitednovelty com 2012 03 dont use bcrypt html 14 kvitnya 2018 u Wayback Machine Not only does scrypt give you more theoretical safety than bcrypt per unit compute time but it also allows you to configure the amount of space in memory needed to compute the result http www unlimitednovelty com 2012 03 dont use bcrypt html 14 kvitnya 2018 u Wayback Machine Unlike bcrypt PBKDF2 has been the subject of intense research and still remains the best conservative choice