mobileBankingMorph Tulisan ini  akan menjelaskan langkah-langkah mengimplementasikan kriptografi pada platform J2ME berdasarkan pengalaman penulis. Khususnya pada pengaturan beberapa kakas yang dibutuhkan dalam proses enkripsi/dekripsi di mobile devices. Pengaturan ini penting karena penulis selama sekian waktu merasa kebingungan dengan pesan error yang terus muncul akibat kesalahan pengaturan kakas. Hasil pencarian di Google pun belum ada yang cukup memuaskan untuk memandu langkah demi langkah. Seperti pada forum-forum yang membahas masalah kriptografi di J2ME ini, seringkali tidak sampai pada solusi final tentang masalah yang dihadapi penulis. Semoga tulisan ini bermanfaat.

Catatan:

  • Kriptografi pada J2ME biasanya digunakan untuk aplikasi-aplikasi yang membutuhkan tingkat keamanan tertentu seperti mobile banking.
  • Tulisan ini TIDAK membahas mengenai:
    • Kriptografi secara umum
    • Pengantar kriptografi untuk J2ME (termasuk isu-isu terkait seperti keterbatasan spesifikasi hardware yang tidak memungkinkan proses komputasi ekripsi/dekripsi seperti pada PC)
      Salah satu referensi dapat dibaca di sini.
    • Implementasi berbagai jenis algoritma kriptografi di J2ME
      Pada tulisan ini hanya digunakan algoritma Data Encryption Standard (DES).
  • Pengetesan hanya dilakukan pada device dengan spesifikasi Connected Limited Device Configuration (CLDC), bukan Connected Device Configuration (CDC). Singkatnya, hanya untuk device dengan spesifikasi hardware yang terbatas seperti ponsel, bukan PDA atau Smart Phone.

So, let’s get it on!

