Trasparenza del codice per app bundle

La trasparenza del codice è un meccanismo facoltativo di firma e verifica del codice per app pubblicate con il formato Android App Bundle. Utilizza la trasparenza del codice di firma, di proprietà esclusiva dello sviluppatore dell'app.

La trasparenza del codice è indipendente dallo schema di firma utilizzato per gli app bundle e APK. La chiave per la trasparenza del codice è separata e diversa dalla firma dell'app che viene archiviata sull'infrastruttura sicura di Google durante l'utilizzo della firma dell'app di Google Play.

Come funziona la trasparenza del codice

Il processo prevede l'inclusione di un file di trasparenza del codice nel bundle dopo di esso è stata creata, ma prima che venga caricata in Play Console per la distribuzione.

Il file di trasparenza del codice è un token JWT (JSON Web Token) che contiene un elenco di file DEX le librerie native e i file inclusi nel bundle e i relativi hash. È quindi utilizzando la chiave per la trasparenza del codice di cui è in possesso solo lo sviluppatore.

Diagramma di trasparenza del codice

Questo file di trasparenza del codice viene propagato all'APK di base creato dall'app bundle (in particolare per la suddivisione principale del modulo di base). È quindi possibile verificato che:

  • Tutti i file DEX e di codice nativo presenti negli APK hanno hash corrispondenti il file di trasparenza del codice.
  • Il componente di chiave pubblica della chiave di firma per la trasparenza del codice nell'app corrisponde alla chiave pubblica dello sviluppatore (che deve essere fornita dal per gli sviluppatori in un canale separato e sicuro).

Insieme, queste informazioni verificano che il codice contenuto nei Gli APK corrispondono alle intenzioni dello sviluppatore e non sono stati modificati.

Il file di trasparenza del codice non verifica le risorse, gli asset, File manifest o qualsiasi altro file che non sia file DEX o librerie native contenuti nella cartella lib/.

La verifica della trasparenza del codice viene utilizzata esclusivamente ai fini dell'ispezione da parte del sviluppatori e utenti finali, che vogliono assicurarsi che il codice che eseguono il codice originariamente creato e firmato dallo sviluppatore dell'app.

Limitazioni note

In alcune situazioni non è possibile utilizzare la trasparenza del codice:

  • App che specificano le sharedUserId nel file manifest. Tali applicazioni possono condividere il loro processo con altre applicazioni, il che rende difficile dare garanzie in merito e il codice che sta eseguendo.
  • App che utilizzano la protezione dalle manomissioni o qualsiasi altro servizio che apporta modifiche al codice Dopo la generazione del file di trasparenza del codice, la trasparenza del codice che la verifica non vada a buon fine.
  • App che utilizzano la versione precedente Multidex con livelli API inferiori a 21 (Android 5.0) e utilizzano moduli delle funzionalità. La trasparenza del codice continuerà a funzionare quando l'app verrà installato da Google Play su dispositivi Android 5.0 e versioni successive. La trasparenza del codice sarà disattivata sulle versioni precedenti del sistema operativo.

Come aggiungere trasparenza al codice

Prima di poter aggiungere trasparenza del codice alla tua app, assicurati di avere un una coppia di chiavi pubblica e privata che puoi utilizzare per la firma del codice trasparente. Questo Deve essere una chiave univoca diversa dalla chiave di firma dell'app che usi. per la firma dell'app di Google Play e deve essere conservata in modo sicuro e mai condivisa al di fuori di dell'organizzazione.

Se non disponi di un token, puoi seguire le istruzioni riportate nella pagina Firmare l'app. guida per generarne uno sulla tua macchina. La trasparenza del codice utilizza uno standard dell'archivio chiavi, quindi anche se la guida riguarda la firma dell'app, la generazione delle chiavi processo è lo stesso.

Utilizzo del plug-in Android per Gradle

Il supporto della trasparenza del codice richiede il plug-in Android per Gradle versione 7.1.0-alpha03 o più recente. Per configurare la chiave utilizzata per la firma per la trasparenza del codice, aggiungi il metodo seguire nel blocco bundle.

Alla moda

// 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"
            }
        }
        ...
    }
}

La chiave utilizzata deve essere quella che userai solo per la trasparenza del codice, e non la chiave di firma dell'app usata dalla firma dell'app di Google Play.

Utilizzo di bundletool nella riga di comando

Il supporto per la trasparenza del codice richiede bundletool versione 1.7.0 o successiva, può scaricare da GitHub.

Esegui questo comando per aggiungere trasparenza del codice a un Android App Bundle. La chiave utilizzata deve essere quella che userai solo per la trasparenza del codice, e non la chiave di firma dell'app usata dalla firma dell'app di Google Play.

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

In alternativa, se vuoi usare i tuoi strumenti di firma, puoi usare bundletool per generare il file di trasparenza del codice non firmato, firmalo in un e inserisci la firma nel bundle:

# 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

Verificare la trasparenza del codice di un'app

Esistono diversi metodi per verificare il codice rispetto alla trasparenza del codice o meno, a seconda che gli APK siano installati su un dispositivo Android oppure scaricati localmente sul tuo computer.

Utilizzare Bundletool per controllare un set di app bundle o APK

Puoi utilizzare bundletool per verificare la trasparenza del codice in un app bundle o un APK per iniziare. Usa il comando check-transparency per stampare l'impronta digitale del certificato pubblico:

# 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.

Facoltativamente, puoi specificare il certificato pubblico che vuoi verificare bundle o APK impostati per non dover confrontare gli hash manualmente:

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.

Utilizzo di Bundletool per controllare un'app installata su un dispositivo

Per controllare un'app che è stata installata su un dispositivo Android, assicurati che la il dispositivo è connesso al computer tramite ADB ed emetti il seguente comando:

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.

Il controllo di trasparenza dei dispositivi connessi può anche verificare facoltativamente la firma a fronte di una chiave pubblica da te specificata:

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.