Il numero di carte di credito è più sicuro con una funzione hash che con un algoritmo di crittografia deterministico?

3

Capisco che PCI DSS 3.0 consenta di archiviare gli hash dei numeri di serie separatamente dai valori crittografati, ma sono sorpreso dall'efficienza di strumenti come hashcat nella scoperta dei numeri delle carte dai dati hash data l'entropia limitata.

Poiché, a scopo di ricerca, un salt casuale non è un'opzione (poiché spesso si ha solo il numero cardnumber per effettuare la ricerca), quindi qualsiasi sale dovrebbe essere statico per cercare l'hash.

Ho letto un suggerimento che diceva,

A secret key can be effectively used as a salt value, albeit this defeats some of the reasons for hashing in the first place and requires the same key management as encryption. http://www.integrigy.com/files/Integrigy_Hashing_Credit_Card_Numbers_Unsafe_Practices.pdf

La mia domanda è, se sto usando una "chiave segreta" per un sale, che è soggetta a scoperta e forza bruta (anche se la sua lunghezza potrebbe rendere quest'ultima poco pratica), perché non criptare semplicemente il valore con AES256, e fare le ricerche tramite il valore crittografato?

C'è qualche vantaggio di sicurezza nell'hashing con un "segreto ma uniforme sale", rispetto alla crittografia deterministica?

    
posta Clayton Hall 08.01.2015 - 14:33
fonte

3 risposte

3

L'esecuzione delle ricerche delle carte rispetto a un hash piuttosto che a un valore crittografato viene eseguita per la velocità, quindi è per le prestazioni, piuttosto che per la sicurezza, il vantaggio.

In termini di sicurezza e funzionalità di ricerca, è possibile considerare un sale statico (pepe) e un sale aggiuntivo, piuttosto dinamico (come la data di scadenza del numero della carta).

    
risposta data 09.02.2015 - 02:53
fonte
0

La differenza tra una funzione hash e una crittografia è che un hash è supposto essere una funzione unidirezionale mentre con la crittografia puoi facilmente ottenere i dati originali.

Se la chiave di crittografia viene rubata, puoi leggere direttamente tutti i numeri delle carte. Se il tuo sale viene rubato devi ancora forzarlo. A seconda della funzione di hash, potrebbe essere più difficile come potresti pensare.

Con una funzione hash debole come la forzatura bruta md5 o sha1 sarebbe semplice e l'hashing non è un grande miglioramento. Ma con una memoria e un hash intensivo della CPU puoi guadagnare un po 'di sicurezza qui.

Dai un'occhiata a bcrypt o forse anche a scrypt. Con bcrypt puoi aumentare il tempo CPU necessario con un parametro per rendere più difficile la forza bruta. Scrypt è pesante in memoria, quindi non può essere forzato con le GPU ma è una specie di nuovo (2009).

    
risposta data 09.01.2015 - 12:32
fonte
0

Sebbene si possa affermare che si sta eseguendo l'hash per le prestazioni di ricerca, si sta facendo per essere conforme PCI. Ci sono due modi per osservare questo.

  1. Fai x, è la cosa giusta da fare.
  2. Fai x, altrimenti verremo sorpresi a non farlo.

Fare x per evitare fessurazioni non ci viene in mente, dato che in alcuni casi ci sono solo 5 numeri da indovinare. 6 cifre di BIN, 1 cifra di controllo, e deve passare Luhn.

Dovrebbe essere utile solo insieme a date di scadenza, cvv e dettagli di fatturazione.

Controllare e inserire il numero di carta contro un cancelletto è dispari. Viene usato come password di fatto? O il valore decrittografato viene verificato rispetto all'hash?

Cioè, se l'utente è autenticato, possiamo usare la carta "Vault memorizzato" per una transazione, perché stiamo controllando di nuovo il numero della carta?

L'unico altro motivo per l'hash è quello di livellare un indice, che altrimenti avrebbe un enorme punto caldo su ciascuno dei BIN, a parte la cardinalità delle seguenti cifre.

    
risposta data 12.05.2015 - 00:17
fonte

Leggi altre domande sui tag