Versioni insicure di hash crypt

30

Ho letto crackstation per non utilizzare queste varianti di bcrypt * ($ 1 $, $ 2 $, $ 2a $, $ 2x $, $ 3 $), ma ho utilizzato bcrypt ($ 2a $) in varie implementazioni sensibili di recente.
Qualche esperto di sicurezza può chiarire perché raccomandare ($ 2y $, $ 5 $, $ 6 $) anziché ($ 1 $, $ 2, $ 2a $, $ 2x $, $ 3 $), qual è la versione originale proposta da Niels Provos, e in che cosa differiscono

bcrypt è una funzione di derivazione chiave per le password progettata da Niels Provos e David Mazières, basata sul cifrario Blowfish e presentata a USENIX nel 1999. Oltre a incorporare un sale per proteggersi dagli attacchi di rainbow table, bcrypt è una funzione adattiva: nel tempo, il il conteggio delle iterazioni può essere aumentato per renderlo più lento, quindi rimane resistente agli attacchi di ricerca di forza bruta anche con l'aumento della potenza di calcolo.     
posta Tawfik Khalifeh 22.09.2012 - 20:49
fonte

2 risposte

25
  • 2 - BCrypt originale, che è stato deprecato a causa di un problema di sicurezza molto tempo prima che BCrypt diventasse popolare.

  • 2a - l'algoritmo ufficiale di BCrypt e una implementazione non sicura in crypt_blowfish

  • 2x - suggerito per gli hash creati dall'algoritmo non sicuro per la compatibilità
  • 2y - suggerito un nuovo marker per il crypt_blowfish fisso

Quindi 2a hash creati dall'algoritmo originale o java port vanno bene, e identici a 2y-hashes creati da crypt_blowfish. Ma gli hash 2a creati da crypt_blowfish non sono sicuri.

  • 5 è sha256crypt
  • 6 è sha512crypt

L'algoritmo shaXXXcrypt è ispirato a bcrypt ma usa sha2 invece di blowfish come funzioni hash per soddisfare i requisiti di conformità negli Stati Uniti.

    
risposta data 22.09.2012 - 23:11
fonte
13

Varianti di BCrypt

  • $2$

    Le specifiche originali utilizzavano il prefisso $ 2 $. Ciò era in contrasto con gli altri prefissi dell'algoritmo:

    • $1$ - MD5
    • $5$ - SHA-256
    • $6$ - SHA-512
  • $2a$

    La specifica originale non definiva come gestire un carattere non ASCII, o come gestire un terminatore null. La specifica è stata rivista per specificare che quando si eseguono le stringhe di hashing:

    • la stringa deve essere codificata in UTF-8
    • il terminatore null deve essere incluso
  • $2x$ , $2y$ (giugno 2011)

    È stato scoperto un bug in crypt_blowfish , un'implementazione PHP di BCrypt.

    Gestiva male i caratteri con l'ottavo bit impostato. Hanno suggerito agli amministratori di sistema di aggiornare i propri database delle password esistenti, sostituendo $2a$ con $2x$ , per indicare che quegli hash sono negativi (e devono utilizzare il vecchio algoritmo rotto ).

    Hanno anche suggerito l'idea che crypt_blowfish emetta $2y$ per gli hash generati dall'algoritmo fisso. Nessun altro, inclusa la canonica OpenBSD, ha adottato l'idea di 2x / 2y . Questo indicatore di versione era limitato a crypt_blowfish

    link

  • $2b$ (febbraio 2014)

    È stato scoperto un bug nell'implementazione di bcrypt in OpenBSD.

    Stavano memorizzando la lunghezza delle loro corde in un carattere non firmato. Se una password era più lunga di 255 caratteri, avrebbe un overflow e un wrap a 255.

    BCrypt è stato creato per OpenBSD. Quindi, quando hanno avuto un bug nella loro libreria, hanno deciso che era ok a bump la versione. Ciò significa che tutti gli altri devono seguire l'esempio se si desidera rimanere aggiornati alle "loro" specifiche.

    link
    link

risposta data 22.12.2015 - 21:59
fonte

Leggi altre domande sui tag