Firma de aplicaciones de Android: cómo funciona y por qué es importante
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.
- 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:
- 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.
- 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:
- V1 (Firma de tarro): Firma archivos individuales dentro del APK (ZIP). Esto es lento porque el sistema operativo tiene que descomprimir y verificar cada archivo. También es vulnerable a ciertas manipulaciones ZIP.
- V2 (esquema de firma APK): Firma todo el bloque binario del APK. No es necesario descomprimirlo para verificarlo, lo que lo hace increíblemente rápido. Fue introducido en Android 7.0 (Nougat).
- V3 (rotación de clave): amplía V2 agregando un "linaje" de claves. Permite al desarrollador demostrar que una nueva clave es la sucesora autorizada de una anterior. Introducido en Android 9.0 (Pie).
- V4 (Firma en streaming): Diseñado específicamente para instalaciones incrementales, lo que permite verificar las aplicaciones mientras aún se están descargando a través de USB o Wi-Fi.
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á:
- El Nombre común (CN) del firmante (por ejemplo, "Android").
- El Período de validez del certificado.
- El Huellas dactilares SHA-1/SHA-256.
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:
- 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.
- 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.
- 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".
- 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.
- 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:
- Tienes Aplicación X versión 1.0 instalado desde Play Store.
- Descargas Aplicación X versión 1.1 desde una fuente que no es Play.
- El sistema operativo ve el mismo nombre de paquete (com.example.app), pero el APK está firmado con un certificado diferente (la clave de firma de la fuente secundaria, no la del editor original). Se niega a instalar.
Esto sucede de dos maneras en la práctica:
- 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ó.
- 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:
- El validez importa: 10000 días (aproximadamente 27 años) es el valor convencional porque el sistema operativo trata las actualizaciones firmadas con una clave casi caducada o caducada como comprometidas. Genere una clave de larga duración una vez y protéjala.
- Una vez publicado, no es posible cambiar de clave fácilmente. El esquema de firma v3 agrega la clave rotación como una característica explícita: un certificado antiguo "bendice" uno nuevo a través de una prueba almacenada, lo que permite que el sistema operativo acepte actualizaciones de la nueva clave preservando al mismo tiempo la continuidad de la identidad. Sin v3, perder la clave original significa dejar huérfanas todas las instalaciones existentes.
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 ahoraErrores comunes al firmar
- 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.
- 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.
- 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.