Sto valutando un processore per carte di credito [1] e ho notato che stanno usando MD5 come parte di un algoritmo di hash salato per proteggere una chiave segreta. Dato che so che MD5 è generalmente considerato rotto, mi sembra una soluzione scadente. È sufficiente un criterio per rifiutarli come nostro processore? È possibile dimostrare un attacco?
(Se questo dovrebbe essere su un altro sito StackExchange, per favore fatemelo sapere.)
Ecco lo scenario specifico, semplificato per i punti salienti.
Credenziali
In primo luogo, ho una "chiave segreta" di 30+ caratteri e simboli alfanumerici. (Dire, TUQ1ICGIIIK/PSBKNDFK=GNKOTHMMDBI
.) Ho anche un "ID commerciante" di 12 cifre. (Dì, 123456789012
.)
Modulo di pagamento accessibile al pubblico
In secondo luogo, il modulo di pagamento semplificato assomiglia a questo. (La forma reale includerebbe altri parametri come nome e indirizzo.)
<form action="https://examplepaymentprocessor.com" method="POST">
<input name="MERCHANT" value="123456789012" />
<input name="TAMPER_PROOF_SEAL" value="d550a25dfb97697f5be928953ee7cfc4" />
<input name="TPS_DEF" value="MERCHANT AMOUNT TRANSACTION_TYPE" />
<input name="AMOUNT" value="10.00" />
<input name="TRANSACTION_TYPE" value="SALE" />
<!-- other input fields for credit card number, contact information, etc. -->
<input type="submit" value="Make Purchase" />
</form>
Il "sigillo antimanomissione" è il "riassunto" di un hash MD5 di, in questo caso, un "messaggio" composto da una concatenazione di stringhe di:
- la mia chiave segreta,
- il mio id commerciante,
- l'importo della transazione e
- il tipo di transazione
Quindi, in questo caso, MD5("TUQ1ICGIIIK/PSBKNDFK=GNKOTHMMDBI12345678901210.00SALE") = d550a25dfb97697f5be928953ee7cfc4
.
TPS_DEF
consente all'utente di specificare il contenuto specifico del messaggio o, se si preferisce, la chiave segreta più un sale. Il messaggio include, come minimo, la chiave segreta, ma potrebbe includere fino a tutti gli altri parametri nel modulo. Il mio esempio include l'ID commerciante, l'importo e il tipo di transazione.
Recupero dati
Il processo per recuperare transazioni di esempio è simile. Tramite un modulo HTML (non accessibile pubblicamente) o un altro metodo all'HTTP POST
, posso ottenere informazioni su una determinata transazione. (Supponiamo di avere un ID di transazione datomi dalla procedura sopra.)
<form action="https://examplepaymentprocessor.com/transaction_status" method="POST">
<input name="MERCHANT" value="123456789012" />
<input name="TAMPER_PROOF_SEAL" value="d550a25dfb97697f5be928953ee7cfc4" />
<input name="TPS_DEF" value="MERCHANT" />
<input name="TRANSACTION_ID" value="1234567890" />
<input type="submit" value="Get Info" />
</form>
Ciò restituirà le informazioni includendo tutti i dettagli di contatto del cliente e le ultime quattro cifre del numero di carta di credito. Nota che, di nuovo, tu (o un utente malintenzionato) puoi specificare TPS_DEF
come desiderato.
Attacco immaginato
Dato che MD5 è vulnerabile a un attacco con prefisso prescelto, ho giocato con HashClash da Mark Stevens , ma sembra che crei due nuovi messaggi con determinati prefissi, piuttosto che creare un secondo messaggio il cui MD5 corrisponda al primo. Sembra, tuttavia, che qualcuno con la propria chiave segreta possa potenzialmente creare una richiesta di stato della transazione che, eseguirà l'hash in modo tale da recuperare i i miei dati anziché i loro.
Domande
- Quanto è probabile che un utente malintenzionato possa falsificare il "sigillo antimanomissione" per imitarmi? ( O per le transazioni contraffatte o per ottenere informazioni sui clienti e sulle transazioni - quest'ultimo è quello che penso sia più probabile.)
- Ci sono altri attacchi che puoi immaginare o dimostrare?
- Rifiuteresti questo processore? (Si noti che sono una coppia perfetta per noi in ogni altro aspetto.)
EDIT 1: La lettura di questa altra domanda mi fa pensare che, dal momento che MD5 è ancora resistente agli attacchi pre-immagine, questa particolare situazione è sicura.
EDIT 2: ho chiarito la mia domanda su un attacco riguardante sia le transazioni contraffatte che le informazioni sui clienti sottratte.
[1] Non nominato qui. Inviami un'email per informazioni specifiche.