Google se compromete a promover la equidad racial para las comunidades negras. Ver cómo.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Firma de solicitud

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. Todas las aplicaciones que se ejecutan en la plataforma Android deben estar firmadas por el desarrollador . Google Play o el instalador del paquete en el dispositivo Android rechazarán las aplicaciones que intenten instalar sin firmar.

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 Sandbox de aplicaciones. 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 aplicación, excepto a través de IPC bien definido.

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 solicitudes pueden ser firmadas por un tercero (OEM, operador, mercado alternativo) o autofirmadas. Android proporciona firma de código utilizando certificados autofirmados que los desarrolladores pueden generar sin asistencia o permiso externo. Las solicitudes no tienen que estar firmadas por una autoridad central. Android actualmente no realiza la verificación de CA para los certificados de la aplicación.

Las aplicaciones también pueden declarar permisos de seguridad en el nivel de protección de Firma, restringiendo el acceso solo a las aplicaciones firmadas con la misma clave mientras mantienen UIDs y Sandboxes de aplicaciones distintos. Se permite una relación más estrecha con un Application Sandbox compartido a través de la función UID compartida 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 obtener la máxima compatibilidad, firme aplicaciones con todos los esquemas, primero con v1, luego v2 y luego v3. Android 7.0+ y dispositivos más nuevos instalan aplicaciones firmadas con esquemas v2 + más rápidamente que aquellas firmadas solo con esquema v1. Las plataformas Android más antiguas ignoran las firmas v2 + y, por lo tanto, necesitan aplicaciones que contengan firmas v1.

Firma JAR (esquema v1)

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

Las firmas v1 no protegen algunas partes del APK, como los metadatos ZIP. El verificador APK necesita procesar muchas estructuras de datos no confiables (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 APK debe descomprimir todas las entradas comprimidas, consumiendo más tiempo y memoria. Para abordar estos problemas, Android 7.0 introdujo el APK Signature Scheme v2.

APK Signature Scheme v2 y v3 (v2 + esquema)

Los dispositivos con Android 7.0 y versiones posteriores admiten el esquema de firma APK v2 (esquema v2) y versiones posteriores. (El esquema v2 se actualizó a v3 en Android P para incluir información adicional en el bloque de firma, pero por lo demás funciona igual). El contenido del APK se codifica y firma, luego el Bloque de firma de 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 una verificación de firma en todo el archivo. Cualquier modificación al APK, incluidas las modificaciones de 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 estén firmados con v1.

Proceso de verificación de firma de APK

Figura 1. Proceso de verificación de 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 Bloque de firma de APK, 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 + despojada también se rechazan, porque su firma v1 especifica que el APK fue firmado v2, lo que hace que Android 7.0 y versiones posteriores se nieguen a verificar los APK utilizando sus firmas v1.

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