Jeg har læst lidt om hashing for nylig og ifølge AgileBits , de bruger “ SHA512 inden for PBKDF2 ” i deres nye hvælvningsfil.
Jeg har set i Wikipedia efter begge navne, og jeg ved, at PBKDF2 er en nøgleafledningsfunktion, og SHA er en kryptografisk hash-funktion, men jeg kan ikke rigtig forstå forskellen, og hvorfor de begge bruges sammen med hinanden inden for den anden.
Kan nogen forklare dette for en person uden erfaring med kryptografi?
(Du kan antage, at jeg kun kender til matematik, hvis det er nødvendigt).
Kommentarer
Svar
SHA-512 er en kryptografisk sikker hash , PBKDF2 er det, vi kalder en Password Based Key Derivation Function. Hvis den resulterende hemmelighed ikke bruges som nøgle, men som hashværdi, kaldes den også en password hash . Password hashes adskiller sig fra sikre hashes i den forstand, at de indeholder et salt og en arbejdsfaktor / iterationstælling.
Både kryptografiske hashes og password hashes er en måde funktioner designet til at skabe en kort, fast størrelse output fra en givet input. I tilfælde af adgangskodeshash ville input være adgangskoden og saltet. Saltets størrelse og iterationstælling betragtes almindeligvis som konfigurationsparametre; begge har naturligvis indflydelse på output af password hash.
Password hashes bygges generelt oven på Pseudo tilfældige funktioner eller PRFer. En almindelig form for PRF er en HMAC- eller Hash-baseret meddelelsesgodkendelseskode, som igen bruger en hash internt. Når der anvendes hash-baserede PRFer såsom HMAC, kan typen / størrelsen af den anvendte hash ofte konfigureres. Adgangskodetilhængere skal dog ikke behøves bygges ved hjælp af hashes. Enhver anden PRF, såsom dem, der er baseret på symmetriske cifre, kan gøre. bcrypt er for eksempel bygget oven på Blowfish, en blokciffer.
Adgangskode-hashes har brug for et salt, så identiske adgangskoder ikke tildeles den samme hash. De forhindrer derfor også regnbue-tabeller (indeholdende forudregnet kodeord / hash-par) fra at være nyttige. Desuden indeholder de en arbejdsfaktor / iterationstælling, så en angriber skal udføre mere arbejde for at beregne hash for hver mulig adgangskode. Dette er nødvendigt, fordi de fleste adgangskoder ikke er tilfældige nok. Uden arbejdsfaktoren er angriberen ville være i stand til at teste store mængder af mulige adgangskoder ved hjælp af brutal kraft eller et ordbogangreb.
Kommentarer
- meget mere info her … passer ‘ dog ikke til svarområdet.
Svar
For at omskrive mit svar på et tidligere spørgsmål , PBKDF2 er en generisk algoritme på højt niveau, der kalder internt en pseudorandom-funktion (PRF) for at behandle dens input. PBKDF2-specifikationen pålægger ikke nogen bestemt PRF, så implementatorer kan frit vælge hvilken PRF de ønsker (så længe den opfylder definitionen på en sikker PRF og kan acceptere den input, som PBKDF2 giver den).
Som det sker, er langt det mest almindelige valg af PRF til PBKDF2 HMAC , som er en anden højkonstruktion, der internt bruger en kryptografisk hash-funktion . Igen foreskriver HMAC-specifikationen ikke nogen bestemt hash-funktion, * så implementatorer kan frit vælge den hash, de ønsker. Det mest almindelige valg i dag er sandsynligvis en af SHA-2 familien af hashes, som inkluderer SHA-256 og SHA-512.
Så “SHA512 inden for PBKDF2” betyder næsten helt sikkert, at de bruger PBKDF2 med HMAC som PRF, og med SHA-512 som hash inde i HMAC. **
Hvad der kan være forvirrende er, at blik, denne PBKDF2-med-HMAC-med-SHA512 kan se ud som om den gør noget, der ligner bare almindelig SHA-512: begge tager en vilkårlig adgangskode som input og gør det til en pseudorandom bitstreng, hvorfra den originale adgangskode ikke være let rekonstrueret.Der er dog faktisk flere forskelle, hvoraf de vigtigste er:
-
SHA-512 er hurtig. Meget hurtig. PBKDF2 er bevidst langsom at beregne, og dets langsommelighed kan styres ved at justere parameteren iterationstælling.
-
Som en direkte konsekvens af dens hastighed, SHA -512 alene er sårbar overfor gåde-angreb med brutalt password ved hjælp af software som hashcat , som simpelthen genererer masser af adgangskoder og hash dem, indtil de finder en, der producerer en matchende hash . En enkelt moderne CPU kan let hash millioner af adgangskoder pr. Sekund, og GPUer er endnu hurtigere.
Derudover er der et par andre mindre forskelle med at bemærke:
-
PBKDF2 tager en “salt” -parameter, som kan bruges til at sikre, at output er unikke, selvom inputadgangskoder ikke er . (Brug af et salt afværger også angreb på forhåndsberegning, da angriberen ikke med fordel kan begynde at haske gættet kodeord, før de kender saltet.) SHA-512 har i sig selv ikke begrebet salt, selvom en tilsvarende effekt kan opnås f.eks. ved at forberede saltet til adgangskoden.
-
SHA-512 producerer altid en 512-bit output (deraf navnet), selvom du altid kan afkorte den til en kortere længde, hvis du behøver ikke de fulde 512 bits. PBKDF2 kan i princippet producere output af en hvilken som helst længde, selvom det i praksis bruger det til at generere mere end en intern hashoutput værdi af bit anbefales ikke .
*) Den originale HMAC-definition og sikkerhedssikkerhed antager effektivt, at den anvendte hash-funktion er af en bestemt type kendt som en Merkle – Damgård hash-funktion . Som det sker, har alle de mest populære kryptografiske hashfunktioner i de sidste mange årtier, inklusive SHA-2-familien, været af denne type, så denne begrænsning har ikke været meget af et problem i praksis. Dette kan ændre sig gradvist med standardiseringen af SHA-3 (alias Keccak), som er ikke en Merkle – Damgård-hash, men bekvemt, kommer med sit eget sikkerhedskrav for HMAC-SHA3 .
**) Dette er en bøde og traditionelle valg, så vidt det går. Det er ikke så modstandsdygtigt over for GPU-baserede og andre parallelle angreb som mere moderne KDFer som scrypt eller Argon2 ville være, men det er stadig meget bedre end almindelig gammel ikke-itereret hashing. Når det er sagt, for at kunne evaluere dens sikkerhed korrekt, bliver vi også nødt til at kende det iterationstal, der bruges til PBKDF2. Desværre har mange PBKDF2-implementeringer en tendens til at bruge det gamle “anbefalede minimum” på 1000 iterationer, hvilket er lidt mere end en hastighedsbump i dag. Personligt foretrækker på en moderne CPU noget tættere på 1.000.000 eller 1.000.000.000 iterationer .
Kommentarer
- Spørgsmål: Bruges PBKDF2 kun til at bremse antallet af gætter (hvis bruteforce)? Eller er der andre specifikke ting at huske på?
- @NaveenNiraula : Ud over at bremse gætte på brute force har PBKDF2 det sekundære formål at konvertere adgangskoder med vilkårlig længde og format til ensartet pseudorandom bitstrings. Men bare almindelig hashing kan også opnå det. Saltparameteren tillader også at udlede flere forskellige nøgler fra det adgangskode og forhindrer nogle angreb ved hjælp af forudberegnede ordbøger som ” regnbuetabeller “. Men igen, hvis du ikke ‘ behøver ikke brute force gætte beskyttelsen af PBKDF2, du kan bare bruge almindelig HMAC til det, eller endda bare sammenkæde saltet med adgangskoden, før du hashing det.
PBKDF2(HMAC_SHA512, password, ...)
.