Bcrypt

bcrypt, ադապտացված կրիպտոգրաֆիկական հեշ-ֆունկցիա, որը նախատեսված է գաղտանաբառերի կոդավորման համար։ Ֆունկցիան ստեղծվել է Նիլս Պրովոսի և David Mazières-ի կողմից։ Ֆունկցիան հիմնված է Blowfish-ի վրա, որը առաջին անգամ ներկայացվել է USENIX-ին 1999 թվականին։ Ֆունկցիան համարվում է ադապտացված՝ իր աշխատանքի ժամանակ կարելի է դադաղեցնել գործընթացը, որպեսզի դժվարացնում հաքերիների կատարած հարձակումները։

Blowfish-ն տարբերվում է շատ ալգորիթմներից իր կոդավորման բարդ բանալիներով։

Պրովոսը և Mazières-ը օգտագործեցին այս յուրահատկությունը, սակայն փոփոխեցին այդ բանալիները, ստանալով «Eksblowfish» (expensive key schedule Blowfish) կոդավորումը։

Առաջին տարբերակը ստեղծվեց crypt ֆունկցիայով OpenBSD-ով։ Գոյություն ունեն նաև տարբերակներ Java, Python, Nim, C#, Ruby, Perl, PHP 5.3, Node.js, Go և մի քանի այլ տարբերակների համար։

Ալգորիթմ 
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 ալգորիթմը, որի աշխատանքի համար անհրաժեշտ էր հիշողության մեծ ծավալ։

Արտաքին հղղումներ 
 jBCrypt — реализация bcrypt на Java
 py-bcrypt — реализация bcrypt на Python
 BCrypt.Net- реализация bcrypt на C# 
 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 
 tutanota.com — пример использования bcrypt в сервисе end-to-end шифрованной почты

Ծանոթագրություններ 

Գաղտնագրություն
Վիքիպեդիա:Նավարկման կաղապարներ