¿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 .
- ¿Cómo puedo configurar IntelliJ IDEA para aplicaciones android en un MAC
- ¿Cómo puedo obtener el nombre del paquete del lanzador actual en android 2.3 y superior?
- Uso de URLs absolutas con Retrofit
- ¿Limpiar la caché de la aplicación mediante programación?
- ¿Por qué ArgumentCaptor no coincide correctamente?
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?
- La mejor manera de recuperar / formatear datos mediante Firebase Java API
- Comparar la actividad de getCallingActivity con otra
- Calcular la frecuencia cardíaca de la corriente ECG - java / Nymi Band
- Cómo implementar Page Curl en MuPDF
- Cadena que contiene caracteres especiales convertidos a la representación de escape en Android - cómo evitar esto?
- ¿Por qué no puedes pasar lista (no ArrayList) entre actividades?
- ¿Cómo puedo incluir MIMETYPE_TEXT_PLAIN en la creación de un objeto ClipData?
- KnoxVpnUidStorageknoxVpnSupported El valor API devuelto es falso
¿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?