Implementasi Algoritma Rijndael Dan Rsa Pada Pengamanan Data Teks

(1)

Lampiran A-1

Listing Tampilan Menu Utama

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Numerics; namespace WindowsFormsApplication1 {

public partial class FormUtama : Form {

public FormUtama() {

InitializeComponent(); }

private void enkripsiToolStripMenuItem_Click(object sender, EventArgs e) {

Enkripsi frm = new Enkripsi(); //frm.MdiParent = this;

frm.Show(); }

private void dekripsiToolStripMenuItem_Click(object sender, EventArgs e) {

Dekripsi frm = new Dekripsi(); //frm.MdiParent = this;

frm.Show(); }

private void FormUtama_Load(object sender, EventArgs e) {

//byte[] asli = new byte[16] { 0x32, 0x88, 0x31, 0xe0, 0x43, 0x5a, 0x31, 0x37, 0xf6, 0x30, 0x98, 0x07, 0xa8, 0x8d, 0xa2, 0x34 };

//byte[] key = new byte[16] { 0x2b, 0x28, 0xab, 0x09, 0x7e, 0xae, 0xf7, 0xcf, 0x15, 0xd2, 0x15, 0x4f, 0x16, 0xa6, 0x88, 0x3c };

//string ss = "";

//for (int i = 0; i < 16; i++) //{

// ss += asli[i].ToString("x2") + " "; //}

//Console.WriteLine(ss);

//Rijndael rij = new Rijndael(key); //byte[] cipher = rij.enkripsi(asli); //byte[] decipher = rij.dekripsi(cipher); //string s = "";

//s = "";

//for (int i = 0; i < asli.Length; i++) //{

// s += asli[i].ToString("x2") + " "; //}

//Console.WriteLine("plain teks = " + s); //s = "";

//for (int i = 0; i < cipher.Length; i++) //{


(2)

Lampiran A-2

//}

//Console.WriteLine("cipher teks = " + s); //s = "";

//for (int i = 0; i < 16; i++) //{

// s += decipher[i].ToString("x2") + " "; //}

//Console.WriteLine("decipher teks = " + s); }

private void exitToolStripMenuItem_Click(object sender, EventArgs e) {

this.Close(); }

private void label1_Click(object sender, EventArgs e) {

}

private void aboutToolStripMenuItem_Click(object sender, EventArgs e) {

About frm = new About(); //frm.MdiParent = this; frm.Show();

} } }


(3)

Lampiran A-3

ListingTampilan Proses Enkripsi

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Numerics; using System.IO; namespace WindowsFormsApplication1 {

public partial class Enkripsi : Form {

private BigInteger E, n, d; private Rijndael rij; private RSA rsa;

private String lokasiFileBuka = ""; private String statusSimpan = ""; public Enkripsi()

{

InitializeComponent(); }

private void Form1_Load(object sender, EventArgs e) {

}

private void button1_Click(object sender, EventArgs e) {

if (txtTeks.Text != "" || txtKey.Text != "") {

int panjangEnkripsi = 0; int penanda = 0;

panjangEnkripsi = (int)Math.Ceiling(((double)txtTeks.Text.Length / 16)); byte[] asli = new byte[16];

byte[] key = Encoding.ASCII.GetBytes(txtKey.Text.PadRight(16, ' '));

rij = new Rijndael(key);

for (int i = 0; i < panjangEnkripsi; i++) {

string teksTemp = "";

if (i == panjangEnkripsi - 1) {

int berapaBykPotong = txtTeks.Text.Length - penanda; teksTemp = txtTeks.Text.Substring(penanda,

berapaBykPotong);

teksTemp = teksTemp.PadRight(16, ' '); }

else

{

teksTemp = txtTeks.Text.Substring(penanda, 16); }

asli = Encoding.ASCII.GetBytes(teksTemp); byte[] cipher = rij.enkripsi(asli);


(4)

Lampiran A-4

for (int j = 0; j < cipher.Length; j++) {

txtTeksEnk.Text += (char)cipher[j]; }

penanda += 16;

} }

}

private void btnEnkripKey_Click(object sender, EventArgs e) {

if (txtKey.Text != "") {

rsa = new RSA();

rsa.enkripsi(txtKey.Text); E = rsa.e; n = rsa.n; d = rsa.d;

txtD.Text = d.ToString(); txtE.Text = E.ToString(); txtN1.Text = n.ToString(); txtN2.Text = n.ToString(); txtKeyEnk.Text = rsa.cipher; }

}

private void button1_Click_1(object sender, EventArgs e) {

openFileDialog1.Title = "Buka File Text.";

openFileDialog1.Filter = "Txt File (*.txt)|*.txt"; openFileDialog1.RestoreDirectory = true;

openFileDialog1.FileName = ""; openFileDialog1.ShowDialog();

}

private void openFileDialog1_FileOk(object sender, CancelEventArgs e) {

System.IO.Stream strm; strm = openFileDialog1.OpenFile();

lokasiFileBuka = openFileDialog1.FileName.ToString();

System.IO.FileStream inp = System.IO.File.OpenRead(lokasiFileBuka); System.IO.StreamReader input = new System.IO.StreamReader(inp); try

{

while (input.Peek() > -1) {

string teks = input.ReadToEnd();

txtTeks.Text = teks; } } finally { input.Close(); } if (strm != null) { strm.Close(); }


(5)

Lampiran A-5

}

private void btnSimpan_Click(object sender, EventArgs e) {

saveFileDialog1.Title = "Simpan File Teks TerEnkripsi."; saveFileDialog1.Filter = "Txt File (*.txt)|*.txt"; saveFileDialog1.RestoreDirectory = true;

saveFileDialog1.FileName = ""; statusSimpan = "rijndael";

saveFileDialog1.ShowDialog(); }

private void saveFileDialog1_FileOk(object sender, CancelEventArgs e) {

if (statusSimpan == "rijndael") {

StringBuilder sb = new StringBuilder(); sb.Append(txtTeksEnk.Text);

using (StreamWriter outfile = new StreamWriter(saveFileDialog1.FileName, false)) { outfile.Write(sb.ToString()); } MessageBox.Show("Berhasil!"); }

else if (statusSimpan == "rsa") {

String teksYangInginDisimpan = "";

teksYangInginDisimpan += txtKeyEnk.Text + Environment.NewLine; teksYangInginDisimpan += d.ToString() + Environment.NewLine; teksYangInginDisimpan += n.ToString();

StringBuilder sb = new StringBuilder(); sb.Append(teksYangInginDisimpan);

using (StreamWriter outfile = new StreamWriter(saveFileDialog1.FileName, false)) { outfile.Write(sb.ToString()); } MessageBox.Show("Berhasil!"); } }

private void button2_Click(object sender, EventArgs e) {

saveFileDialog1.Title = "Simpan File Key TerEnkripsi, dan kunci publik RSA."; saveFileDialog1.Filter = "Txt File (*.txt)|*.txt";

saveFileDialog1.RestoreDirectory = true; saveFileDialog1.FileName = "";

statusSimpan = "rsa";

saveFileDialog1.ShowDialog(); }


(6)

Lampiran A-6

private void button3_Click(object sender, EventArgs e) { txtD.Clear(); txtE.Clear(); txtKey.Clear(); txtKeyEnk.Clear(); txtTeks.Clear(); txtTeksEnk.Clear(); txtN1.Clear(); txtN2.Clear(); }

private void button4_Click(object sender, EventArgs e) {

this.Close(); } } }

Listing Tampilan Dekripsi

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Numerics; namespace WindowsFormsApplication1 {

public partial class Dekripsi : Form {

private RSA rsa; private Rijndael rij;

private String statusBukaFile = ""; public Dekripsi()

{

InitializeComponent(); }

private void button2_Click(object sender, EventArgs e) {

}

private void Dekripsi_Load(object sender, EventArgs e) {


(7)

Lampiran A-7

private void btnEnkripKey_Click(object sender, EventArgs e) {

if (txtKeyEnk.Text != "" || txtD.Text != "" || txtN2.Text != "") {

rsa = new RSA();

rsa.d = (BigInteger)Convert.ToInt64(txtD.Text); rsa.n = (BigInteger)Convert.ToInt64(txtN2.Text); rsa.dekripsi(txtKeyEnk.Text);

txtKey.Text = rsa.decipher; }

}

private void btnEnkripTeks_Click(object sender, EventArgs e) {

if (txtKey.Text != "" || txtTeksEnk.Text != "") {

int panjangEnkripsi = 0; int penanda = 0;

panjangEnkripsi = (int)Math.Ceiling(((double)txtTeksEnk.Text.Length / 16)); byte[] cipher = new byte[16];

byte[] key = Encoding.ASCII.GetBytes(txtKey.Text.PadRight(16, ' '));

rij = new Rijndael(key);

for (int i = 0; i < panjangEnkripsi; i++) {

int len = txtTeksEnk.Text.Length;

string teksTemp = txtTeksEnk.Text.Substring(penanda, 16); int z = 0;

foreach (char c in teksTemp) {

cipher[z] = (byte)System.Convert.ToInt32(c); z++;

}

byte[] decipher = rij.dekripsi(cipher); for (int j = 0; j < decipher.Length; j++) {

txtTeks.Text += (char)decipher[j]; }

penanda += 16; }

//byte[] cipher = new byte[txtTeksEnk.Text.Length];

//byte[] key = Encoding.ASCII.GetBytes(txtKey.Text.PadRight(16, ' '));

//rij = new Rijndael(key); //int z = 0;

//foreach (char c in txtTeksEnk.Text) //{

// cipher[z] = (byte)System.Convert.ToInt32(c); // z++;

//}

//byte[] decipher = rij.dekripsi(cipher);

//for (int i = 0; i < decipher.Length; i++) //{

// txtTeks.Text += (char)decipher[i]; //}

} }


(8)

Lampiran A-8

{

openFileDialog1.Title = "Buka File Text TerEnkripsi."; openFileDialog1.Filter = "Txt File (*.txt)|*.txt"; openFileDialog1.RestoreDirectory = true;

openFileDialog1.FileName = ""; statusBukaFile = "rijndael";

openFileDialog1.ShowDialog(); }

private void button2_Click_1(object sender, EventArgs e) {

openFileDialog1.Title = "Buka File Text TerEnkripsi."; openFileDialog1.Filter = "Txt File (*.txt)|*.txt"; openFileDialog1.RestoreDirectory = true;

openFileDialog1.FileName = ""; statusBukaFile = "rsa";

openFileDialog1.ShowDialog(); }

private void openFileDialog1_FileOk(object sender, CancelEventArgs e) {

if (statusBukaFile == "rijndael") {

System.IO.Stream strm; strm = openFileDialog1.OpenFile();

System.IO.FileStream inp =

System.IO.File.OpenRead(openFileDialog1.FileName.ToString());

System.IO.StreamReader input = new System.IO.StreamReader(inp); try

{

while (input.Peek() > -1) {

string teks = input.ReadToEnd();

txtTeksEnk.Text = teks; } } finally { input.Close(); } if (strm != null) { strm.Close(); } }

else if (statusBukaFile == "rsa") {

System.IO.Stream strm; strm = openFileDialog1.OpenFile();

System.IO.FileStream inp =

System.IO.File.OpenRead(openFileDialog1.FileName.ToString()); System.IO.StreamReader input = new System.IO.StreamReader(inp); int indeks = 0;

try

{

while (input.Peek() > -1) {

string teks = input.ReadLine(); if (indeks == 0)


(9)

Lampiran A-9

txtKeyEnk.Text = teks; }

else if (indeks == 1) {

txtD.Text = teks; }

else if (indeks == 2) {

txtN2.Text = teks; }

indeks++;

} } finally

{ input.Close(); } if (strm != null) { strm.Close(); } } }

private void groupBox2_Enter(object sender, EventArgs e) {

}

private void button3_Click(object sender, EventArgs e) {

txtD.Clear(); txtKey.Clear(); txtKeyEnk.Clear(); txtTeks.Clear(); txtTeksEnk.Clear(); txtN2.Clear(); } } }


(10)

Lampiran A-10 ListingAlgoritma Rijndael using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace WindowsFormsApplication1 { class Rijndael {

private byte[] key; private byte[,] Sbox; private byte[,] iSbox; private byte[,,] w; private byte[,] Rcon; private byte[,] State; public Rijndael(byte[] key) {

this.key = new byte[16]; key.CopyTo(this.key, 0); buatSbox(); buatInvSbox(); buatRcon(); keyExpansion(); }

public byte[] enkripsi(byte[] teks) {

byte[] hasil = new byte[16];

this.State = new byte[4, 4]; for (int i = 0; i < 16; i++)

{

this.State[i / 4, i % 4] = teks[i]; }

addRoundKey(0);

for (int putaran = 1; putaran < 10; putaran++) { subBytes(); shiftRows(); mixCollumns(); addRoundKey(putaran); } subBytes(); shiftRows(); addRoundKey(10);

for (int i = 0; i < 16; i++) {

hasil[i] = this.State[i / 4, i % 4]; }

return hasil; }


(11)

Lampiran A-11

{

byte[] hasil = new byte[16];

this.State = new byte[4, 4]; for (int i = 0; i < 16; i++)

{

this.State[i / 4, i % 4] = cipher[i]; }

addRoundKey(10);

for (int putaran = 9; putaran >= 1; putaran--) { invShiftRows(); invSubBytes(); addRoundKey(putaran); invMixCollumns(); } invShiftRows(); invSubBytes(); addRoundKey(0);

for (int i = 0; i < 16; i++) {

hasil[i] = this.State[i / 4, i % 4]; }

return hasil; }

public void addRoundKey(int putaran) {

for (int i = 0; i < 4; i++) {

for (int j = 0; j < 4; j++) {

this.State[i, j] = (byte)((int)this.State[i, j] ^ (int)this.w[putaran, i, j]);

} } }

private void subBytes() {

for (int i = 0; i < 4; i++) {

for (int j = 0; j < 4; j++) {

this.State[i, j] = this.Sbox[(this.State[i, j] >> 4), (this.State[i, j] & 0x0f)];

} } }

private void invSubBytes() {

for (int i = 0; i < 4; i++) {

for (int j = 0; j < 4; j++) {

this.State[i, j] = this.iSbox[(this.State[i, j] >> 4), (this.State[i, j] & 0x0f)];


(12)

Lampiran A-12

} }

private void shiftRows() {

byte[,] temp = new byte[4, 4]; for (int i = 0; i < 4; i++) {

for (int j = 0; j < 4; j++) {

temp[i, j] = this.State[i, j]; }

}

for (int i = 1; i < 4; i++) {

for (int j = 0; j < 4; j++) {

this.State[i, j] = temp[i, ((i + j) % 4)]; }

} }

private void invShiftRows() {

byte[,] temp = new byte[4, 4]; for (int i = 0; i < 4; i++) {

for (int j = 0; j < 4; j++) {

temp[i, j] = this.State[i, j]; }

}

for (int i = 1; i < 4; i++) {

for (int j = 0; j < 4; j++) {

this.State[i, ((i + j) % 4)] = temp[i, j]; }

} }

private void mixCollumns() {

byte[,] temp = new byte[4, 4]; for (int i = 0; i < 4; i++) {

for (int j = 0; j < 4; j++) {

temp[i, j] = this.State[i, j]; }

}

for (int i = 0; i < 4; i++) {

this.State[0, i] = (byte) ((int)gfmultby02(temp[0, i]) ^ (int)gfmultby03(temp[1, i]) ^ (int)gfmultby01(temp[2, i]) ^ (int)gfmultby01(temp[3, i]));

this.State[1, i] = (byte)

((int)gfmultby01(temp[0, i]) ^ (int)gfmultby02(temp[1, i]) ^ (int)gfmultby03(temp[2, i]) ^ (int)gfmultby01(temp[3, i]));


(13)

Lampiran A-13

((int)gfmultby01(temp[0, i]) ^ (int)gfmultby01(temp[1, i]) ^ (int)gfmultby02(temp[2, i]) ^ (int)gfmultby03(temp[3, i]));

this.State[3, i] = (byte)

((int)gfmultby03(temp[0, i]) ^ (int)gfmultby01(temp[1, i]) ^ (int)gfmultby01(temp[2, i]) ^ (int)gfmultby02(temp[3, i]));

} }

private void invMixCollumns() {

byte[,] temp = new byte[4, 4]; for (int i = 0; i < 4; i++) {

for (int j = 0; j < 4; j++) {

temp[i, j] = this.State[i, j]; }

}

for (int i = 0; i < 4; i++) {

this.State[0, i] = (byte)

((int)gfmultby0e(temp[0, i]) ^ (int)gfmultby0b(temp[1, i]) ^ (int)gfmultby0d(temp[2, i]) ^ (int)gfmultby09(temp[3, i]));

this.State[1, i] = (byte)

((int)gfmultby09(temp[0, i]) ^ (int)gfmultby0e(temp[1, i]) ^ (int)gfmultby0b(temp[2, i]) ^ (int)gfmultby0d(temp[3, i]));

this.State[2, i] = (byte)

((int)gfmultby0d(temp[0, i]) ^ (int)gfmultby09(temp[1, i]) ^ (int)gfmultby0e(temp[2, i]) ^ (int)gfmultby0b(temp[3, i]));

this.State[3, i] = (byte)

((int)gfmultby0b(temp[0, i]) ^ (int)gfmultby0d(temp[1, i]) ^ (int)gfmultby09(temp[2, i]) ^ (int)gfmultby0e(temp[3, i]));

} }

private static byte gfmultby01(byte b) {

return b; }

private static byte gfmultby02(byte b) {

if (b < 0x80)

return (byte)(int)(b << 1); else

return (byte)((int)(b << 1) ^ (int)(0x1b)); }

private static byte gfmultby03(byte b) {

return (byte)((int)gfmultby02(b) ^ (int)b); }

private static byte gfmultby09(byte b) {

return (byte)((int)gfmultby02(gfmultby02(gfmultby02(b))) ^ (int)b);

}


(14)

Lampiran A-14

{

return (byte)((int)gfmultby02(gfmultby02(gfmultby02(b))) ^ (int)gfmultby02(b) ^

(int)b); }

private static byte gfmultby0d(byte b) {

return (byte)((int)gfmultby02(gfmultby02(gfmultby02(b))) ^ (int)gfmultby02(gfmultby02(b)) ^ (int)(b));

}

private static byte gfmultby0e(byte b) {

return (byte)((int)gfmultby02(gfmultby02(gfmultby02(b))) ^ (int)gfmultby02(gfmultby02(b)) ^ (int)gfmultby02(b));

}

private void buatSbox() {

this.Sbox = new byte[16, 16] {

/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */

/*0*/ {0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76},

/*1*/ {0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0},

/*2*/ {0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15},

/*3*/ {0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75},

/*4*/ {0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84},

/*5*/ {0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf},

/*6*/ {0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8},

/*7*/ {0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2},

/*8*/ {0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73},

/*9*/ {0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb},

/*a*/ {0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79},

/*b*/ {0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08},

/*c*/ {0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a},

/*d*/ {0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e},

/*e*/ {0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf},

/*f*/ {0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16} };

}


(15)

Lampiran A-15

{

this.iSbox = new byte[16, 16] {

/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */

/*0*/ {0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb},

/*1*/ {0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb},

/*2*/ {0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e},

/*3*/ {0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25},

/*4*/ {0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92},

/*5*/ {0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84},

/*6*/ {0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06},

/*7*/ {0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b},

/*8*/ {0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73},

/*9*/ {0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e},

/*a*/ {0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b},

/*b*/ {0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4},

/*c*/ {0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f},

/*d*/ {0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef},

/*e*/ {0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61},

/*f*/ {0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d} };

}

private void buatRcon() {

this.Rcon = new byte[10, 4] {{0x01, 0x00, 0x00, 0x00}, {0x02, 0x00, 0x00, 0x00}, {0x04, 0x00, 0x00, 0x00}, {0x08, 0x00, 0x00, 0x00}, {0x10, 0x00, 0x00, 0x00}, {0x20, 0x00, 0x00, 0x00}, {0x40, 0x00, 0x00, 0x00}, {0x80, 0x00, 0x00, 0x00}, {0x1b, 0x00, 0x00, 0x00}, {0x36, 0x00, 0x00, 0x00} }; }


(16)

Lampiran A-16

{

byte[] result = new byte[4];

result[0] = this.Sbox[word[0] >> 4, word[0] & 0x0f]; result[1] = this.Sbox[word[1] >> 4, word[1] & 0x0f];

result[2] = this.Sbox[word[2] >> 4, word[2] & 0x0f]; result[3] = this.Sbox[word[3] >> 4, word[3] & 0x0f]; return result;

}

private byte[] rotWord(byte[] word) {

byte[] result = new byte[4]; result[0] = word[1];

result[1] = word[2]; result[2] = word[3]; result[3] = word[0]; return result; }

private void keyExpansion() {

this.w = new byte[11, 4, 4]; int indeks = 0;

for (int i = 0; i < 4; i++) {

for (int j = 0; j < 4; j++) {

w[0, i, j] = key[indeks]; indeks++;

} } byte[] temp = new byte[4];

for (int putaran = 1; putaran < 11; putaran++) {

for (int i = 0; i < 4; i++) {

temp[i] = w[putaran - 1, i, 3]; }

temp = rotWord(temp); temp = subWord(temp); for (int i = 0; i < 4; i++) {

w[putaran, i, 0] = (byte)((int)w[putaran - 1, i, 0] ^ (int)temp[i] ^ (int)Rcon[putaran-1, i]);

}

for (int j = 1; j < 4; j++) {

for (int i = 0; i < 4; i++) {

w[putaran, i, j] = (byte)((int)w[putaran - 1, i, j] ^ (int)w[putaran, i, j - 1]);

} } } } } }


(17)

Lampiran A-17

Listing Algoritma RSA

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Numerics; namespace WindowsFormsApplication1 { class RSA {

public BigInteger e, n, d; public string cipher, decipher;

static Random random = new Random(DateTime.Now.Millisecond); public double waktuEnkripsi;

static BigInteger GenerateLargePrime(int length) {

Primality primality = new Primality(); string numbers = "";

for (int i = 0; i < length; i++) {

numbers += random.Next(0, 10); }

BigInteger number = BigInteger.Parse(numbers); if (primality.IsPrimePseudo(number)) { return number; } else { return GenerateLargePrime(length); } }

public static BigInteger GCD(BigInteger m, BigInteger n) {

BigInteger r = n % m; while (r != 0)

{

r = m % n; m = n; n = r; }

return m; }


(18)

Lampiran A-18

public static BigInteger nilaiD(BigInteger ex, BigInteger totien) {

BigInteger d = 0; BigInteger temp_d; for (int k = 2; ; k++)

{

d = (totien * k + 1) / ex; temp_d = (totien * k + 1) % ex; if (temp_d == 0)

{ break; } } return d; }

public void enkripsi(string teks) {

DateTime mulai = DateTime.Now; TimeSpan selang;

BigInteger p, q, Ex; while (true)

{

p = GenerateLargePrime(128); q = GenerateLargePrime(128);

if (p.ToString().Length == q.ToString().Length && p < q) {

break;

} }

n = BigInteger.Multiply(p, q);

BigInteger totien = BigInteger.Multiply((p - 1), (q - 1)); Ex = 0;

for (BigInteger i = 2; i <= totien; i++) {

if (GCD(totien, i) == 1) {

Ex = i; break;

} }

d = nilaiD(Ex, totien); e = Ex;

foreach (char c in teks) {

BigInteger a = BigInteger.ModPow(c, e, n); cipher += a.ToString() + " ";

}

selang = DateTime.Now - mulai; waktuEnkripsi = selang.TotalSeconds; }


(19)

Lampiran A-19

public void dekripsi(string teks) {

int i = 0; string s = ""; decipher = "";

while (i < teks.Length) {

if (teks.Substring(i, 1) != " ") {

s += teks.Substring(i, 1); }

else

{

BigInteger eS = BigInteger.Parse(s); BigInteger eD = (BigInteger)d; BigInteger eN = (BigInteger)n;

BigInteger a = BigInteger.ModPow(eS, eD, eN); if (a > 256)

a = a % 256; decipher += (char)a;

s = ""; }

i++;

} } } }


(20)

71

DAFTAR PUSTAKA

[1] Ariyus, Doni. 2008. Pengantar Ilmu Kriptografi. penerbit Andi: Jogjakarta, Indonesia.

[2] Ariyus, Doni. 2006. Computer Security. Penerbit Andi: Yogyakarta.

[3] Arsendi. 2011. Penerapan Algoritma AES Rijndael Untuk Keamanan File

Audio. Skripsi. Universitas Sriwijaya.

[4] Joux, Antoni. 2009. Algorithmic Cryptonaysis. Taylor and Francis group: Boca Raton.

[5] Konheim, Alan G. 2007. Computer Security And Cryptography. John Wiley Publication.

[6] Smart, Nigel. 2004. Cryptography-An Introduction. 3rd edition.

[7] Munir, Rinaldi. 2006. Kriptografi. Bandung,Indonesia : penerbit informatika [8] Mollin, Richard A. 2007. An Introduction to Cryptography. second edition.

Taylor & Francis group: Boca Raton.

[9] Mollin, Richard A. 2005. Codes The Guide to Secrecy from Ancient to Modern

Times. Taylor & Francis Group, Llc.

[10] Rijmen,Daemen. 2002. The Design Of Rijndael: Springer.

[11] Sadikin, Rifki. 2012. Kriptografi untuk keamanan jaringan. Yogyakarta: Andi. [12] Schneier, Bruce. Applied Crytography. 2nd edition.


(21)

BAB 3

ANALISIS DAN PERANCANGAN SISTEM

3.1. Analisis Masalah

Jika A dan B mengirim sebuah pesan rahasia menggunakan algoritma kriptografi simetris, maka harus disepakati kunci yang akan digunakan, kunci tersebut nantinya dipakai untuk enkripsi dan dekripsi. Oleh sebab itu proses pertukaran kunci harus sangat dijaga keamanan nya. Jika ada pihak C yang mengetahui proses percakapan pada saat A dan B menyepakati kunci yang digunakan, maka C akan dengan mudah untuk mendekripsikan cipherteks dengan kuci tersebut.

Aplikasi yang akan dirancang terdiri dari dua buah algoritma yaitu Rijndael dan RSA. Utuk melakukan pengamanan data dilakukan dengan dua tahapan yaitu tahapan enkripsi plainteks dengan menggunakan algoritma simetris dan kemudian tahap enkripsi kunci simentris (session key) dengan menggunakan kunci publik, hal ini bertujuan untuk menjaga kerahasiaan kunci.

3.2. Analisis Sistem

Sebelum merancang sebuah sistem, perlu dilakukan analisis terlebih dahulu agar proses pembuatan sistemnya menjadi lebih mudah dan terarah. Tahapan analisis sistem merupakan tahapan yang sangat penting karena kesalahan di dalam tahapan ini akan menyebabkan kesalahan pada tahapan selanjutnya. Analisis juga bertujuan untuk melihat kebutuhan yang dibutuhkan oleh sistem yang akan dibuat serta menentukan kegiatan yang harus dilakukan oleh sistem sehingga menghasilkan output seperti yang diharapkan oleh user.


(22)

3.2.1. Analisis kebutuhan perangkat lunak

Fitur-fitur utama yang disediakan perangkat lunak antara lain:

1. Fitur Encrypt

Perangkat lunak yang dibangun memiliki fitur enkripsi untuk memulai tahapan enkripsi terhadap plainteks dan cipherteks. Didalam fitur enkripsi ini terdapat

buttonopen, button enkripsi plainteks, button enkripsi sessionkey, button savefile. Button open berfungsi untuk membuka file di dalam folder yang akan

diamankan atau bisa langsung melakukan penginputan plainteks pada form input plainteks. Button enkripsi plainteks berfungsi untuk menjalankan enkripsi setelah memasukkan key yang diinginkan. Button enkripsi sessionkey berfungsi untuk mengekripsiskan sessionkey menggunakan kunci publik yang telah disimpan atau dibangkitkan. Button SaveFile berfungsi untuk menyimpan

file cipherteks dan cipherkey ke dalam folder yang diinginkan.

2. Fitur dekripsi

Perangkat lunak yang dibangun memiliki fitur dekripsi untuk memulai tahapan dekripsi cipherteks dan cipherkey. Di dalam fitur dekripsi ini terdapat button

open, button dekripsi cipherteks, button dekripsi cipherkey, button SaveFile. Button Open berfungsi untuk membuka file yang telah terenkripsi sebelumnya

di dalam folder. Button dekripsi cipherkey berfungsi untuk menjalankan dekripsi dengan menggunakan privetkey. Button dekripsin cipherteks berfungsi untuk mendekripsikan cipherteks dengan menggunakan sessionkey hasil dekripsi. Button SaveFile berfungsi untuk menyimpan file kedalam folder yang diinginkan.

3. Fitur pembangkitan kunci RSA

Pada perangkat lunak yang dibangun terdapat fitur pembangkitan kunci RSA secara acak, untuk menghasilkan kunci privat dan kunci publik. Pada saat

button enkripsi digunakan, maka sistem akan secara otomatis membangkitkan


(23)

3.2.2. Analisis kebutuhan fungsional dan non-fungsional sistem

Kebutuhan fungsional yang harus dipenuhi agar sistem berjalan dengan lancar:

1. Sistem dapat membuka file apabila file yang diambil dari dalam folder adalah file berupa *.txt.

2. Sistem dapat melakukan enkripsi plainteks dengan menggunakan algoritma Rinjdael dan melakukan enkripsi terhadap sessionkey dengan menggunakan kunci publik RSA.

3. Sistem dapat melakukan dekripsi cipherteks dengan menggunakan algoritma Rinjdael dan melakukan dekripsi cipherkey dengan menggunakan kunci publik RSA.

4. Sistem mampu melakukan pembangkitan kunci yang kemudian menyimpan kunci yang telah dibangkitkan

5. Sistem dapat menyimpan file yang dienkripsi dan didekripsi dalam bentuk

file *.txt.

6. Sistem dapat melakukan reset terhadap file dan key yang telah diinputkan untuk menggantikan file dan key yang baru.

Kebutuhan non-fungsional terhadap sistem adalah:

1. Sistem yang dibangun memiliki interface yang menarik dan mudah dimengerti oleh user.

2. Sistem yang dibangun tidak membutuhkan banyak biaya karena tidak menggunakan perangkat keras sebagai pendukung.

3. Sistem dapat dikembangkan lebih lanjut agar mencapai bentuk yang lebih sempurna.


(24)

3.3.Perancangan Sistem

Perancangan sistem merupakan tahapan untuk membangun kerangka sistem yang akan dibuat. Tahapan ini nantinya akan menghasilkan gambaran dasar dari sistem yang akan dibangun. Perancangan dilakukan berdasarkan hasil analisis yang telah dilakukan pada bab sebelumnya.

3.3.1. Skema kosep dasar perancangan sistem

Berikut ini adalah diagram konsep yang akan dilakukan pada tugas akhir ini, diagram konsep ini akan mempermudah dalam perancang sistem yang akan dibuat. Pada tahap awal plainteks terlebih dahulu diproses dengan menggunakan algoritma Rijndael untuk melakukan enkripsi terhadap plainteks kemudian dilanjutkan dengan enkripsi terhadap sessionkey menggunakan algoritma RSA. Hasil akhir dari proses ini akan menghasilkan cipherteks dan cipherkey.

Gambar 3.1 Konsep Perancangan Proses Pengamanan Plainteks dan Sessionkey [Sadikin, 2012]


(25)

Untuk proses dekripsi, langkah pertama adalah mendekripsi cipherkey terlebih dahulu dengan menggunakan kunci privat pada algoritma RSA untuk mendapatkan kembali sessionkey dan kemudian mendekripsikan cipherteks untuk memperoleh pesan asli. Langkah proses dekripsi dapat dilihat pada Gambar 3.2 berikut.

Gambar 3.2 Konsep Perancangan Proses Pendekripsian Plainteks dan Session key [Sadikin, 2012]

3.3.2. Dekripsi umum parangkat lunak

Perangkat lunak yang dibangun mampu melakukan enkripsi dan dekripsi terhadap file teks dan sessionkey yang dihasilkan oleh algoritma kunci simetris.

Data yang bekerja dalam sistem perangkat lunak yang dibangun yaitu: 1. Plainteks

yaitu file sesungguhnya yang masih dalam bentuk tulisan seperti pada umumnya.

2. Sessionkey

yaitu kunci simetri yang akan dipertukarkan dan digunakan untuk enkripsi

plainteks dan dekripsi cipherteks. Sessionkey selanjutnya akan dienkripsi


(26)

3. Cipherteks

yaitufile yang telah disandikan menjadi bentuk yang tidak terbaca. 4. Cipherkey

yaitu kunci simetri (sessionkey) yang telah disandikan kedalam bentuk yang sulit dimengerti.

3.3.3. Rancangan proses kerja sistem secara umum

Dalam penerapannya pengirim akan melakukan enkripsi terhadap plainteks dengan menggunakan sessionkey kemudian mengenkripsikan kembali sessionkey tersebut agar tetap terjaga kerahasiaannya dengan menggunakan kunci publik penerima. Untuk proses dekripsi penerima pesan terlebih dahulu mendekripsikan pesan cipherkey yang diterima dengan menggunkan kunci privat yang dimilikinya untuk mendapatkan kembali sessionkey. Setelah sessionkey diperoleh kemudian akan dilakukan dekripsi

cipherteks untuk mendapatkan plainteks. Rancangan proses kerja sistem secara umum

dapat dilihat pada Gambar 3.3.


(27)

3.4. Diagram Alir (Flowchart)

Flowchart adalah rangkain bagan yang menggambarkan urutan suatu proses kegiatan

dalam mencapai tujuan yang diinginkan. Untuk Flowchart proses enkripsi Rijndael dapat dilihat pada gambar 3.4.


(28)

Flowchart proses dekripsi ciphertek pada algoritma Rijndael seperti Gambar 3.5.


(29)

Flowchart pembangkitan kunci privat dan kunci publik pada algoritma RSA dapat

dilihat pada Gambar 3.7.


(30)

Flowchart proses enkripsi sessionkey dengan algoritma RSA dapat dilihat pada

Gambar 3.8.


(31)

Flowchart proses dekripsi cipherkey dengan menggunakan kunci privat pada

algoritma RSA dapat dilihat pada Gambar 3.9.

Gambar 3.8 Flowchart Proses Dekripsi Cipherkey pada Algoritma RSA Selesai

Ubah bentuk ASCII menjadi klarakter asli

Mulai

Cipher-key, kunci privat

mi = Ci d

(mod n)

Sessionkey

Plainteks dalam bentuk ASCII


(32)

Flowchart gambaran umum sistem ini menggambarkan proses yang terjadi pada

sistem secara umum.


(33)

3.5.Use Case Diagram

Use Case Diagram adalah diagram pemodelan setiap aspek dan kegiatan didalam

sebuah sistem. Selain itu use case diagram juga menggambarkan semua aktor yang melakukan aktifitas didalam sistem.

Gambar 3.10 Use Case Diagram pada Sistem Enkripsi Rijndael dan RSA

Use case diagram yang ditunjukan pada Gambar 3.10 memiliki dua aktor yang

terlibat yaitu pengirim pesan dan penerima pesan. Pengirim pesan berperan melakukan enkripsi terhadap plainteks dan cipherteks. Penerima pesan berperan melakukan dekripsi terhadap cipherkey dan cipherteks. Untuk lebih jelas dapat dilihat pada Tabel kegiatan Use Case.


(34)

Untuk tabel kegiatan Use Case enkripsi plainteks dijabarkan pada tabel 3.1. Tabel tersebut menjelaskan setiap kegiatan user pada saat melakukan proses enkripsi serta respon sistem terhadap perintah user.

Table 3.1 Kegiatan Use Case Enkripsi Plainteks

Nama use case Enkripsi plainteks

Aktor User

Deskripsi Use case ini akan melakukan enkripsi terhadap data teks Kondisi awal User 1 belum mengenkripsi file teks

Kondisi akhir File telah terenkripsi dan disimpan di dalam folder penyimpanan

Kegiatan User Respon sistem

Success Scenario

1. memilih menu enkripsi. 2. memilihbuttonopen file. 3. memilih file yang akan

dienkripsikan.

4. mengimputkansessionke

y 16 byte.

5. Menekan button encrypt. 6. Menekan button save

untuk menyimpan file hasil enkripsi.

1. Sistem menampilkan menu enkripsi.

2. Sistem menampilkan kotak dialog lokasi penyimpanan file.

3. Sistem akan menampilkan file yang akan dienkripsi. 4. Sistem akan menampilkan

kunci yang telah diinputkan. 5. Sistem melakukan proses

enkripsi dan menampilkan hasil enkripsi.

6. Sistem melakukan proses penyimpanan file yang telah dienkripsi.


(35)

Untuk tabel kegiatan Use Case enkripsi Sessionkey dijabarkan pada tabel 3.2. Tabel tersebut menjelaskan setiap kegiatan user pada saat melakukan proses enkripsi

sessionkey serta respon sistem terhadap perintah user. Pada tahapan enkripsi sessionkey terdapat button enkripsi key, button tersebut secara otomatis melakukan

proses pembangkitan kunci publik RSA dan melakukan enkripsi terhadap sessionkey.

Tabel 3.2 Kegiatan Use Case Enkripsi Sessionkey

Nama use case Enkripsi Cipherkey

Aktor User

Deskripsi Use case ini akan melakukan enkripsi terhadap sessionkey Kondisi awal User 1 belum mengenkripsi sessionkey

Kondisi akhir sessionkeytelah terenkripsi dan disimpan di dalam folder

penyimpanan

Kegiatan User Respon sistem

Success Scenario

1.memilih menu enkripsi. 2.memilih button

enkripsi key untuk enkripsi sessionkey. 3. menekan button save

untuk menyimpan hasil enkripsi

sessionkey

1.Sistem menampilkan menu enkripsi.

2.Sistem menampilkan kunci publik secara acak dan menampilkan hasil enkripsi

sessionkey.

3.Sistem melakukan proses penyimpanan hasil enkripsi.


(36)

Untuk tabel kegiatan Use Case dekripsi cipherkey dijabarkan pada tabel 3.3. Tabel tersebut menjelaskan setiap kegiatan user pada saat melakukan proses dekripsi

cipherkey serta respon sistem terhadap perintah user. Tahapan ini user

mendekripsikan cipherkey untuk mendapatkan kembali sessionkey yang digunakan kembali untuk proses dekripsi cipherteks. Proses dekripsi cipherkey ini menggunakan kunci privat dari algoritma RSA yang telah dibangkitkan sebelumnya.

Tabel 3.3 Kegiatan Use Case Dekripsi Cipherkey

Nama use case Dekripsi cipherkey

Aktor User

Deskripsi Use case ini akan melakukan dekripsi terhadap sessionkey Kondisi awal User 2 belum mendekripsikan sessionkey

Kondisi akhir cipherkey telah terdekripsi

Kegiatan User Respon sistem

Success Scenario

1. User memilih menu

dekripsi.

2. User menekan button open pada form

dekripsi cipherkey dan memilih cipherkey 3. User memilih button

dekripsi key.

1. Sistem menampilkan menu dekripsi.

2. Sistem menampilkan

cipherkey yang telah dipilih,

dan menampilkan kunci privat untuk dekripsi cipherkey. 3. melakukan proses dekripsi

cipherkey dan menghasilkan sessionkey.


(37)

Untuk tabel kegiatan Use Case dekripsi ciherteks dijabarkan pada tabel 3.4. Tabel tersebut menjelaskan setiap kegiatan user pada saat melakukan proses dekripsi

cipherteks serta respon sistem terhadap perintah user. Tahap ini user mendekripsikan cipherteks dengan menggunkan sessionkey untuk mendapatkan kembali plainteks

dengan proses algoritma Rijndael.

Tabel 3.4 Kegiatan Use case Dekripsi Cipherteks.

Nama use case Dekripsi cipherteks

Aktor User

Deskripsi Use case ini akan melakukan dekripsi terhadap cipherteks Kondisi awal User belum mendekripsikan file

Kondisi akhir File terenkripsi telah terdekripsi dan disimpan di dalam folder penyimpanan

Kegiatan User Respon sistem

Success Scenario

1.User memilih menu

dekripsi.

2.User menekan button open pada form dekripsi cipherteks.

3.User memilih cipherteks yang akan didekripsi.

4.Menekan button

dekripsi cipherteks. 5.Memilih button save

file.

1. Sistem menampilkan menu dekripsi.

2. Sistem menampilkan kotak dialog lokasi penyimpanan file.

3. Sistem menampilkan

cipherteks yang telah dipilih.

4. Sistem melakukan proses dekripsi dan menampilkan hasil proses dekripsi. 5. Sistem melakukan proses


(38)

3.6. Perancangan Interface

Perancangan interface bertujuan untuk memahami fungsi-fungsi dari bagian yang terdapat pada sistem serta memudahkan dalam pengelolaan agar sistem berjalan sebagaimana mestinya.

3.6.1. Rancangan menu utama

Rancangan menu utama merupakan tampilan saat sistem pertama kali dijalankan. Pada halaman ini terdapat fungsi button enkripsi, dekripsi, button about dan button exit.

Button enkripsi akan mengarahkan user ke dalam halaman enkripsi, Button dekripsi

akan mengarahkan user ke halaman dekripsi, dan Button about berisikan tentang biodata penulis dan keterangan aplikasi.


(39)

3.6.2. Rancangan halaman enkripsi

Pada halaman proses enkripsi terdapat dua buah bagian yaitu bagian proses Rijndael dan RSA. Pada rancangan tampilan Proses Rijndael terdapat kolom utuk pengimputan

sessionkey dan kolom plainteks. Button buka file berfungsi untuk membuka direktori

penyimpanan file *.txt yang akan dienkripsikan. Button enkripsi plainteks berfungsi untuk melakukan proses enkripsi terhadap plainteks.

Untuk form proses RSA terdiri dari kolom teks terenkripsi untuk menampilkan hasil enkripsi, kolom key terenkripsi untuk menampilkan hasil enkripsi (cipherkey). Pada bagian bawah terdapat kolom untuk kunci publik e dan kunci privat d. Button

enkripsikey berfungsi untuk enkripsi sessionkey. Button save berfungsi untuk

menyimpan hasil proses enkripsi kunci. Untuk rancangan proses enkripsi seperti Gambar 3.13 berikut.


(40)

3.6.3. Rancangan halaman dekripsi

Halaman dekripsi merupakan proses mengembalikan cipeherteks dan cipherkey kebentuk plainteks dan sessionkey. Pada rancangan halaman dekripsi terdapat kolom teks terenkripsi untuk menampilkan cipherteks, kolom key terenkripsi untuk menampilkan cipherkey, dan kolom kunci privat yang akan digunakan pada proses dekripsi cipherkey. Button dekripsi key berfungsi untuk melakukan proses dekripsi untuk mendapatkan sessionkey dan Button dekripsi teks berfungsi untuk mengembalikan cipherteks kebentuk plainteks. Untuk rancangan proses dekripsi dapat dilihat pada Gambar 3.14.


(41)

BAB 4

IMPLEMENTASI DAN PENGUJIAN

4.1. Proses Algoritma Rijndael

Pada bab sebelumnya telah dibahas teori tentang proses algoritma Rijdael dalam melakukan enkripsi dan dekripsi terhadap suatu plainteks.

4.1.1 Ekspansi kunci

Proses ekspansi kunci terdiri dari beberapa operasi yaitu: 1. Rot Word

Operasi pemindahan byte. Byte terujung dari sessionkey dipindahkan ke ujung lainnya tanpa mengubah keterurutan komponen lain. Rot word berarti menukarkan posisi baris ke-1 dengan baris ke-4, baris ke-2 dengan ke-1, baris ke-3 dengan ke-2 dan baris ke-4 dengan ke-3.


(42)

2. S-box

Fungsi tabel ini sama seperti pada pembahasan sebelumnya. Substitution box merupakan tabel yang mensubtitusikan nilai byte dengan nilai yang telah ditentukan. Hasil dari rot word pada gambar diatas akan disubtitusikan dengan sebuah s-box Rijndael (AES).

Gambar 4.2 Proses Subtitusi Byte S-Box dengan Hasil Rot Word (Munir, 2006)

3. R-con

Operasi ini merupakan eksponensiasi dari bilangan bulat 2 dalam semesta Rijndael finite field. R-con menghasilkan putaran yang tetap dari larik kata dan berisi nilai yang diberikan oleh [xi-1, {00},{00},{00}] dengan xi-1 dari I ke 1.


(43)

Langkah selanjutnya menentukan kolom ke-1 pada round key pertama.Lakukan XOR antara chipper key, hasil SubBytes dan R-con.

Gambar 4.4 Proses Pengisian Kolom Ke-1 pada Round Key Pertama (Arsendi, 2011)

Untuk proses pengisian kolom Roundkey selanjutnya dapat dilihat pada langkah berikut.


(44)

Kemudian langkah-langkah di atas diulang 9 kali lagi untuk mendapatkan 9 buah roundkey berikutnya. Maka didapatkan hasil 10 roundkey.

Gambar 4.6 Hasil Seluruh Roundkey (Munir, 2006)

4.1.2 Enkripsi plainteks

Enkripsi plainteks terdiri dari teks asli 16 byte dan kunci 16 byte: Plaintek (HEX) : 32 88 31 e0 43 51 31 37 f6 30 98 07 a8 8d a2 34 Session key ( HEX) : 2b 28 ab 09 7e ae f7 cf 15 d2 15 4f 16 a6 88 3c

Tiap elemen dari array state diisi dengan 8-bit teks (1 byte) dalam notasi HEX. Urutan pengisian dimulai dari kolom awal (c=0) sampai kolom terakhir c=3 dan dari barisawal (r=0) sampai baris akhir (r=3). Untuk proses selanjutnya dilakukan

addrounkey yang pertama dengan menggunakan fungsi XOR antara plainteks dan sessionkkey

Gambar 4.7 Proses Pengisian Array State dan Hasil Addrounkey


(45)

Pada awal enkripsi, input plainteks 128-bit yang akan disalin ke suatu array yang diberi nama array state. Proses enkripsi dimulai dengan suatu proses yang disebut AddRoundKey. Proses selanjutnya adalah 9 putaran yang masing-masing putaran terdiri dari empat macam proses yaitu:

1. Transformasi SubByte

Untuk proses SubByte menggunakan S-box seperti yang telah dijelaskan pada bab sebelumnya. Dua digit bilangan HEX akan direpresentasikan kedalam koordinat x dan y. hasilnya dapat dilihat seperti berikut.

Gambar 4.8 Hasil Represenatasi Bilangan HEX dengan Menggunakan S-Box

2. Transformasi ShiftRows

Baris ke-1 bergeser 1 byte ke kiri, baris ke-2 bergeser 2 byte ke kiri, sampai didapatkan hasil terakhir setelah menggeser baris ke-3 sebanyak 3 byte ke kiri .


(46)

3. Transformasi MixColumn

Transformasi MixColumn merupakan proses perkalian matrik

Gambar 4.10 Hasil Proses MixColumn (ariyus, 2008)

4. Transformasi AddRoundkey

Untuk proses AddRoundkey kali ini sama seperti proses sebelumnya namun

subkey dibangkitkan dari kunci utama (sessionkey) dengan menggunakan proses

ekspansi kunci. Setiap subkey hasil ekpansi berbeda setiap putarannya.Tiap kolom dari array state dikenakan XOR dengan kolom round key. Proses ini dilakukan terhadap seluruh kolom array state.

.

Gambar 4.11 Operasi Transformasi Addroundkey Dengan Fungsi XOR (ariyus 2008)

5. Final round

Pada putaran terakhir yaitu putaran ke 10 proses transformasi MixColumn tidak dilakukan namun hanya terdiri dari 3 proses yaitu SubByte, ShiftRows,


(47)

Setelah semua proses dilakukan maka akan didapat nilai cipherteks pada putaran terakhir. Untuk hasil keseluruhan tiap putarannya dapat dilihat pada tabel hasil proses enkripsi algoritma Rijndael berikut ini.

Table 4.1 Hasil Proses Enkripsi

Round Start Round After S-Box AfterShift Row After MixColumn Expantion key w[0,3] – w[40,43] Addround key

0 32 88 31 e0

43 51 31 37 f6 30 98 07 a8 8d a2 34

X O

R

2b 28 ab 09 7e ae f7 cf 15 d2 15 4f 16 a6 88 3c

19 a0 9a e9 3d f4 c6 f8 e3 e2 8d 48 de 2b 2a 08

1 19 a0 9a e9 3d f4 c6 f8 e3 e2 8d 48 de 2b 2a 08

d4 e0 b8 1e 27 df b4 41 11 98 5d 52 ae f1 e5 30

d4 e0 b8 1e bf b4 41 27 5d 52 11 98 30 ae f1 e5

04 e0 48 28 66 cb f8 06 81 19 d3 26 e5 9a 7a 4c

X O

R

a0 88 23 2a fa 54 a3 6c fe 2c 39 76 17 b1 39 05

a4 68 6b 02 9c 9f 5b 6a 7f 35 ae 50 f2 2b 43 49

2 a4 68 6b 02 9c 9f 5b 6a 7f 35 ae 50 f2 2b 43 49

49 45 7f 77 de db 39 02 d2 96 87 53 89 f1 1a 3b

49 45 cf 77 db 39 02 de 87 53 d2 96 3b 89 f1 1a

58 1b db 1b 4d 4b e7 6b ca 5a ca b0 f1 ac a8 e5

X O

R

f2 7a 59 73 c2 96 35 59 95 b9 80 f6 f2 43 7a7f

aa 61 82 68 8f dd d2 32 5f e3 4a 46 03 ef d2 9a

3 aa 61 82 68 8f dd d2 32 5f e3 4a 46 03 ef d2 9a

ac ef 13 45 73 c1 b5 23 cf 11 d6 5a 7b df b5 b8

ac ef 13 45 c1 b5 23 73 d6 5a cf 11 b8 7b bf b5

75 20 53 bb ec 0b c0 25 09 63 cf d0 93 33 7c dc

X O

R

3d 47 1e 6d 80 16 23 7a 47 fe 7e 88 7d 3e 44 3b

48 67 4d d6 6c 1d e3 5f 4e 9d b1 58 ee 0d 38 e7

4 48 67 4d d6 6c 1d e3 5f 4e 9d b1 58 ee 0d 38 e7

52 85 e3 f6 50 a4 11 cf 2f 5e c8 6a 28 d7 07 94

52 85 e3 f6 a4 11 cf 50 c8 6a 2f 5e 94 28 d7 07

0f 60 6f fe d6 31 c0 b3 da 38 10 13 a9 bf 6b 01

X O

R

ef a8 b6 db 44 52 71 0b a5 5b 25 ad 41 7f 3b 00

e0 c8 d9 85 92 63 d1 d8 7f 63 35 be e8 c0 50 01


(48)

Table 4.1 Hasil Proses Enkripsi (lanjutan)

Round Start Round After S-Box AfterShift Row After MixColumn Expantion key w[0,3] – w[40,43] Addround key

5 e0 c8 d9 85 92 63 d1 d8 7f 63 35 be e8 c0 50 01

e1 e8 35 97 4f fb c8 6c d2 fb 96 ae 9b ba 53 7c

e1 e8 35 97 fb c8 6c 4f 96 ae d2 fb 7c 9b ba 53

25 bd b6 4c d`1 11 3a 4c a9 d1 33 c0 ad 68 8e b0

X O

R

d4 7c ca 11 d1 83 f2 f9 c6 9d b8 15 f8 87 bc bc

f1 c1 7c 5d 00 92 c8 b5 6f 4c 8d d5 55 ef 32 0c

6 f1 c1 7c 5d 00 92 c8 b5 6f 4c 8d d5 55 ef 32 0c

a1 78 10 4c 63 4f e8 d5 a8 29 3d 03 fc df 23 fe

a1 78 10 4c4f e8 d5 63 3d 03 a8 29 fefcdf 23

4b 2c 33 37 86 4a 9d d2 8d 89 f4 18 6d 80 e8 d8

X O

R

6d 11 db ca 88 0b f9 00 a3 3e 86 93 7a fd41 fd

26 3d e8 fd 0e 41 64 d2 2e d7 72 8b 17 7d a9 25

7 26 3d e8 fd 0e 41 64 d2 2e d7 72 8b 17 7d a9 25

f7 27 9b 54 ab 83 43 b5 31 a9 40 3d f0 ff d3 3f

f7 27 98 54 83 43 b5 ab 40 3d 31 a9 3f f0 ff d3

14 46 27 34 15 16 46 2a b5 15 56 d8 bf ec d7 43

X O

R

4e 5f 84 4e 54 5f a6 a6 f7 c9 4f dc 0e f3 b2 4f

5a 19 a3 7a 41 49 e0 8c 42 dc 19 04 b1 1f 65 0c

8 5a 19 a3 7a 41 49 e0 8c 42 dc 19 04 b1 1f 65 0c

be d4 0a da 83 3b e1 64 2c 86 d4 f2 c8 c0 4d

be d4 0a da 3b e1 64 83 d4 f2 2c 86 fe c8 c0 4d

00 b1 54 fa 51 c8 76 1b 2f 89 6d 99 d1 ff cd ea

X O

R

ea b5 31 7f d2 8d 2b 8d 73 ba f5 29 21 d2 60 2f

ea 04 65 85 83 45 5d 96 5c 33 98 b0 f0 2d ad c5

9 ea 04 65 85 83 45 5d 96 5c 33 98 b0 f0 2d ad c5

87 f2 4d 97 ec 6e 4c 90 4a c3 46 e7 8c d8 95 a6

87 f2 4d 97 6e 4c 90 ec 46 e7 4a c3 a6 8c d8 95

47 40 a3 4c 37 d4 70 9f 94 e4 3a 42 ed a5 a6 bc

X O

R

ac 19 28 57 77 fa d1 5c 66 dc 29 00 f3 21 41 6e

eb 59 8b 1b 40 2e a1 c3 f2 38 13 42 1e 84 e7 d2

10 eb 59 8b 1b 40 2e a1 c3 f2 38 13 42 1e 84 e7 d2

e9 cb 3d af 09 31 32 2e 89 07 7d 2c 7e 5f 94 b5

e9 cb 3d af 31 32 2e 09 7d 2c 89 07 b5 72 5f 94

X O

R

d0 c9 e1 b6 14 ee 3f 63 f9 25 0c 0c a8 89 c8 a6

39 02 bc 19 25 dc 11 6a 84 09 85 0b 1d fb 97 32


(49)

4.1.3 Dekripsi plainteks

Tahapan dekripsi merupakan Invers dari keempat proses pada saat enkripsi dan kemudian urutan prosesnya dipertukarkan. Untuk urutan proses dekripsi yaitu

InversShiftRows, Invers SubBytes, Addroundkeys, dan Invers MixColumns. Table 4.2

menunjukan hasil dari setiap tahapan dekripsi Rijndael.

Tabel 4.2 Proses Dekripsi Cipherteks Menjadi Plainteks

Roun d

Start Round Invers Shift rows Invers SubByte Expantion key w[40,43] – w[0,3]

Addround key Invers Mixcolumn 0 39 02 bc 19

25 dc 11 6a 84 09 85 0b 1d fb 97 32

X O

R

d0 c9 e1 b6 14 ee 3f 63 f9 25 0c 0c a8 89 c8 a6

e9 cb 3d af 31 32 2e 09 7d 2c 89 07 b5 72 5f 94

1 e9 cb 3d af 31 32 2e 09 7d 2c 89 07 b5 72 5f 94

e9 cb 3d af 09 31 32 2e 89 07 7d 2c 7e 5f 94 b5

eb 59 8b 1b 40 2e a1 c3 f2 38 13 42 1e 84 e7 d2

X O

R

ac 19 28 57 77 fa d1 5c 66 dc 29 00 f3 21 41 6e

47 40 a3 4c 37 d4 70 9f 94 e4 3a 42 ed a5 a6 bc

87 f2 4d 97 6e 4c 90 ec 46 e7 4a c3 a6 8c d8 95

2 87 f2 4d 97 6e 4c 90 ec 46 e7 4a c3 a6 8c d8 95

87 f2 4d 97 ec 6e 4c 90 4a c3 46 e7 8c d8 95 a6

ea 04 65 85 83 45 5d 96 5c 33 98 b0 f0 2d ad c5

X O

R

ea b5 31 7f d2 8d 2b 8d 73 ba f5 29 21 d2 60 2f

00 b1 54 fa 51 c8 76 1b 2f 89 6d 99 d1 ff cd ea

be d4 0a da 3b e1 64 83 d4 f2 2c 86 fe c8 c0 4d

3 be d4 0a da 3b e1 64 83 d4 f2 2c 86 fe c8 c0 4d

be d4 0a da 83 3b e1 64 2c 86 d4 f2 c8 c0 4d fe

5a 19 a3 7a 41 49 e0 8c 42 dc 19 04 b1 1f 65 0c

X O

R

4e 5f 84 4e 54 5f a6 a6 f7 c9 4f dc 0e f3 b2 4f

14 46 27 34 15 16 46 2a b5 15 56 d8 bf ec d7 43

f7 27 98 54 83 43 b5 ab 40 3d 31 a9 3f f0 ff d3

4 f7 27 98 54 83 43 b5 ab 40 3d 31 a9 3f f0 ff d3

f7 27 9b 54 ab 83 43 b5 31 a9 40 3d f0 ff d3 3f

26 3d e8 fd 0e 41 64 d2 2e d7 72 8b 17 7d a9 25

X O

R

6d 11 db ca 88 0b f9 00 a3 3e 86 93 7a fd41 fd

4b 2c 33 37 86 4a 9d d2 8d 89 f4 18 6d 80 e8 d8

a1 78 10 4c4f e8 d5 63 3d 03 a8 29 fefcdf 23


(50)

Tabel 4.2 Proses Dekripsi Cipherteks Menjadi Plainteks (lanjutan)

Roun d

Start Round Invers Shift rows Invers SubByte Expantion key w[40,43] – w[0,3]

Addround key Invers Mixcolumn 5 a1 78 10

4c4f e8 d5 63 3d 03 a8 29 fefcdf 23

a1 78 10 4c 63 4f e8 d5 a8 29 3d 03 fc df 23 fe

f1 c1 7c 5d 00 92 c8 b5 6f 4c 8d d5 55 ef 32 0c

X O

R

d4 7c ca 11 d1 83 f2 f9 c6 9d b8 15 f8 87 bc bc

25 bd b6 4c d`1 11 3a 4c a9 d1 33 c0 ad 68 8e b0

e1 e8 35 97 fb c8 6c 4f 96 ae d2 fb 7c 9b ba 53

6 e1 e8 35 97 fb c8 6c 4f 96 ae d2 fb 7c 9b ba 53

e1 e8 35 97 4f fb c8 6c d2 fb 96 ae 9b ba 53 7c

e0 c8 d9 85 92 63 d1 d8 7f 63 35 be e8 c0 50 01

X O

R

ef a8 b6 db 44 52 71 0b a5 5b 25 ad 41 7f 3b 00

0f 60 6f fe d6 31 c0 b3 da 38 10 13 a9 bf 6b 01

52 85 e3 f6 a4 11 cf 50 c8 6a 2f 5e 94 28 d707

7 52 85 e3 f6 a4 11 cf 50 c8 6a 2f 5e 94 28 d7 07

52 85 e3 f6 50 a4 11 cf 2f 5e c8 6a 28 d7 07 94

48 67 4d d6 6c 1d e3 5f 4e 9d b1 58 ee 0d 38 e7

X O

R

3d 47 1e 6d 80 16 23 7a 47 fe 7e 88 7d 3e 44 3b

75 20 53 bb ec 0b c0 25 09 63 cf d0 93 33 7c dc

ac ef 13 45 c1 b5 23 73 d6 5a cf 11 b8 7b bf b5

8 ac ef 13 45 c1 b5 23 73 d6 5a cf 11 b8 7b bf b5

ac ef 13 45 c1 b5 23 73 d6 5a cf 11 b8 7b bf b5

aa 61 82 68 8f dd d2 32 5f e3 4a 46 03 ef d2 9a

X O

R

f2 7a 59 73 c2 96 35 59 95 b9 80 f6 f2 43 7a7f

58 1b db 1b 4d 4b e7 6b ca 5a ca b0 f1 ac a8 e5

49 45 cf 77 db 39 02 de 87 53 d296 3b 89 f1 1a

9 49 45 cf 77 db 39 02 de 87 53 d2 96 3b 89 f1 1a

49 45 cf 77 db 39 02 de 87 53 d2 96 3b 89 f1 1a

a4 68 6b 02 9c 9f 5b 6a 7f 35 ae 50 f2 2b 43 49

X O

R

a0 88 23 2a fa 54 a3 6c fe 2c 39 76 17 b1 39 05

04 e0 48 28 66 cb f8 06 81 19 d3 26 e5 9a 7a 4c

d4 e0 b8 1e bf b4 41 27 5d 52 11 98 30 ae f1 e5

10 d4 e0 b8 1e bf b4 41 27 5d 52 11 98 30 ae f1 e5

d4 e0 b8 1e 27 df b4 41 11 98 5d 52 ae f1 e5 30

19 a0 9a e9 3d f4 c6 f8 e3 e2 8d 48 de 2b 2a 08

X O

R

2b 28 ab 09 7e ae f7 cf 15 d2 15 4f 16 a6 88 3c

32 88 31 e0 43 51 31 37 f6 30 98 07 a8 8d a2 34


(51)

4.2.Algoritma Kriptografi RSA

Prinsip kerja algoritma RSA ini terletak pada sulitnya memfaktorkan bilangan yang besar menjadi faktor prima. Pemfaktoran bertujuan untuk mendapatkan kunci privat. Jika bilangan tersebut tidak dapat difaktorkan, maka keamanan algoritma RSA tetap terjamin. Proses algoritma RSA terdiri dari beberapa tahapan yaitu:

1. Misalkan diperoleh nilah p=71 dan q= 107. maka proses pembangkitan kunci dapat dilakukan sebagai berikut:

a. Dapatkan nilai n, dimana n= p*q, dan n bersifat tidak rahasia. n= p *q

n= 71 * 107 n= 7595

b. Dapatkannilai Ф(n), dimana Ф(n)=( p-1)*(q-1),

Ф(n)= (p-1)*(q-1) Ф(n)= 70 * 106 Ф(n)=7420

c. Pilih sebuah bilangan bulat kecil e. dimana GCD(e, Ф(n)) = 1 e= 391

d. Hitung nilai d sebagai kunci privat. d = (1+k*Ф(n))/e . nilai k dibangkitkan

secara acak sehingga didapat sebuah nilai yang integer.

� = 1 +� ∗Ф(n)

� � = 1 + 87∗7420

391 = 1651

Jadi nilai d adalah = 1651.

Dari proses pembangkitan kunci diatas maka diperoleh: Kunci publik (e,n) = 391,7595


(52)

4.2.1. Proses Enkripsi RSA

Untuk melakukan enkripsi dengan metode RSA, setelah didapatkan kunci publik dan kunci privat, maka plainteks harus diubah ke dalam kode ASCII desimal.

Plainteks (HEX) : 2b 28 ab 09 7e ae f7cf 15 d2 15 4f 16 a6 88 3c

Table 4.3 Konversi Karakter Plainteks ke Kode ASCII Desimal

Plainteks Kode ASCII

2b 43

28 40

ab 171

09 09

7e 126

ae 174

f7 247

cf 207

15 21

d2 210

15 21

4f 79

16 22

a6 166

88 136


(53)

Setelah semua plainteks dikonversikan kedalam kode ASCII maka akan dilakukan proses enkripsi setiap karakter.

Tabel 4.4 Proses Enkripsi Algoritma RSA

I mi E n ci = mie mod n

1 43 391 7595 3732

2 40 391 7595 1125

3 171 391 7595 234

4 09 391 7595 6519

5 126 391 7595 3381

6 174 391 7595 6684

7 247 391 7595 7408

8 207 391 7595 858

9 21 391 7595 4361

10 210 391 7595 5635

11 21 391 7595 4361

12 79 391 7595 79

13 22 391 7595 7183

14 166 391 7595 166

15 136 391 7595 5561


(54)

4.2.2. Proses dekripsi RSA

Untuk melakukan dekripsi terhadap cipherteks setiap blok cipherteks didekripsi kembali menjadi blok plainteks.

Tabel 4.5 Proses Dekripsi Algoritma RSA

i ci D n mi = cid mod n

1 3732 1651 7595 43

2 1125 1651 7595 40

3 234 1651 7595 171

4 6519 1651 7595 09

5 3381 1651 7595 126

6 6684 1651 7595 174

7 7408 1651 7595 247

8 858 1651 7595 207

9 4361 1651 7595 21

10 5635 1651 7595 210

11 4361 1651 7595 21

12 79 1651 7595 79

13 7183 1651 7595 22

14 166 1651 7595 166

15 5561 1651 7595 136


(55)

Setelah blok cipherteks didekripsi menjadi blok plainteks dalam bentuk kode ASCII desimal kemudian konversikan kembali kedalam bentuk kode Hex sehingga diperoleh nilai plainteks seperti semula.

Table 4.6 Konversi Karakter Kode ASCII Desimal ke Plainteks (HEX)

Kode ASCII desimal Plainteks (HEX)

43 2b

40 28

171 ab

09 09

126 7e

174 ae

247 f7

207 cf

21 15

210 d2

21 15

79 4f

22 16

166 a6

136 88


(56)

4.3. Impelementasi pada Sistem

Pada sub bab ini akan membahas tentang sistem yang telah dibangun serta cara kerja dari sistem tersebut.

4.3.1. Tampilan awal sistem

Halaman pertama yang tampil ketika sistem dijalankan adalah halaman main menu yang terdiri dari menu Enkripsi, menu dekripsi, dan menu about. Gambar 4.12 merupakan tampilan pada saat sistem pertama kali dijalankan.

Gambar 4.12Halaman Main Menu 081401004


(57)

4.3.2. Tampilan Menu Enkripsi

Menu Enkripsi digunakan oleh user, ketika menu ini dipilih oleh user, maka akan muncul halaman proses enkripsi yang digunakan untuk melakukan enkripsi file text dan sessionkey. Gambar 4.13 merupakan halaman menu Enkripsi.


(58)

Setelah masuk ke dalam menu Enkripsi, User dapat melakukan proses openfile dengan menekan tombol buka file teks. Hasil proses openfile enkripsi dapat dilihat pada Gambar 3.14.


(59)

Untuk melakukan proses enkripsi plainteks, user diminta memasukkan kunci 16 byte terlebih dahulu dan menekan tombol Enkripsi plainteks.


(60)

Setelah proses enkripsi plainteks berhasil dilakukan maka akan di tampilkan hasil enkripsi pada kolom Teks Terenkripsi seperti Gambar 3.15.


(61)

Untuk proses enkripsi sessionkey dilakukan dengan menggunakan kunci publik. Ketika user menekan tombol Enkripsi Key maka sistem akan menampilkan pasangan kunci (e,n dan d,n) yang akan digunakan secara acak serta sessionkey yang telah terenkripsi. Hasil enkripsi sessionkey ditampilkan pada kolom Key Terenkripsi. Dengan demikian proses enkripsi secara keseluruhan berhasil dilakukan. Gambar 3.16 merupakan hasil enkripsi secara keseluruhan.

Gambar 4.17 Tampilan Hasil Proses Enkripsi Plainteks dan Sessionkey


(62)

4.3.3. Tampilan Menu Dekripsi

Menu Dekripsi digunakan oleh user, ketika menu ini dipilih oleh user, maka akan muncul halaman untuk dekripsi cipherkey dan cipherteks. Tampilan halaman proses dekripsi seperti Gambar 4.17.


(63)

Setelah masuk ke dalam menu dekripsi, Pengguna dapat melakukan proses

openfile dengan menekan tombol Buka File untuk membuka file cipherteks dan cipherkey. Gambar 4.18 menunjukan cipeherteks dan cipherkey yang ingin didekripsi.

Gambar 4.19 Tampilan Hasil Inputan Cipherteks dan Cipherkey pada Menu Dekripsi


(64)

Proses dekripsi ini dilakukan dengan mendekripsikan cipherkey terlebih dahulu, user memilih tombol Dekripsi Key untuk mendapat sessionkey. Sessionkey hasil dekripsi ditampilkan pada kolom key paling bawah.


(65)

Proses selanjutnya yaitu dekripsi cipherteks menggunakan sessionkey. Hasil dekripsi ini ditampilakan pada kolom plainteks. Gambar 4.20 berikut menunjukan hasil proses dekripsi secara keseluruhan.

Gambar 4.20 Tampilan Hasil Proses Dekripsi Cipherkey dan Cipherteks


(66)

BAB 5

KESIMPULAN DAN SARAN

5.1 Kesimpulan

Berdasarkan hasil proses yang telah dilakukan baik secara teori dan pengujian terhadap sistem yang telah dibuat maka dapat ditarik kesimpulan:

1. Sistem yang dibangun mampu mengenkripsi dan dekripsi file teks *.txt saja. 2. Panjang kunci algoritma Rijndael pada sistem ini hanya 128-bit.

3. Hasil penelitian ini diperoleh sistem enkripsi dan dekripsi terhadap plainteks dan kunci simetris (sessionkey) dengan kombinasi algoritma Rijndael dan RSA.

4. Hasil enkripsi plainteks pada sistem yang dibangun berupa kode karakter, sedangkan untuk enkripsi sessionkey berupa kode number.

5. Pengirim dan penerima tidak perlu lagi menyepakati kunci simetris yang digunakan, karena telah terenkripsi oleh algoritma kriptografi asimetris (RSA).


(67)

5.2Saran

Sebagai bahan pertimbangan untuk pengembangan sistem kedepan agar menjadi lebih baik, berikut ada beberapa saran yang dapat dijadikan pertimbangan:

1. Untuk pengembangan selanjutnya aplikasi ini diharapkan mampu mengenkripsi dan dekripsi file teks *.doc, dan jenis file teks lainnya yang sering digunakan.

2. Untuk hasil enkripsi sessionkey sebaiknya dalam bentuk kode karakter bukan dalam bentuk ciphernumber agar kelihatan lebih rapi.

3. Panjang kunci algoritma Rijndael diharapkan pada pengembangan selanjutnya bisa mencapai 192-bit dan 256-bit.


(68)

6

BAB 2

TINJAUAN PUSTAKA

2.1. Kriptografi

Kriptografi berasal dari bahasa Yunani, cryptosdan graphein. Cryptosberarti rahasia dan graphein berarti tulisan. Menurut terminologinya kriptografi adalah ilmu dan seni untuk menjaga keamanan pesan ketika dikirim dari suatu tempat ke tempat yang lain. Kriptografi telah dikenal sejak ribuan tahun lalu, bahkan beberapa ahli mengatakan ilmu penyembunyian pesan ini telah dikenal sejak zaman mesir kuno, masyarakat mesir menulisnya dalam bentuk hieroglyphy yang bentuk tulisannya tidak standard dalam aturan penulisan pesan. (Konheim, 2007).

Kriptografi dapat pula diartikan sebagai ilmu atau teknik-teknik matematika yang berhubungan dengan aspek keamanan informasi seperti kerahasian, integritas data, serta otentikasi. Prinsip dasar kriptografi adalah menyembunyikan informasi dalam bentuk sedemikian rupa sehingga hanya orang-orang yang berhak saja yang dapat mengetahui isi informasi yang disembunyikan itu. (Smart, 2004).

Dalam algoritma kriptografi dikenal beberapa komponen yaitu: 1. Enkripsi

merupakan suatu proses pengubahan pesan asli yang disebut plainteks menjadi suatu kode yang tidak bisa dimengerti atau disebut juga


(69)

7

2. Dekripsi

merupakan proses pengubahan cipherteks menjadi plainteks. Algoritma yang digunakan untuk dekripsi tentu berbeda dengan algoritma yang digunakan untuk enkripsi.

3. Kunci

Berfungsi untuk melakukan enkripsi dan dekripsi. Berdasarkan jenis kunci yang digunakan kriptografi terbagi dua yaitu algoritma kriptografi simetris dan algoritma kriptografi asimetris.

4. Plainteks

merupakan pesan asli (clearteks). Agar pesan tidak dapat dimengerti maknanya oleh pihak lain, maka pesan akan diproses menggunakan algoritma kriptografi untuk menjadi kode-kode yang tidak bisa dipahami. 5. Cipherteks

merupakan bentuk pesan yang telah disandikan sehingga tidak bisa dibaca karena berupa karakter yang tidak mempunyai makna.

Dari lima komponen dalam kriptografi tersebut saling berhubungan. Plainteks dan cipherteks merupakan hasil pemetaan dari fungsi enkripsi dan dekripsi dengan menggunakan sebuah kunci. Misalkan P menyatakan plainteks, C menyatakan

cipherteks, dan k menyatakan kunci, maka fungsi enkripsi dan dekripsi dapat ditulis

Ek (P) = C maka Dk (C) = P sehingga Dk (Ek(P)) = P. (Munir, 2006).

2.1.1. Algoritma kriptografi kunci simetris

Dalam algoritma ini kunci pada saat penyandian pesan sama dengan kunci pada saat pendekripsian pesan. Jadi pembuat pesan dan penerimanya harus menyepakati kunci yang akan digunkan. Masalah yang paling jelas disini terkadang bukanlah masalah pengiriman cipherteks nya, melainkan masalah bagaimana menyampaikan kunci simetris tersebut kepada pihak yang diinginkan karena sekali saja kunci tersebut diketahui oleh pihak yang lain maka pesan tersebut akan mudah untuk dienkripsi dan didekripsi oleh orang lain.


(70)

8

Contoh algoritma kunci simetris yang terkenal salah satunya adalah DES (Data Encryption Standard), AES Rijndael, dan IDE, kelemahan pada algoritma kunci simetris, kunci harus didistribusi dengan aman, jika ada n pengguna maka dibutuhkan jumlah kunci sebanyak n(n-1)/2 kunci. Jika kunci berhasil ditemukan oleh pihak yang tidak berhak, maka sistem kriptografi tidak lagi aman. Dibalik kelemahan di atas, terdapat juga keuntungan dari penggunaan algoritma ini yaitu prosesnya lebih cepat jika dibandingkan dengan kriptografi asimetri. Keuntungan inilah yang menjadi dasar mengapa algoritma ini masih banyak digunakan dan terus dikembangkan.

Gambar 2.1 Skema Kriptografi Simetri (Munir, 2006)

2.1.2. Algoritma kriptografi kunci asimetri

Whitfield Diffie dan Martin Hellman memperkenalkan konsep kriptografi kunci publik (kunci asimetris) pada tahun 1976. Pada algoritma asimetris kunci terbagi menjadi dua bagian yaitu:

1. Kunci umum (public key): kunci yang boleh diketahui semua orang (dipublikasikan).

2. Kunci rahasia (private key): kunci yang dirahasiakan (hanya boleh diketahui oleh satu orang saja).

Kunci privat,K

Plainteks

User A Enkripsi

Ek(P)=C

Ciphertext Dekripsi

Dk(C)=P

User B Kunci privat,K


(71)

9

Seseorang dapat mengirim sebuah pesan rahasia dengan menggunakan kunci publik tetapi pesan cipherteks hanya dapat didekripsi dengan kunci rahasia yang dimiliki penerima pesan.

Gambar 2.2 Skema Kriptografi Asimetri (Munir, 2006)

Aplikasi kunci publik dapat diimplementasi menjadi tiga kategori: 1. Kerahasian data

Kriptografi kunci-publik dapat digunakan untuk menjaga kerahasiaan data melalui mekanisme enkripsi dan dekripsi. Contoh algoritma untuk aplikasi ini adalah RSA, Knapsack, dan Elgamal.

2. Tanda-tangan digital

Kriptografi kunci publik dapat digunakan untuk membuktikan otentikasi pesan maupun otentikasi pengirim. Contoh algoritma untuk aplikasi ini adalah RSA, DSA, dan Elgamal.

3. Pertukaran kunci (key exchange)

Algoritma kriptografi kunci publik dapat digunakan untuk pengiriman kunci simetri (sessionkey). Contoh algoritmanya adalah RSA dan Diffie-hellman.

Dalam implementasinya, sistem kriptografi kunci publik bukan pengganti sistem kriptografi simetris. Sistem kriptografi kunci publik tidak digunakan untuk mengengkripsi pesan, melainkan untuk mengenkripsi kunci pada sistem kriptografi simetris. Dengan sistem kriptografi kunci publik maka pertukaran kunci pada sistem kriptigrafi simetris dapat dilakukan dengan aman.

Enkripsi Ek1(P)=C

Kunci publik K1

Plainteks P

User A

Ciphertext C Dekripsi Dk2(C)=P

User B

Kunci privat K2


(72)

10

2.2. Jenis-Jenis Serangan Terhadap Kriptografi

Serangan terhadap sistem kriptografi dapat dikelompokkan dengan beberapa cara:

1. Berdasarkan keterlibatan penyerang dalam komunikasi: a. Serangan aktif

Pada jenis serangan ini, penyerang mengintervensi komunikasi secara langsung dan ikut mempengaruhi sistem untuk keuntungan dirinya. Misalnya penyerang mengubah aliran pesan seperti menghapus sebagian

ciphertext, mengubah ciphertext, menyisipkan potongan ciphertext palsu,

me-replay pesan lama, mengubah informasi yang tersimpan, dan sebagainya. Serangan yang termasuk jenis serangan aktif adalah

man-in-the-middle attack.

b. Serangan pasif

Pada jenis serangan ini, penyerang tidak terlibat dalam komunikasi antara pengirim dan penerima, namun penyerang menyadap semua pertukaran pesan antara kedua entitas tersebut. Tujuannya adalah untuk mendapatkan sebanyak mungkin informasi yang digunakan untuk kriptanalisis. Beberapa metode penyadapan data antara lain:

1) Wiretapping: penyadap mencegat data yang ditransmisikan pada

saluran komunikasi dengan menggunakan sambungan perangkat keras. 2) Electromagnetic eavesdropping: penyadap mencegat data yang

