Soy un novato en seguridad y criptografía, pero estoy desarrollando aplicaciones de Android y ahora quiero profundizar más en los mecanismos de seguridad de Android. Estoy tratando de entender cómo CERT.rsa (ya que conozco esta clave pública del par de claves) y la firma devuelta por el administrador de paquetes están interconectados
PackageInfo packageInfo = appContext.getPackageManager().getPackageInfo(appContext.getPackageName(), PackageManager.GET_SIGNATURES);
Signature[] signatures = packageInfo.signatures;
Log.d(TAG,"Signature" + signatures[0].toString());
En caso de recuperar la firma con el administrador de paquetes, obtengo una matriz de bytes con longitud > 700. En caso de una clave de depuración autofirmada obtengo algo como esto
bytes[48, -126, 3, 13, 48, -126, 1, -11, -96, 3, 2, 1, 2, 2, 4, 102, -106, 43, -72, 48, 13, 6, 9, ...........
He intentado extraer y ver información sobre el archivo CERT.rsa de clave pública de la carpeta META-INF.
Utilicé el siguiente comando para obtenerlo.
openssl pkcs7 -in CERT
.RSA -print_certs -inform DER -out foo.cer
mi archivo foo.cert contiene la siguiente información
subject=/C=US/O=Android/CN=Android Debug
issuer=/C=US/O=Android/CN=Android Debug
-----BEGIN CERTIFICATE-----
MIIDDTCCAfWgAwIBAgIEZpYruDANBgkqhkiG9w0BAQsFADA3MQswCQYDVQQGEwJV
UzEQMA4GA1UEChMHQW5.......
O en hexdecimal 30 82 01 0A 02 82 01 01 00 8A 24 24 1A F1 0B 5D 85 56 FE 35 17 50 90 5E F9 BF BA 2D 36 83 3C 0A 9A 56 4B 91 71 3A 48 E3 CB CE 25 73 76 C4 7F 1C 8B A7 5C F0 C3 52 6D E0 35 5A CC 10 C3 54 E5 DE 57 80 BF 6E
Mi pregunta principal es: ¿Dónde obtiene el PackageManager esta información de firma?