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.
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 stateInitState-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)':
På olika operativsystem (linux, OpenBSD) som använder bcrypt-algoritmen i standardfunktionen crypt(3) är indata konstanten "OrpheanBeholderScryDoubt" [3] .
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] .
Hash-funktioner | |
---|---|
generell mening | |
Kryptografisk | |
Nyckelgenereringsfunktioner | |
Kontrollnummer ( jämförelse ) | |
Hashes |
|