Code Signing — apa itu, penandatanganan kode dan cara kerjanya

Penulis: IT Sectr Diterbitkan: 2026-04-16 Waktu membaca: 9 mnt

Code Signing (penandatanganan kode) — mekanisme penandatanganan digital file yang dapat dieksekusi, yang menjamin keaslian pengembang dan integritas aplikasi. Di Android, setiap file APK harus ditandatangani dengan sertifikat sebelum diinstal pada perangkat atau dipublikasikan di Google Play. Menurut Google, 2024, Android mendukung empat generasi skema penandatanganan: dari v1 berbasis JAR hingga v4 untuk instalasi streaming.

Utama

  • Code Signing — tanda tangan digital kode, yang menegaskan kepenulisan dan integritas aplikasi.
  • Di Android penandatanganan dilakukan melalui keystore — penyimpanan kunci dan sertifikat.
  • Skema v2 (APK Signature Scheme) — standar utama sejak Android 7.0, yang melindungi semua byte APK.
  • Rotasi kunci (v3, Android 9.0+) memungkinkan mengganti kunci penandatanganan tanpa menghapus aplikasi.
  • Google Play menggunakan Play App Signing untuk manajemen kunci terpusat.

Apa itu Code Signing?

Code Signing — proses kriptografi di mana pengembang menandatangani kode yang dapat dieksekusi dengan sertifikat digitalnya. Tanda tangan dibuat menggunakan enkripsi asimetris: dengan kunci privat pengembang dihasilkan tanda tangan digital, dan kunci publik ditanamkan dalam sertifikat. Siapa pun dapat memverifikasi tanda tangan menggunakan kunci publik, tetapi mengubah kode tanpa melanggar tanda tangan tidak mungkin.

Dalam pengembangan mobile penandatanganan kode memiliki tiga fungsi. Pertama — autentikasi: pengguna dan platform dapat mengidentifikasi pengembang aplikasi. Kedua — integritas: setiap perubahan APK setelah penandatanganan membatalkan tanda tangan. Ketiga — pembaruan tepercaya: platform mengizinkan pembaruan aplikasi hanya dengan APK yang ditandatangani dengan sertifikat yang sama dengan versi yang terinstal.

Status hukum

Tanda tangan digital aplikasi Android memiliki makna hukum. Sesuai dengan undang-undang Federasi Rusia (63-FZ) dan eIDAS Eropa, tanda tangan elektronik yang memenuhi syarat disamakan dengan tanda tangan basah. Namun, penandatanganan APK menggunakan sertifikat yang ditandatangani sendiri (praktik umum di Android) tidak memenuhi syarat — ini menegaskan integritas, tetapi bukan identitas pengembang dari sudut pandang hukum.

Skema penandatanganan Android: v1, v2, v3, v4

Android mendukung empat skema penandatanganan APK, masing-masing memecahkan masalah versi sebelumnya dan menambahkan kemampuan baru. Semua skema dapat hidup berdampingan dalam satu APK — ini diperlukan untuk kompatibilitas mundur dengan versi Android yang lebih lama.

Skema v1 (JAR signing) muncul di Android 1.0. Skema ini menandatangani file individual di dalam arsip APK melalui entri di META-INF/MANIFEST.MF. Kekurangan: APK dapat diubah (menambah atau menghapus file) dan hanya file yang diubah yang dapat ditandatangani ulang, tanpa menyentuh tanda tangan yang lain. Ini membuat v1 rentan terhadap serangan tertentu. Skema v2 (APK Signature Scheme), diperkenalkan di Android 7.0, menandatangani seluruh file APK secara lengkap, termasuk semua byte kecuali tanda tangan itu sendiri, yang menghilangkan kemungkinan modifikasi selektif.

SkemaAndroidFiturRotasi kunci
v1 (JAR)1.0+Tanda tangan setiap fileTidak
v27.0+Tanda tangan seluruh APKTidak
v39.0+Tanda tangan + rotasiYa
v411.0+Streaming + ADBYa