ditransmisikan melalui saluran wireless, misalnya radio dan

microwave.

2. Berdasarkan banyaknya informasi yang diketahui oleh kriptanalis: a. Ciphertext-only attack

Ini adalah jenis serangan yang paling umum namun paling sulit karena informasi yang tersedia hanyalah ciphertext saja.Tugas kriptanalis adalah menemukan plaintext sebanyak mungkin dari ciphertext tersebut dengan mencoba setiap kemungkinan kunci yang dimiliki.(Arriyus, 2008).


(73)

11

b. Known-plaintext attack

Ini adalah jenis serangan dimana kriptanalis memiliki pasangan plainteks dan cipherteks yang berkoresponden. Beberapa pesan yang formatnya terstruktur membuka peluang kepada kriptanalis untuk menerka plainteks dari cipherteks yang bersesuaian.

c. Chosen-plaintext attack

Serangan jenis ini lebih hebat dari pada known-plaintext attack, karena kriptanalis dapat memilih plainteks yang dimilikinya untuk dienkripsikan, yaitu plainteks yang lebih mengarahkan penemuan kunci.

d. Chosen-ciphertext attack

Ini adalah jenis serangan dimana kriptanalis memilih cipherteks untuk didekripsikan dan memiliki akses ke plainteks hasil dekripsi (misalnya terhadap mesin elektronik yang melakukan dekripsi secara otomatis). Jenis serangan ini biasanya dipakai pada sistem kriptografi.

