Para verificar la firma de un archivo ZIP de ROM en un PC, se necesitan dos cosas:
- La clave pública del creador de la ROM (puede extraerse de
/system/etc/security/otacerts.zip
si el creador es el mismo, por ejemplo, en el caso de la actualización de la ROM de stock).
- Una herramienta para extraer el certificado del comentario (pie de página) del archivo ZIP y verificar su clave de firma con la clave pública del desarrollador de la ROM.
Hay múltiples herramientas disponibles para realizar el segundo paso, incluyendo la que proporcionado oficialmente por LineageOS :
update_verifier.py <pubkey> /path/to/zip_file
DETALLES
Tenía una vaga noción de que los archivos ZIP de las ROMs personalizadas contienen el Bloque de firmas JAR (que también es el caso de Esquema de firma APK v1 ). Por lo tanto, la norma jarsigner -verify
podría utilizarse para verificar la integridad de un archivo JAR/ZIP autofirmado (que no ha sido templado desde su creación), aunque no la autenticidad de la fuente (que requiere el certificado root, como es el caso de AVB).
Pero una mirada más profunda en el código fuente de TWRP indica que está utilizando el mismo mecanismo de verificación de la firma utilizado en la recuperación de existencias para la verificación de archivos ZIP OTA (código fuente aquí ), es decir, verificar la autoridad del creador del archivo ZIP con las claves públicas preconfiguradas almacenadas en /res/keys/
. signapk.jar
se utiliza en el momento de la compilación para firmar ambos APKs ( apksigner se llama) y los archivos ZIP OTA. La misma herramienta añade el "firmado por SignApk" mensaje que ha observado en el archivo ZIP.
Así que el /res/keys/
El directorio en recuperación debe contener las claves públicas de todos los creadores de ROMs para verificar sus archivos ZIP, lo que no parece práctico. La recuperación de stock contiene sólo la(s) clave(s) pública(s) del OEM, mientras que la recuperación personalizada probablemente contiene claves de prueba del SDK oficial. Y es por eso que a menudo nos enfrentamos al infame "Falló la verificación de la firma ZIP" mensaje para las ROMs y otros archivos ZIP flasheables.
En los dispositivos que no son A/B, el paquete OTA (si no es descargado manualmente por el usuario) es también verificado antes de iniciar el modo de recuperación. En este caso, las claves preconstruidas de otacerts.zip
se utilizan para la verificación (código fuente aquí ). Pero con las actualizaciones A/B la recuperación no tiene nada que ver ( /res/keys/
ya no existe desde Android 10) y el paquete podría no ser verificado ni siquiera una vez (si se hace "Actualizaciones en streaming" Algunos detalles más en esta respuesta ).
Así que, teniendo en cuenta estos puntos, el mecanismo de verificación utilizado en la recuperación no parece tener mucha importancia. Para verificar la autenticidad de una ROM, lo mejor sería simplemente hacer una verificación de la suma de comprobación del archivo descargado si es posible, como LineageOS proporciona hashes SHA256 con sus archivos ZIP descargables.