Firma de aplicaciones de Android: cómo funciona y por qué es importante

A brass key on a smartphone showing a verified checkmark, illustrating Android app signing

Cada vez que instalas una aplicación en tu teléfono Android, se realiza en segundo plano una comprobación de seguridad silenciosa pero crítica. Su teléfono verifica el firma digital del paquete APK. Este protocolo de enlace criptográfico es lo que evita que los piratas informáticos malintencionados "envenenen" sus aplicaciones con malware y, al mismo tiempo, garantiza que los desarrolladores puedan enviar actualizaciones sin perder su identidad.

Si escribes aplicaciones, firmar es algo que simplemente debes hacer bien; Si simplemente te gusta jugar con Android, es una de las partes del sistema más satisfactorias de entender. De cualquier manera, cómo funciona la firma de aplicaciones vale la pena. A continuación, analizamos la tecnología, cómo evolucionaron los esquemas de firma y cómo puede verificar certificados manualmente en línea.

Lo que aprenderás en este artículo
  • Por qué cada aplicación de Android debe estar firmada y qué criptografía implica (RSA/EC).
  • La diferencia entre los esquemas de firma v1 (JAR), v2, v3 y v4, y cuál debería usar su aplicación hoy.
  • Cómo decide Android si permite una actualización en función de la continuidad de la firma.
  • Cómo la rotación de claves permite a un desarrollador cambiar su clave de firma sin interrumpir las instalaciones existentes.
  • Cómo verificar tú mismo la firma de cualquier APK, en la línea de comando o con nuestro verificador basado en navegador.

¿Qué es la firma de aplicaciones?

En esencia, la firma de aplicaciones es un proceso en el que un desarrollador utiliza un Clave privada para generar un bloque de firma para los archivos de su aplicación. Luego, el Clave pública correspondiente se incrusta en el APK dentro de la carpeta META-INF. Cuando su teléfono intenta instalar la aplicación, utiliza la clave pública para verificar si la firma coincide con el contenido del archivo.

Esto proporciona dos propiedades principales:

  1. Inmutabilidad: Si se cambia un solo byte del código de la aplicación (por ejemplo, por un troyano), la firma ya no coincidirá con el archivo y Android se negará a instalarlo.
  2. Documentos de identidad: Si una aplicación intenta actualizar una existente, sus firmas deben coincidir. Es por eso que no puedes instalar una aplicación de Facebook manipulada en lugar de la oficial.

Evolución de los esquemas de firma

Google ha actualizado continuamente el mecanismo de firma para mejorar tanto la velocidad como la seguridad:

Por qué son importantes los certificados para la transferencia local

Cuando descargas un APK de una fuente no oficial, el Hash de certificado es tu mejor amigo. Una huella digital de certificado (como un hash SHA-256) identifica de forma única la clave de firma del desarrollador. Cada aplicación mantiene la misma clave de firma en todas sus actualizaciones, por lo que puede comparar la huella digital de un APK con el valor publicado por el desarrollador para confirmar que es genuino.

Si sospecha que un APK es falso, debe ejecutarlo a través de nuestro Verificador de APK en línea. Nuestra herramienta le mostrará:

Cómo Android verifica una firma en el momento de la instalación