e. Chosen-text attack

Ini adalah jenis serangan yang merupakan kombinasi chosen-plaintext dan

chosen-ciphertext attack.

3. Berdasarkan teknik yang digunakan dalam menemukan kunci: a. Exhaustive attack atau brute force attack

Ini adalah serangan untuk mengungkap plainteks atau kunci dengan mencoba semua kemungkinan kunci.

b. Analytical attack

Kriptanalis menganalisis kelemahan algoritma kriptografi untuk mengurangi kemungkinan kunci yang tidak mungkin ada. Analisis dapat menggunakan pendekatan matematik dan statistik dalam rangka menemukan kunci.


(1)

vi

ABSTRAK

Pada penelitian ini akan membahas kombinasi dua buah algoritma kriptografi simetris dan asimetris yaitu Rijndael dan RSA. Algoritma kriptografi Rijndael bersifat simetris itu artinya kunci yang digunakan pada saat enkripsi dan dekripsi sama, oleh sebab itu pengguna harus terlebih dahulu menyepakati kunci yang akan digunakan, hal ini memberikan kemungkinan ketidak amanan pada saat pengiriman kunci tersebut. Algoritma RSA merupakan algoritma kriptografi yang sifatnya asimetris yang berarti memiliki pasangan kunci yang berbeda pada setiap prosesnya yaitu publik key dan privat key. Dalam penelitian ini algoritma Rijndael berfungsi untuk enkripsi plainteks dan dekripsi cipherteks dengan menggunakan kunci simetris (sessionkey), sedangkan pasangan kunci RSA digunakan untuk enkripsi kunci simetris (sessionkey) dengan menggunakan kunci publik dan hasil enkripsi tersebut yaitu cipherkey didekripsi dengan menggunakan kunci privat. Algoritma Rijndael pada penelitian ini menggunakan kunci 128-bit dan untuk algoritma RSA menggunakan 1024-bit. Hasil pengujian ini bertujuan untuk meningkatkan integritas data dan melakukan sistem pengamanan pertukaran kunci (key exchange).

