Bcrypt
bcrypt, ադապտացված կրիպտոգրաֆիկական հեշ-ֆունկցիա, որը նախատեսված է գաղտանաբառերի կոդավորման համար։ Ֆունկցիան ստեղծվել է Նիլս Պրովոսի և David Mazières-ի կողմից։ Ֆունկցիան հիմնված է Blowfish-ի վրա, որը առաջին անգամ ներկայացվել է USENIX-ին 1999 թվականին[1]։ Ֆունկցիան համարվում է ադապտացված՝ իր աշխատանքի ժամանակ կարելի է դադաղեցնել գործընթացը, որպեսզի դժվարացնում հաքերիների կատարած հարձակումները։
Blowfish-ն տարբերվում է շատ ալգորիթմներից իր կոդավորման բարդ բանալիներով։
Պրովոսը և Mazières-ը օգտագործեցին այս յուրահատկությունը, սակայն փոփոխեցին այդ բանալիները, ստանալով «Eksblowfish» (expensive key schedule Blowfish) կոդավորումը։
Առաջին տարբերակը ստեղծվեց crypt ֆունկցիայով OpenBSD-ով։ Գոյություն ունեն նաև տարբերակներ Java, Python, Nim, C#, Ruby, Perl, PHP 5.3, Node.js, Go և մի քանի այլ տարբերակների համար[2]։
Ալգորիթմ խմբագրել
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․
bcrypt(cost, salt, key, input) state EksBlowfishSetup(cost, salt, key) ctext input repeat (64) ctext EncryptECB(state, ctext) return Concatenate(cost, salt, ctext)
Թերություններ խմբագրել
bcrypt-ը մշակվել է 1999 թվականին և պաշտպանված է եղել այն ժամանակների հարձակումների հանդեպ։ Ներկա պահին այն ստացել է ծրագրավորման լոգիկա, որոնց շնորհիվ այն շարունակում է մնալ պաշտշանված։ 2009 թվականին ստեղծվել էր scrypt ալգորիթմը, որի աշխատանքի համար անհրաժեշտ էր հիշողության մեծ ծավալ[3]։
Ծանոթագրություններ խմբագրել
- ↑ Provos, Niels; Mazières, David A Future-Adaptable Password Scheme (und) // Proceedings of 1999 USENIX Annual Technical Conference. — 1999. — С. 81—92.
- ↑ «Package bcrypt» (անգլերեն). godoc.org. Վերցված է 2020 թ․ հունվարի 10-ին.
- ↑ http://www.unlimitednovelty.com/2012/03/dont-use-bcrypt.html «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.»
Արտաքին հղումներ խմբագրել
- jBCrypt — реализация bcrypt на Java
- py-bcrypt — реализация bcrypt на Python
- BCrypt.Net- реализация bcrypt на C# Արխիվացված 2014-07-01 Wayback Machine
- JFBCrypt — реализация bcrypt на Objective C
- bcrypt-ruby — реализация bcrypt на Ruby
- Crypt::Eksblowfish::Bcrypt — реализация bcrypt на Perl
- bcrypt.js — реализация bcrypt на JavaScript
- twin-bcrypt — реализация bcrypt на JavaScript / asm.js
- bcrypt.go — реализация bcrypt на Go Արխիվացված 2014-10-04 Wayback Machine
- tutanota.com — пример использования bcrypt в сервисе end-to-end шифрованной почты