¿Cómo funciona la comprobación de la aplicación / firma de Android?

Quiero preámbra esta pregunta con dos cosas para poder acotar donde mi pregunta real es:

A) He hecho dev software antes, aunque nunca para android

B) Estoy familiarizado con PKI y cifrado y hash y firmas digitales y bla bla bla

Dicho esto, estoy teniendo problemas para localizar más información sobre dónde y cómo Android verifica a los creadores de aplicaciones. He escuchado una gran cantidad de información diferente por lo que estoy tratando de sintetizar para tener una mejor idea del flujo de trabajo.

Sé que cada desarrollador de aplicaciones obtiene su propio par de claves públicas / privadas y firman sus aplicaciones al hashing el APK (con SHA-1 la mayoría de las veces si no me equivoco) y ahí tienes. Lo subes y (creo) la clave pública va en META INF dentro del APK. Esto lo entiendo mucho.

Mi pregunta es cómo se relaciona esto cuando un usuario descarga la aplicación en sí. Sé que el teléfono comprueba para asegurarse de que la aplicación está firmada válidamente, y que la firma también tiene información sobre el autor y etc incluido. Pero también he leído que las aplicaciones están auto-firmadas y que Google Play (o lo que sea que estén llamando al Market ahora) no implementa una CA, y que no hay autenticación de identidad? Pero mi pregunta es ¿qué, entonces, impide que la gente cargue una aplicación con otro nombre de desarrolladores (crowdsourcing a un lado)?

Si el teléfono sólo busca firmas válidas, ¿significa que el único medio de autenticación se realiza cuando se carga la aplicación? Y si ese es el caso, ¿cómo lo comprueba el mercado de aplicaciones? ¿Es el habitual – utilizar la clave privada en el archivo y verificar la firma? ¿O el desarrollador tiene que proporcionar al mercado con su clave privada para autenticar?

En resumen, Android y Google Play esencialmente no se preocupan por lo que está en el certificado real. Google Play lo validará de hecho y comprobará si es válido por 30 años o más, pero en realidad no utilizan (por lo menos actualmente, AFAIK) la información real en el cert. Usted podría utilizar su propio nombre / nombre de compañía en el CN, pero nadie validará esto, y los usuarios no verán esta información en absoluto. Lo que Android hace es:

  • Revise la firma para asegurarse de que el APK no ha sido manipulado
  • A continuación, compare el certificado de canto como un blob binario con el de la versión actualmente instalada de la aplicación para asegurarse de que las dos versiones han sido firmadas con la misma clave / certificado (por ejemplo, por la misma persona o empresa)
  • Hace lo mismo para reforzar el permiso si está utilizando el uso de sharedUid o permisos de firma con dos o más aplicaciones.

Por lo tanto, para responder a su pregunta, alguien puede crear fácilmente un certificado con su nombre en él, pero Android y Google Play realmente no importa. Siempre y cuando no tengan su clave privada, no podrán producir una firma de aplicación que sea la misma que la suya y, por lo tanto, no podrían sobrescribir / actualizar su aplicación con la suya ni obtener ningún permiso especial .

  • Cifrado RSA en Java: ¿Problemas de plataforma cruzada?
  • Detectar mediante programación si un dispositivo Android es capaz de hacer cifrado de almacenamiento
  • ¿Dónde almacenar las claves del algoritmo de cifrado?
  • ¿Cómo almacenar módulo, exponente público y exponente privado de forma segura en Android?
  • Hacer que el teclado Android resista a los ataques de KeyLogger
  • Cómo proteger los datos de intención mientras lo envía a través de aplicaciones
  • Descifrar Android SSE con OpenSSL
  • Error de cifrado en Android 4.2
  • AES128 Descifrado: javax.crypto.badpaddingexception pad block dañado
  • Almacenar el secreto del cliente de forma segura
  • Cifrado del dispositivo Android ICS
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.