Key Generation


Salah satu cara untuk memperkuat hasil dari sebuah proses enkripsi adalah dengan menggunakan kunci yang relatif panjang. Cara ini bisa ditempuh dengan 2 metode. Pertama, user memasukkan kunci yang panjangnya real (nyata). Kedua, dengan memberikan nilai random pada kunci. Banyak cara dan metode yang ditawarkan untuk membangkitakan kunci random, namun dalam tulisan ini saya mencoba menggunakan metode sederhana yaitu dengan membangkitakan kunci berdasarkan nilai (kunci) awal yang kita masukkan.

Adapun langkah-langkah pembangkitan kunci sebagai berikut:
1. karakter terakhir dari kunci dijumlahkan dengan n-1 karakter sebelumnya (n adalah panjang kunci asli), kemudian jumlah tersebut
dimodulo 26.
2. Hasil modulo merupakan karakter baru yang kemudian digabungkan dengan kunci sebelumnya menjadi kunci baru.
3. Kembali ke langkah pertama sampai kunci tersebut sepanjang plaintext.

Dari langkah-langkah di atas, dapat dirumuskan persaman berikut untuk menghasilkan karakter kunci ke-i:

k[i] = (k[i-n] + k[i-1]) mod 128
dimana:
i = n+1, n+2, …
ki = karakter kunci ke-i (A = 0, B = 1, …)
n = panjang kunci asli

Penerapan dalam program adalah sebagai berikut:
Kunci akan dimasukkan ke dalam array berukuran 256 byte sebanyak satu kali, kemudian sisa array lainnya akan diisikan dengan nilai random
yang dibangkitkan oleh fungsi random, maka seluruh array terisi. Algoritmanya adalah sebagai berikut :
a) Isi k dengan 0
b) Untuk i = 0 sampai i = 255 lakukan
c) Jika j < panjang kunci maka
d) Isi K ke i dengan nilai Ascii karakter key ke k
e) Selain itu
f) Isi K ke i dengan nilai random (dalam hal ini saya menggunakan persamaan seperti diatas)
g) Akhir jika
h) Nilai k dinaikkan 1
i) Nilai i dinaikkan kemudian kembali ke 2.

Untuk lebih jelasnya saya coba deskripsikan dalam source code dengan bahasa Java:
int k = 0;
for (int i = 0; i < 256; i++) {
if (k < kunci.length()) {
key[i] = kunci.charAt(k);
k++;
}
else
key[i] = (key[i-kunci.length()] + key[i-1]) % 128;
System.out.print(key[i] + " ");
}

Mohon masukan dan sarannya….. Semoga bermanfaat…

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s