Katakunci: Kriptografi, Kriptografi Simetris, kriptografi Asimetris, Rijndael, Kriptografi RSA.


(2)

vii

IMPLEMENTATION OF RIJNDAEL AND RSA ON THE TEXT DATA SECURITY

ABSTRCT

This research discuss the combination of two symmetric and asymmetric cryptographic algorithms, namely Rijndael and RSA. Rijndael is a symmetric cryptographic algorithms it means used the same key at time of encryption and decryption process, therefore users must first agree on a key they used, this give the possibility of insecurity at the time of delivery of the key. RSA algorithm is an asymmetric cryptographic algorithms that are meaningful to have different key pair for each process those are public key and private key. In this study the Rijndael algorithm function using symmetric key ( sessionkey ) to encryption plaintext and decryption ciphertext, while key pair of the RSA used to encrypt the symmetric key (sessionkey) using the public key and the encryption result is cipherkey decrypted using the private key. Rijndael algorithm in this study using 128-bit key and for RSA algorithm use1024-bit. The results of this research can help to improve data integrity and perform key exchange security system (key exchange ).

Keywords: Cryptography, Cryptography Symmetric, Cryptography Asymmetric, Rijndael and RSA.


(3)

viii

DAFTAR ISI

Persetujuan ... iii

Pernyataan ... iv

