Bcrypt

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 25. srpna 2019; kontroly vyžadují 8 úprav .

bcrypt
Vývojáři Niels Provos a David Mazières
Poprvé zveřejněno 1999
Počet kol 2n _

bcrypt  je adaptivní hašovací funkce pro odvození kryptografického klíče , která se používá k bezpečnému ukládání hesel . Vývojáři: Niels Provos a David Mazières. Funkce je založena na šifře Blowfish , která byla poprvé představena na USENIX v roce 1999 [1] . K ochraně před útoky na duhový stůl používá bcrypt sůl (sůl); navíc je funkce adaptivní, její doba běhu je snadno konfigurovatelná a lze ji zpomalit, aby byl útok hrubou silou obtížnější.

Šifra Blowfish se od mnoha algoritmů liší ve výpočetně náročné fázi klíčů

Provos a Mazières využili této funkce, ale změnili algoritmus přípravy klíče a získali šifru „Eksblowfish“ ( drahý klíčový plán Blowfish ). Počet kol v přípravě klíče musí být mocninou dvou; při použití bcrypt lze zadat konkrétní stupeň.

Původně implementováno ve funkci kryptování OpenBSD . Existují implementace pro Java, Python, Nim, C#, Ruby, Perl, PHP 5.3, Node.js, Go [2] a několik dalších.

Algoritmus

Algoritmus bcrypt používá algoritmus konfigurace klíče z "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

Funkce InitState odpovídá původní funkci ze šifry Blowfish; zlomková část čísla se používá k vyplnění pole P a S-boxu .

Funkce ExpandKey:

ExpandKey( stav , sůl , klíč ) for( n = 1..18) P n key [32(n-1)..32n-1] P n //zacházet s klíčem jako s cyklickým ctextem Encrypt( 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]) //šifrovat pomocí aktuálního plánu klíčů a považovat sůl za cyklickou P 2n-1) ctext [0..31] P 2n ctext [32..63] for( i = 1..4) for( n = 0..127) ctext Encrypt( ctext salt [64(n-1)..64n-1]) //jako výše S i [2n] ctext [0..31] S i [2n+1] ctext [32..63] návratový stav


Chcete-li vypočítat hash, bcrypt zpracuje vstup ekvivalentní 'eksblowfish(strength_key, input)':

bcrypt( cost , salt , key , input ) state EksBlowfishSetup( cost , salt , key ) ctext input repeat (64) ctext EncryptECB( state , ctext ) // šifrování se standardním Blowfish v režimu ECB return Concatenate( cost , salt , ctext )

Na různých operačních systémech (linux, OpenBSD), které používají algoritmus bcrypt ve standardní funkci crypt(3), je vstupem konstanta "OrpheanBeholderScryDoubt" [3] .

Nevýhody

bcrypt byl vyvinut v roce 1999 a byl chráněn před účinnou hrubou silou na tehdejší hardware. V současné době jsou široce používány FPGA, ve kterých je bcrypt implementován efektivněji. V roce 2009 byl vytvořen algoritmus scrypt , který ke své práci vyžaduje značné množství paměti (s náhodným přístupem), velikost paměti je konfigurovatelná [4] .

Ve srovnání s PBKDF2 byl algoritmus rozšíření klíče bcrypt kryptografy do značné míry neprozkoumán [5] .

Viz také

Odkazy

Poznámky

  1. Provos, Niels; Mazières, David. A Future-Adaptable Password Scheme  (neurčité)  // Sborník z výroční technické konference USENIX z roku 1999. - 1999. - S. 81-92 . Archivováno z originálu 4. února 2012.
  2. Balíček bcrypt  . godoc.org. Staženo 10. ledna 2020. Archivováno z originálu dne 29. května 2020.
  3. Archivovaná kopie . Získáno 19. srpna 2015. Archivováno z originálu 15. června 2018.
  4. http://www.unlimitednovelty.com/2012/03/dont-use-bcrypt.html Archivováno 14. dubna 2018 na Wayback Machine „Scrypt vám nejenže poskytuje větší teoretickou bezpečnost než bcrypt na jednotku výpočetního času, ale také umožňuje nakonfigurovat množství místa v paměti potřebné k výpočtu výsledku."
  5. http://www.unlimitednovelty.com/2012/03/dont-use-bcrypt.html Archivováno 14. dubna 2018 na Wayback Machine „Na rozdíl od bcrypt byl PBKDF2 předmětem intenzivního výzkumu a stále zůstává nejlepší konzervativní volbou ."