• Tidak ada hasil yang ditemukan

BAB III ANALISIS DAN PERANCANGAN SISTEM

3.1.1 Blowfish Enkripsi

Gambar 3.1 menggambarkan alur kerja dari algoritma Blowfish untuk proses Enkripsi. Dari gambar 3.1 dapat dilihat bahwa terdapat dua proses utama yaitu prosesKey Expansion dan proses Enkripsi Data.

ProsesKey Expansion membutuhkan tiga masukkan yaitu P-array, S-box dan Kunci. Hasil darikey expansionadalah P-array dan S-box yang baru.

Proses Enkripsi Data mempunyai masukkan yaitu P-array dan S-box hasil dari prosesKey ExpansiondanPlain Text. Hasil dari Proses Enkripsi Data adalah

Cipher Text.

3.1.1.1Key Expansion

Gambar 3.2 menggambarkan alur kerja dari proses Key Expansion. Masukkan dari proses ini adalah P-array, S-box dan Kunci dengan ukuran 8-bit. Langkah pertama yang harus dilakukan adalah mengubah kunci ukuran 8-bit menjadi 32-bit. Hasil dari proses pengubahan tersebut adalah kunci dengan ukuran 32-bit. Adapun script untuk mengubah Kunci 8-bit menjadi Kunci 32-bit adalah sebagai berikut :

For k = 0 To 3

Kunci_32 = Ubah_32(Kunci_32) Or KeyCrypto(j) j = j + 1

If j >= KeyBytes Then j = 0 Next k

Dimanascriptuntuk Ubah_32 adalah sebagai berikut :

Ubah_32 = (ByteTo32 And &H7FFFFF) * 2 ^ 8 If (ByteTo32 And &H800000) <> 0 Then

Ubah_32 = Ubah_32 Or &H80000000 End If

Langkah selanjutnya adalah meng-XOR-kan Kunci 32-bit dengan P-array. Hasil dari proses ini adalah P-array yang baru. Adapunscript untuk meng-XOR-kan P-array dengan Kunci 32-bit adalah sebagai berikut :

blf_P(i) = blf_P(i) Xor Kunci_32

Proses peng-XOR-an antara P-array dengan Kunci 32-bit dilakukan sebanyak 18 kali, sampai semua P-array sudah di-XOR-kan dengan Kunci 32-bit.

Setelah P-array yang baru didapatkan dari peng-XOR-an antara P-array lama dengan Kunci 32-bit, proses selanjutnya adalah mengenkrip semua string nol. Dalam hal ini string nol tersebut disimpan dalam variabel yang dideklarasikan menggunakan variabel DataL dan DataR. Adapun script untuk Blok Enkripsi adalah sebagai berikut :

For i = 0 To Putaran_Blowfish - 1 xL = xL Xor blf_P(i) xR = Feistel(xL) Xor xR temp = xL xL = xR xR = temp Next i temp = xL xL = xR xR = temp xR = xR Xor blf_P(Putaran_Blowfish) xL = xL Xor blf_P(Putaran_Blowfish + 1)

Dalam script Blok Enkripsi terdapat pemanggilan fungsi Feistel (XL), dimana fungsi tersebut memanggil algoritma Jaringan Feistel yang digunakan algoritma Blowfish. AdapunscriptJaringan Feistel adalah sebagai berikut :

Bagi_8(x, a, b, c, d)

Y = Tambah_SBox(blf_S(0, a), blf_S(1, b)) Y = Y Xor (blf_S(2, c))

Y = Tambah_SBox(Y, blf_S(3, d)) Feistel = Y

Pada script Jaringan Feistel terdapat pemanggilan fungsi Bagi_8(X,a,b,c,d), fungsi ini berguna untuk membagi data dengan ukuran 32-bit menjadi 4 bagian dengan ukuran tiap-tiap bagian adalah 8-bit. Adapun script untuk membagi data dengan ukuran 32-bit menjadi data dengan ukuran 8-bit adalah sebagai berikut :

a = (((ByteFrom32 And &HFF000000) \ 2 ^ 24) And &HFF) b = (((ByteFrom32 And &HFF0000) \ 2 ^ 16) And &HFF) c = (((ByteFrom32 And &HFF00) \ 2 ^ 8) And &HFF) d = ((ByteFrom32 And &HFF) And &HFF)

