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?
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.
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:
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.
La solution qui fonctionne actuellement est
$ keytool -printcert -jarfile file.apk
Prise de forme ce fil.
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