Bcrypt

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 25. august 2019; checks kræver 8 redigeringer .

bcrypt
Udviklere Niels Provos og David Mazières
Først udgivet 1999
Antal runder 2n _

bcrypt  er en adaptiv hashfunktion for kryptografisk nøgleafledning , der bruges til at opbevare adgangskoder sikkert . Udviklere: Niels Provos og David Mazières. Funktionen er baseret på Blowfish -chifferet , første gang introduceret på USENIX i 1999 [1] . For at beskytte mod regnbuebordsangreb bruger bcrypt et salt (salt); desuden er funktionen adaptiv, dens køretid er let konfigurerbar, og den kan sænkes for at gøre et brute-force-angreb vanskeligere.

Blowfish-cifferet adskiller sig fra mange algoritmer i den beregningsmæssigt vanskelige fase at krypteringsnøgler

Provos og Mazières benyttede sig af denne funktion, men ændrede nøgleforberedelsesalgoritmen og fik chifferen "Eksblowfish" ( dyrt nøgleskema Blowfish ). Antallet af runder i nøgleforberedelse skal være en potens af to; en specifik grad kan angives ved brug af bcrypt.

Oprindeligt implementeret i OpenBSDs krypteringsfunktion . Der er implementeringer til Java, Python, Nim, C#, Ruby, Perl, PHP 5.3, Node.js, Go [2] og et par andre.

Algoritme

bcrypt-algoritmen bruger nøglekonfigurationsalgoritmen fra "Eksblowfish":

EksBlowfishSetup( cost , salt , key ) state InitState() state ExpandKey( state , salt , key ) repeat (2 cost ) state ExpandKey(state, 0, key) state ExpandKey(state, 0, salt) returnere tilstand

InitState-funktionen svarer til den oprindelige funktion fra Blowfish-chifferet; brøkdelen af ​​tallet bruges til at fylde P- og S-box-arrayet .

ExpandKey funktion:

ExpandKey( state , salt , key ) for( n = 1..18) P n nøgle [32(n-1)..32n-1] P n //behandl nøglen som cyklisk ctekst Krypter( salt [0..63]) P 1 ctekst [0..31] P 2 ctekst [32..63] for( n = 2..9) ctext Encrypt( ctext salt [64(n-1)..64n-1]) //krypter ved at bruge det aktuelle nøgleskema og behandle saltet som cyklisk P 2n-1) ctext [0..31] P 2n ctekst [32..63] for( i = 1..4) for( n = 0..127) ctext Encrypt( ctext salt [64(n-1)..64n-1]) //som ovenfor S i [2n] ctekst [0..31] S i [2n+1] ctekst [32..63 ] returtilstand


For at beregne hashen behandler bcrypt input svarende til 'eksblowfish(strength_key, input)':

bcrypt( cost , salt , key , input ) state EksBlowfishSetup( cost , salt , key ) ctext input repeat (64) ctext EncryptECB( state , ctext ) // krypter med standard Blowfish i ECB-tilstand return Concatenate( cost , salt , ctext )

På forskellige operativsystemer (linux, OpenBSD), der bruger bcrypt-algoritmen i standard crypt(3)-funktionen, er input konstanten "OrpheanBeholderScryDoubt" [3] .

Ulemper

bcrypt blev udviklet i 1999 og var beskyttet mod effektiv brute force på datidens hardware. I øjeblikket bruges FPGA'er i vid udstrækning, hvor bcrypt er implementeret mere effektivt. I 2009 blev krypteringsalgoritmen oprettet , der kræver en betydelig mængde hukommelse til dets arbejde (med tilfældig adgang), mængden af ​​hukommelse kan konfigureres [4] .

Sammenlignet med PBKDF2 har bcrypts nøgleudvidelsesalgoritme stort set været uudforsket af kryptografer [5] .

Se også

Links

Noter

  1. Provos, Niels; Mazières, David. A Future-Adaptable Password Scheme  (ubestemt)  // Proceedings of 1999 USENIX Annual Technical Conference. - 1999. - S. 81-92 . Arkiveret fra originalen den 4. februar 2012.
  2. Pakke bcrypt  . godoc.org. Hentet 10. januar 2020. Arkiveret fra originalen 29. maj 2020.
  3. Arkiveret kopi . Hentet 19. august 2015. Arkiveret fra originalen 15. juni 2018.
  4. http://www.unlimitednovelty.com/2012/03/dont-use-bcrypt.html Arkiveret 14. april 2018 på Wayback Machine "Ikke alene giver scrypt dig mere teoretisk sikkerhed end bcrypt pr. enhedsberegningstid, men det er også giver dig mulighed for at konfigurere mængden af ​​plads i hukommelsen, der er nødvendig for at beregne resultatet."
  5. http://www.unlimitednovelty.com/2012/03/dont-use-bcrypt.html Arkiveret 14. april 2018 på Wayback Machine "I modsætning til bcrypt har PBKDF2 været genstand for intens forskning og er stadig det bedste konservative valg ."