Utilizzo di un lato del browser di crittografia a chiave pubblica per evitare la conformità PCI

2

Stiamo sviluppando un'applicazione web in cui alcuni utenti non registrati (clienti) devono inviare i dettagli della carta di credito ad altri utenti (commercianti), che, presumibilmente, sono conformi PCI.

Stiamo cercando di ottenere la conformità PCI, ma il processo richiederà sicuramente molto tempo. Pertanto stiamo esaminando altre soluzioni che non richiedono il rilascio di una certificazione e che ci proteggono dal furto di dati sensibili.

Il nostro piano è:

  • Fai generare al commerciante una chiave privata e una pubblica
  • Memorizza la chiave privata nel suo browser usando localstorage (e fornisce un mezzo per eseguirne il backup)
  • Fornire la chiave pubblica nel modulo utilizzato da un client
  • Prima che il client invii i dati, crittografa tutto con la chiave pubblica del commerciante
  • Archivia i dati crittografati nel nostro server
  • Fornisci i dati crittografati al commerciante
  • Fai decrittografare i dati nel browser utilizzando il suo codice privato

L'idea era di usare JavaScript e la libreria jsencrypt .

Vedi problemi di sicurezza in questo flusso di lavoro? Pensi che abbiamo ancora bisogno della conformità PCI quando si utilizza un sistema del genere? Il ragionamento è che, per chiunque non abbia la chiave privata, questi sono solo byte casuali.

L'unico attacco a cui riesco a pensare è qualcuno che compromette il server e sostituisce una chiave pubblica mercantile con la propria chiave. Ma poteva anche rubare un gettone per un altro gateway di pagamento e fingere la comunicazione necessaria per fare qualcosa di brutto.

Sappiamo di servizi come Paymill, Braintree e Stripe (che offrono librerie lato client piuttosto buone) ma non sono adatti alla nostra soluzione (o meglio: sono alternative che renderemo disponibili per i commercianti - ma dovrebbe essere a loro decidere).

Grazie in anticipo

EDIT: Sono completamente d'accordo con voi ragazzi e preferirei lavorare con soluzioni di terze parti.

Il problema è che stiamo lavorando in un mercato in cui la maggior parte dei nostri concorrenti sono piccole aziende che lavorano senza la conformità PCI (e la maggior parte di loro anche senza HTTPS !!). I nostri concorrenti ricevono semplicemente dati CC, li memorizzano e danno accesso agli utenti.

Sappiamo dei rischi di tale approccio, ma gli utenti non lo fanno e preferiscono le loro soluzioni ai nostri perché preferiscono avere tutti i dati CC, invece di avere solo i pulsanti per eseguire le azioni.

    
posta framp 01.08.2014 - 02:35
fonte

5 risposte

7

(Divulgazione, lavoro a Braintree)

Se un server fornisce un modulo in cui i clienti immetteranno i numeri delle carte di credito, quel server rientra nell'ambito PCI. Questo è indipendentemente dal fatto che si crittografano i dati nel browser. Il ragionamento qui è che un utente malintenzionato può modificare la pagina inviata al browser per sottrarre i dati della carta di credito dal DOM della pagina prima della crittografia.

Dovresti lavorare con un addetto alla sicurezza qualificato (QSA) o il tuo fornitore di account commerciante per sapere come sarà il tuo processo PCI. Se stai elaborando meno di 1 milione di transazioni, probabilmente sarebbe un processo di autovalutazione. La determinazione del questionario di autovalutazione da compilare si basa sulla quantità di accesso ai dati di titolari di carta e in caso di archiviazione.

    
risposta data 01.08.2014 - 03:14
fonte
1

Esistono molti processori di pagamento di terze parti che ti consentono di utilizzare in modo trasparente le loro forme e il loro trattamento, tra cui paypal, google, worldpay e molti altri. Questo può essere praticamente trasparente per l'utente se configurato correttamente. Questo è il modo migliore per superare i requisiti PCI: non elaborare mai alcuna informazione sulla carta ...

Ci sono alcuni problemi con il tuo schema:

  • In primo luogo è necessario avere la certezza che la pagina e il codice non siano stati manomessi includendo eventuali librerie dipendenti. Quindi HTTPS al minimo ma anche buone pratiche di controllo delle modifiche, ecc.
  • In secondo luogo qualsiasi XSS, XSF, MITB del client potrebbe rubare la propria chiave privata.

Anche le grandi organizzazioni scelgono spesso di attenuare il rischio di gestione delle carte utilizzando processori di terze parti ...

    
risposta data 01.08.2014 - 10:16
fonte
1

Se stai memorizzando i dati della carta sui tuoi server, anche se sono crittografati e non hai la chiave per decrittografarli, allora devi rispettare la versione più elaborata degli standard PCI e usare SAQ- D. Ti suggerisco di non archiviare i dati della carta, ma chiedi al commerciante di conservarlo per te. Quindi dovresti solo usare SAQ-C.

    
risposta data 01.08.2014 - 10:29
fonte
0

John Downey ha dato la risposta migliore, ma solo per approfondire il problema più grande con questa parte del flusso di lavoro:

Make the merchant generate a private and a public key

Store the private key inside his browser using localstorage

Quindi, diciamo che hai una dozzina di commercianti con chiavi pubbliche e private memorizzate nei loro browser.

Non memorizzi le chiavi ma il tuo server ha un qualche buco di sicurezza.

Un utente malintenzionato ottiene il controllo del tuo server.

L'attaccante modifica le pagine che i tuoi commercianti useranno, aggiungendo alcuni dei loro javascript / etc.

La prossima volta che i commercianti accedono, il javascript recupera la chiave privata e la invia all'autore dell'attacco.

L'hacker ora ha quasi tutte le chiavi private.

Tutti i dati inviati ai commercianti sono ora aperti perché sono stati in grado di ottenere il controllo del tuo server.

    
risposta data 01.08.2014 - 18:48
fonte
0

Gli standard PCI esistono per una ragione. Mentre il processo per raggiungere quel livello di sicurezza può essere arduo, è necessario proteggere i dati del tuo cliente . Parliamoci chiaro di ciò; non sono solo i tuoi dati, sono dati che i tuoi clienti hanno affidato a te e se non riesci a proteggerli usando le migliori pratiche ragionevoli, la tua azienda si sta aprendo a livelli di responsabilità enormi e paralizzanti.

Se non vuoi fare tutto ciò che è coinvolto nell'elaborazione dei pagamenti, è molto meglio lavorare con un venditore di pagamenti. Oggi possono rendere il processo di pagamento semplice e senza intoppi, con un minimo dispiacere per i tuoi clienti.

    
risposta data 12.06.2015 - 22:59
fonte