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.
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 tilstandInitState-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)':
På forskellige operativsystemer (linux, OpenBSD), der bruger bcrypt-algoritmen i standard crypt(3)-funktionen, er input konstanten "OrpheanBeholderScryDoubt" [3] .
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] .
Hash funktioner | |
---|---|
generelle formål | |
Kryptografisk | |
Nøglegenereringsfunktioner | |
Tjek nummer ( sammenligning ) | |
Hashes |
|