penghargaan ...v

Abstrak ... vi

Abstract ... vii

Daftar Isi ... viii

Daftar Tabel ...x

Daftar Gambar ... xi

BAB 1 Pendahuluan 1.1 Latar Belakang ...1

1.2 Rumusan Masalah ...2

1.3 Batasan Masalah ...3

1.4 Tujuan Penelitian ...3

1.5 Manfaat Penelitian ...4

1.6 Metode Penelitian ...4

1.7 Sistematika Penulisan ...4

BAB 2 Landasan Teori 2.1 Kriptografi...6

2.1.1 Algoritma kriptografi kunci simetris ...7

2.1.2 Algoritma kriptografi kunci asimetris ...8

2.2Jenis-Jenis Serangan Terhadap Kriptografi ...10

2.3Algoritma Rijndael (AES) ...12

2.3.1 Prose enkripsi algoritma Rijndael ...14

2.3.2 Proses dekripsi algoritma Rijndael ...18

2.3.3 Key expantion ...20

2.4Algoritma Kriptografi RSA ...21

2.4.1 Algoritma pembangkit bilangan prima ...23

BAB 3 Analisis Dan Perancangan 3.1 Analisis Masalah ...24

3.2Analisis Sistem...24

3.2.1 Analisis kebutuhan perangkatlunak ...25

