web-dev-qa-db-ja.com

APKのSHA256フィンガープリントを確認する方法

https://signal.org/Android/apk/ からシグナルアプリをダウンロードしました。ダウンロードを確認するために、フィンガープリントが提供されています。しかし、この指紋をファイルでどのように確認できますか? sha256sumハッシュを検証しますが、指紋の場合、証明書または同様のものが必要ですか?

5
Jekoula

ダウンロードページのキーワードを逃しました:

APKの署名証明書がこのSHA256フィンガープリントと一致することを確認できます

(強調鉱山)

APKファイルは実際には単なるZipファイルなので、任意のアーカイブツールで開いて(私は7Zipを使用しています)、そこからMETA-INF\CERT.RSAを抽出します。次に、証明書のフィンガープリントがサイトに書かれているものと一致することを確認できます。これは証明書全体のハッシュとも同じではないことに注意してください!確認するには、keytoolを使用する必要があります。

keytoolバイナリは、Java 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フィンガープリントが、サイトで確認したものと一致していることがわかります。

これを確認したら、AndroidデバイスにAPKをインストールします。APK内の署名証明書が、Signalが期待するものと一致することを確認したので、その後、Androidオペレーティングシステムを使用して、APKが適切に署名されていることを検証できます。それ以外の場合は、APKをロードできません。

7
Polynomial

APKファイルを確認する正しい方法は、Android SDKのapksignerを使用することです。

keytoolに基づく他の回答とは異なり、apksignerには2つの大きな利点があります。

  1. 実際に署名が正しいこと、およびAPKが変更されていないことを確認します
  2. 古いAPK署名スキームv1(「JAR署名」とも呼ばれます)には依存しません。代わりに、 APK署名方式v2 および v を使用して署名されたAPKを処理することもできます(v1署名がまったくないアプリがすでに利用可能であるため、これらのアプリはkeytoolを使用してチェックできません。

apksignerはAndroidビルドツールの一部であるため、インストールされているビルドツールのバージョンごとに1つずつ、複数のバージョンがインストールされている場合があります。

Android SDKからapksignerへのパスの例は次のとおりです。

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>

これでAPKの確認は完了しましたが、APKファイルに署名した個人/組織を信頼できるかどうかはまだわかりません。これは、Android APK署名が定義により自己署名証明書を使用するためです。したがって、証明書を信頼できるかどうかは難しい質問です。唯一の方法は、使用して署名された他のアプリを確認することです同じ証明書。

私が知っている唯一の方法は、PlayStoreクロールサービスandroidobservatory.orgを使用することです。証明書SHA-1ダイジェストを使用して、同じ証明書で署名されているアプリを確認するためのAPIがあります。

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

このページでは、同じ証明書で署名されたGoogle Playストアの他のすべてのAPKファイルを確認できます。

3
Robert

現在機能しているソリューションは

$ keytool -printcert -jarfile file.apk

this スレッドの形式。

1
Juri Sinitson

開けないでください。提供されている例のように、ターミナルでコマンドとして使用する必要があります

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