Enkripsi Database SQLite

Uraian di dalam artikel-artikel mengenai database pada perangkat Android (smartphone atau tablet) yang dibuat oleh penulis sebelum ini telah membahas dasar-dasar penggunaan database SQLite untuk penyimpanan data aplikasi. Uraian itu menjelaskan langkah-langkah dan teknik pemrograman yang umum dengan memanfaatkan fitur yang standar. Pada dasarnya semua itu sudah cukup membekali Anda untuk mulai membuat sebuah aplikasi database Android. Namun ada satu hal yang masih menjadi kekurangan di dalam database SQLite yaitu masalah keamanan data karena database tersebut masih bersifat plain, dalam arti tidak terlindungi oleh enkripsi. Database SQLite tidak memiliki mekanisme untuk memproteksi data seperti password atau enkripsi. Siapapun yang memiliki akses ke fisik file database, maka yang bersangkutan akan bisa membukanya dan melihat isi data di dalamnya. Hal ini menjadi tantangan bagi para programmer yang ingin melindungi datanya agar tidak bisa diakses dari luar aplikasi, khususnya berkaitan dengan informasi sensitif yang ada di dalam database tersebut. Terlebih lagi SQLite adalah database yang portable dimana ia bisa terpasang pada banyak perangkat dan tersebar secara luas dimana-mana. Programmer sama sekali tidak memiliki kontrol kepada setiap program dan database yang telah terpasang pada perangkat-perangkat tersebut.

Ini adalah kondisi yang terjadi saat artikel ini ditulis. Kita tentunya berharap di masa mendatang database SQLite akan dilengkapi dengan mekanisme pengaman data karena itu adalah kebutuhan yang mendasar. Namun untuk saat ini tentunya programmer tidak bisa menunggu sampai fasilitas itu tersedia atau membiarkan database dalam keadaan tidak terlindungi. Sebuah solusi alternatif harus dicari untuk tujuan tersebut karena bagaimanapun masalah keamanan data adalah isu yang sangat kritikal.

