it-swarm-eu.dev

Bcrypt è un algoritmo di hashing o il mio materiale di studio è sbagliato?

Attualmente sto studiando per il mio esame Comptia Security + e su un test di pratica online ho ricevuto questa domanda:


Oppure, rappresentato come testo:

▶ Which of the following are hashing algorithms? (Select all that apply)
----------------------------------
???? ✔️ ☑️  MD5 (☑️ Your answer)
???? ✔️ ☑️  RIPEMD (☑️ Your answer)
???? ☐ ➖  Bcrypt (❌ Your answer)
???? ✔️ ☑️  HMAC (☑️ Your answer)
???? ✔️ ☑️  SHA (☑️ Your answer)
----------------------------------
➖ Your answer to this question is incorrect or incomplete.

Ho sbagliato a includere Bcrypt come algoritmo di hashing?

62
treefidy

Non è una buona domanda. Non sbagli nel chiamare bcrypt un "algoritmo di hashing", ma non hanno torto che sia qualitativamente diverso dagli altri, anche se è curioso che individuino bcrypt e non anche HMAC. Possiamo raggrupparli in tre categorie:

  • bcrypt deve essere una password hash, nota anche come password basata sulla funzione di derivazione dei tasti, il cui scopo è di essere costoso da calcolare in modo che, anche se in media non ci vogliono molte prove per un avversario per indovinare quale fosse l'input, c'è un costo elevato per testare ogni ipotesi. Altri esempi includono PBKDF2, scrypt e Argon2 e Balloon hash.

  • MD5, RIPEMD e SHA sono pensati per essere hash resistenti alle collisioni , il cui scopo è per rendere difficile trovare messaggi distinti che hanno lo stesso hash. In effetti, MD5, RIPEMD, SHA-0 e SHA-1 (sebbene non SHA-2 o SHA-3) sono tutti rotti: sono state segnalate collisioni per tutti loro. Sono inoltre progettati per essere preimage resistente, in modo che sia difficile trovare un messaggio con un hash prescritto, e secondo preimage resistente, in modo che sia è difficile trovare un secondo messaggio con lo stesso hash di un messaggio prescritto; nessuno di questi ha avuto queste proprietà rotte. Altri esempi - che, a differenza di MD5, RIPEMD e SHA-0/SHA-1, sono ininterrotti fino ad oggi - includono BLAKE2b e SHAKE128.

  • HMAC è una tecnica per costruire famiglie di funzioni pseudocasuali (PRF) o codici di autenticazione dei messaggi (MAC) di alcune funzioni hash come SHA-256; a volte l'HMAC è vagamente chiamato "hash con chiave", ma ciò non chiarisce realmente quale sia l'obiettivo della sicurezza, che è imperdonabile come MAC o pseudocasualità come PRF: se la chiave viene scelta uniformemente a caso, un avversario che non sa che la chiave non può indovinare il MAC per nessun messaggio e non può distinguere l'hash di alcun messaggio da una stringa di bit casuale uniforme.

La parola "hash" da sola nella crittografia significa semplicemente una funzione che confonde il suo input o l'output criptato. Esistono altri tipi di funzioni hash: la funzione hash stringa FNV-1, talvolta utilizzata nelle tabelle hash; famiglie di hash universali come Poly1305, con limiti garantiti sulle probabilità di collisione, a volte utilizzate per creare codici di autenticazione dei messaggi estremamente economici con elevata sicurezza; funzioni di derivazione chiave come HKDF, utilizzate per trasformare stringhe di bit ad alta entropia ma non uniformi come Diffie-Hellman condividevano segreti in stringhe di bit casuali uniformi; ecc. Non è sbagliato chiamare uno di questi "hash", ma può essere utile usare una terminologia più specifica come hash resistente alle collisioni o famiglia di funzioni pseudocasuali o famiglia di hash universali .

85

Stranamente, due di quelle cose non sono come le altre, ma a quanto pare ha solo segnato uno di loro come sbagliato.

Tutte le opzioni sopra sono probabilmente funzioni di hash, in quanto prendono tutti un messaggio di input e producono un "digest" o "hash": un insieme di bit a elevata entropia a lunghezza fissa che è deterministico sui suoi input ma non è reversibile. Tuttavia, ci sono differenze sia negli input che nell'utilizzo.

