• Tidak ada hasil yang ditemukan

BAB 3: ANALISIS DAN PERANCANGAN SISTEM

3.1.3. Analisis proses

Analisis proses bertujuan untuk mengetahui tahapan dan cara kerja sistem secara spesifik. Dalam sistem ini terdapat dua proses utama, yaitu enkripsi/dekripsi file menggunakan algoritma AES (Rijndael) dan enkripsi/dekripsi kunci dari block cipher AES menggunakan algoritma kriptografi kunci publik ElGamal kurva eliptik. Proses pengenkripsian kunci ini memerlukan bilangan prima yang cukup besar yang akan dibangkitkan menggunakan metode Miller-Rabin.

Pada proses enkripsi, input yang akan diproses hanya ada dua, yaitu kunci dan naskah asli. Maka, output yang dihasilkan oleh proses pun juga ada dua, yaitu kunci acak (cipher-key) dan naskah acak (cipher). Kriptografi Rijndael hanya akan memroses naskah asli, sedangkan kriptografi ElGamal kurva eliptik hanya akan memroses kunci dari block cipher Rijndael.

Demikian pula pada proses dekripsi, kunci acak (cipher-key) akan diproses oleh kriptografi ElGamal kurva eliptik sehingga menghasilkan ouput kunci asli. Sedangkan naskah acak akan diproses oleh kriptografi Rijndael sehingga menghasilkan naskah asli.

ElGamal Kurva Eliptik Kunci Naskah asli Rijndael (AES) Pembangkit Bilangan Prima Miller-Rabin Kunci acak Naskah acak Proses Enkripsi Dekripsi

Gambar 3.2: Analisis proses terhadap input yang diterima dan output yang dihasilkan. Kunci hanya berupa string (plain-text) dengan besar maksimal 32 byte. Ini setara dengan AES-256 yang merupakan AES dengan kunci terpanjang, di mana besarnya

adalah . Oleh karena = , maka = . Sedangkan

naskah asli dapat berupa string atau berbagai jenis file yang umum digunakan.

Misalkan sebuah kunci "Muhammad_RezΔNst" dengan panjang karakter 16. Jika dilihat dari panjang karakternya, maka kunci ini akan diproses dengan AES-128 yang hanya memiliki 4 word, sehingga representasinya dalam blok ditunjukkan pada Gambar 3.3. Perlu diingat bahwa sebuah blok hanya dapat menyimpan karakter sebesar 1 byte. Sementara karakter 'Δ' berukuran lebih dari 1 byte, sehingga diperlukan 2 blok untuk dapat menyimpan karakter tersebut. Jadi, kunci "Muhammad_RezΔNst" tidak bisa digunakan untuk melakukan proses kriptografi menggunakan AES-128, melainkan dengan AES-192. Ini dikarenakan besar kuncinya lebih dari 128 bit. Selanjutnya, didefinisikan aturan sebagai berikut:

 Jika besar kunci tidak lebih dari 128 bit (4 word), gunakan AES-128.  Jika besar kunci antara 128 dan 192 bit (6 word), gunakan AES-192.

 Selebihnya gunakan AES-256 (8 word), jika besar kunci lebih dari 256 bit proses tidak dapat dilanjutkan.

M(0x4d) m(0x6d) _(0x5f) Δ(0x394) u(0x75) m(0x6d) R(0x52) N(0x4e) h(0x68) a(0x61) e(0x65) s(0x73) a(0x61) d(0x64) z(0x7a) t(0x74) Gambar 3.3: Blok dari kunci "Muhammad_RezΔNst".

Berikutnya melakukan proses key schedule yang nantinya diperlukan pada transformasi addRoundKey. Telah ditetapkan bahwa sistem ini akan menggunakan blok sebesar 8 word, sehingga apapun nilai yang diinisialisasi sebelumnya berdasar-kan panjang kunci, proses enkripsi maupun dekripsi tetap aberdasar-kan dilakuberdasar-kan sebanyak 14 putaran ( = ). Dengan demikian, proses key schedule ini akan menghasilkan expanded key sebesar = atau setara dengan 120 word, dan berikut adalah pseudocode-nya. keySchedule(expandedKey[][]) 1. W ← [4], n ← 15 2. if Nk = 4, n ← 30 3. else if Nk = 6, n ← 20 4. for (i ← Nk; i < Nk * n; i ← i + 1) 5. if i ≡ 0 (mod Nk)

