Red de conocimiento informático - Computadora portátil - Mecanismo de firma APK: explicación detallada del mecanismo de firma V2

Mecanismo de firma APK: explicación detallada del mecanismo de firma V2

A través del análisis detallado anterior del mecanismo de firma Apk-mecanismo de firma JAR, sabemos que la firma JAR requiere verificación hash de todos los archivos en el apk. Cuando hay muchos recursos, la velocidad de verificación de la firma es más lenta. . Para acelerar la verificación y fortalecer las garantías de integridad, Andorid introdujo Full File Signer V2 en 7.0. Echemos un vistazo a los principios de diseño específicos del programa V2.

Antes de comprender la estructura de una firma V2, primero comprenda la estructura de un archivo zip (apk).

El archivo zip se divide en tres partes:

Puede encontrar el directorio central según su desplazamiento y tamaño inicial, y luego según el desplazamiento inicial del encabezado del archivo local. las entradas del directorio central y busque los datos comprimidos correspondientes en el área de datos.

En la explicación detallada del mecanismo de firma Apk - mecanismo de firma JAR, ya sabemos que la firma JAR es agregar el directorio META-INF al archivo apk, es decir, el área de datos y la central. Es necesario modificar el directorio, porque agregar archivos hará que el tamaño y el desplazamiento del directorio central cambien, y es necesario modificar el registro final del directorio central. Para fortalecer la garantía de integridad de los datos, la solución V2 no inserta datos en el área de datos y el directorio central, sino que elige insertar el bloque de firma APK entre el área de datos y el directorio central, asegurando así la integridad del. datos zip (apk) originales. De la siguiente manera:

El bloque de firma v2 es responsable de proteger la integridad de las Partes 1, 3 y 4, así como la integridad de los bloques de datos firmados en el bloque APK Signature Scheme v2 contenido en la Parte 2. .

El bloque de firma APK contiene 4 partes: longitud del bloque, secuencia ID-VALOR, longitud del bloque y valor mágico fijo. El bloque APK Signature Scheme v2 se almacena en el par clave-valor con ID 0x7109871a. Durante la verificación de la firma, primero busque el registro final del directorio central zip, busque el desplazamiento inicial del directorio central a partir de este registro y luego use el valor mágico para determinar que el frente puede ser un bloque de firma APK y luego use los dos campos de longitud de bloque antes y después, se puede determinar la ubicación del bloque de firma APK y, finalmente, la ubicación del bloque del esquema de firma APK v2 se ubica a través del ID (0x7109871a).

Un bloque APK Signature Scheme v2 es una secuencia de firmas que indica que el mismo APK se puede firmar utilizando varios firmantes. Cada mensaje firmado contiene tres partes:

El bloque de firma v2 es responsable de proteger la integridad de las partes 1, 3 y 4, así como la integridad del bloque de datos de firma del bloque v2 del esquema de firma APK. contenido en la parte 2 sexo. La integridad de las partes 1, 3 y 4 está protegida por un resumen de contenido, que se almacena en el bloque de datos firmado, y la integridad del bloque de datos firmado está garantizada por la firma. Así es como se calcula el resumen:

El resumen de las partes 1, 3 y 4 se calcula de la siguiente manera, similar a un árbol Merkle de dos niveles.

Dado que el mecanismo de firma V2 se introdujo en Android 7.0, para que el APK se pueda instalar en Android 7.0 o inferior, el APK primero debe firmarse usando la firma JAR y luego firmarse usando el esquema V2. Tenga en cuenta que el orden debe ser la firma JAR primero y luego la firma V2, porque la firma JAR necesita modificar el contenido del área de datos zip y el directorio central, y el uso de la firma V2 y luego la firma JAR destruirá la integridad de la firma V2.

De hecho, no necesitamos preocuparnos por este proceso al compilar APK.

En el complemento de Android para Gradle 2.2, gradle usará la firma JAR y el esquema V2 para firmar APK de forma predeterminada. Si desea desactivar la firma JAR o la firma V2, puede configurarlo en build.gradle:

