sta utilizzando MD5 un motivo sufficiente per rifiutare questo processore pagamenti?

8

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:

  1. la mia chiave segreta,
  2. il mio id commerciante,
  3. l'importo della transazione e
  4. 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.

    
posta David Alan Hjelle 17.04.2013 - 16:58
fonte

3 risposte

12

Questo "sigillo antimanomissione" è un MAC fatto in casa , e non buono.

Che MD5 è "rotto" non ha alcuna rilevanza qui. MD5 è rotto per collisioni e le collisioni non hanno alcun impatto sulla tua situazione. Ciò che potrebbe essere una preoccupazione è attacchi di estensione della lunghezza . Questo perché MD5 è una funzione Merkle-Damgård . Ciò significa che quando MD5 elabora un messaggio m , fa quanto segue:

  • Il messaggio m è riempito con una sequenza di bit p , che ha una lunghezza compresa tra 65 e 576 bit (inclusi), in modo che la lunghezza totale di m || p è un multiplo di 512. p dipende dalla lunghezza di m , ma non dal contenuto di m .
  • La stringa imbottita m || p è divisa in blocchi da 512 bit.
  • MD5 elabora ciascun blocco in sequenza, utilizzando uno stato a 128 bit che è il risultato dell'elaborazione del blocco precedente. L'output hash è l'output dell'elaborazione dell'ultimo blocco.

Ora immagina che l'attaccante possa vedere uno dei tuoi "sigilli a prova di manomissione". Il sigillo è un hash di alcuni m che l'attaccante non conosce (inizia con la tua chiave segreta). Tuttavia, l'autore dell'attacco potrebbe fare una buona ipotesi alla lunghezza di m . Quindi, l'attaccante può calcolare p . Ora, l'attaccante sceglie una stringa m ', arbitrariamente. L '"attacco di estensione della lunghezza" è che può calcolare MD5 ( m || p || m' ) anche senza conoscere m , perché conosce lo stato di MD5 quando ha elaborato m || p : questo è esattamente il tuo valore di "sigillo a prova di manomissione". Può quindi usarlo come punto di partenza per elaborare i blocchi in cui m ' si trova.

Ciò che potrebbe salvarti nel tuo caso sono i due seguenti punti:

  1. Anche se l'attaccante può scegliere m ' arbitrariamente, può solo aggiungere , con il padding p in mezzo. Il suo obiettivo è calcolare un hash per una transazione sintatticamente valida. A seconda della codifica effettiva della "quantità" e "tipo di transazione", l'autore dell'attacco può o non può progettare alcuni m ' tali che m || p || m' ha ancora un senso sul lato server.

  2. L'attaccante deve osservare un valore di "sigillo" per iniziare. Dal momento che sono trasmessi con HTTPS, questo potrebbe rivelarsi difficile per lui.

Nota importante: l'attacco dell'estensione di lunghezza funzionerebbe esattamente allo stesso modo (modulo alcuni dettagli di endianness in p ) con SHA-256. Questo non sfrutta uno specifico punto debole di MD5.

Il modo corretto per calcolare un MAC è HMAC . HMAC utilizza una funzione di hash sottostante come MD5 o SHA-256, ma lo fa "in modo intelligente", con due invocazioni annidate, proprio per evitare problemi come l'attacco di estensione della lunghezza.

Per quanto riguarda la tua domanda esatta: no, non penso che questo sia un motivo per rifiutare di fare affari con queste persone. Dopotutto, il MAC non è una "prova", nonostante il suo nome. Questa è crittografia simmetrica: per verificare il sigillo, il server deve conoscere anche il tuo valore segreto. Corrispondentemente, il server ha il potere tecnico di produrre valori di sigillo "finto". In caso di controversia tra te e il responsabile della carta di credito, potresti indicarlo: il sigillo non può essere usato come prova contro di te, durante il contenzioso.

Questo sigillo è ciò di cui hanno bisogno per autenticarti, quindi è, fondamentalmente, la loro responsabilità. Ti suggerisco di lasciare i loro problemi nelle loro mani. Potresti voler sollevare il problema come avvertimento cortese, però. Qualcosa del tipo: "sai, per una buona tenuta, è meglio usare una soluzione approvata NIST standard come HMAC / SHA-256, piuttosto che un meccanismo homegrown non standard con MD5 (di dubbia reputazione)". I noti punti deboli di MD5 (rispetto a SHA_256) non hanno un impatto pratico sulla sicurezza in questo caso specifico, ma il nome "MD5" e la sua cattiva stampa possono ancora essere efficaci come leva diplomatica.

    
risposta data 17.04.2013 - 17:36
fonte
1

Se lo usano come firma concat (effettivamente, questo è quello che è - garantisce che i parametri non sono stati manomessi), e vedendo l'ordine dei parametri, oserei dire che MD5, pur non essendo la scelta migliore sulla Terra, non è così male come potrebbe sembrare.

Le collisioni tra prefissi eletti sono banali (ordine di 2 ^ {50}) da generare nella seguente situazione:

  • conosci hash (p1 // m1) ( True )
  • conosci p1 ( False . Il tuo prefisso è la tua chiave privata, che dovrebbe essere privata)
  • scegli un secondo prefisso p2

Gli attacchi con prefisso scelto non si applicano necessariamente. Non solo, ma per forgiare efficacemente una transazione, ti piacerebbe cambiare un segmento dell'hash, mantenendo tutti gli altri costanti (non vuoi una chiave pubblica o privata diversa, se dovessi falsificare qualcosa, cambieresti solo la quantità).

Quindi, in realtà, non è il massimo (HMAC-SHA256 è solitamente usato per questo scopo), ma fa il trucco ed è relativamente sicuro (per un dato valore di parente). Personalmente baserei il rifiuto / l'accettazione in base alle somme dovute e al pagamento dell'assicurazione del fornitore di pagamento nel caso di una transazione falsata che non è stata colpa tua.

    
risposta data 17.04.2013 - 17:08
fonte
0

Sarebbe meglio se usassero SHA-256. Tuttavia, il design sembra un attacco contraffatto a forza bruta che sarebbe piuttosto costoso dal punto di vista computazionale. Penso che un aggressore abbia maggiori probabilità di tentare di aggirarlo tramite malware, MITM o ingegneria sociale. Onestamente, raramente cercano di passare attraverso la crittografia a meno che non si tratti di un hash delle password mal fatto. Il processore di pagamento potrebbe essere utile se altri aspetti di un accordo commerciale sembrano buoni.

    
risposta data 17.04.2013 - 20:07
fonte

Leggi altre domande sui tag