Beruntung sekali terdapat sekumpulan programmer yang bernaung di bawah organisasi bernama Zetetic (http://zetetic.net) yang mengembangkan sebuah program bernama SQLCipher yang dapat men-enkrip database SQLite menggunakan algoritma 256-bit AES encryption. SQLCipher bersifat open source sehingga bisa digunakan secara bebas tanpa kewajiban membayar kepada pembuatnya. Kita patut bersyukur dan berterima kasih kepada tim Zetetic yang menyumbangkan hasil karyanya ini kepada para programmer. Saat ini SQLCipher adalah solusi terbaik untuk enkripsi database SQLite.

Informasi mengenai SQLCipher dapat diperoleh di dalam situs web berikut ini:

http://sqlcipher.net/sqlcipher-for-android/

Pada dasarnya SQLCipher merupakan library yang bisa digunakan secara beriringan dengan SQLite. Saat ini SQLCipher sudah ditulis untuk platform Android, C++ DLL dan ADO.NET.

Dokumen ini secara khusus akan menjelaskan langkah-langkah penggunaan library SQLCipher secara detail.


Mengunduh SQLCipher

Langkah pertama untuk menggunakan SQLCipher adalah mendapatkan file library-nya. File Software Development Kit (SDK)-nya bisa diperoleh pada alamat situs:

http://sqlcipher.net/downloads/

Setelah mendapatkan file SDK dalam bentuk kompresi (ZIP atau TAR), silakan mengekstraknya ke dalam sebuah folder. Anda sangat dianjurkan untuk mendapat library SQLCipher yang sudah berbentuk binary code (dalam hal ini adalah file-file JAR, atau Java Archive) karena jika masih berbentuk source code maka file-file tersebut harus di-compile menjadi binary code. Kadang-kadang langkah untuk meng-compile bisa sangat menyulitkan.

Mengasosiasikan SQLCipher dengan Projek

Libray SQLCipher yang berbentuk binary code harus diasosiasikan dengan projek atau program yang sedang ditulis. Uraian selanjutnya akan menjelaskan langkah-langkah untuk menggunakan SQLCipher dalam sebuah contoh program Android yang ditulis menggunakan Eclipse berikut ini.

 

CATATAN:
Agar dapat memahami uraian pada artikel ini, pembaca diharapkan telah menguasai dasar-dasar database SQLite. Pembahasan mengenai database SQLite dapat dibaca pada artikel-artikel yang telah dibuat penulis dan dipublikasikan pada situs web yang sama.

 

  1. Jalankan Eclipse dan buat sebuah projek Android baru sebagai berikut.

android-enkripsi-db01

Klik Finish.

  1. Buat sebuah folder di dalam projek dan beri nama sebagai libs.

android-enkripsi-db02

  1. Di dalam folder hasil ekstrak library SQLCipher cari file-file dan folder sebagai berikut:
    • Armeabi (folder)
    • commons-codec.jar
    • guava-r09.jar
    • sqlcipher.jar
  1. Salin semua folder dan file tersebut ke dalam folder libs yang dibuat pada langkah sebelumnya. Lokasi folder libs tersebut bisa ditemukan di dalam folder projek yang bersangkutan (…\workspace\Db Project 4\libs).
  2. Di dalam window Package Explorer, klik kanan pada nama project dan pilih Properties.

android-enkripsi-db03

  1. Pada window yang terbuka, pilih Java Build Path dan masuk ke dalam tab Libraries. Klik tombol Add External JARs untuk menambahkan library SQLCipher.

android-enkripsi-db04

Tambahkan tiga buah file yang ada di dalam folder libs tadi, yaitu: commons-codec.jar, guava-r09.jar dan sqlcipher.jar.

Setelah ketiga file itu ditambahkan, Package Explorer akan tampak seperti berikut ini.

android-enkripsi-db05

Sampai dengan tahap ini library SQLCipher telah berhasil diasosiasikan dengan projek. Silakan menjalankan program tersebut menggunakan emulator Android dan pastikan tidak ada pesan kesalahan yang muncul saat program berjalan.

Untuk langkah selanjutnya kita akan mencoba menulis program yang akan membuat database yang ter-enkripsi.

Penulisan Program dengan Database Ter-enkripsi

Ditinjau dari cara pemrograman, tidak ada teknik khusus yang membedakan cara pemrograman database yang konvensional dan database yang ter-enkripsi kecuali pada pemanggilan beberapa library dan method.

  1. Hal yang pertama harus dilakukan pada penulisan program adalah merubah pemanggilan library SQLite menjadi library SQLCipher. Umumnya perintah import pada bagian header program diikuti dengan nama library SQLite seperti pada contoh berikut ini:

 Kali ini bagian tersebut harus diubah sehingga pemanggilannya diarahkan ke library SQLCipher:

 

  1. Library SQLCipher harus dimuat dengan method loadLibs sebelum perintah-perintah yang lain bisa digunakan. Pastikan loadLibs dipanggil saat program dijalankan, misalnya dengan meletakkan perintah tersebut di dalam event onCreate pada activity utama.

Contoh:

  1.  Pemanggilan method getWritableDatabase diikuti dengan parameter String yang berisi password enkripsinya. Contoh:

 Sekalipun namanya sama, namun kali ini method tersebut dipanggil dari library SQLCipher, bukan SQLite. Sebelumnya method ini tidak mengandung parameter apapun jika menggunakan library SQLite.

Hal-hal di atas adalah bagian yang paling membedakan antara program yang menggunakan library SQLite dan SQLCipher. Namun seperti yang Anda lihat perbedaan tersebut bukanlah sesuatu yang sangat besar, artinya jika Anda hendak merubah program Android yang selama ini ditulis menggunakan library SQLite menjadi SQLCipher maka modifikasi yang harus dilakukan tidaklah terlalu besar.

Untuk lebih memperjelas cara penggunaan library SQLCipher, berikut ini akan diperlihatkan kelanjutan dari projek yang telah dibuat pada langkah sebelumnya. Projek tersebut akan berisi sebuah program yang pendek namun akan mengimplementasikan hal-hal yang telah diuraikan di atas secara lengkap.

  1. Buka projek “Db Project 4” yang telah dibuat tadi.
  2. Tambahkan sebuah class baru dan beri nama DBAdapter.

Seperti yang dijelaskan pada artikel sebelum ini, praktek yang dianjurkan untuk membuat program database adalah memisahkan antara program utama dengan program yang menangani perintah-perintah operasi database seperti membuat table, menambah baris, mengubah data dan sebagainya. Tujuannya adalah tidak mencampur-adukkan logika bisnis dengan operasi tingkat rendah (SELECT, INSERT, UPDATE dan DELETE) yang akan membuat kode program sulit dibaca dan berkesan rumit sekali. Untuk tujuan kerapihan program, akan jauh lebih baik jika program utama fokus hanya pada jalannya alur program utama, sementara fungsi-fungsi database dipisahkan ke dalam program yang lain. Program utama cukup memanggil fungsi-fungsinya secara sederhana dengan satu baris perintah saja, walaupun sebetulnya fungsi itu ditulis dengan baris yang panjang dan proses yang rumit di bagian program yang lain.

Class DBAdapter ini akan berisi method-method yang khusus menangani operasi database, dipisahkan dari program utamanya.

Berikut ini adalah kode program yang ada di dalam class DBAdapter.

  1.  Buka class MainActivity dan ketikkan kode program di bawah ini.

 Sekali lagi, baris yang ditandai adalah bagian yang membedakan dengan program sebelumnya.

  1. Simpan semua perubahan dan coba jalankan program tersebut.

Menguji Database yang Terproteksi

Jika program di atas berhasil dijalankan tanpa pesan kesalahan maka hampir dipastikan program telah bekerja dengan baik. Namun bagaimana membuktikan hal tersebut? Untuk memperoleh kepastian tersebut, ada beberapa hal yang bisa dilakukan untuk menguji hasilnya.

  1. Database telah terbentuk di dalam perangkat.

Ada cara yang mudah untuk memastikan program telah berhasil membuat database. Caranya adalah dengan menjalankan menu Window –> Open Perpective –> DDMS atau cukup meng-klik icon DDMS perpective pada sudut kanan-atas layar Eclipse.

android-enkripsi-db06

Pada tab File Explorer, buka folder data –> data.

android-enkripsi-db07

Cari nama package dari projek ini (pada contoh ini adalah net.houseoflife.dbsample), kemudian buka folder-nya hingga ditemukan folder databases dan sebuah file database SQLite di dalamnya (pada contoh ini adalah sbooks.db).

Jika file itu berhasil ditemukan, maka dipastikan program telah berhasil membuat database.

  1. Database tidak bisa dibaca tanpa password yang benar

Ada beberapa cara untuk menguji bahwa database tidak bisa dibuka tanpa password yang benar. Cara yang paling mudah adalah dengan mengubah nilai konstanta DBPASSWORD yang ada di dalam class DBAdapter menjadi nilai yang lain. Setelah nilai konstanta tersebut diubah, cobalah untuk menjalankannya kembali. Seharusnya program akan berhenti dengan menampilkan pesan kesalahan.

 android-enkripsi-db08

Cara ke-dua adalah dengan mencoba membuka file database tersebut dengan SQLite Manager. SQLite Manager adalah sebuah program yang sangat membantu programmer dalam mengelola database SQLite seperti membuat table, membaca isi table, menjalankan perintah SQL dan sebagainya. Sekarang program ini akan dipakai untuk membaca database yang terproteksi tersebut.

Sebelum database itu bisa dibaca, pertama-tama ia harus diambil dulu dari dalam perangkat Android. Di dalam DDMS perpective, pilih dan sorot file sbooks.db kemudian klik icon dengan tulisan “Pull a file from the device” pada sudut kanan-atas layar dan simpan file tersebut di dalam komputer lokal..

android-enkripsi-db09

Jalankan program SQLite Manager dengan menggunakan Mozilla Firefox melalui menu Tools –> SQLite Manager. Setelah SQLite Manager muncul, jalankan menu Database –> Connect Database, kemudian buka file database yang telah tersimpan di dalam komputer lokal tadi.

Seharusnya file database yang terproteksi itu tidak bisa dibuka seperti ditunjukkan oleh pesan kesalahan berikut ini.

android-enkripsi-db10

  1. Database bisa dibaca dengan menggunakan password yang benar.

Sekalipun database itu tidak bisa dibuka menggunakan SQLite Manager, namun harus dipastikan ia bisa diakses dengan menggunakan password yang benar. Cara yang paling ampuh untuk menguji hal ini adalah dengan memodifikasi program di atas dengan membuat fungsi untuk membaca data yang ada di dalam database tersebut.

    1. Buka class DBAdapter dan tambahkan sebuah method baru getAllTitles sebagai berikut.

 Saat method getAllTitles dipanggil maka semua data yang ada di dalam table titles akan dibaca secara urut mulai dari ID yang paling besar ke paling kecil.

Data-data tersebut akan ditampilkan di dalam sebuah window baru, oleh karena itu selanjutnya kita akan membuat sebuah pasangan activity dan layout yang baru.

    1. Untuk membuat sebuah layout baru, klik kanan pada folder layout kemudian pilih New à Android XLM File. Beri nama file layout tersebut sebagai retrieve_data.xml.

Tidak ada yang perlu dilakukan lebih lanjut dengan file ini.

android-enkripsi-db11

android-enkripsi-db12

    1. Berikutnya adalah menambahkan sebuah activity dengan membuat sebuah class baru. Beri nama class tersebut sebagai RetrieveData.java dan tambahkan kode program sebagai berikut di dalamnya.

 Perhatikan bahwa class ini memanggil method getAllTitles yang telah dibuat sebelumnya kemudian menampilkan setiap baris data menggunakan kotak pesan Toast.makeText().

    1. Buka layout main.xlm dan tambahkan sebuah objek Button dengan nama Button01 seperti bagian berikut ini.

 

    1. Buka class MainActivity.java dan tambahkan baris-baris program berikut ini untuk menangani penekanan tombol Button01, dimana aksi tersebut akan membuka activity RetrieveData

  1.  Sebagai langkah terakhir, buka file AndroidManifest.xml dan daftarkan activity RetrieveData di dalamnya.

 

    1. Simpan semua perubahan dan jalankan kembali program tersebut.

Perhatikan bahwa setiap kali program dijalankan, baris-baris kode program di bawah ini yang ada di dalam MainActivity selalu dijalankan.

 

Akibatnya sebaris data akan disisipkan ke dalam table, dan data itu akan terus bertambah sebaris demi sebaris setiap kali program ini berulang kali dijalankan. Oleh karena itu jangan merasa heran jika nanti Anda menjumpai table tersebut mengandung begitu banyak data yang duplikat ditampilkan berulang-ulang. Untuk menghindari itu, Anda bisa saja menambahkan tanda remark di depan baris-baris kode itu.

Saat program telah berjalan, kali ini sebuah tombol akan tampak pada layar.

android-enkripsi-db13

Silakan menekan tombol tersebut, dan perhatikan bagaimana selanjutnya window baru muncul dan data di dalam table ditampilkan secara bergantian.

Jika hal ini yang terjadi maka dapat disimpulkan bahwa dengan menggunakan password yang benar, program berhasil mengakses database yang terproteksi itu.

Dengan selesainya pembahasan bagian ini, maka Anda telah menguasai teknik pemrograman menggunakan database SQLite yang di-enkrip untuk tujuan pengamanan data. Teknik pemrograman ini sangat sederhana namun sangat berguna untuk melindungi data, dan yang penting juga adalah ia dapat diterapkan pada program-program Andriod yang telah ada tanpa harus melakukan modifikasi yang besar.

Sumber:

  • http://sqlcipher.net/sqlcipher-for-android/

Download kode program

 

end-of-doc

Leave a Reply

Your email address will not be published. Required fields are marked *