En. Android 7, podemos usar la firma JAR y la firma V2 en build.gradle. p>

En Android 7.0, el sistema dará prioridad a la verificación de APK utilizando el esquema V2, mientras que en Android 7.0 o inferior, el sistema ignorará las firmas JAR.

Debido a la presencia de una firma JAR firmada por v2 en el APK, un atacante podría potencialmente eliminar la firma v2 del APK, haciendo que la firma v2 del APK sea más obvia. Para protegerse contra este ataque, el esquema V2 establece:

Un atacante también puede intentar eliminar firmas más seguras del bloque APK Signature Scheme v2, lo que hace que el sistema verifique firmas menos seguras.

Ahora podemos responder las preguntas planteadas al presentar los conceptos básicos y el uso de las firmas Apk:

Las firmas APK se utilizan para garantizar la integridad y autenticidad del origen del APK y se dividen en dos Una solución: dividida en dos programas: firma JAR y firma V2. La idea central es calcular un hash del contenido del APK y luego firmar el hash utilizando un algoritmo de firma. Durante la verificación, la firma se descifra mediante la clave pública del firmante y luego se compara con el hash del contenido del APK calculado por el verificador. Si son consistentes, se pasa la verificación.

La huella digital del certificado de firma Al solicitar un SDK de terceros, debe completar el nombre del paquete APK y la huella digital del certificado. El fondo del desarrollador del SDK generará una clave basada en estos dos valores. Cuando se inicializa el SDK de terceros, obtendrá el nombre del paquete del APK actual, la huella digital del certificado de firma y la clave del sistema, luego cargará la huella digital en el servidor y luego verificará si el nombre del paquete, la huella digital del certificado de firma y la clave están atados. Luego carga la huella digital en su servidor y verifica si el nombre del paquete de software, la huella digital del certificado de firma y la clave están vinculados a él, y la autorización solo se puede otorgar después de pasar la verificación.

Antes de la aparición de la solución V2, había tres soluciones de empaquetado rápido por lotes:

Después de la aparición de la solución V2, la integridad del área de datos, el directorio central y el directorio central Se obtuvo simultáneamente el fin del registro Garantizado, las opciones 2 y 3 ya no son aplicables. Entonces, ¿no existe la posibilidad de realizar un envasado rápido por lotes? Por supuesto que no, puedes empezar con el bloque de firma APK. Volvamos a ver la estructura del bloque de firma APK:

El bloque de firma APK tiene una secuencia ID-VALUE, y la información de la firma (bloque del esquema de firma APK v2) solo se almacena en ID-VALUE con el identificador 0x7109871a. Al analizar el código fuente de la suma de verificación de la firma, podemos encontrar que no se analiza ningún otro ID-VALUE, lo que significa que, excepto el bloque del esquema de firma APK v2, no hay otro ID-VALUE en la secuencia de la firma y la información de la firma se almacena. en el ID-VALOR. Es decir, los bloques ID-VALUE que no sean APK Signature Scheme v2 no afectarán la verificación de la firma. Por lo tanto, podemos definir un nuevo VALOR DE ID y escribir la información del canal en el bloque de firma APK. Dado que el esquema V2 solo garantiza la integridad de los bloques de datos firmados contenidos en las Partes 1, 3, 4 y 2 (Bloque de firma de APK) del bloque del Esquema de firma de APK v2, el nuevo VALOR de ID escrito en el Bloque de firma de APK no Afecta las sumas de verificación de firmas. El ID-VALUE recién escrito no está protegido, por lo que este escenario es posible. De hecho, la herramienta de generación de paquetes de canales de próxima generación de Meituan, Walle, se implementa a través de esta solución.

Bien, el mecanismo interno de firma APK se ha analizado aquí. Creo que después de leer estos tres artículos, todos tendrán una comprensión general de la firma JAR y los mecanismos de firma V2. Después de leer, más. analizar la firma y verificación del código fuente.