Bcrypt

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 25 augusti 2019; kontroller kräver 8 redigeringar .

bcrypt
Utvecklare Niels Provos och David Mazières
Först publicerad 1999
Antal omgångar 2n _

bcrypt  är en adaptiv hashfunktion för kryptografisk nyckelhärledning som används för att säkert lagra lösenord . Utvecklare: Nils Provos och David Mazières. Funktionen är baserad på Blowfish- chifferet , som först introducerades på USENIX 1999 [1] . För att skydda mot regnbågsbordsattacker använder bcrypt ett salt (salt); Dessutom är funktionen adaptiv, dess körtid är lätt att konfigurera och den kan saktas ner för att göra en brute-force attack svårare.

Blowfish-chifferet skiljer sig från många algoritmer i den beräkningsmässigt svåra fasen att krypteringsnycklar

Provos och Mazières utnyttjade denna funktion, men ändrade nyckelförberedelsealgoritmen och fick chiffret "Eksblowfish" ( dyrt nyckelschema Blowfish ). Antalet omgångar i nyckelförberedelser måste vara en potens av två; en specifik grad kan anges när du använder bcrypt.

Ursprungligen implementerad i OpenBSDs krypteringsfunktion . Det finns implementeringar för Java, Python, Nim, C#, Ruby, Perl, PHP 5.3, Node.js, Go [2] och några andra.

Algoritm

Algoritmen bcrypt använder nyckelkonfigurationsalgoritmen från "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) return state

InitState-funktionen motsvarar den ursprungliga funktionen från Blowfish-chifferet; bråkdelen av talet används för att fylla P- och S-boxarrayen .

ExpandKey funktion:

ExpandKey( state , salt , key ) för( n = 1..18) P n nyckel [32(n-1)..32n-1] P n //behandla nyckeln som cyklisk ctext Kryptera( salt [0..63]) P 1 ctext [0..31] P 2 ctext [32..63] for( n = 2..9) ctext Encrypt( ctext salt [64(n-1)..64n-1]) //kryptera med det aktuella nyckelschemat och behandla saltet som cykliskt P 2n-1) ctext [0..31] P 2n ctext [32..63] för( i = 1..4) for( n = 0..127) ctext Encrypt( ctext salt [64(n-1)..64n-1]) //som ovan S i [2n] ctext [0..31] S i [2n+1] ctext [32..63 ] returläge


För att beräkna hashen, bearbetar bcrypt indata som motsvarar 'eksblowfish(styrke_nyckel, input)':

bcrypt( cost , salt , key , input ) state EksBlowfishSetup( cost , salt , key ) ctext input repeat (64) ctext EncryptECB( state , ctext ) // kryptera med standard Blowfish i ECB-läge return Concatenate( cost , salt , ctext )

På olika operativsystem (linux, OpenBSD) som använder bcrypt-algoritmen i standardfunktionen crypt(3) är indata konstanten "OrpheanBeholderScryDoubt" [3] .

Nackdelar

bcrypt utvecklades 1999 och skyddades från effektiv brute force på dåtidens hårdvara. För närvarande används FPGA i stor utsträckning där bcrypt implementeras mer effektivt. 2009 skapades krypteringsalgoritmen , som kräver en betydande mängd minne för sitt arbete (med slumpmässig åtkomst), mängden minne är konfigurerbar [4] .

Jämfört med PBKDF2 har bcrypts nyckelexpansionsalgoritm till stor del varit outforskad av kryptografer [5] .

Se även

Länkar

Anteckningar

  1. Provos, Niels; Mazières, David. A Future-Adaptable Password Scheme  (obestämd tid)  // Proceedings of 1999 USENIX Annual Technical Conference. - 1999. - S. 81-92 . Arkiverad från originalet den 4 februari 2012.
  2. Paket bcrypt  . godoc.org. Hämtad 10 januari 2020. Arkiverad från originalet 29 maj 2020.
  3. Arkiverad kopia . Hämtad 19 augusti 2015. Arkiverad från originalet 15 juni 2018.
  4. http://www.unlimitednovelty.com/2012/03/dont-use-bcrypt.html Arkiverad 14 april 2018 på Wayback Machine "Skrypt ger dig inte bara mer teoretisk säkerhet än bcrypt per beräkningstidsenhet, men det är också låter dig konfigurera mängden utrymme i minnet som behövs för att beräkna resultatet."
  5. http://www.unlimitednovelty.com/2012/03/dont-use-bcrypt.html Arkiverad 14 april 2018 på Wayback Machine "Till skillnad från bcrypt har PBKDF2 varit föremål för intensiv forskning och är fortfarande det bästa konservativa valet ."