Cómo se firman los archivos .apk

Esto no es una pregunta acerca de cómo firmar un archivo .apk. Quiero saber qué significa realmente la firma y cómo se implementa.

Dentro del archivo .apk hay una carpeta META-INF y dentro hay dos archivos.

El primero es CERT.SF contiene hasas SHA1 para varios componentes y se ve así:

Name: res/layout/main.xml SHA1-Digest: Cox/T8fN1X9Hv4VqjH9YKqc/MsM= Name: AndroidManifest.xml SHA1-Digest: wZ418H9Aix1LNch3ci7c+cHyuZc= Name: resources.arsc SHA1-Digest: P+uoRrpFyVW6P3Wf+4vuR2ZSuXY= Name: classes.dex SHA1-Digest: cN3zXtGii9zuTOkBqDTLymeMZQI= 

También hay un archivo llamado CERT.RSA. Supongo que es la clave pública para verificar la firma.

Mi pregunta es, ¿dónde está almacenada la firma para el archivo .apk completo? ¿Y qué es lo que realmente se firma? Podría ser

  • .apk se utiliza como un único objeto binario y esto se firma
  • O se firma CERT.SF que contiene hashes individuales para diferentes componentes

Sería también mucho mejor si me puede señalar a la documentación del proceso de firma y verificación detallada.

Esto en realidad no tiene nada que ver con Android. Los archivos APK se firman con jarsigner . Aquí hay un enlace a la página de manual .

De hecho, esta no es una pregunta específica de Android, pero una pregunta de Java en general, sin embargo, publicar una respuesta de todos modos …

En primer lugar: Sólo se firma el archivo XXX.SF; Esto significa que todos los archivos mencionados en el archivo XXX.SF están firmados "indirectamente" porque XXX.SF contiene sus hashes. De hecho, todos los archivos no ubicados en "Meta-Inf" debe tener hashes allí! El archivo .apk entero no está firmado.

El archivo XXX.SF es más o menos una copia del archivo MANIFEST.MF. Hay una línea "SHA1-Digest-Manifest" que es el hash SHA-1 de "MANIFEST.MF" sí mismo; Las líneas "SHA1-Digest" no contienen los hashes de los archivos, sino los hashes de las líneas correspondientes al árbol en el archivo Manifest.MF como este:

SHA1 ("Nombre: nombre de archivo" + CR + LF + "SHA1-Digest:" + SHA1 (archivo_contenido) + CR + LF + CR + LF)

El formato de archivo de XXX.DSA / .RSA es el mismo que para una firma de correo electrónico S / MIME (para el contenido de XXX.SF) sin embargo los datos no están codificados en base64 y no se utilizan líneas de encabezado / remolque. "Openssl smime -sign -outform DER" crearía este formato.

Se pueden usar varios certificados para firmar un archivo ZIP. En este caso existirán múltiples pares de (XXX.SF / .RSA, YYY.SF / .RSA, …).

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.