v3: rotasi kunci penandatanganan

Skema v3, diperkenalkan di Android 9.0, memecahkan masalah lama: apa yang harus dilakukan jika kunci penandatanganan dikompromikan atau kedaluwarsa? Sebelumnya, mengganti kunci penandatanganan berarti aplikasi dianggap baru — tidak dapat diinstal di atas yang sudah ada. v3 menambahkan mekanisme rotasi: dalam APK dapat disertakan bukti perubahan kunci (proof-of-rotation), ditandatangani dengan kunci lama. Sistem memeriksa rantai dan memungkinkan pembaruan aplikasi yang ditandatangani dengan kunci baru.

Keystore dan sertifikat

Keystore — wadah aman yang berisi kunci privat dan sertifikat untuk penandatanganan aplikasi. Dalam pengembangan Android digunakan format JKS (Java KeyStore) atau PKCS12. Keystore dibuat dengan utilitas keytool, yang merupakan bagian dari JDK. Setiap kunci dalam penyimpanan diidentifikasi dengan alias dan dilindungi dengan kata sandi.

Sertifikat dalam keystore berisi kunci publik dan informasi tentang pemilik: nama organisasi, negara, masa berlaku. Untuk aplikasi Android, sertifikat dapat ditandatangani sendiri — Google tidak memerlukan otoritas sertifikasi (CA), yang membedakan Android dari iOS. Namun, masa berlaku sertifikat harus setidaknya 25 tahun, karena aplikasi akan diperbarui dengan kunci yang sama.

bash
# Membuat keystore baru untuk penandatanganan
keytool -genkey -v -keystore my-release.keystore \
        -alias my-app-alias \
        -keyalg RSA \
        -keysize 2048 \
        -validity 10000

# Melihat konten keystore
keytool -list -v -keystore my-release.keystore

Format kunci

Android mendukung dua algoritma untuk kunci penandatanganan: RSA dan ECDSA. RSA dengan ukuran kunci 2048 bit — standar de facto, didukung oleh semua versi Android. ECDSA (Elliptic Curve Digital Signature Algorithm) dengan kurva P-256 memberikan kekuatan kriptografi yang sama dengan ukuran kunci yang lebih kecil. Mulai Android 9.0 direkomendasikan menggunakan ECDSA, karena lebih cepat dalam verifikasi pada perangkat mobile.

Konfigurasi penandatanganan dalam build

Dalam Android Gradle Plugin penandatanganan dikonfigurasi melalui blok signingConfigs di build.gradle tingkat modul. Untuk build debug, Android Studio secara otomatis membuat keystore debug dengan kata sandi yang diketahui. Untuk build release, pengembang menentukan jalur ke keystore sendiri, alias kunci dan kata sandi. Disarankan menyimpan kata sandi dalam file konfigurasi terpisah, yang dikecualikan dari sistem kontrol versi.

Praktik modern adalah manajemen penandatanganan terpusat melalui CI/CD. Jenkins, GitLab CI atau GitHub Actions dapat menyimpan keystore sebagai artefak yang dilindungi, dan kata sandi — dalam rahasia lingkungan. Ini mencegah kebocoran kunci melalui repositori dan menyederhanakan penggantian kunci jika diperlukan.

