Categories: Intel Developer Zone

Contoh Kode Aplikasi untuk Membuat Angka Acak di Android

Random Number Generator (RNG) adalah sejenis perangkat yang dapat menghasilkan rangkaian angka pada interval tertentu sehingga angka yang dihasilkan terlihat tidak dapat diprediksi. RNG adalah komponen yang sangat penting untuk aplikasi keamanan.

Sebuah protokol kriptografi mungkin memiliki kekuatan yang besar namun menderita dari banyakan serangan dikarenakan metode pembuatan kunci yang lemah di baliknya. RNG dapat digunakan untuk memperbaiki masalah ini sehingga meningkatkan keuatan kriptografis.

Artikel ini menyajikan gambaran umum tentang API pembuat angka acak dan juga menunjukkan bagaimanya caranya menggunakan beberapa API berbeda untuk membuat angka acak di sistem operasi Android.

Direkomendasikan bagi pembaca untuk mencoba fitur-fitur dan mengkompilkasikan kode sembari membaca artikel ini.

Kode dan Penjelasan

Ada empat cara berbeda untuk membuat angka acak di Android:

  • java.util.random
  • java.security.SecureRandom
  • /dev/urandom
  • OpenSSL API

Jika kamu menggunakan RNG untuk membuat kunci kriptografi untuk mengamankan data kamu, class java.util.random dikenal mudah untuk diretas dan sebaiknya tidak digunakan. Tiga cara lainnya dapat menghasilkan kunci yang lebih kuat.

java.util.random

Menggunakan Java Random Number API itu mudah dan tidak rumit. Sebuah panggilan ke Random.nextInt() akan menghasilkan nilai acak 4-byte (dengan kemungkinan angka yang dihasilkan sebanyak 2^32). API ini bekerja dengan baik jika kamu tidak mengandalkan angka yang benar-benar acak.

for (int i = 0; i < lastVal; i += 2) {
	dataRandomPoints[i] = (rand.nextInt() % widget_width);
	dataRandomPoints[i+1] = (rand.nextInt() % widget_height);

}

java.security.SecureRandom

SecureRandom mirip dengan java.util.Random di mana kamu dapat membuat panggilan SecureRandom.nextInt() untuk menghasilkan angka acak 4-byte. Secara kriptografi SecureRandom itu kuat walaupun para pengembang aplikasi sebaiknya mengetahui bahwa rekomendasi baru-baru ini mengatakan untuk memberikan seed ke SecureRandom dengan byte yang dihasilkan dari /dev/urandom sebelum membuat angka acak.

Contoh di bawah ini tidak menggunakan seed dari /dev/urandom.

SecureRandom srand = new SecureRandom();
shouldDraw = (srand.nextInt() % randomMod );

/dev/urandom

Sistem operasi Linux (termasuk Android) memiliki sebuah berkas khusus yang dibuat oleh kernel yang dapat memberikan angka acak ke aplikasi. Cara ini paling lambat dari keempat cara membuat angka acak tapi menghasilkan angka entropi tinggi yang aman secara kriptografi dengan menggabungkan data dari bagian-bagian di sistem operasi (contohnya driver perangkat) ke dalam RNG.

Kita bisa mendapat angka acak langsung dari kernel dengan membaca dari berkas /dev/urandom. /dev/urandom akan mengakses perangkat RNG jika tersedia.

unsigned int cKeyBuffer[keysize];
memset(cKeyBuffer, 0, sizeof(unsigned int) * keysize);

FILE *fin;
strcpy(filein, "/dev/urandom");
fin = fopen(filein, "rb");

if (fin != NULL) {
	fread(cKeyBuffer, sizeof(int), keysize, fin);
	fclose (fin);
}

OpenSSL API

Kita dapat juga menggunakan Open SSL API untuk mendapatkan angka acak di dalam kode native (C). Kamu bisa lihat bahwa OpenSSL dapat di-seed dengan byte dari /dev/urandom dan kemudian dapat digunakan untuk membuat angka acak yang aman secara kriptografi. OpenSSL API dapat mengakses perangkat RNG jika tersedia.

int seedbytes = 1024;
unsigned int cKeyBuffer[keysize];
memset(cKeyBuffer, 0, sizeof(unsigned int) * keysize);

if (!opensslIsSeeded) {

	if (!RAND_load_file("/dev/urandom", seedbytes)) {
		__android_log_print(ANDROID_LOG_ERROR, TAG, "Failed to seed OpenSSL RNG");
		return jKeyBuffer;
	}

	opensslIsSeeded = 1;
}

if (!RAND_bytes((unsigned char *)cKeyBuffer, keysize * sizeof(int))) {
	__android_log_print(ANDROID_LOG_ERROR, TAG, "Faled to create OpenSSSL random integers: %ul", ERR_get_error);
}

Kesimpulan

Dengan mengimplementasikan kode seperti contoh di artikel ini, kamu dapat dengan cepat mempelajari bagaimana caranya untuk menggunakan empat cara yang berbeda untuk membuat angka acak.

Untuk mengunduh contoh kode dari artikel ini, bisa mengunjungi link ini.

* Artikel ini adalah hasil kerja sama dengan Intel Developer Zone. Artikel asli bisa dilihat di link ini.

Share
Published by
Faisal Ramadoni

Recent Posts

Cisco Peringkatkan Kerentanan Kritis Dalam Cisco Data Center Network Manager

Cisco mengungkapkan tiga kerentanan dalam layanannya. Ini dia penanganannya!

January 7, 2020

Optimal idM Meluncurkan OptimalCloud Partner Platform

Ini ulasan mengenai keuntungan OptimalCloud Partner Platform, platform baru milik Optimal idM!

January 6, 2020

Google Siapkan Coral Accelerator Module dan Coral Dev Board Mini untuk Tahun 2020

Google kenalkan dua koleksi baru dari Coral. Dua koleksi baru ini bakal menambah kemampuan pengembangan…

January 3, 2020

Google Kembangkan Model Kecerdasan Buatan Untuk Deteksi Kanker Payudara

Raksasa Google baru saja mengembangkan sistem pemindaian kanker payudara berbasis kecerdasan buatan. Bagaimana hasilnya, berikut…

January 3, 2020

Google Dorong Fitur Bubbles Notifications Ke Versi Stabil

Meski dikenalkan bersamaan dengan Android 10 Beta, sampai kini Bubbles Notifications masih dalam tahap pengembangan.…

December 31, 2019

Samsung Siapkan Lima Proyek dan Empat Startup C-Lab Untuk CES 2020

Samsung akan kembali memamerkan hasil program C-Lab ke ajang CES 2020. Ini dia proyek dan…

December 30, 2019