3.2.2 Analisis kebutuhan fungsional dan non-fungsional ...26

3.3 Perancangan Sistem ...26

3.3.1 Skema kosep dasar perancangan sistem ...27

3.3.2 Dekripsi umum perangkat lunak ...28

3.3.3 Rancangan proses kerja sistem secara umum ...29

3.4Diagram alir (Flowchart) ...30

3.5Use Case diagram ...36

3.6Perancangan Interface ...40

3.6.1 Rancangan menu utama ...41

3.6.2 Rancangan halaman enkripsi ...42


(4)

ix

BAB 4 IMPLEMENTASI DAN PENGUJIAN

4.1Proses Algoritma Rijndael ...44

4.1.1 Key expantion...44

4.1.2 Enkripsi plainteks...47

4.1.3 Dekripsi plainteks ...52

4.2Algoritma Kriptografi RSA ...54

4.2.1 Proses enkripsi RSA ...55

4.2.2 Proses dekripsi RSA ...57

4.3Implementasi padaSistem ...59

4.3.1 Tampilan awal sistem ...59

4.3.2 Tanpilan menu enkripsi...60

4.3.3 Tampilan menu dekripsi ...67

BAB 5 KESIMPULAN DAN SARAN 5.1Kesimpulan ...69

5.2Saran ...70

