Colección de citas famosas - Slogan de motivación - Conceptos básicos de Android "Firma V1V2V3"

Conceptos básicos de Android "Firma V1V2V3"

Conceptos básicos

Firma: Escribe una "huella digital" en el APK. Después de escribir la huella digital, cualquier modificación en el APK hará que la huella digital no sea válida. El sistema Android fallará la verificación de la firma al instalar el APK, lo que garantiza la seguridad.

Algoritmo de resumen: utilice una cadena de longitud fija irreversible aparentemente aleatoria simple para representar la unicidad de un archivo. Los algoritmos de resumen comunes incluyen MD5 (128 bits) y el algoritmo SHA-1 (160/192/256 bits).

Criptografía de clave pública: también llamado algoritmo asimétrico, su característica es que la clave pública es pública y la clave privada es confidencial. Los más comunes son: RSA.

Analicemos RSA:

Esquema de firma en Android

V1: basado en jarsigner (herramienta propia de JDK, que utiliza un archivo de almacén de claves para firmar) o apksigner (proporcionado específicamente por Android, usando pk8, x509.pem para la firma). keystore y pk8/x509.pem se pueden convertir entre sí.

Principio de firma: primero, el archivo del almacén de claves contiene un resumen MD5 y SHA1. Estos son también los datos resumidos que muchas plataformas abiertas requieren que carguemos.

Después de firmar el APK, se generarán tres archivos, CERT.RSA, CERT.SF y MANIFEST.MF, en la carpeta META-INF.

En el apk, la información de la firma del apk se almacena en la carpeta /META-INF, que generalmente contiene al menos tres archivos, [CERT].RSA, [CERT].SF y MANIFEIST.MF. archivos. Estos tres archivos son la información de firma del apk.

MANIFEST.MF contiene valores de firma para todos los archivos en el apk excepto la carpeta /META-INF. El método de firma es SHA1() (u otro método hash) primero y luego base64(). El formato de almacenamiento es: Nombre más [SHA1]-Resumen.

[CERT].SF es la firma general del archivo MANIFEST.MF y la firma de cada entrada en él. Generalmente, si se utiliza una firma de herramienta, se incluye un elemento más. Es la firma de la información del encabezado MANIFEST.MF, que se mencionó en el análisis del código fuente anterior.

[CERT].RSA contiene una firma de [CERT].SF con la clave privada y un certificado digital que contiene la información de la clave pública.

¿Existe la posibilidad de falsificación de firmas?

Si los archivos en el apk se modifican (incluidas adiciones, eliminaciones y modificaciones), entonces: el valor de resumen del archivo calculado durante la verificación es la misma que la del archivo MANIFEST.MF. Las entradas no coinciden y fallan.

Modifica el archivo MANIFEST.MF en el apk, luego: el resumen de la entrada modificada en MANIFEST.MF no coincide con la entrada correspondiente a [CERT].SF, y falla.

Modifica el archivo MANIFEST.MF [CERT].SF en el apk, luego: la firma [CERT].SF calculada no coincide con el valor de firma registrado en [CERT].RSA, y falla.

Modifique el archivo MANIFEST.MF [CERT].SF [CERT].RSA en el apk, luego: como el certificado no se puede falsificar, [CERT].RSA no se puede falsificar.

V2: Nuevo en 7.0

El paquete firmado se dividirá en cuatro partes

1. Contenido de las entradas ZIP (desde el desplazamiento 0 hasta el inicio del APK Bloque de firma)

2. Bloque de firma de APK

3. Directorio central ZIP

4. Fin ZIP del directorio central

La firma La información del nuevo esquema de firma de la aplicación se almacenará en el Bloque 2 (Bloque de firma de APK), mientras que el Bloque 1 (Contenido de las entradas ZIP), el Bloque 3 (Directorio central ZIP) y el Bloque 4 (Fin ZIP del Directorio central) están protegidos. y cualquier modificación de los bloques 1, 3 y 4 después de la firma no puede escapar a la inspección del nuevo esquema de firma de la aplicación.

V3: Nuevo en 9.0

El formato es generalmente similar a v2. En el bloque de firma (Apk Signature Block v2) insertado en v2, se agrega un nuevo bloque (bloque Attr). .

En este nuevo bloque, se registrará nuestra información de firma anterior y la información de firma nueva, y se utilizará el esquema de rueda de claves para reemplazar y actualizar la firma. Esto significa que siempre que tengamos en mano el antiguo certificado de firma, podremos usarlo para cambiar la firma en el nuevo archivo APK.

El nuevo bloque (attr) agregado a la firma v3 almacena toda la información de la firma, que se almacena en forma de una lista vinculada en bloques de nivel más pequeños.

Cada nodo contiene un certificado de firma que se utiliza para firmar versiones anteriores de la aplicación. El certificado de firma más antiguo corresponde al nodo raíz. El sistema permitirá que el certificado de cada nodo firme el siguiente certificado de la lista. proporcionando así a cada nueva clave evidencia de que debería ser tan confiable como la clave anterior.

Este proceso es algo similar al proceso de certificación del certificado CA. La firma anterior de la aplicación instalada garantiza que la nueva firma que cubre el APK instalado sea correcta y se transmita la confianza.

Nota: El método de firma solo admite actualizaciones y no degradaciones. Si se instala un paquete V2, no puede sobrescribir el paquete reemplazado por V1.

Referencia

Análisis del código fuente del proceso de verificación de firma (certificado) de la aplicación de Android

Herramienta de generación de paquetes de canales de Android de código abierto de nueva generación Walle

Mecanismo de firma de Android v1, v2, v3