6. W[0] ← subBytes(expandedKey[i - 1][1]) XOR Rcon[(i / Nk) - 1] 7. for (j ← 1; j < 4; j ← j + 1)

8. W[j] ← subBytes(expandedKey[i - 1][(j + 1) % 4]) 9. else if Nk = 8 and i ≡ 4 (mod Nk)

10. for (j ← 0; j < 4; j ← j + 1)

11. W[j] ← subBytes(expandedKey[i - 1][j]) 12. else, for (j ← 0; j < 4; j ← j + 1)

13. W[j] ← expandedKey[i - 1][j] 14. for (j ← 0; j < 4; j ← j + 1)

15. expandedKey[j] ← expandedKey[i - Nk][j] XOR W[j] 16. return expandedKey

Tahap selanjutnya adalah membaca naskah asli yang menjadi input dari proses kriptografi Rijndael (AES). Seperti yang telah dijelaskan sebelumnya, bahwa naskah asli dapat berupa string atau file yang terbaca sebagai himpunan karakter berhingga. Himpunan karakter tersebut selanjutnya disimpan sebagai array- membentuk

himpunan blok, sehingga dapat lebih mudah ditransformasi dalam proses kriptografi Rijndael. Banyaknya blok yang dihasilkan dari himpunan karakter ini dapat dihitung dengan cara membagi panjang himpunan karakter dengan 32 (telah ditetapkan sebelum-nya = ). Oleh karena panjang himpunan karakter ini tidak selalu kelipatan 32,

_ , maka akan ada kemungkinan 1 blok terakhir yang tidak dapat terisi penuh. Sebagai contoh string sebagai berikut:

"Lorem_ipsum_dolor_sit_amet,consectetur_adipiscing_elit._Mauris_et_ magna_ut_erat_elementum_cursus_in_quis_ipsum.".

Diketahui panjang karakternya adalah 111, maka akan menghasilkan blok sebanyak / = dan karakter sisa sebanyak = . Karakter sisa ini tidak disimpan sebagai array- , tetapi disimpan sebagai array- . Hal ini di-karenakan _ , sehingga tidak perlu menyimpan himpunan karakter yang sedikit di tempat penyimpanan yang terlalu besar.

Setelah pembacaan naskah asli selesai, tahap terakhir adalah melakukan enkripsi menggunakan algoritma kriptografi Rijndael dan seluruh alur prosesnya ditunjukkan pada Gambar 3.4. Kunci block cipher Rijndael yang telah diinisialisasi, selanjutnya diproses menggunakan kriptografi ElGamal kurva eliptik. Berdasarkan Gambar 3.2, proses kriptografi ElGamal kurva eliptik menunggu proses pembangkit bilangan prima Miller-Rabin sebelum bisa memproses kunci. Proses pembangkitan bilangan prima tersebut akan menghasilkan output bilangan prima yang cukup besar yang selanjutnya menjadi finite field . Miller-Rabin merupakan algoritma percobaan apakah suatu bilangan adalah prima atau komposit secara probabilistik. Jadi, prosesnya adalah memilih sebuah bilangan ganjil yang sangat besar lalu diperiksa menggunakan algoritma Miller-Rabin, apakah prima atau komposit. Jika (mungkin) prima, proses selesai. Jika komposit, proses terus berlanjut dengan memilih bilangan ganjil yang sangat besar lainnya hingga ditemukan bilangan yang mungkin prima. Berikut adalah pseudocode Miller-Rabin:

probablePrime(n, a)

1. if n = even or 1 < gcd( , n) < n, return composite 2. q ← odd, n – 1 ≡ q (mod n)

3. (mod n)

4. if ≡ 1 (mod n), return prime 5. for (i ← 0; i < k – 1; i ← i + 1) 6. if ≡ -1 (mod n), return prime

7. mod n

key, message Mulai Selesai i <= 16? Nb = 8; i = key.length(); Nk = 4; Nk = 6; Nk = 6; expandedKey[] = keySchedule(Nk) Yes i > 16 && i <= 24? i > 24 && i <= 32? Yes Yes No No No i = i + 1; encrypt(block[i], expandedKey[i * Nb]); i = message.length(); size = i / 32; left = i mod 32; i = 0; block[] = fillBlocks(message); i < size? Yes left > 0? No j = left; Yes Selesai j <= 16? Nb = 4; Nb = 6; encrypt(block[i], expandedKey[i * Nb]); Yes j > 16 && j <= 24? Yes No No No