Daftar Pustaka ...72 Lampiran


(5)

x DAFTAR GAMBAR 2.1 2.2 2.3 2.4 2.5 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15 4.16 4.17 4.18 4.19 4.20 4.21

Skema Kriptografi Simetri Skema Kriptografi Asimetri Diagram Proses Enkripsi Rijndael Perkalian Matriks Mixcoloumn Rijndael Diagram Proses Dekripsi Rijndael

Konsep Perancangan Proses Pengamanan Plainteksdan Sessionkey Konsep Perancangan Proses Pendekripsian Plainteksdan Sessionkey Rancangan Proses Kerja Sistem Secara Umum

Flowchart Proses Enkripsi Plaintekspada Algoritma Rijndael Flowchart Proses Dekripsi Ciphertekspada Algoritma Rijndael Flowchart Pembangkitan Kunci Publik dan Privat Algoritma RSA Flowchart Enkripsi Sessionkeypada Algoritma RSA

Flowchart Proses Dekripsi Cipherkey pada Algoritma RSA Flowchart Gambaran Umum Sistem

Uses Case Diagram pada Sistem Enkripsi Rijndael dan RSA

Rancangan Menu Utama Rancangan Halaman Enkripsi Rancangan Halaman Dekripsi Operasi Rot Word

Proses Subtitusi Byte S-Box dengan Hasil Rot Word