El paso "verificar el certificado" a menudo se pasa por alto que vale la pena analizar lo que realmente hace el sistema operativo cuando tocas un APK y Android decide si instalarlo:

  1. Abra el APK como ZIP y localice el bloque de firma. Para firmas v2/v3, es un bloque estructurado inmediatamente antes del directorio central; para el esquema heredado v1, es el contenido de META-INF/*.RSA, *.DSA o *.EC.
  2. Calcule resúmenes SHA-256 de cada dos bytes del APK. El bloque de firma está excluido de su propio resumen; todo lo demás se procesa en fragmentos definidos.
  3. Verifique el resumen de cada fragmento con los resúmenes registrados en el bloque de firma. Si se ha modificado incluso un solo byte desde que el desarrollador firmó el archivo, los resúmenes no coincidirán y la instalación se rechazará con un error genérico "Aplicación no instalada".
  4. Verifique que el bloque de firma se haya producido con la clave privada del certificado. La clave pública del certificado se utiliza para comprobar la firma criptográfica en el bloque. Una verificación exitosa significa que quien firmó el archivo poseía la clave privada asociada con este certificado.
  5. Compare la huella digital del certificado con cualquier instalación existente del mismo nombre de paquete. Si el paquete ya está instalado y el nuevo APK está firmado con un certificado diferente, la instalación se rechaza con INSTALL_FAILED_UPDATE_INCOMPATIBLE. Esta es la principal defensa contra la suplantación de identidad del sistema operativo: un actor malintencionado no puede reemplazar la aplicación de su banco con su propia copia a menos que también haya robado la clave de firma del banco.

Nada de esto prueba que el desarrollador sea confiable, solo que el archivo que está a punto de instalar es idéntico en bytes al que firmó y que ninguna otra parte lo ha manipulado. La confianza en el desarrollador es una decisión independiente y se toma al decidir desde qué fuentes instalar.

Lo que realmente significa "no coincide la firma"

La sorpresa más común que la gente encuentra al realizar la descarga es el error de "no coincidencia de firma" en la actualización. Esto es lo que realmente está sucediendo:

Esto sucede de dos maneras en la práctica:

  1. El APK de terceros es genuinamente de un editor diferente, por ejemplo, una copia "modificada" o "parcheada". Rechazar la instalación es el comportamiento correcto; instalarlo significaría confiarle a un extraño los mismos datos que la aplicación de su banco ya tocó.
  2. El APK de terceros es una recarga del APK oficial, pero el sistema de firma de aplicaciones Play de Google firma la descarga de cada usuario con el contenedor subir clave del usuario. A veces, dos dispositivos pueden ver datos de firma ligeramente diferentes para la misma versión conceptual de la aplicación. En ese caso, la huella digital del certificado en la raíz aún coincide; Puedes verificar con nuestro Verificador de APK.

Si la huella digital del certificado realmente difiere de su instalación existente, la única forma de avanzar es desinstalar primero la copia actual (perdiendo sus datos) antes de descargar el reemplazo, nunca deshabilitar la verificación de firma.

Generar su propia clave de firma (para desarrolladores)

Si está creando aplicaciones para Android, eventualmente necesitará firmar sus propias compilaciones. El comando estándar de una línea que utiliza keytool desde un SDK de Java es:

keytool -genkeypair -v \
        -keystore my-release.keystore \
        -alias my-app -keyalg RSA -keysize 2048 \
        -validity 10000

Dos cosas que debes saber:

Para compilaciones de prueba descargadas, un almacén de claves de depuración sin firmar está bien; para producción, utilice un almacén de claves de larga validez protegido con contraseña y almacenado en una copia de seguridad fuera de línea.

Verifique la identidad de la aplicación como un profesional

No confíes en los nombres de archivos genéricos. Consulta el corazón criptográfico de tus APK en segundos.

Verificar certificados ahora

Errores comunes al firmar

  1. Certificados autofirmados: La mayoría de las aplicaciones de Android están autofirmadas. A diferencia de SSL para sitios web, no existe una autoridad central para la firma de aplicaciones de Android. Debes confiar directamente en el desarrollador.
  2. Certificados de depuración: Las aplicaciones creadas para pruebas utilizan una clave genérica de "depuración". Estas aplicaciones nunca deben hacerse públicas y están bloqueadas por muchos filtros de seguridad.
  3. Pérdida de clave: Si un desarrollador pierde su almacén de claves privadas, puede nunca actualizar su aplicación nuevamente. Tendrían que lanzar una aplicación "Nueva" con un nombre de paquete diferente.

Elegir el esquema de firma adecuado para su SDK de destino

La firma de aplicaciones respalda silenciosamente gran parte de la seguridad de Android. Una vez que la relación entre la clave pública y privada hace clic, puede juzgar una aplicación descargada según sus méritos y confirmar que lo que está instalando no ha sido alterado desde que el desarrollador la firmó. Para obtener más información sobre los aspectos internos de Android, consulte nuestro guía para el formato XAPK.

Diseñado y documentado por Mst Shaefale Desarrollador líder y arquitecto de paquetes de Android • Verificado en Android 12–15

Mst Shaefale mantiene la fusión XAPK/APKS del lado del cliente, el analizador de manifiesto binario y las herramientas de firma APK v1+v2 en xapktoapk.com. ¿Detecta un comando obsoleto o un cambio en el sistema operativo? Envíe una nota editorial.