Kunci dan buka kunci bootloader

Secara default, sebagian besar perangkat Android dijual dengan bootloader terkunci, yang berarti pengguna tidak dapat mem-flash bootloader atau partisi perangkat. Jika diperlukan, Anda (dan pengguna perangkat yang mengaktifkan opsi Developer) dapat membuka kunci bootloader untuk mem-flash image baru.

Masuk ke bootloader

Untuk mengeluarkan perintah fastboot, Anda harus berada dalam mode bootloader. Salah satu cara untuk melakukannya adalah dengan mengirim perintah adb adb reboot bootloader. Beberapa ponsel juga memungkinkan Anda memulai ulang ke bootloader dengan menekan kombinasi tombol (biasanya turunkan volume) saat mem-booting perangkat.

Buka kunci bootloader

Setelah dalam mode bootloader, jalankan perintah fastboot flashing unlock di perangkat untuk membuka kunci bootloader dan mengaktifkan partisi yang akan di-flash ulang. Setelah disetel, mode buka kunci akan tetap ada setiap kali perangkat dimulai ulang.

Perangkat harus menolak perintah fastboot flashing unlock kecuali get_unlock_ability disetel ke 1. Jika disetel ke 0, pengguna harus mem-booting ke layar utama, buka menu Settings > System > Developer options dan aktifkan opsi Buka kunci OEM (yang menyetel get_unlock_ability ke 1). Setelah disetel, mode ini akan tetap ada meskipun perangkat dimulai ulang dan reset ke setelan pabrik.

Saat perintah fastboot flashing unlock dikirim, perangkat harus meminta pengguna untuk memperingatkan bahwa mereka mungkin mengalami masalah dengan image tidak resmi. Setelah pengguna mengonfirmasi peringatan, perangkat harus mereset data ke setelan pabrik untuk mencegah akses data yang tidak sah. Bootloader akan mereset perangkat bahkan jika tidak dapat memformat ulang dengan benar. Hanya setelah reset, flag persisten dapat ditetapkan sehingga perangkat dapat di-flash ulang.

Semua RAM yang belum ditimpa harus direset selama proses fastboot flashing unlock. Tindakan ini mencegah serangan yang membaca konten RAM yang tersisa dari booting sebelumnya. Demikian pula, perangkat yang tidak terkunci harus menghapus RAM pada setiap booting (kecuali jika hal ini menyebabkan penundaan yang tidak dapat diterima), tetapi harus membiarkan region yang digunakan untuk ramoops kernel.

Kunci bootloader

Untuk mengunci bootloader dan mereset perangkat, jalankan perintah fastboot flashing lock di perangkat. Perangkat yang ditujukan untuk retail harus dikirim dalam status terkunci (dengan get_unlock_ability menampilkan 0) untuk memastikan penyerang tidak dapat membahayakan perangkat dengan menginstal sistem atau image booting baru.

Menyetel properti kunci dan buka kunci

Properti ro.oem_unlock_supported harus ditetapkan pada waktu build berdasarkan apakah perangkat mendukung buka kunci dengan flash.

  • Jika perangkat mendukung flash buka kunci, setel ro.oem_unlock_supported ke 1.
  • Jika perangkat tidak mendukung flash buka kunci, setel ro.oem_unlock_supported ke 0.

Jika perangkat mendukung flashing buka, bootloader harus menunjukkan status kunci dengan menyetel variabel command line kernel androidboot.flash.locked ke 1 jika dikunci atau ke 0 jika tidak terkunci. Variabel ini harus ditetapkan dalam bootconfig, bukan di command line kernel di Android 12.

Untuk perangkat yang mendukung dm-verity, gunakan ro.boot.verifiedbootstate untuk menetapkan nilai ro.boot.flash.locked ke 0; tindakan ini akan membuka kunci bootloader jika status booting terverifikasi berwarna oranye.

Melindungi bagian penting

Perangkat harus mendukung penguncian dan pembukaan kunci bagian penting, yang didefinisikan sebagai apa pun yang diperlukan untuk mem-booting perangkat ke bootloader. Bagian tersebut dapat mencakup sekring, partisi virtual untuk hub sensor, bootloader tahap pertama, dan lainnya. Untuk mengunci bagian penting, Anda harus menggunakan mekanisme yang mencegah kode (kernel, image pemulihan, kode OTA, dll.) yang berjalan di perangkat agar tidak sengaja mengubah bagian penting. OTA akan gagal mengupdate bagian penting jika perangkat dalam status kritis kunci.

Transisi dari status terkunci ke tidak terkunci harus memerlukan interaksi fisik dengan perangkat. Interaksi ini mirip dengan efek menjalankan perintah fastboot flashing unlock, tetapi mengharuskan pengguna untuk menekan tombol fisik di perangkat. Perangkat tidak boleh mengizinkan transisi secara terprogram dari lock critical ke unlock critical tanpa interaksi fisik, dan perangkat tidak boleh dikirim dalam status unlock critical.