¿Cómo debo proteger los pagos de Android dentro de la aplicación cuando uso un servidor separado?

9

Actualmente estoy implementando pagos de Android en la aplicación, y me pregunto qué vectores de ataque debería tener en cuenta.

Tengo una aplicación simple para ver el contenido generado por el servidor. Quiero permitir que el usuario adquiera acceso adicional en la aplicación y me gustaría saber cómo comunicar una transacción exitosa al servidor.

Un resumen rápido de cómo funcionan los pagos dentro de la aplicación de Android:

  • La aplicación envía al usuario a Android Market con el producto para comprar
  • Market notifica a la aplicación cuando finaliza la transacción.
  • La aplicación solicita información de transacción mediante un nonce.
  • Google envía una respuesta a la aplicación con el registro de la transacción, repitiendo el nonce, firmado con una clave privada específica del desarrollador.
  • La aplicación puede verificar los datos usando el nonce y la firma (+ clave pública).
  • [actualización]: las transacciones de Android siempre incluyen una marca de tiempo, y mi aplicación agrega un GUID para identificar al cliente. (ambos están en el registro de la transacción firmada)

Más información aquí: enlace

Mi plan actual es enviar el registro completo de la transacción al servidor y verificar la clave pública en el servidor.

Algunas preguntas que tengo:

  • ¿Mi plan tiene fallas inherentes?
  • ¿Es preferible generar y verificar también el lado del servidor nonce? ¿Por qué se usa ese nonce de todos modos?
  • ¿Es necesario (preferible) usar HTTPS cuando se comunica con el servidor?

No estoy protegiendo datos privados o de alto secreto, pero no quiero que sea fácil para un atacante.

    
pregunta beetstra 23.05.2011 - 16:50
fuente

1 respuesta

6

El posible defecto que veo es lo que preguntas en tu segunda pregunta. Es preferible volver a verificar todo el lado del servidor y tratar todo lo que se hace en un cliente (incluso si proviene de su propia aplicación) como no confiable. En este caso particular, no veo un problema inherente, pero el lado del cliente solo abre la puerta si se descubre una falla en el camino.

El nonce actúa como un salt en la transacción, similar a cómo los sistemas * nix almacenan las contraseñas. El nonce se usa para agregar entropía al valor que se cifra con su clave, eliminando en gran medida la posibilidad de que dos transacciones estén cifradas y resulten en la misma firma, y otros ataques criptográficos similares.

Yo, como paranoico, diría que es necesario comunicarse en HTTPS cuando se habla de dinero que cambia de manos. Con la transmisión de texto claro, ¿qué me impide interceptar registros de transacciones completos en mis Starbucks y enviarlos como mis propias transacciones, entre otras acciones desagradables?

    
respondido por el queso 30.05.2011 - 04:08
fuente

Lea otras preguntas en las etiquetas