Come dovrei proteggere i pagamenti in-app Android quando si utilizza un server separato?

9

Attualmente sto implementando i pagamenti in-app Android e mi sto chiedendo quali sono i vettori di attacco che dovrei cercare.

Ho una semplice applicazione per visualizzare il contenuto generato dal server. Voglio consentire all'utente di acquistare ulteriori access in-app e vorrei sapere come comunicare una transazione riuscita al server.

Un breve riepilogo del funzionamento dei pagamenti in-app Android:

  • L'app invia l'utente ad Android Market con il prodotto da acquistare
  • L'app viene informata dal Market al termine della transazione.
  • L'app richiede le informazioni sulla transazione utilizzando un nonce.
  • Google invia una risposta all'app con il record della transazione, ripetendo il nonce, firmata con una chiave privata specifica per sviluppatore.
  • L'app può controllare i dati utilizzando il nonce e la firma (+ chiave pubblica).
  • [aggiornamento]: le transazioni Android includono sempre un timestamp e la mia app aggiunge un GUID per identificare il client. (entrambi sono nel record della transazione firmato)

Maggiori informazioni qui: link

Il mio piano attuale è di inviare il record completo della transazione al server e verificare la chiave pubblica sul server.

Alcune domande che ho:

  • Il mio piano è intrinsecamente imperfetto?
  • È preferibile generare e controllare anche il lato nonce server? Perché questo nonce viene comunque utilizzato?
  • È necessario (preferibile) utilizzare HTTPS quando si comunica con il server?

Non sto proteggendo i dati privati o top-secret, ma non voglio renderlo facile per un utente malintenzionato.

    
posta beetstra 23.05.2011 - 16:50
fonte

1 risposta

6

L'eventuale difetto che vedo è quello che chiedi nella tua seconda domanda. È preferibile ricontrollare tutto il lato server e considerare non attendibile qualsiasi cosa fatta su un client (anche se proveniente dalla propria app). In questo caso particolare, non vedo un problema inerente, ma i controlli sul lato client aprono la porta solo se viene scoperto un difetto lungo la strada.

Il nonce si comporta come un sale sulla transazione, in modo simile al modo in cui * i sistemi nix memorizzano le password. Il nonce viene utilizzato per aggiungere entropia al valore crittografato con la chiave, eliminando in gran parte la possibilità che due transazioni siano crittografate e producano la stessa firma e altri attacchi crittografici simili.

Io, da paranoico, direi che è necessario comunicare in HTTPS quando si parla di soldi che cambiano di mano. Con la trasmissione in chiaro, cosa mi impedisce di intercettare i record completi delle transazioni sui miei Starbucks e di inviarli come transazioni mie, tra le altre azioni cattive?

    
risposta data 30.05.2011 - 04:08
fonte

Leggi altre domande sui tag