Kakas yang digunakan:

  • Mobile SDK
    Mobile SDK berguna sebagai penyedia pustaka untuk aplikasi mobile berikut device emulator untuk menjalankan aplikasi tersebut. Setiap aplikasi J2ME membutuhkan pengaturan device profile yang tepat agar aplikasi yang dibuat dapat di-deploy dengan mulus. Inilah salah satu penyebab sebuah aplikasi yang jalan di ponsel tipe tertentu tidak dapat dijalankan di ponsel tipe lain.

    • Java ME SDK
      Java ME SDK adalah toolkit standar dari Oracle (Sun). Yang penulis gunakan adalah versi 3.0. SDK ini menyediakan beberapa pilihan profil device yang dapat digunakan untuk pengetesan, mulai dari yang memiliki spesifikasi JSR yang minimal hingga yang komplit (lihat gambar).

      EclipseSDKProfile

    • SDK dari vendor
      Contohnya Nokia, Ericsson, Motorola, Sony Ericsson (beda dengan Ericsson?) (lihat gambar).image
      Konon SDK dari vendor ini menyediakan pustaka dan studio yang lebih komplit daripada Java ME SDK. Apabila suatu aplikasi hanya diperuntukkan untuk ponsel merk/tipe tertentu, maka nampaknya SDK jenis ini lebih tepat karena lebih banyak pustaka yang dapat digunakan sehingga kemungkinan lebih banyak kemampuan hardware yang bisa dieksplorasi.
  • Pustaka Kriptografi
    Kriptografi di J2ME dapat diimplementasikan dengan bantuan pustaka bawaan J2ME (yang juga ditanam ke mobile device) atau pustaka pihak ketiga berlisensi GPL, Bouncy Castle.

    • Default J2ME: Pustaka Security and Trust Services API for J2ME (SATSA): JSR177
      SATSA (lihat arsitekturnya) dapat digunakan untuk mengimplementasikan kriptografi di ponsel, namun jika dan hanya jika ponsel tersebut telah ditanam SATSA juga. Pada contoh kriptografi dengan SATSA, program ini dapat dijalankan pada emulator dengan profil yang mengandung SATSA. Saat di-deploy ke ponsel SE W880 (lihat perbadingan spesifikasi), aplikasi gagal dijalankan akibat ponsel tersebut tidak mengandung pustaka SATSA.
      Selain itu, nampaknya pihak Sun tidak terlalu fokus mengembangkan pustaka ini (update terakhir: 2004?) sehingga ada yang menduga kemampuan enkripsinya tidak cukup secure. Terutama jika dibandingkan dengan pustaka pihak ketiga pada poin berikutnya.
    • Bouncy Castle (BC)
      BC Pustaka ini diakui sebagai pustaka pihak ketiga yang cukup dipercaya dalam menyediakan fungsi-fungsi kriptografi di Java, terutama karena terus diperbarui, berlisensi GPL, dan memiliki versi lightweight untuk J2ME. Kelebihannya dibanding SATSA adalah kelengkapan pustakanya yang lebih meyakinkan serta dapat disertakan dengan aplikasi yang dibuat sehingga tidak bergantung pada spesifikasi pustaka pada ponsel. Penulis menggunakan BC untuk penjelasan berikutnya.
      [Download BC] (PENTING: lihat yang Lightweight API untuk J2ME).
  • Obfuscator
    • PENTING: Kebutuhan penggunaan kakas ini muncul saat pustaka BC membutuhkan objek dari kelas java.security.SecureRandom untuk membangkitkan karakter acak untuk kunci enkripsi/dekripsi. Masalahnya, pada saat verifikasi kelas di ponsel, virtual machine J2ME akan menggagalkan proses verifikasi jika aplikasi meng-import kelas dengan awalan java.*. Isu ini sempat ditanyakan di sini dan di beberapa topik forum lain yang mengalami masalah serupa.
      Untuk mengatasinya, kode Java yang sudah berbentuk .class (dalam JAR) itu akan diobfuskasi (sudah di-Indonesiakan?) sehingga menjadi kode baru yang menyamarkan pemanggilan kelas java.security.SecureRandom tersebut. Alhasil, aplikasi akan lolos verifikasi sehingga dapat dijalankan. Tanpa proses ini, aplikasi tidak akan bisa dijalankan.
      Sebagai gambaran, proses obfuskasi ini dapat dibaca di sini.
      Ternyata, obfuscator tidak hanya berguna untuk menyamarkan pemanggilan kelas saja. Peran utamanya nampaknya untuk menyamarkan kode sehingga sulit untuk di-reverse engineer. Lebih dari itu, ia juga bisa diatur sedemikian rupa sehingga dapat berguna untuk membuat program lebih cepat di-load, lebih sedikit meninggalkan bekas di memori, dan mengoptimasi program dari kode yang tidak berguna (keren, ya?)
    • Proguard
      Pustaka ini yang lazim digunakan untuk obfuskasi karena lengkap, terus diperbarui, dan berlisensi GPL. Pustaka ini dimasukkan ke plugin, baik oleh Netbeas maupun Eclipse. FAQ Proguard perihal proses obfuscation secara umum dapat dibaca di sini.
      Tersedia antarmuka Proguard (Proguard GUI) untuk mempermudah penggunaan Proguard, terutama dalam pengaturan parameter-parameter obfuskasi. Penggunaan GUI ini sangat disarankan mengingat banyaknya parameter yang mungkin dimasukkan dalam proses obfuskasi (lihat gambar). PENTING: Parameter umum yang digunakan untuk aplikasi J2ME (Midlet) dapat dilihat di sini.screenshot_gui6
  • Integrated Development Environment (IDE)
    • Netbeans
      Awalnya penulis menggunakan Netbeans versi 6.7 dengan mobility pack. Namun saat proses obfuskasi dengan Proguard, terjadi beberapa kali pesan kesalahan yang menyebalkan. Ternyata hal ini salah satunya disebabkan Netbeans lebih ketat dalam menjalankan proses ini daripada Eclipse. Hal ini cukup menghambat pengembangan aplikasi. Oleh karena itu, penulis beralih ke Eclipse, walaupun untuk fitur pemrograman J2ME berbasis GUI, Netbeans lebih unggul daripada Eclipse.
    • Eclipse Pulsar
      devices Eclipse versi ini dikembangkan dengan plugin khusus untuk pengembangan aplikasi mobile, termasuk plugin Proguard. Petunjuk instalasinya bersama Java ME SDK dapat dibaca di sini.
      ProguardEclipse2
      Sayangnya, walaupun untuk pengaturan obfuskasi lebih baik daripada Netbeans, namun fitur pengaturan Proguard yang tersedia tidak lengkap (lihat gambar) (bandingkan dengan yang tersedia di Proguard GUI).ProguardEclipse1
    • Keterbatasan ini membuat penulis tidak bisa mengandalkan Eclipse untuk menangani keseluruhan proses pengembangan aplikasi J2ME. Dibutuhkan kombinasi beberapa kakas berikut:
      • Eclipse: koding, compile, dan packaging tanpa obfuskasi.
      • Proguard GUI: obfuskasi.
      • Terminal Emulator: menjalankan aplikasi hasil obfuskasi di dalam emulator.
    • CATATAN: Tulisan berikutnya berasumsi bahwa Java ME SDK, Eclipse Pulsar, dan Proguard sudah ter-install dengan baik.


(bersambung)

Tagged with:
 

2 Responses to Kriptografi di J2ME (1)

  1. Pak saya sudah membuat aplikasi android yang memanfaatkan spongycastle untuk mengirim pesan melalui s/mime berikut
    https://play.google.com/store/apps/details?id=id.co.blogspot.datacomlink.ediint
    aplikasinya berjalan lancar di xiaomi mi4i yang spesifikasinya lumayan tinggi, adakah batasan minimal untuk berjalan lancar ya pak? terima kasih

  2. Pak saya sudah membuat aplikasi android yang memanfaatkan spongycastle untuk mengirim pesan melalui s/mime berikut
    https://play.google.com/store/apps/details?id=id.co.blogspot.datacomlink.ediint
    aplikasinya berjalan lancar di xiaomi mi4i yang spesifikasinya lumayan tinggi, adakah batasan minimal untuk berjalan lancar ya pak? terima kasih

Leave a Reply

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

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>