apksignerと署名スキームのページが若干ばらついているのとv4の検証コマンドがサイトにないためまとめる
apksignerとは
https://developer.android.com/studio/command-line/apksigner
Android SDK Build Toolsに含まれており、apkの署名と署名の検証ができる
apk署名スキーム
v1からv4まで存在する
version | 特徴 | リンク |
---|---|---|
v1 | JARベースの署名スキーム | https://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html#Signed_JAR_File |
v2 |
android7から使用可能 apkの無許可変更を許容しない |
https://source.android.com/docs/security/features/apksigning/v2 |
v3 |
android9から使用可能 鍵のrotationが可能になった |
https://source.android.com/docs/security/features/apksigning/v3 |
v3.1 |
android13から使用可能 v3のバグ修正パッチが当たっている |
https://source.android.com/docs/security/features/apksigning/v3-1 |
v4 |
android11から使用可能 apkの全バイトに対して署名計算を行う 互換性の高めるためにv2もしくはv3での署名も必要 |
https://source.android.com/docs/security/features/apksigning/v4 |
署名する
Gradle
build.gradleからMin SDKとTarget SDKを読み取って署名スキームを良しなに使い分けてくれる
signingConfigs内の各keyにフラグを設定することで有効化できる
android.signingConfigs {
release {
storeFile = rootProject.file("release.keystore")
enableV1Signing = true
enableV2Signing = true
enableV3Signing = true
enableV4Signing = true
}
}
コマンドライン
apkファイルからMin SDKとTarget SDKを読み取って署名スキームを良しなに使い分けてくれる
オプションで指定することも可能
v2, v3を有効化する例
apksigner sign --ks <jks|keystore file> --v2-signing-enabled true --v3-signing-enabled true <apk file>
署名時のオプションはサイトにちゃんとまとまっている
https://developer.android.com/studio/command-line/apksigner#options
検証する
v1 ~ v3.1はapkファイルのみで検証が可能
v1 ~ v3.1
apksigner verify -v <apk file>
Verifies
Verified using v1 scheme (JAR signing): false
Verified using v2 scheme (APK Signature Scheme v2): true
Verified using v3 scheme (APK Signature Scheme v3): true
Verified using v3.1 scheme (APK Signature Scheme v3.1): false
Verified using v4 scheme (APK Signature Scheme v4): false
Verified for SourceStamp: false
Number of signers: 1
v4
v4は署名時に生成されるidsigファイル(signature file)が必要
apksigner verify -v -v4-signature-file <idsig file> <apk file>
Verifies
Verified using v1 scheme (JAR signing): false
Verified using v2 scheme (APK Signature Scheme v2): true
Verified using v3 scheme (APK Signature Scheme v3): true
Verified using v3.1 scheme (APK Signature Scheme v3.1): false
Verified using v4 scheme (APK Signature Scheme v4): true
Verified for SourceStamp: false
Number of signers: 1
v4で署名していてもsignature fileをapksignerに渡さない場合はv4での検証ができないことに注意
渡さなかった場合はv3.1までの検証が実行される