Gambar 3.4: Flowchart proses Rijndael.

Alur proses berikutnya sama seperti ditunjukkan pada Gambar 3.2, yaitu proses pengenkripsian kunci. Dan berikut adalah penjelasannya:

 Proses pembangkitan persamaan kurva eliptik ∈ � hanya menginisialisasi dua variabel , ∈ � dengan bilangan bulat acak yang memenuhi + ≠ .

 Proses pemilihan sebuah titik acak ∈ � berarti mencari pasangan nilai dan anggota � yang memenuhi persamaan = + + . Pencarian dimulai dengan menyubstitusikan = hingga = − . Selama iterasi, hitung nilai , kemudian periksa apakah merupakan akar kuadrat modulo . Cara terbaik untuk mengetahuinya adalah dengan menerapkan algoritma quadratic reciprocity dengan simbol Legendre, dan berikut adalah pseudocode-nya:

quadraticReciprocity(value, modulus)

1. if modulus = composite or (value and modulus = even), return 2. if value = -1

3. if modulus ≡ 1 (mod 4), return 1 4. if modulus ≡ 3 (mod 4), return -1 5. if value = 2

6. if modulus ≡ 1 or 7 (mod 8), return 1 7. if modulus ≡ 3 or 5 (mod 8), return -1

8. if value ≡ 3 (mod 4) and modulus ≡ 3 (mod 4), return legendre 9. if value ≡ 1 (mod 4) or modulus ≡ 1 (mod 4), return -legendre

Algoritma quadratic reciprocity dipanggil secara rekursif hingga menghasilkan output 1 yang berarti merupakan akar kuadrat modulo , atau -1 yang berarti bukan akar kuadrat modulo . Selanjutnya, jika merupakan akar kuadrat modulo , hentikan iterasi yang berarti pasangan nilai dan pertama yang memenuhi telah ditemukan dan hitung nilai √ ± + / . Jadi,

untuk setiap nilai akan berpasangan dengan dua nilai . Titik pertama = , yang telah ditemukan, kemudian ditambahkan berdasarkan hukum penambahan pada kurva eliptik dengan bilangan bulat acak yang akan menghasil-kan titik baru, yaitu titik acak ∈ � .

 Proses pemilihan kunci rahasia hanya menginisialisasi variabel dengan bilangan bulat acak yang besar.

 Proses pembuatan kunci publik hanya menghitung nilai = , yaitu

penambahan titik ∈ � dengan kunci rahasia pada kurva eliptik.

 Proses pengubahan plain-text menjadi titik-titik pada ∈ � ditentukan dengan aturan seperti dijelaskan pada contoh berikut:

Misalkan string "MuhammadReza" akan menjadi (� ) = { , , , , , , , , , , , }. Nilai-nilai pada (� ) bersesuai dengan kode karakter UTF-8.

 Proses pemilihan kunci ephemeral hanya menginisialisasi variabel dengan bilangan bulat acak.

 Proses pengenkripsian pesan ∈ � menggunakan kriptografi ElGamal kurva eliptik akan menghasilkan dua nilai, yaitu dan . Masing-masing nilai dan dihitung dengan persamaan = ∈ � dan = + ∈ � . Berikut adalah pseudocode-nya.

encrypt(M[], , P) 1. C ← [M.length][2] 2. for (i ← 0; i < M.length; i ← i + 1) 3. k ← random integer 4. C[i][0] ← P.sum(k) 5. tmp ← Q.sum(k) 6. C[i][2] ← M[i].sum(tmp) 7. return C

Proses dekripsi merupakan kebalikan (invers) dari alur proses enkripsi. Seperti ditunjukkan pada Gambar 3.2, output pada proses enkripsi akan menjadi input pada proses dekripsi. Jadi, jika pada proses enkripsi yang pertama sekali diproses adalah naskah asli dilanjutkan dengan memroses kunci, maka proses dekripsi akan melakukan alur proses yang berlawanan, yaitu dengan memroses kunci acak (cipher-key) terlebih dahulu yang kemudian dilanjutkan dengan memroses naskah acak (cipher) untuk mendapatkan kembali naskah asli.

Dokumen terkait