L'input prevedibile (come le intestazioni di bcrypt) minaccia la crittografia basata su password?

4

Sto creando un sistema per archiviare la versione hash di alcuni segreti. Ho letto il blog di Dropbox su come memorizzano i loro password e hanno preso ispirazione da ciò che stanno facendo.

Dropbox, per quanto ho capito, fa questo:

  1. Ottieni password
  2. Hash unidirezionale con SHA512 (per combattere il possibile troncamento della password in bcrypt)
  3. Hash unidirezionale con bcrypt
  4. Codifica bidirezionale con crittografia basata su password AES256 con password globale lato server
  5. Archivia nel database.

Vedo un potenziale punto debole con questo sistema al punto 4.

Quando si utilizza la crittografia basata su password lato server, crittografando il valore bcrypt, le prevedibili intestazioni di bcrypt indeboliranno la strategia?

L'hash di bcrypt ha un aspetto simile al seguente:

$2a$10$q16tPq1UQXP9n8yrcm0TMeWriU4F..i4S5Gs78zBWKDG3ourZXvCK

L'inizio, l'intestazione, molto probabilmente sarà sempre lo stesso per lo stesso sistema: $2a$10$ . Certo, potrebbero essere un altro valore, ma sono probabilmente condivisi tra tutti gli hash delle password memorizzati.

Pertanto, per il sistema di crittografia basato su password, un utente malintenzionato potrebbe quindi cercare i modelli che corrispondono a questa intestazione e potenzialmente trovare la password di crittografia.

Un approccio migliore sarebbe quello di estrarre le intestazioni di bcrypt e quindi criptare solo il restante salt + hash?

Per quanto ho capito, questo non avrà alcun componente prevedibile e quindi sarà più sicuro.

Sto facendo questo in java al momento. Forse ci sono alcune soluzioni pre-esistenti per questo tipo di problema?

(PS. Sono abbastanza nuovo in crittografia, quindi correggimi se uso il gergo / tag sbagliato ecc.)

    
posta Automatico 21.12.2016 - 12:56
fonte

1 risposta

2

Thus, for the password-based encryption system, an attacker could then look for patterns matching this header, and potentially find your encryption password.

Non ci sono tali schemi nel testo cifrato. In passato, gli algoritmi di crittografia erano vulnerabili a cose come gli attacchi di testo in chiaro noti e dovresti evitare di inviare lo stesso testo in chiaro più e più volte. Infatti, i Brittish furono aiutati in cracking dei codici Enigma dai tedeschi che inviano parole come "wetteruebersicht" in un modo prevedibile.

Ma quello era allora. La cripto moderna è diversa. AES, se usato correttamente , produce qualcosa che è indistinguibile dalla spazzatura casuale a meno che tu non abbia la chiave, non importa quanto sia prevedibile l'input.

Quindi non è necessario tagliare il prefisso dall'output di bcrypt.

    
risposta data 21.12.2016 - 14:30
fonte

Leggi altre domande sui tag