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 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 stateFunkce 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)':
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] .
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] .
Hashovací funkce | |
---|---|
obecný účel | |
Kryptografický | |
Funkce generování klíčů | |
Kontrolní číslo ( srovnání ) | |
Hashe |
|