¿Por qué la verificación de firma en el servidor remoto es más segura que en el dispositivo?

La sección Controles de seguridad de la vista general de Facturación en la aplicación indica que se debe realizar una "verificación de firma" en un servidor remoto en lugar de en la aplicación (que se ejecuta localmente en el dispositivo Android):

Al realizar la verificación de la firma, puede ayudar a detectar las respuestas que han sido manipuladas o falsificadas. Puede realizar este paso de verificación de firma en su aplicación; Sin embargo, si su aplicación se conecta a un servidor remoto seguro, le recomendamos que realice la verificación de firma en ese servidor .

Pero si realizo la verificación de firma en el servidor remoto, esperando sólo un yes/no o true/false respuesta true/false , ¿no es esto realmente más fácil de interceptar y modificar por un atacante?

Y si la respuesta del servidor remoto es otra firma, ¿cómo verificar la segunda firma localmente en el dispositivo más seguro que hacerlo para la primera firma (de mercado)?

¿Qué me estoy perdiendo?

Actualización: @alf señaló correctamente que si el servidor también es responsable de entregar el contenido adquirido y la verificación de la firma se realiza en el servidor, el servidor no entregará el contenido comprado mediante la facturación en la aplicación, incluso si el atacante compromete la aplicación. Esto es trivial y bien entendido.

Lo que no mencioné originalmente es que realmente me refiero a un escenario en el que el servidor no entrega ningún contenido, sino que sólo verifica la firma, para que la aplicación pueda decidir si desea desbloquear ciertas funciones . En tal caso, ¿cuál es la ventaja de la verificación de firma de servidor remoto en la aplicación?

¿No es esto realmente más fácil de interceptar y modificar por un atacante?

Si utiliza SSL para comunicarse con el servidor, no puede interceptar y cambiar la respuesta. SSL también verifica la identidad del servidor, por lo que está seguro de que está hablando con su propio servidor, no con el atacante.

En cuanto a por qué realizar la verificación de firma en el servidor, la idea del comentario del documento original es que si lo hace en el cliente, debe almacenar la clave pública dentro de la aplicación. El atacante podría presumiblemente intercambiar la clave por su cuenta, y las firmas generadas por el atacante verifican OK. Puede evitar esto realizando la verificación en el servidor. Sin embargo, las herramientas de cracking de la vida real, como AntiLVL , sólo buscarán el bytecode que devuelve true/false y lo modificará para devolver siempre true .

Porque tiene el control del código de verificación en el servidor. El código en el extremo del dispositivo podría haber sido comprometido.

Si no realiza la verificación de firma en el servidor, el atacante no se molestará con su dispositivo. O, si lo desea, puede descargar su aplicación, descompilarla y simplemente eliminar la verificación. ¿Qué harás contra una aplicación modificada?

  • Dalvik VM error: Excepción encontrada "Javax.xml.namespace.QName.class"
  • ¿Cómo comprobar un número IBAN usando el Apache IBANCheckDigit?
  • ¿Cómo actualizar el lanzador de aplicaciones después de activar / desactivar un alias de actividad?
  • Cómo obtener el nombre checo del mes
  • El paquete no existe cuando se utiliza una aplicación independiente como dependencia
  • Marcadores del centro API V2 de Google maps
  • Android: ¿Cómo leer el archivo en bytes?
  • Sigo recibiendo un error diciendo "no se puede convertir de int a Drawable". Estoy intentando asignar una imagen a lugares. ¿Hay una manera de trabajar alrededor de esto?
  • Android Studio: Buildtools 24.0.1 requiere Java 1.8 o superior.
  • Android: activar programaticamente WiFi hotspot
  • ¿Cómo encontrar todos los archivos con cierta extensión en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.