Red de conocimiento informático - Computadora portátil - Esquema de firma APK v3

Esquema de firma APK v3

Android 9 añade soporte para el esquema de firma APK v3. El esquema ofrece la opción de incluir un registro de evidencia rotado para cada certificado de firma en su bloque de firma. Con esta característica, las aplicaciones pueden firmar sus aplicaciones con un nuevo certificado de firma vinculando el certificado de firma anterior del archivo APK con el certificado de firma que se usa para firmar la aplicación ahora.

La sintaxis para rotar una secuencia de certificado de firma o una nueva secuencia de firma es la siguiente:

Obtenga más información sobre cómo rotar una clave usando apksigner.

Android 9 admite la rotación de claves APK, lo que permite a las aplicaciones cambiar sus claves de firma durante las actualizaciones de APK. Para habilitar la rotación, el APK debe indicar un nivel de confianza entre las claves de firma antiguas y nuevas. Para admitir la rotación de claves, actualizamos el esquema de firma de APK de v2 a v3 para permitir el uso de claves nuevas y antiguas.

Para mantener la compatibilidad con versiones anteriores del formato APK v1, las firmas APK v2 y v3 se almacenan en el "Bloque de firmas APK" inmediatamente antes del directorio central ZIP.

El formato del bloque de firma del APK v3 es el mismo que el de la v2, y la firma v3 del APK se almacena como un par "ID-valor", donde el ID es 0xf05368c0.

El formato del "Bloque de firma APK" es el siguiente (todos los campos numéricos están en orden de bytes decimales):

Al analizar el APK, primero busque el inicio de "ZIP Central Directorio" mediante el siguiente método Posición inicial: busque el "Directorio central ZIP" al final del archivo; busque el registro "Fin del directorio central ZIP" al final del archivo y luego lea el desplazamiento inicial del "Directorio central " de ese registro. Con este valor mágico, puede determinar rápidamente si hay un "Bloque de firma APK" delante del "Directorio central". Luego, utilizando el valor del tamaño del bloque, puede encontrar efectivamente la posición inicial del bloque en el archivo.

El diseño del esquema v3 es muy similar al esquema v2, utilizan el mismo formato general y admiten el mismo ID de algoritmo de firma, tamaño de clave y curva EC.

Sin embargo, el esquema v3 agrega información sobre las versiones de SDK compatibles y las estructuras a prueba de giros.

El "Bloque del esquema de firma de APK v2" se almacena en el "Bloque de firma de APK" con ID 0xf05368c0.

"APK Signing Scheme v3 Block" está en formato v2:

La estructura de certificados de rotación permite que una aplicación rote sus certificados de firma sin impedir que otras aplicaciones con las que se comunica utilicen esos certificados. Para hacer esto, la firma de la aplicación debe contener dos nuevos bloques de datos:

El atributo de prueba de rotación en la sección de datos de la firma contiene una única tabla vinculada donde cada nodo contiene la versión anterior de la aplicación que se firmó. Certificado de firma. Este atributo está destinado a contener estructuras de datos de certificados heredados de confianza propia y de prueba de rotación conceptual. La lista enlazada individualmente está ordenada por versión, correspondiendo el certificado de firma más antiguo al nodo raíz. Al construir la estructura de datos a prueba de transferencia, el sistema hace que el certificado en cada nodo firme el siguiente certificado en la lista, lo que demuestra que cada clave nueva debe ser tan confiable como la clave anterior.

Al crear la estructura de datos del certificado heredado de confianza propia, se agregan etiquetas a cada nodo para indicar su membresía y atributos en el grupo. Por ejemplo, puede haber una marca que indique que la autoridad de firma de Android confía en el certificado de firma en un nodo específico. Este indicador permite que otras aplicaciones firmadas con el certificado anterior sigan obteniendo los permisos de firma definidos por las aplicaciones firmadas con el nuevo certificado de firma. Debido a que todo el atributo de prueba de rotación se encuentra en la parte de datos firmados del campo Firmante v3, la clave utilizada para firmar el APK incluido protegerá este atributo.

Este formato excluye el caso de múltiples claves de firma y la agregación de diferentes certificados de firma de antepasados ​​en un solo certificado (múltiples nodos de origen que apuntan a un receptor común).

La prueba de rotación se almacena en el "Bloque APK Signature Scheme v3" con ID 0x3ba06f8c.

Su formato es:

Actualmente, Android trata los APK firmados con varios certificados como si tuvieran una identidad de firma diferente a la de los certificados que contienen. Por lo tanto, la propiedad a prueba de rotación en la parte de datos firmada forma un gráfico acíclico dirigido, que se considera mejor como una lista enlazada única, donde cada conjunto de firmantes para una versión determinada representa un nodo. Esto aporta complejidad adicional a la estructura a prueba de giros (versión de múltiples firmantes a continuación). La clasificación se convierte en una cuestión particularmente destacada. Es más, ya no es posible firmar APK individualmente, ya que la estructura de prueba rotativa debe hacer que el antiguo certificado de firma firme el nuevo conjunto de certificados, en lugar de firmarlos uno por uno.

Por ejemplo, si desea que un APK firmado por dos nuevas claves B y C esté firmado por la clave A, entonces es imposible que el firmante B contenga solo la firma A o B, porque esto es inconsistente. con B y C Las identidades de firma son diferentes. Esto significa que los firmantes deben coordinarse antes de construir dicha estructura.

Propiedad de atestación de rotación de firmantes múltiples

El esquema v3 tampoco puede manejar el caso en el que dos claves diferentes para la misma aplicación rotan hacia la misma clave de firma. Esto es diferente de un escenario de adquisición, donde la empresa adquirente quiere mover la aplicación adquirida a un privilegio de acceso directo utilizando su clave de firma. Las adquisiciones se consideran un caso de uso compatible, ya que las nuevas aplicaciones se distinguirán por el nombre de su paquete y pueden contener su propia estructura de prueba de giro. Un caso de uso no admitido es el de la misma aplicación que tiene dos rutas diferentes al mismo certificado, lo que rompe muchas suposiciones en el diseño de rotación de claves.

En Android 9 y versiones posteriores, los APK se pueden verificar con los esquemas de firma de APK v3, v2 o v1. Las plataformas heredadas ignoran las firmas v3 e intentan verificar las firmas v2 antes de intentar verificar las firmas v1.