Memoria della carta di credito, hash, troncamento, dati crittografati

2

Sto cercando di capire come soddisfare più requisiti aziendali che non sembrano funzionare bene in termini di sicurezza:

  • memorizza i dati delle carte crittografate associati agli account dei clienti per i pagamenti ricorrenti
  • memorizza i dati delle schede con hash salati per facilitare la ricerca delle schede crittografate
  • archivia i dati delle carte troncati per facilitare le ricerche dei record delle transazioni del servizio clienti

Per quanto ne so, posso ragionevolmente fare i primi 2 in modo sicuro, ma se aggiungo il terzo elemento, improvvisamente comprometto la sicurezza del mio archivio. spiegazione del link

Mi stavo chiedendo se qualcuno avesse mai avuto questo problema prima e potesse indicarmi la giusta direzione di una soluzione. Stavo pensando che un hash salato del numero troncato potrebbe forse fare il trucco. Qualche idea?

    
posta François Lamarre 23.01.2012 - 23:34
fonte

2 risposte

5

Su una carta di credito, normalmente troverai:

  • il numero , in genere 16 cifre;
  • la data di scadenza (mese e anno, di solito entro i prossimi due anni);
  • il nome del titolare della carta;
  • il codice di sicurezza (3 o 4 cifre).

Il problema con gli hash di pubblicazione di tali informazioni è la vulnerabilità alla ricerca esaustiva: l'utente malintenzionato tenta tutte le possibili combinazioni finché non si trova il valore hash. Esistono due modi per sconfiggere tali attacchi: mantenendo un numero elevato di combinazioni e rendendo lento il processo di hashing.

Rallentare l'hash richiede l'uso di un salt (per prevenire attacchi paralleli e precomputazioni) e fare molte iterazioni nidificate (il più possibile, a condizione che l'overhead sia tollerabile per il tuo sistema). C'è un'arte in questo; una costruzione incurante fatta a mano può essere piuttosto debole. Questa parte è molto simile a ciò che viene fatto per le password, quindi riduciamola al solito consiglio: usa bcrypt . Una buona GPU può valutare una funzione di hash a 32 bit come SHA-1 circa un miliardo di volte al secondo; ma configurando il "fattore costo" di bcrypt è possibile riportare una cifra del genere, ad esempio, 100 volte al secondo, senza sovraccaricare troppo il proprio sistema.

Ora vediamo il numero di combinazioni. Il nome del titolare della carta può essere spesso indovinato, perché in un database di un sito commerciale si registra anche il nome utente e, eventualmente, un indirizzo di consegna. La data di scadenza è entro i prossimi due anni (o giù di lì), quindi 24 possibilità. Il numero della carta di solito inizia con un identificatore di 4 cifre per il banco e termina con una cifra di checksum calcolata in modo deterministico dagli altri 15. Supponendo che l'attaccante proverà, ad esempio, su dieci distinti banchi, si ottengono circa 10 11 (ovvero "cento miliardi") possibili numeri di carte. Tuttavia , se il "numero della carta troncata" contiene, ad esempio, 8 cifre (la prima e l'ultima di quattro cifre), tale numero viene ridotto a 10 8 (cento milioni) .

Se usi bcrypt e attack puoi andare solo ad una velocità di 100 tentativi al secondo, allora l'attaccante avrà bisogno di una media di mezzo milione di secondi per trovare il numero della carta (che è circa 6 giorni ). Questo può essere visto come "sufficiente" perché il valore di rivendita di un numero di carta di credito rubato non è elevato (penso che sia di circa 10 $ al massimo). Per aumentare la resilienza, non eseguire l'hash del numero solo, aggiungere la data di scadenza (x24 in costo di attacco) e il codice di sicurezza (x1000).

Quindi, per riassumere:

  • usa bcrypt con un conteggio ad alta iterazione (e non armeggiare con il sale);
  • inserisci la data di scadenza e il codice di sicurezza nell'input dell'hash;

e puoi resistere all'indebolimento indotto dalla memorizzazione dei dati troncati della carta.

    
risposta data 24.01.2012 - 20:49
fonte
1

@ La risposta di Tom fornisce buone informazioni su come proteggere i numeri completi delle carte.

Volevo solo sottolineare che, oltre alle best practice per la sicurezza, la linea guida più importante per voi è semplicemente: rispettare qualsiasi cosa richieda PCI-DSS. Non hai davvero scelta in materia.

Detto questo, PCI consente di memorizzare numeri di carte troncati, irrilevanti di quando e come lo si salva crittografato (e questa è la parte più complicata).
Se ricordo bene, le prime 2 cifre e le ultime 4 cifre sono le tue per il troncamento, libere e chiare, nessuna preoccupazione.

Ma certo, consulta il tuo QSA ...

    
risposta data 24.02.2012 - 00:00
fonte

Leggi altre domande sui tag