Google 致力于为黑人社区推动种族平等。查看具体举措
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Firma de aplicaciones

La firma de aplicaciones permite a los desarrolladores identificar al autor de la aplicación y actualizar su aplicación sin crear interfaces y permisos complicados. Cada aplicación que se ejecuta en la plataforma Android debe estar firmada por el desarrollador . Las aplicaciones que intentan instalarse sin estar firmadas serán rechazadas por Google Play o el instalador del paquete en el dispositivo Android.

En Google Play, la firma de aplicaciones une la confianza que Google tiene con el desarrollador y la confianza que el desarrollador tiene con su aplicación. Los desarrolladores saben que su aplicación se proporciona, sin modificaciones, al dispositivo Android; y los desarrolladores pueden ser responsables del comportamiento de su aplicación.

En Android, la firma de aplicaciones es el primer paso para colocar una aplicación en su Application Sandbox. El certificado de aplicación firmado define qué ID de usuario está asociado con qué aplicación; diferentes aplicaciones se ejecutan con diferentes ID de usuario. La firma de aplicaciones asegura que una aplicación no pueda acceder a ninguna otra, excepto a través de una IPC bien definida.

Cuando se instala una aplicación (archivo APK) en un dispositivo Android, el Administrador de paquetes verifica que el APK se haya firmado correctamente con el certificado incluido en ese APK. Si el certificado (o, más exactamente, la clave pública en el certificado) coincide con la clave utilizada para firmar cualquier otro APK en el dispositivo, el nuevo APK tiene la opción de especificar en el manifiesto que compartirá un UID con el otro de manera similar. APKs firmados.

Las aplicaciones pueden ser firmadas por un tercero (OEM, operador, mercado alternativo) o autofirmadas. Android proporciona firma de código mediante certificados autofirmados que los desarrolladores pueden generar sin ayuda o permiso externos. Las solicitudes no tienen que estar firmadas por una autoridad central. Actualmente, Android no realiza la verificación de CA para los certificados de aplicaciones.

Las aplicaciones también pueden declarar permisos de seguridad en el nivel de protección de firmas, restringiendo el acceso solo a las aplicaciones firmadas con la misma clave y manteniendo distintos UID y entornos de prueba de aplicaciones. Se permite una relación más estrecha con un entorno de pruebas de aplicaciones compartido a través de la función de UID compartido, donde dos o más aplicaciones firmadas con la misma clave de desarrollador pueden declarar un UID compartido en su manifiesto.

Esquemas de firma de APK

Android admite tres esquemas de firma de aplicaciones:

Para una máxima compatibilidad, firme aplicaciones con todos los esquemas, primero con v1, luego v2 y luego v3. Los dispositivos Android 7.0+ y más nuevos instalan aplicaciones firmadas con esquemas v2 + más rápidamente que aquellos firmados solo con esquema v1. Las plataformas Android más antiguas ignoran las firmas v2 + y, por lo tanto, necesitan que las aplicaciones contengan firmas v1.

Firma JAR (esquema v1)

La firma de APK ha sido parte de Android desde el principio. Se basa en JAR firmado . Para obtener detalles sobre el uso de este esquema, consulte la documentación de Android Studio sobre cómo firmar su aplicación .

Las firmas v1 no protegen algunas partes del APK, como los metadatos ZIP. El verificador de APK debe procesar muchas estructuras de datos que no son de confianza (aún no verificadas) y luego descartar los datos que no están cubiertos por las firmas. Esto ofrece una superficie de ataque considerable. Además, el verificador de APK debe descomprimir todas las entradas comprimidas, lo que consume más tiempo y memoria. Para abordar estos problemas, Android 7.0 introdujo APK Signature Scheme v2.

APK Signature Scheme v2 y v3 (v2 + esquema)

Los dispositivos que ejecutan Android 7.0 y versiones posteriores admiten el esquema de firmas APK v2 (esquema v2) y posteriores. (El esquema v2 se actualizó a v3 en Android 9 para incluir información adicional en el bloque de firma, pero por lo demás funciona de la misma manera). El contenido del APK se procesa y firma, luego el bloque de firma del APK resultante se inserta en el APK. Para obtener detalles sobre cómo aplicar el esquema v2 + a una aplicación, consulte APK Signature Scheme v2 .

Durante la validación, el esquema v2 + trata el archivo APK como un blob y realiza la comprobación de firmas en todo el archivo. Cualquier modificación del APK, incluidas las modificaciones de los metadatos ZIP, invalida la firma del APK. Esta forma de verificación de APK es sustancialmente más rápida y permite la detección de más clases de modificaciones no autorizadas.

El nuevo formato es compatible con versiones anteriores, por lo que los APK firmados con el nuevo formato de firma se pueden instalar en dispositivos Android más antiguos (que simplemente ignoran los datos adicionales agregados al APK), siempre que estos APK también tengan la firma v1.

Proceso de verificación de firma APK

Figura 1. Proceso de verificación de la firma de APK

El hash de archivo completo del APK se verifica con la firma v2 + almacenada en el Bloque de firma de APK. El hash cubre todo excepto el APK Signing Block, que contiene la firma v2 +. Cualquier modificación al APK fuera del bloque de firma de APK invalida la firma v2 + del APK. Los APK con la firma v2 + eliminada también se rechazan, porque su firma v1 especifica que el APK tenía la firma v2, lo que hace que Android 7.0 y las versiones posteriores se nieguen a verificar los APK con sus firmas v1.

Para obtener detalles sobre el proceso de verificación de la firma APK, consulte la sección Verificación de APK Signature Scheme v2.