MD5, RIPEMD e SHA (ora di solito chiamato SHA1) sono tutti praticamente la stessa classe di funzioni, prendendo solo un input (un messaggio arbitrario) e producendo rapidamente il digest di quel messaggio (che , almeno in teoria, possiede una resistenza alla collisione e alla pre-immagine. Le loro caratteristiche particolari (sia meccanicamente, come la lunghezza del digest, sia praticamente, come la sicurezza) variano, ma ad un livello elevato sono intercambiabili.

Bcrypt accetta due parametri aggiuntivi: un sale e un fattore costo/lavoro. Inoltre, è progettato per eseguire l'hashing solo stringhe brevi (password o simili) e limita la lunghezza di input a 72 byte utili. Produce output come una funzione hash standard, ma (probabilmente molto) più lentamente.

HMAC è una costruzione che richiede una funzione hash definita esternamente. Come funzione, HMAC richiede input di un messaggio, un salt e una funzione hash da usare. A differenza di bcrypt, non introduce alcun vincolo sul messaggio di input - in questo modo, è più simile agli altri tre - ma a differenza di tutti e quattro gli altri in realtà non specifica un algoritmo per calcolare un digest, delegando tale operazione al funzione hash specificata.

In sintesi, è possibile presentare una delle seguenti risposte:

  • Tutte e cinque sono funzioni hash, perché accettano un messaggio e producono un digest unidirezionale, a lunghezza fissa, deterministico, ad alta entropia.
  • Bcrypt è l'unico che non è una funzione hash, perché non può operare su messaggi di lunghezza arbitraria.
  • HMAC è l'unico che non è una funzione hash, perché non definisce una procedura per calcolare un digest.
  • Solo MD5, RIPEMD e SHA sono true funzioni hash.

Evidentemente, il tuo materiale di studio ha una seconda visione. Personalmente mi appoggio maggiormente alla terza o quarta visione. HMAC-SHA-256 è una funzione hash (che si differenzia da quelle "pure" per la necessità di una chiave), ma HMAC da sola non è una funzione hash. Sarebbe come dire "ottenere farina, sale, acqua e una persona che sa come preparare le tortillas; dare la farina, l'acqua e il sale alla persona; dire alla persona di produrre una tortilla" è una ricetta di tortilla.

35
CBHacking

Si possono trovare molte domande di "certificazione" che sono tutt'altro che ideali cercando di sfruttare le sfumature del testo per testare la comprensione dell'argomento, ma non riuscendo ad avere un significato reale in senso pratico. Mentre potresti validamente essere in grado di discutere il punto nella realtà del mondo reale, in realtà non ha importanza di fronte a ciò che il test di certificazione sta cercando di valutare.

Provenendo dal mio background di rete, ho potuto facilmente trovare molti esempi di reti "di classe". Questo è uno dei motivi per cui le domande di certificazione sono generalmente fuori tema nello stack Network Engineering . Sembra inutile rispondere perché Test X indica che 10.250.0.0/255.255.0.0 non è una rete valida (risposta - una rete "Classe A" ha una maschera di 255.0.0.0) quando non ha davvero alcuna influenza sulla gestione di una rete nel mondo di oggi.

Inoltre, non sono sicuro del motivo per cui le risposte popolari sono fissate su "funzioni di hashing". La domanda certificazione chiede: "Quali dei seguenti sono algoritmi di hashing ?" (enfasi il mio). Non si fa menzione delle funzioni di hashing.

Quindi, dei cinque forniti, quattro possono essere considerati algoritmi a sé stanti, indipendentemente dal fatto che abbiano le loro funzioni di hashing incorporate. D'altra parte, bcrypt (mentre una funzione) utilizza un algoritmo basato su blowfish, non è un algoritmo a sé stante.

Potrebbe essere una stupida distinzione, ma di nuovo è una domanda di certificazione.

5
YLearn

Da Wikipedia:

bcrypt è una funzione di hashing della password progettata da Niels Provos e David Mazières, basata sul codice Blowfish e presentata a USENIX nel 1999.

Nota: gli algoritmi di hashing delle password non devono essere resistenti alle collisioni, vedere risposta di Thomas . Questa è la distinzione dagli algoritmi Hash crittografici.

1
kelalaka