Firma y verificación de firmas de aplicaciones Android


Firma de Aplicaciones

La Firma de Aplicaciones es el proceso mediante el cual un APK (Android Package) se firma con una clave privada que identifica de manera única al desarrollador de la app. Este proceso asegura que la app proviene del desarrollador mencionado sin haber sido alterada después de haber sido firmada. Aquí tienes un desglose detallado:

Generación de un Keystore

  • Los desarrolladores crean un keystore, un archivo binario que contiene claves criptográficas. Este keystore contiene una clave privada que se utiliza para firmar el APK.
  • El keystore está protegido por una contraseña, que debe mantenerse segura para prevenir el acceso no autorizado.

Firma del APK

  • Durante o después del proceso de construcción, el APK se firma utilizando la clave privada almacenada en el keystore.
  • Este proceso genera una firma digital mediante una función hash, creando un resumen único del contenido del APK.
  • El resumen se cifra con la clave privada del desarrollador, y el resultado se almacena dentro del APK.

Inclusión del Certificado

  • El APK incluye un certificado que contiene la clave pública correspondiente a la clave privada utilizada para la firma.
  • Este certificado se utiliza para verificar la firma digital durante el proceso de instalación.

¿Por qué es importante la Firma de Aplicaciones?

  • Garantiza Autenticidad: Confirma la identidad del desarrollador de la app.
  • Protege Integridad: Asegura que la app no ha sido alterada desde que fue firmada.
  • Permite Actualizaciones Seguras: Garantiza que las actualizaciones provienen del desarrollador original, ya que las actualizaciones deben estar firmadas con la misma clave.

Verificación de la Firma

La Verificación de la Firma es el proceso mediante el cual el sistema operativo Android verifica la firma digital de un APK para asegurar su integridad y autenticidad antes de la instalación. Consulta este post en Reddit sobre cómo verificar fácilmente la firma/autenticidad de un APK y luego vuelve aquí para leer cómo funciona la verificación:

Extracción del Certificado

Cuando se descarga un APK y se inicia la instalación, el dispositivo extrae el certificado que contiene la clave pública del APK.

Desencriptación de la Firma

  • El dispositivo usa la clave pública extraída del certificado para desencriptar la firma digital incrustada en el APK.
  • La desencriptación produce el hash original (resumen) que se generó durante el proceso de firma.

Generación del Hash

Independientemente, el dispositivo genera su propio hash del contenido del APK. Esto se hace usando la misma función hash utilizada durante el proceso de firma.

Comparación de Hashes

  • El dispositivo compara el hash generado independientemente con el hash desencriptado de la firma digital.
  • Coincidencia: Si los hashes coinciden, el APK se verifica como auténtico y no alterado, permitiendo que la instalación continúe.
  • No Coincidencia: Si los hashes no coinciden, indica que el APK puede haber sido alterado desde que fue firmado, y la instalación se bloquea.

¿Por qué es importante la Verificación de Firmas?

  • Valida Autenticidad: Asegura que el APK fue firmado por el desarrollador indicado.
  • Mantiene Integridad: Confirma que el APK no ha sido modificado desde que fue firmado.
  • Protege a los Usuarios: Bloquea potencialmente APKs maliciosos de ser instalados.

¿Qué Firma Debo Elegir si una App tiene Múltiples Firmas?

La mayoría de las apps tienen una sola firma válida, pero algunas pueden tener más. Necesitas hacer coincidir la firma del APK con la que ya está instalada en tu dispositivo para evitar errores de actualización.

Razones para Múltiples Firmas

  • Rotación de Claves: Android 9 permite a los desarrolladores cambiar las claves de firma. Esto se debe al Esquema de Firma APK v3.
  • Canales de Distribución: Las apps de diferentes fuentes (por ejemplo, Play Store, Github) pueden tener diferentes firmas.
  • Apps del Sistema: Las claves de firma para apps del sistema pueden variar según el dispositivo o la versión del sistema operativo.
  • Casos Inexplicados: Algunas apps como Files de Google y Play services simplemente tienen múltiples firmas.

Cómo Identificar la Firma Correcta:

  1. AndroidFreeware tiene un sofisticado Verificador de APK que realiza chequeo de permisos Android, detecta banderas y filtros peligrosos, calcula checksums md5, sha1, sha256, y realiza chequeos antivirus de VirusTotal.
  2. Usa herramientas como My APK para ver las firmas de las apps.
  3. Usa el enfoque de Prueba y Error. Instala diferentes APKs hasta que la actualización funcione, luego recuerda la firma correcta para futuras actualizaciones.
  4. Sube la app a APKMirror usando ML Manager para encontrar la firma existente.
  5. Algunas herramientas de escritorio pueden encontrar la firma de un archivo apk. Entre ellas están apksigner de Google, el keytool de IBM, y print-apk-signature de Warren Bank.

Contenido