Perché una password deve essere sottoposta a hash prima di essere utilizzata per crittografare qualcosa?

54

Durante la lettura di alcuni documenti sulla sicurezza di un prodotto, ho scoperto che il fornitore utilizza SHA-2 di una password per crittografare i dati (AES-256), invece di usare direttamente questa password.

Ci sono dei vantaggi nel farlo?

Un utente malintenzionato non crackerà i dati crittografati utilizzando questa chiave SHA-2-as-a-password, ma piuttosto esaurirà lo spazio delle chiavi della password (se possibile) e proverà il suo hash. Quindi l'unica ragione per cui posso pensare è che c'è un ulteriore passo computazionale (la creazione dell'hash). Avrei preferito aumentare l'entropia della password se il punto è complessare computazionalmente l'attacco.

    
posta WoJ 15.02.2018 - 11:23
fonte

4 risposte

98

Sembra una versione primitiva di una funzione di derivazione della chiave (KDF) , in particolare probabilmente potrebbero avere evitato di reinventare la ruota usando PBKDF2 .

Ci sono diversi motivi per cui non si desidera utilizzare la password direttamente come chiave AES.

  1. Per distribuire i bit. La proprietà principale qui è che l'output di una funzione hash è, statisticamente parlando, distribuito uniformemente. Le persone tendono a scegliere password che non sono completamente casuali, in particolare, la maggior parte delle password contiene solo caratteri che è possibile digitare in una tastiera. Se utilizzato come chiave di crittografia, una chiave non statisticamente casuale può esporre debolezze nella funzione di crittografia.

  2. Per adattare le chiavi alla lunghezza della chiave di crittografia. La maggior parte delle password sarà più lunga o più breve dello spazio chiave della funzione di crittografia. Con l'hashing della password, la lunghezza esatta della chiave corrisponderà esattamente alla dimensione della chiave di input della funzione di crittografia. Sebbene l'entropia della chiave derivata non aumenti, si evita la probabilità di esporre debolezza nella funzione di crittografia se si azzera semplicemente la password o si troncare la password.

  3. Per rallentare la decrittografia della derivazione della chiave. Per tua descrizione, il software utilizza solo un singolo round SHA256, che non è molto. Ma con KDF basato su password, come PBKDF2, ci sono solitamente decine di migliaia o centinaia di migliaia di round della funzione di hash sottostante. Questo rallenta il calcolo dei tasti, aumentando la forza effettiva delle password senza aumentarne la lunghezza.

  4. Per mantenere la password di testo normale dell'utente fuori dalla memoria, impedendo così che venga accidentalmente scaricata sul disco durante la sospensione o il crash dump. Anche se questo non proteggerebbe l'hash dall'essere usato per decifrare i dati che stai crittografando, impedirà che la password venga riutilizzata per decifrare altri file (che presumibilmente usano sale diversi) o essere provati sui tuoi account online o altri dispositivi che tu usi.

risposta data 15.02.2018 - 13:02
fonte
14

SHA-256 genererà un hash a 256 bit da password di lunghezza arbitraria. Questo hash può tecnicamente (come nella sua giusta lunghezza) essere usato come chiave per AES-256 .

Senza più contesto, suppongo che siano andati per il modo più semplice per generare una chiave a 256 bit.

Come hai detto, il punto debole qui è la password, e un singolo SHA-256 della password è troppo economico per prevenire attacchi brute-force sulla password.

Invece, si dovrebbe usare una funzione di derivazione della chiave basata su password (PBKDF). Inoltre, non si dovrebbe usare direttamente la chiave, ma invece usarla per crittografare le chiavi generate usando un CSPRNG migliore.

Puoi trovare un'ottima discussione su questo argomento in link .

    
risposta data 15.02.2018 - 11:33
fonte
5

Senza alcun contesto, è difficile rispondere. Questo potrebbe semplicemente essere un ingenuo meccanismo di espansione della password o potrebbe essere qualcos'altro. Ad esempio, potrebbe essere necessario che un'altra parte decifri i dati e quindi memorizzi la chiave necessaria.

Usando un hash, fornirebbe quindi un certo livello di protezione per la password dell'utente originale. Non molto, attenzione, ma ancora molto meglio della semplice memorizzazione della password stessa.

    
risposta data 15.02.2018 - 11:32
fonte
-1

Penso che la ragione principale per SHA-256 sia una password piuttosto semplice. Non vuoi conoscere la password. Se conosci la password, devi prendere alcune precauzioni extra per proteggerla in modo propizio. Dal momento che una violazione potrebbe rivelare la password, potrebbero verificarsi altri possibili attacchi.

Inoltre di solito il software non usa la stessa password per generare l'hash, ma in genere viene aggiunta una certa posta indesiderata per assicurarsi che 2 utenti che hanno selezionato "Pa55w0rd" non vengano visualizzati con lo stesso hash.

Questo sale aggiunto rende molto difficile per l'utente malintenzionato indovinare la password, anche se ha accesso all'hash finale. Esistono dei resuilts precalcolati per semplici operazioni SHA-256, che coprono già gran parte dello spazio normale della chiave (tabelle Rainbow chiamate). Questi potrebbero essere usati per trovare una password relativa a un account. Ma queste tabelle falliscono male se aggiungete qualche byte di junk casuale in fromt della password, e sono ancora meno utili se ogni utente ha la sua "spazzatura casuale"

L'unico "inconveniente" è che non puoi recuperare la tua password e resettarla. (Odio i servizi online che possono inviarmi la mia password poiché mostra che non gli interessa)

Come altri hanno menzionato, questo risulta in un blob di dati a 256 bit, che potrebbe essere usato come una chiave AES da 256. Significa anche che una reimpostazione della password invalida tutti i dati crittografati (che potresti desiderare in base ai dati)

    
risposta data 18.02.2018 - 17:22
fonte

Leggi altre domande sui tag