Nilai R-con

Proses Pengisian Kolom Ke-1 pada Roundkey Pertama Proses Pengisian Roundkey pada Kolom 2-4

Hasil Seluruh Roundkey

Proses Pengisian Array State dan Hasil Addroundkey

Hasil Representasi Bilangan Hex dengan Menggunakan S-Box Proses Transformasi Siftrows

Hasil Proses Mixcolumn

Operasi Transformasi Addroundkey dengan Operasi XOR Halaman Main Menu

Halaman Menu Enkripsi

Tampilan Hasil Proses Open File pada Menu Enkripsi Tampilan Input Sessionkey pada Menu Enkripsi Tampilan Hasil Enkripsi Plainteks

Tampilan Hasil proses Enkripsi Plainteks dan Sessionkey Tampilan Halaman Menu Dekripsi

Tampilan Hasil Inputan Cipherteks dan Cipherkey pada Menu Dekripsi Tampilan Proses Dekripsi Cipherkey

Tampilan Hasil Proses Dekripsi Cipherkey dan Cipherteks

8 9 14 17 18 27 28 29 30 31 32 33 34 35 36 41 42 43 44 45 45 46 46 47 47 48 48 49 49 59 60 61 62 63 64 65 66 67 68


(6)

xi

DAFTAR TABEL

2.1 2.2 2.3 2.4 3.1 3.2 3.3 3.4 4.1 4.2 4.3 4.4 4.5 4.6

Table Perbandingan Jumlah Putaran pada Rijndael

S-BoxYang Digunakan dalam Transformasi Subbyte Rijndael

Jumlah Pergeseran State pada Tahap Shiftrow

S-Box yang Digunakan dalam Transformas InvSubbyte Rijndael

Kegiatan Use Case Enkripsi Plainteks Kegiatan Use Case Enkripsi Sessionkey Kegiatan Use Case Dekripsi Cipherkey Kegiatan Use Case Dekripsi Cipherteks Hasil Proses Enkripsi

Proses Dekripsi Cipherteks Menjadi Plainteks Konversi Karakter Plainteks Menjadi Kode ASCII Proses Enkripsi Algoritma RSA

Proses Dekripsi Algoritma RSA

Konversi Karakter Kode ASCII Desimal menjadi Plainteks

13 15 16 19 37 38 39 40 50 52 55 56 57 58