如何验证APK的SHA256指纹

信息安全 安卓 指纹
2021-09-04 19:32:45

我已经从https://signal.org/android/apk/下载了信号应用程序。为了验证下载,提供了指纹。但是我怎样才能用文件验证这个指纹呢?我知道我可以sha256sum用来验证哈希,但我想对于指纹我需要证书或类似的东西?

4个回答

您错过了下载页面中的一个关键词:

您可以验证 APK 上的签名证书是否与此 SHA256 指纹匹配

(强调我的)

APK 文件实际上只是 ZIP 文件,因此请使用您想要的任何存档工具(我使用 7zip)打开它并从中提取META-INF\CERT.RSA然后,您可以验证证书指纹是否与网站上写入的内容相匹配。请注意,这也与整个证书的哈希值不同!你需要使用keytool来检查它。

二进制文件包含在keytoolJava JDK 中(通常在%ProgramFiles%\Java\jdk_<version>\bin\目录中),可以按如下方式使用:

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

输出如下所示:

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

您可以看到 SHA256 指纹与我们在网站上看到的相符。

一旦您验证了这一点,您就可以继续将 APK 安装到您的 Android 设备上。由于您已验证 APK 中的签名证书与 Signal 期望您看到的证书相匹配,因此您可以依靠 Android 操作系统来验证 APK 是否已正确签名 - 否则它将不允许您加载它.

验证 APK 文件的正确方法是使用apksignerAndroid SDK。

与此处基于 的其他答案不同keytoolapksigner有两个主要优点:

  1. 它实际上验证签名是正确的并且APK没有被修改
  2. 它不依赖于旧的 APK 签名方案 v1(也称为“JAR 签名”)。相反,它还可以处理已使用APK 签名方案 v2v3签名的 APK (已经有可用的应用程序根本没有 v1 签名,因此无法使用keytool.

apksigner 是 Android 构建工具的一部分,因此您可能会发现安装了多个版本,每个安装的构建工具版本一个。

Android SDK 中到apksigner.bat/的一个示例路径apksigner.sh是:

android-sdk/build-tools/29.0.2/apksigner

以这种方式执行 apksigner:

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>

现在您已经验证了 AP​​K,但您仍然不知道您是否可以信任签署 APK 文件的个人/组织。这是因为 Android APK 签名根据定义使用自签名证书。因此,您是否可以信任证书是一个难题。唯一的方法是检查已使用相同证书签名的其他应用程序。

APK 托管商 APKMirror.com 允许通过 SHA-1 和 SHA-256 颁发者/证书哈希搜索 APK:

https://www.apkmirror.com/?s=29f34e5f27f211b424bc5bf9d67162c0eafba2da35af35c16416fc446276ba26&post_type=app_release&searchtype=app

编辑 2021-10-19:androidobservatory.org 似乎已停止服务

另一个允许搜索 SHA-1 证书哈希的服务是 androidobservatory.org。它有一个 API,用于使用证书 SHA-1 摘要检查哪些应用程序已由同一证书签名:

https://androidobservatory.org/cert/45989DC9AD8728C2AA9A82FA55503E34A8879374 在此页面上,您可以查看 Google Play 商店中使用相同证书签名的所有其他 APK 文件。

当前工作的解决方案是

$ keytool -printcert -jarfile file.apk

取自这个线程。

你不应该打开它。它应该用作终端中的命令,如提供的示例

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