Setelah proses pengenkripan string nol menggunakan algoritma Blowfish, maka langkah selanjutnya adalah mengganti nilai dari P-array dengan nilai dari variabel DataL dan variabel DataR. Maka hasil dari pengenkripan string nol dan penggantian nilai P-array dengan nilai dari variabel DataL dan variabel DataR adalah P-array yang baru. Proses pengenkripan dan proses penggantian nilai tersebut diulangi sebanyak 18 kali denganstepperulangannya adalah 2.

Setelah proses penggantian nilai P-array selesai dilakukan, proses selanjutnya adalah mengganti nilai dari S-box. Adapun script untuk mengganti nilai S-box adalah sebagai berikut :

For i = 0 To 3

For j = 0 To 255 Step 2

Call Encipher_Block(DataL, DataR) blf_S(i, j) = DataL

blf_S(i, j + 1) = DataR Next j

Next i

Pada proses penggantian nilai S-box, terdapat pemanggilan fungsi Encipher_Block(DataL,DataR)dimana fungsi tersebut telah diterangkan diatas. Hasil dari proses ini adalah S-box yang baru.

3.1.1.2 Enkripsi Data

Mulai

DataL 32-bit DataR 32-bit

Blok Enkripsi IV

CopyMemory(DataBlok,Plain Text) Plain Text

CopyMemory(DataReg,IV)

DataBlok = DataBlok XOR DataReg

DataBlok

Ya Gabung DataBlok /32-bit

Cipher Text Selesai If iBlok < JumBlok Tidak CopyMemory(DataReg,DataBlok) CopyMemory(DataOutput,DataBlok)

Gambar 3.3FlowchartEnkripsi Data

Gambar 3.3 menggambarkan alur kerja dari proses Enkripsi Data. Proses Enkripsi Data dimulai dari dimasukkannya IV dan Plain Text. Pada gambar 3.3 dapat dilihat adanya penggunaan memori untuk menampung data-data yang

dimasukkan. Adapun script untuk mengkopi data IV ke dalam memori adalah sebagai berikut :

CopyMemory VarPtr(DataReg(0)), VarPtr(IV(0)), 8&

Data IV disimpan dalam variabelDataReg.Scriptuntuk mengkopi dataPlain Text

ke dalam memori adalah sebagai berikut:

CopyMemory VarPtr(DataBlok(0)), VarPtr(DataInput(iIndex)), 8&

DataPlain Text disimpan dalam variabelDataBlok.

Setelah data IV dan data Plain Textdikopikan ke dalam memori, proses selanjutnya adalah meng-XOR-kan data IV dan data Plain Text yang telah dikopikan ke dalam memori tersebut. Adapunscript untuk meng-XOR-kan antara

Plain Textdengan IV adalah sebagai berikut : For i = 0 To JumByte - 1

DataByte1(i) = DataByte1(i) Xor DataByte2(i) Next

Setelah didapatkan hasil dari peng-XOR-an tersebut, proses selanjutnya adalah data tersebut menggabungkan DataBlok tersebut menjadi dua dengan masing-masing bagian berukuran 32-bit. Hasil dari penggabungan tersebut disimpan ke dalam dua variabel yaitu variabel DataL dan variabel DataR. Adapunscript untuk menggabungkan data menjadi dua bagian dengan ukuran masing-masing 32-bit adalah sebagai berikut :

Join_Data = ((a And &H7F) * &H1000000) Or (b * &H10000) Or (CLng(c) * &H100) Or d

If a And &H80 Then

Join_Data = Join_Data Or &H80000000 End If

Setelah DataL dan DataR didapatkan, maka proses dilanjutkan ke pemanggilan fungsi Blok Enkripsi. Fungsi ini telah dijelaskan di Sub Bab 3.1.1.1 Key Expansion. Hasil dari proses Enkripsi Data disimpan dalam variabel DataReg, dimana variabel DataReg sebelumnya berisi nilai dari data IV. Dengan kata lain, hasil dari proses Blok Enkripsi menggantikan nilai dari data IV. Selain hasil tersebut disimpan ke dalam variabel DataReg, hasil tersebut juga disimpan ke dalam variabel DataOutput. Proses Enkripsi Data ini diulangi sebanyak jumlah blok yang ada.

Dokumen terkait