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