web-dev-qa-db-fra.com

Comment vérifier l'empreinte digitale SHA256 de l'APK

J'ai téléchargé l'application de signal depuis https://signal.org/Android/apk/ . Pour vérifier le téléchargement, une empreinte digitale est fournie. Mais comment puis-je vérifier cette empreinte digitale avec le fichier? Je sais que je peux utiliser sha256sum pour vérifier un hachage, mais je suppose que pour une empreinte digitale, j'ai besoin d'un certificat ou quelque chose de similaire?

5
Jekoula

Vous avez manqué un mot clé dans la page de téléchargement:

Vous pouvez vérifier que certificat de signature sur l'APK correspond à cette empreinte SHA256

(c'est moi qui souligne)

Les fichiers APK ne sont que des fichiers Zip en réalité, alors ouvrez-le avec l'outil d'archivage que vous voulez (j'utilise 7Zip) et extrayez META-INF\CERT.RSA à partir de cela. Vous pouvez ensuite vérifier que l'empreinte digitale du certificat correspond à ce qui est écrit sur le site. Notez que ce n'est pas la même chose que le hachage de l'ensemble du certificat! Vous devrez utiliser keytool pour le vérifier.

Le binaire keytool est inclus dans le JDK Java (généralement dans le %ProgramFiles%\Java\jdk_<version>\bin\ répertoire), et peut être utilisé comme suit:

keytool -printcert -file X:\Path\To\CERT.RSA

La sortie ressemble à ceci:

Owner: CN=Whisper Systems, OU=Research and Development, O=Whisper Systems, L=Pittsburgh, ST=PA, C=US
Issuer: CN=Whisper Systems, OU=Research and Development, O=Whisper Systems, L=Pittsburgh, ST=PA, C=US
Serial number: 4bfbebba
Valid from: Tue May 25 16:24:42 BST 2010 until: Tue May 16 16:24:42 BST 2045
Certificate fingerprints:
         MD5:  D9:0D:B3:64:E3:2F:A3:A7:BD:A4:C2:90:FB:65:E3:10
         SHA1: 45:98:9D:C9:AD:87:28:C2:AA:9A:82:FA:55:50:3E:34:A8:87:93:74
         SHA256: 29:F3:4E:5F:27:F2:11:B4:24:BC:5B:F9:D6:71:62:C0:EA:FB:A2:DA:35:AF:35:C1:64:16:FC:44:62:76:BA:26
         Signature algorithm name: SHA1withRSA
         Version: 3

Vous pouvez voir que l'empreinte SHA256 correspond à ce que nous avons vu sur le site.

Une fois que vous avez vérifié cela, vous pouvez continuer et installer l'APK sur votre appareil Android. Puisque vous avez vérifié que le certificat de signature à l'intérieur de l'APK correspond à celui que Signal attend de vous, vous pouvez ensuite compter sur le système d'exploitation Android pour valider que l'APK est correctement signé - il ne vous permettra pas de le charger autrement.

7
Polynomial

La bonne façon de vérifier un fichier APK consiste à utiliser apksigner à partir de Android SDK.

Contrairement aux autres réponses ici, cette base sur keytool, apksigner a deux avantages majeurs:

  1. Il vérifie en fait que la signature est correcte et que l'APK n'a pas été modifié
  2. Il ne repose pas sur l'ancien schéma de signature APK v1 (également appelé "signature JAR"). Au lieu de cela, il peut également traiter les fichiers APK signés à l'aide des schéma de signature APK v2 et v (il existe déjà des applications disponibles qui n'ont pas du tout de signature v1, donc ces applications ne peuvent pas être vérifiées à l'aide de keytool.

apksigner fait partie des outils de build Android, donc vous pouvez trouver plusieurs versions installées, une pour chaque version des outils de build installée.

Un exemple de chemin dans le SDK Android vers apksigner est:

Android-sdk/build-tools/29.0.2/apksigner

Exécutez apksigner de cette façon:

apksigner verify --verbose --print-certs "Signal-website-universal-release-4.49.13.apk"

Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): true
Verified using v3 scheme (APK Signature Scheme v3): true
Number of signers: 1
Signer #1 certificate DN: CN=Whisper Systems, OU=Research and Development, O=Whisper Systems, L=Pittsburgh, ST=PA, C=US
Signer #1 certificate SHA-256 digest: 29f34e5f27f211b424bc5bf9d67162c0eafba2da35af35c16416fc446276ba26
Signer #1 certificate SHA-1 digest: 45989dc9ad8728c2aa9a82fa55503e34a8879374
Signer #1 certificate MD5 digest: d90db364e32fa3a7bda4c290fb65e310
Signer #1 key algorithm: RSA
Signer #1 key size (bits): 1024
Signer #1 public key SHA-256 digest: 75336a3cc9edb64202cd77cd4caa6396a9b5fc3c78c58660313c7098ea248a55
Signer #1 public key SHA-1 digest: b46cbed18d6fbbe42045fdb93f5032c943d80266
Signer #1 public key MD5 digest: 0f9c33bbd45db0218c86ac378067538d
<skipped a lot of warnings>

Vous avez maintenant vérifié l'APK, mais vous ne savez toujours pas si vous pouvez faire confiance à la personne/organisation qui a signé le fichier APK. En effet, sur Android APK utilisent par définition des certificats auto-signés. Si vous pouvez faire confiance à un certificat est donc une question difficile. La seule façon est de vérifier les autres applications qui ont été signées à l'aide de le même certificat.

La seule façon que je sache de le faire est d'utiliser le service d'exploration PlayStore androidobservatory.org. Il dispose d'une API pour vérifier quelles applications ont été signées par le même certificat à l'aide du certificat SHA-1:

https://androidobservatory.org/cert/45989DC9AD8728C2AA9A82FA55503E34A8879374

Sur cette page, vous pouvez voir tous les autres fichiers APK sur Google Play Store signés avec le même certificat.

3
Robert

La solution qui fonctionne actuellement est

$ keytool -printcert -jarfile file.apk

Prise de forme ce fil.

1
Juri Sinitson

vous ne devez pas l'ouvrir. Il doit être utilisé comme une commande dans le terminal, comme l'exemple fourni

keytool -printcert -file X:\Path\To\CERT.RSA
0
koapsi