¿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
- Android cifrar / descifrar sqlite base de datos 100% seguro
- ¿Cifrado de archivos de vídeo?
- Procesar el valor de preferencia antes de guardar en Android?
- Transferencia PrivateKey de KeyStore, uso en OpenSSL con JNI
- Error de descifrado en Android 4.4
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?
- Compartir y almacenar RSA - clave pública en el servidor java y viceversa
- ¿Es posible escribir un wifi cracking util para teléfonos Android? Modo de monitor vs Multicast?
- ¿Cifrar la base de datos SQLite sin aumentar el tamaño de la aplicación?
- Método no encontrado con DigestUtils en Android
- Android cómo proteger contenido en el directorio de documentos
- Descifrar audio / video sobre la marcha a MediaPlayer
- ¿Es el intercambio de archivos Bluetooth completamente seguro?
- Cómo utilizar Netcipher con Retrofit en android?
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 .
- PhoneGap plugin de Android para la grabación de audio de mayor calidad?
- Aplicación de Android y myBatis