groovy
// build.gradle (tingkat modul) — konfigurasi penandatanganan
android {
    signingConfigs {
        release {
            storeFile file("my-release.keystore")
            storePassword System.getenv("KEYSTORE_PASSWORD")
            keyAlias System.getenv("KEY_ALIAS")
            keyPassword System.getenv("KEY_PASSWORD")
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}

Penandatanganan beberapa skema

Untuk kompatibilitas maksimal, APK harus ditandatangani dengan ketiga skema (v1 + v2 + v3). Android Gradle Plugin secara default menyertakan semua skema. APK yang hanya ditandatangani dengan v2 tidak akan terinstal di Android 6.0 dan yang lebih rendah. APK hanya dengan v1 tidak akan mendapatkan keuntungan integritas v2 di Android 7.0+. Menyertakan semua skema tidak meningkatkan ukuran APK lebih dari 1–2% dan memastikan kompatibilitas dengan perangkat apa pun.

Play App Signing dan manajemen kunci

Play App Signing — layanan Google Play yang mengelola kunci penandatanganan aplikasi secara terpusat. Pengembang mengunggah ke Google Play Console APK yang ditandatangani dengan kunci unggah (upload key), dan Google Play menandatanganinya kembali dengan kunci distribusi (distribution key) sebelum dikirimkan ke pengguna. Ini melindungi kunci distribusi dari kehilangan atau kompromi.

Keuntungan Play App Signing: keamanan — kunci distribusi disimpan di penyimpanan Google yang dilindungi; rotasi — dapat meminta perubahan kunci melalui konsol; pemulihan — jika kunci unggah hilang, dapat menghasilkan yang baru. Kekurangan: untuk aplikasi yang sudah ada sebelum penerapan Play App Signing, transisi memerlukan pembuatan aplikasi baru, karena kunci distribusi lama sudah digunakan.

bash
# Mendapatkan sidik jari sertifikat (SHA-256)
keytool -list -v -keystore my-release.keystore \
        -alias my-app-alias | grep "SHA256"

# Memeriksa tanda tangan APK melalui apksigner
apksigner verify --verbose app-release.apk

Pemulihan kunci

Jika kunci penandatanganan hilang dan Play App Signing tidak digunakan, memulihkan kemampuan pembaruan aplikasi tidak mungkin — harus membuat aplikasi baru dengan nama paket baru. Ini adalah salah satu alasan utama menggunakan Play App Signing. Google merekomendasikan menyimpan cadangan keystore di penyimpanan offline yang aman (USB terenkripsi, brankas bank).

Verifikasi tanda tangan pada perangkat

Saat menginstal APK, Android melakukan verifikasi tanda tangan dalam beberapa tahap. Pertama — pemeriksaan sertifikat: apakah belum kedaluwarsa, format benar. Kedua — pemeriksaan tanda tangan: apakah tanda tangan kriptografi cocok dengan konten APK. Ketiga — perbandingan sertifikat dengan versi terinstal: jika aplikasi sudah ada di perangkat, sertifikat harus cocok, jika tidak instalasi diblokir.

Sistem verifikasi tertanam di PackageManagerService. Saat memproses permintaan instalasi, PMS mengekstrak tanda tangan dari APK, memeriksanya dengan kelas android.util.PackageParser dan membandingkannya dengan tanda tangan tersimpan dari aplikasi yang terinstal (jika ada). Jika tidak cocok, pengguna menerima kesalahan „INSTALL_FAILED_UPDATE_INCOMPATIBLE”. Mekanisme ini mencegah serangan penggantian (malware tidak dapat memperbarui aplikasi yang sah dengan versinya sendiri).

Pemeriksaan oleh pengembang

Pengembang dapat memeriksa sendiri tanda tangan APK dengan utilitas apksigner dari Android SDK Build Tools. Perintah apksigner verify --verbose app.apk menunjukkan dengan skema apa APK ditandatangani, apakah sertifikat valid dan apakah tanda tangan cocok dengan konten. Untuk verifikasi terprogram tanda tangan aplikasi yang terinstal digunakan PackageManager.getPackageInfo() dengan flag GET_SIGNATURES.

kotlin
// Verifikasi terprogram tanda tangan aplikasi yang terinstal
fun getAppSignature(context: Context, packageName: String): String? {
    val pm = context.packageManager
    val info = pm.getPackageInfo(
        packageName,
        PackageManager.GET_SIGNATURES
    )
    return info.signatures?.firstOrNull()?.toCharsString()
}

Praktik terbaik keamanan penandatanganan

Keamanan kunci penandatanganan — aspek kritis pengembangan Android. Kompromi kunci memungkinkan penyerang menandatangani pembaruan aplikasi Anda dengan kode mereka sendiri. Aturan dasar: jangan pernah menyimpan kunci di repositori, jangan gunakan satu kunci untuk aplikasi yang berbeda, jangan kirim kunci melalui saluran tidak aman (email, messenger).

Praktik yang direkomendasikan adalah pemisahan kunci. Gunakan kunci terpisah untuk setiap aplikasi dan kunci terpisah untuk unggahan ke Google Play (upload key). Untuk build debug, Android Studio membuat debug.keystore bersama — ini tidak dapat digunakan untuk build release. Masa berlaku sertifikat harus 25–30 tahun (standar saat ini, dikonfirmasi oleh Google).

PraktikRekomendasi
Penyimpanan kunciMedia terenkripsi, rahasia CI/CD
Masa sertifikatSetidaknya 25 tahun
AlgoritmaRSA 2048+ atau ECDSA P-256
PemisahanKunci terpisah per aplikasi
CadanganSalinan offline keystore

Audit tanda tangan

Secara teratur periksa integritas rantai penandatanganan. Saat pergantian karyawan yang memiliki akses ke kunci, perbarui upload key melalui Google Play Console. Gunakan alat seperti Google Play Integrity API untuk memeriksa apakah aplikasi Anda tidak dipalsukan pada perangkat pengguna. API mengembalikan data tentang tanda tangan, integritas dan mengirimkannya ke server untuk verifikasi.

Pertanyaan yang sering diajukan

Apa itu Code Signing di Android?

Code Signing — adalah tanda tangan digital file APK yang menegaskan bahwa aplikasi dibuat oleh pengembang tertentu dan tidak diubah setelah penandatanganan. Tanpa tanda tangan, APK tidak akan terinstal pada perangkat.

Bagaimana cara membuat kunci untuk penandatanganan aplikasi Android?

Gunakan utilitas keytool dari JDK: keytool -genkey -v -keystore my-release.keystore -alias my-alias -keyalg RSA -keysize 2048 -validity 10000. Tentukan keystore yang dihasilkan di build.gradle dalam blok signingConfigs.

Apa yang terjadi jika kunci penandatanganan hilang?

Jika kunci hilang dan Anda tidak menggunakan Play App Signing, pembaruan aplikasi menjadi tidak mungkin. Anda harus membuat aplikasi baru di Google Play dengan nama paket baru. Gunakan Play App Signing untuk melindungi diri dari kehilangan kunci.

Apa perbedaan skema penandatanganan v1 dan v2?

v1 menandatangani setiap file di dalam APK secara terpisah — penyerang dapat mengubah satu file dan menandatanganinya ulang saja. v2 menandatangani seluruh APK secara lengkap — setiap perubahan membatalkan tanda tangan, yang memberikan tingkat keamanan lebih tinggi.

Apa itu Play App Signing?

Play App Signing — layanan Google Play yang menyimpan kunci distribusi aplikasi secara terpusat. Pengembang mengunggah APK yang ditandatangani dengan upload key, dan Google menandatanganinya kembali sebelum dikirimkan ke pengguna, melindungi kunci dari kehilangan atau pencurian.

Kesimpulan

  • Code Signing — tanda tangan digital wajib APK, yang menjamin keaslian dan integritas aplikasi.
  • Android mendukung empat skema penandatanganan: v1 (JAR), v2 (APK Signature), v3 (rotasi kunci) dan v4 (streaming).
  • Keystore — wadah aman dengan kunci, dibuat melalui keytool dengan algoritma RSA 2048+.
  • Rotasi kunci (v3, Android 9.0+) memungkinkan mengganti kunci penandatanganan tanpa menghapus aplikasi.
  • Play App Signing mengelola kunci distribusi secara terpusat melalui Google Play Console.
  • Verifikasi tanda tangan saat instalasi memblokir serangan penggantian: ketidakcocokan sertifikat = kesalahan INSTALL_FAILED.
  • Keamanan kunci: kunci terpisah per aplikasi, masa 25+ tahun, salinan offline, tidak ada kunci di repositori.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga