Codetransparenz für App Bundles

Die Codetransparenz ist ein optionaler Mechanismus zur Apps, die mit dem Android App Bundle veröffentlicht wurden Es wird eine Codetransparenz verwendet, Signaturschlüssel, der ausschließlich vom App-Entwickler aufbewahrt wird.

Die Codetransparenz ist unabhängig vom Signaturschema, das für App Bundles und APKs Der Schlüssel für die Codetransparenz unterscheidet sich von der App-Signatur der in der sicheren Infrastruktur von Google gespeichert wird, wenn Sie Play App Signing verwenden.

Funktionsweise der Codetransparenz

Der Prozess funktioniert, indem eine Codetransparenzdatei in das Bundle eingefügt wird, erstellt wurde, aber bevor sie zum Vertrieb in die Play Console hochgeladen wird.

Die Codetransparenzdatei ist ein JSON Web Token (JWT), das eine Liste von DEX enthält. Dateien und native Bibliotheken, die im Bundle enthalten sind, sowie deren Hashes. Dann ist es mit dem Schlüssel zur Codetransparenz signiert, der nur vom Entwickler gehalten wird.

Diagramm für die Codetransparenz

Diese Codetransparenzdatei wird an das aus der App erstellte Basis-APK weitergegeben Bundle (insbesondere für den Hauptteil des Basismoduls). Es kann dann hat bestätigt, dass:

  • Alle DEX- und nativen Codedateien in den APKs haben übereinstimmende Hashes in der Codetransparenzdatei.
  • Die Public-Key-Komponente des Signaturschlüssels der Codetransparenz in der App mit dem öffentlichen Schlüssel des Entwicklers übereinstimmt (muss vom über einen separaten, sicheren Kanal.

Zusammen stellen diese Informationen sicher, dass der in der APKs entsprechen den Absichten des Entwicklers und wurden nicht geändert.

In der Codetransparenzdatei werden weder Ressourcen, Assets, Manifest-Dateien oder andere Dateien, die keine DEX-Dateien oder nativen Bibliotheken sind im Ordner lib/ enthalten.

Die Überprüfung der Codetransparenz wird ausschließlich zur Überprüfung durch Entwickelnden und Endnutzern, die sicherstellen möchten, dass der von ihnen ausgeführte Code mit dem der ursprünglich vom App-Entwickler erstellt und signiert wurde.

Bekannte Einschränkungen

In bestimmten Situationen kann keine Codetransparenz verwendet werden:

  • Apps, die sharedUserId angeben im Manifest. Diese Anwendungen können ihren Prozess mit anderen Anwendungen, was es schwierig macht, Zusicherungen Code, den sie ausführen.
  • Apps, die Manipulationsschutz verwenden oder andere Dienste verwenden, die Codeänderungen vornehmen nach der Erstellung der Codetransparenzdatei bewirkt, nicht bestanden werden.
  • Apps, die die alte Multidex-Version auf API-Levels unter 21 (Android 5.0) verwenden und Funktionsmodule. Die Codetransparenz funktioniert weiterhin, wenn die App die über Google Play auf Geräten mit Android 5.0 oder höher installiert wurden. Codetransparenz ist ist unter älteren Betriebssystemversionen deaktiviert.

Codetransparenz hinzufügen

Bevor Sie Ihrer App Codetransparenz hinzufügen können, benötigen Sie eine privaten und öffentlichen Schlüssel, das Sie für das Signieren der Codetransparenz verwenden können. Dieses muss ein eindeutiger Schlüssel sein, der sich vom verwendeten App-Signaturschlüssel unterscheidet für die Play App-Signatur. Sie müssen sicher aufbewahrt und nie außerhalb von Ihrer Organisation.

Falls Sie keinen Schlüssel haben, folgen Sie der Anleitung unter App signieren. Anleitung zum Generieren eines Codes auf Ihrem Computer. Bei der Codetransparenz wird ein Standard Keystore-Datei. Der Leitfaden bezieht sich zwar auf die App-Signatur, aber die Schlüsselgenerierung ist der Prozess derselbe.

Android-Gradle-Plug-in verwenden

Für die Unterstützung der Codetransparenz ist Version 7.1.0-alpha03 des Android-Gradle-Plug-ins erforderlich oder neuer. Fügen Sie zum Konfigurieren des Schlüssels, der für die Codetransparenz-Signatur verwendet wird, den Parameter dem bundle-Block folgen.

Cool

// In your app module's build.gradle file:
android {
    ...
    bundle {
        codeTransparency {
            signing {
                keyAlias = "ALIAS"
                keyPassword = "PASSWORD"
                storeFile = file("path/to/keystore")
                storePassword = "PASSWORD"
            }
        }
        ...
    }
}

Kotlin

// In your app module's build.gradle.kts file:
android {
    ...
    bundle {
        codeTransparency {
            signing {
                keyAlias = "ALIAS"
                keyPassword = "PASSWORD"
                storeFile = file("path/to/keystore")
                storePassword = "PASSWORD"
            }
        }
        ...
    }
}

Der verwendete Schlüssel muss nur für die Codetransparenz verwendet werden, und nicht den App-Signaturschlüssel, der von Play App Signing verwendet wird.

bundletool in der Befehlszeile verwenden

Für die Unterstützung der Codetransparenz ist Bundletool-Version 1.7.0 oder höher erforderlich, mit der Sie Sie können sie von GitHub herunterladen.

Führe den folgenden Befehl aus, um einem Android App Bundle Codetransparenz hinzuzufügen. Der verwendete Schlüssel muss nur für die Codetransparenz verwendet werden. und nicht den App-Signaturschlüssel, der von Play App Signing verwendet wird.

bundletool add-transparency \
  --bundle=/MyApp/my_app.aab \
  --output=/MyApp/my_app_with_transparency.aab \
  --ks=/MyApp/keystore.jks \
  --ks-pass=file:/MyApp/keystore.pwd \
  --ks-key-alias=MyKeyAlias \
  --key-pass=file:/MyApp/key.pwd

Wenn du eigene Signaturtools verwenden möchtest, kannst du auch Bundletool verwenden Um die unsignierte Code-Transparenzdatei zu generieren, signieren Sie sie in einem separaten Umgebung und fügen die Signatur in das Bundle ein:

# Generate code transparency file
bundletool add-transparency \
  --mode=generate_code_transparency_file \
  --bundle=/MyApp/my_app.aab \
  --output=/MyApp/code_transparency_file.jwt \
  --transparency-key-certificate=/MyApp/transparency.cert

# Add code transparency signature to the bundle
bundletool add-transparency \
  --mode=inject_signature \
  --bundle=/MyApp/my_app.aab \
  --output=/MyApp/my_app_with_transparency.aab \
  --transparency-key-certificate=/MyApp/transparency.cert \
  --transparency-signature=/MyApp/signature

Codetransparenz einer App überprüfen

Es gibt verschiedene Methoden, um Code anhand der Codetransparenz zu überprüfen je nachdem, ob Sie die APKs auf einem Android-Gerät oder auf Ihren Computer heruntergeladen haben.

App Bundle oder APK-Set mit Bundletool prüfen

Mit Bundletool kannst du die Codetransparenz in einem App Bundle oder APK überprüfen festgelegt. Verwenden Sie den Befehl check-transparency, um den Fingerabdruck des öffentlichen Zertifikats auszugeben:

# For checking a bundle:
bundletool check-transparency \
  --mode=bundle \
  --bundle=/MyApp/my_app_with_transparency.aab

No APK present. APK signature was not checked.
Code transparency signature is valid. SHA-256 fingerprint of the code transparency key certificate (must be compared with the developer's public key manually): 01 23 45 67 89 AB CD EF ..
Code transparency verified: code related file contents match the code transparency file.


# For checking a ZIP containing app's APK splits:
bundletool check-transparency \
  --mode=apk \
  --apk-zip=/MyApp/my_app_with_transparency.zip

APK signature is valid. SHA-256 fingerprint of the apk signing key certificate (must be compared with the developer's public key manually): 02 34 E5 98 CD A7 B2 12 ..
Code transparency signature is valid. SHA-256 fingerprint of the code transparency key certificate (must be compared with the developer's public key manually): 01 23 45 67 89 AB CD EF ..
Code transparency verified: code related file contents match the code transparency file.

Optional können Sie das öffentliche Zertifikat angeben, das überprüft werden soll. Set oder APK festgelegt ist, sodass Sie die Hashwerte nicht vergleichen müssen manuell:

bundletool check-transparency \
  --mode=bundle \
  --bundle=/MyApp/my_app_with_transparency.aab \
  --transparency-key-certificate=/MyApp/transparency.cert

No APK present. APK signature was not checked.
Code transparency signature verified for the provided code transparency key certificate.
Code transparency verified: code related file contents match the code transparency file.


bundletool check-transparency \
  --mode=apk \
  --apk-zip=/MyApp/my_app_with_transparency.zip \
  --apk-signing-key-certificate=/MyApp/apk.cert \
  --transparency-key-certificate=/MyApp/transparency.cert

APK signature verified for the provided apk signing key certificate.
Code transparency signature verified for the provided code transparency key certificate.
Code transparency verified: code related file contents match the code transparency file.

Mit Bundletool eine auf einem Gerät installierte App prüfen

Wenn Sie eine App prüfen möchten, die auf einem Android-Gerät installiert ist, achten Sie darauf, dass die Gerät ist über ADB mit Ihrem Computer verbunden und geben den folgenden Befehl ein:

bundletool check-transparency \
  --mode=connected_device \
  --package-name="com.my.app"

APK signature is valid. SHA-256 fingerprint of the apk signing key certificate (must be compared with the developer's public key manually): 02 34 E5 98 CD A7 B2 12 ..
Code transparency signature is valid. SHA-256 fingerprint of the code transparency key certificate (must be compared with the developer's public key manually): 01 23 45 67 89 AB CD EF ..
Code transparency verified: code related file contents match the code transparency file.

Bei der Transparenzprüfung für verbundene Geräte kann optional auch die Signatur geprüft werden. für einen öffentlichen Schlüssel, den Sie angeben:

bundletool check-transparency \
  --mode=connected-device \
  --package-name="com.my.app" \
  --apk-signing-key-certificate=/MyApp/apk.cert \
  --transparency-key-certificate=/MyApp/transparency.cert

APK signature verified for the provided apk signing key certificate.
Code transparency signature verified for the provided code transparency key certificate.
Code transparency verified: code related file contents match the code transparency file.