Implementasi Kombinasi Algoritma Vigenere dan Algoritma Data Encryption Standard (DES) pada Aplikasi Short Message Service (SMS) Berbasis Windows Phone

(1)

LISTING PROGRAM

Form Utama :

using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Navigation; using Microsoft.Phone.Controls; using Microsoft.Phone.Shell; using vigenere_des.Resources; namespace vigenere_des {

public partial class MainPage : PhoneApplicationPage {

public MainPage() {

InitializeComponent(); }

private void Button_Click(object sender, RoutedEventArgs e) {

Application.Current.Terminate(); }

private void Button_Click_1(object sender, RoutedEventArgs e) {

NavigationService.Navigate(new Uri("/Page1.xaml", UriKind.RelativeOrAbsolute));

}

private void Button_Click_2(object sender, RoutedEventArgs e) {

NavigationService.Navigate(new Uri("/Page2.xaml", UriKind.RelativeOrAbsolute));

}

private void Button_Click_3(object sender, RoutedEventArgs e) {

NavigationService.Navigate(new Uri("/Page3.xaml", UriKind.RelativeOrAbsolute));

}

private void Button_Click_4(object sender, RoutedEventArgs e) {

NavigationService.Navigate(new Uri("/Page4.xaml", UriKind.RelativeOrAbsolute));

} } }


(2)

Form Buat Pesan : using System; using System.IO; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Navigation; using Microsoft.Phone.Controls; using Microsoft.Phone.Shell; using Microsoft.Phone.UserData; using System.Security.Cryptography; using System.Text; using Microsoft.Phone.Tasks; namespace vigenere_des {

public partial class Page3 : PhoneApplicationPage {

public Page3() {

InitializeComponent(); }

string enkripsiv(string pesan, string kunci) {

int pjgkunci = kunci.Length; int pjgpesan = pesan.Length; string hasil = "";

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

hasil = hasil + Convert.ToChar((((int)pesan[i] + (int)kunci[i % (pjgkunci)]) % 95) + 32);

}

return hasil; }

private void Button2_Click(object sender, RoutedEventArgs e) {

string message = plaint.Text; string key = plaink.Text;

ciphert.Text = enkripsiv(message, key); }

private void Button3_Click(object sender, RoutedEventArgs e) {

Cryptographer cryptographer = new Cryptographer(Algorithms.DES);

cipherk.Text = cryptographer.EncryptionStart(plaink.Text, desk.Text.ToUpper(), false);


(3)

private void Button4_Click(object sender, RoutedEventArgs e) {

SmsComposeTask smsComposeTask = new SmsComposeTask(); smsComposeTask.To = buku_telepon.Text;

smsComposeTask.Body = ciphert.Text; smsComposeTask.Show();

}

string data;

private void txtName_GotFocus(object sender, RoutedEventArgs e)

{

TextBox t = sender as TextBox; data = t.Text;

t.Text = string.Empty; }

private void txtName_LostFocus(object sender, RoutedEventArgs e)

{

TextBox t = sender as TextBox; if (t.Text.Equals(string.Empty)) {

t.Text = data; }

}

private void Button1_Click(object sender, RoutedEventArgs e) {

Contacts cons = new Contacts();

cons.SearchCompleted += new

EventHandler<ContactsSearchEventArgs>(Contacts_SearchCompleted);

cons.SearchAsync(String.Empty, FilterKind.None, "Contacts Test #1");

}

void Contacts_SearchCompleted(object sender, ContactsSearchEventArgs e)

{

System.Text.StringBuilder sb = new System.Text.StringBuilder();

foreach (Contact con in e.Results) { sb.AppendLine(con.DisplayName); } MessageBox.Show(sb.ToString()); } } }


(4)

Form Dekrip Pesan : using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Navigation; using Microsoft.Phone.Controls; using Microsoft.Phone.Shell; namespace vigenere_des {

public partial class Page4 : PhoneApplicationPage {

public Page4() {

InitializeComponent(); }

string dekripsiv(string pesan, string kunci) {

int pjgkunci = kunci.Length; int pjgpesan = pesan.Length; string hasil = "";

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

if ((((int)pesan[i] - 32) - (int)kunci[i % (pjgkunci - 1)]) < -63)

{

hasil = hasil + Convert.ToChar((((int)pesan[i] -32) - (int)kunci[i % (pjgkunci)]) + 190);

}

else if ((((int)pesan[i] - 32) - (int)kunci[i % (pjgkunci - 1)]) < 32)

{

hasil = hasil + Convert.ToChar((((int)pesan[i] -32) - (int)kunci[i % (pjgkunci)]) + 95);

} else {

hasil = hasil + Convert.ToChar((((int)pesan[i] -32) - (int)kunci[i % (pjgkunci)]) % 95);

} }

return hasil; }

private void Button3_Click(object sender, RoutedEventArgs e) {

string message = ciphert1.Text; string key = plaink1.Text;


(5)

{

Cryptographer cryptographer = new Cryptographer(Algorithms.DES);

plaink1.Text =

cryptographer.DecryptionStart(cipherk1.Text, desk.Text.ToUpper(), false);

}

private void plaint_TextChanged(object sender, TextChangedEventArgs e)

{ }

string data;

private void txtName_GotFocus(object sender, RoutedEventArgs e)

{

TextBox t = sender as TextBox; data = t.Text;

t.Text = string.Empty; }

private void txtName_LostFocus(object sender, RoutedEventArgs e)

{

TextBox t = sender as TextBox; if (t.Text.Equals(string.Empty)) {

t.Text = data; }

} }

}

Class Algorithms.cs :

using System; using System.Collections.Generic; using System.Text; namespace vigenere_des { class Algorithms {

public static readonly int DES = 0; }


(6)

Class Cryptographer.cs : using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace vigenere_des { class Cryptographer {

CommonProcess cProcess = null;

public Cryptographer(int algorithm_number) {

if (Algorithms.DES == algorithm_number) {

cProcess = new DES.ProcessDES(); }

}

public string EncryptionStart(string text, string key, bool IsBinary)

{

return cProcess.EncryptionStart(text, key, IsBinary); }

public string DecryptionStart(string text, string key, bool IsBinary)

{

return cProcess.DecryptionStart(text, key, IsBinary); }

} }

Class Commonprocess.cs :

using System;

using System.Collections.Generic; using System.Text;

namespace vigenere_des {

abstract class CommonProcess {

public abstract string EncryptionStart(string text, string key, bool IsTextBinary);

public abstract string DecryptionStart(string text, string key, bool IsTextBinary);


(7)

Class DESData.cs : using System; using System.Collections.Generic; using System.Text; namespace vigenere_des.DES {

#region tabel permutasi class DESData

{

public static readonly int[] pc_1 ={ 57, 49, 41, 33, 25, 17, 9, 1, 58, 50,

42, 34, 26, 18, 10, 2, 59, 51, 43, 35,

27, 19, 11, 3, 60, 52, 44, 36, 63, 55,

47, 39, 31, 23, 15, 7, 62, 54, 46, 38,

30, 22, 14, 6, 61, 53, 45, 37, 29, 21,

13, 5, 28, 20, 12, 4 }; public static readonly int[] pc_2 ={ 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21,

10, 23, 19, 12, 4, 26, 8, 16, 7, 27,

20, 13, 2, 41, 52, 31, 37, 47, 55, 30,

40, 51, 45, 33, 48, 44, 49, 39, 56, 34,

53, 46, 42, 50, 36, 29, 32 };

public static readonly int[] ip ={ 58, 50, 42, 34, 26, 18, 10, 2, 60, 52,

44, 36, 28, 20, 12, 4, 62, 54, 46, 38,

30, 22, 14, 6, 64, 56, 48, 40, 32, 24,

16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59,

51, 43, 35, 27, 19, 11, 3, 61, 53, 45,

37, 29, 21, 13, 5, 63, 55, 47, 39, 31,

23, 15, 7 };

public static readonly int[] ip_1 ={ 40, 8, 48, 16, 56, 24, 64, 32, 39, 7,

47, 15, 55, 23, 63, 31, 38, 6, 46, 14,

54, 22, 62, 30, 37, 5, 45, 13, 53, 21,

61, 29, 36, 4, 44, 12, 52, 20, 60, 28,

35, 3, 43, 11, 51, 19, 59, 27, 34, 2,


(8)

42, 10, 50, 18, 58, 26, 33, 1, 41, 9,

49, 17, 57, 25 };

public static readonly int[] pc_e ={ 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8,

9, 10, 11, 12, 13, 12, 13, 14, 15, 16,

17, 16, 17, 18, 19, 20, 21, 20, 21, 22,

23, 24, 25, 24, 25, 26, 27, 28, 29, 28,

29, 30, 31, 32, 1 };

public static readonly int[] pc_p ={ 16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23,

26, 5, 18, 31, 10, 2, 8, 24, 14, 32,

27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25 };

public static readonly int[] nrOfShifts ={ 0, 1, 1, 2, 2, 2, 2, 2, 2, 1,

2, 2, 2, 2, 2, 2, 1 };

public static List<int[,]> sBoxes = new List<int[,]>(); static DESData() { sBoxes.Add(s1); sBoxes.Add(s2); sBoxes.Add(s3); sBoxes.Add(s4); sBoxes.Add(s5); sBoxes.Add(s6); sBoxes.Add(s7); sBoxes.Add(s8); }

public static readonly int[,] s1 ={ { 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7 },

{ 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8 },

{ 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0 },

{ 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 } };

public static readonly int[,] s2 ={ { 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10 },

{ 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5 },

{ 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15 },


(9)

public static readonly int[,] s3 ={ { 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8 },

{ 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1 },

{ 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7 },

{ 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 } };

public static readonly int[,] s4 ={ { 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15 },

{ 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9 },

{ 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4 },

{ 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 } };

public static readonly int[,] s5 ={ { 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9 },

{ 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6 },

{ 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14 },

{ 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3 } };

public static readonly int[,] s6 ={ { 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11 },

{ 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8 },

{ 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6 },

{ 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 } };

public static readonly int[,] s7 ={ { 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 },

{ 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6 },

{ 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2 },

{ 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 } };

public static readonly int[,] s8 ={ { 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7 },

{ 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2 },

{ 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8 },

{ 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 } };

}


(10)

#region pembuatan kelas kunci class Keys

{

public string[] Cn = new string[17]; public string[] Dn = new string[17]; public string[] Kn = new string[16]; }

#endregion }

Class ProcessDES.cs :

using System;

using System.Collections.Generic; using System.Text;

namespace vigenere_des.DES {

class ProcessDES : CommonProcess { public ProcessDES() { }

#region proses enkripsi

public override string EncryptionStart(string text, string key, bool IsTextBinary)

{

#region pengambilan 16 kunci

string binary_key = this.FromTextToBinary(key);

string key_plus = this.DoPermutation(binary_key, DESData.pc_1);

string C0 = "", D0 = "";

C0 = this.SetLeftHalvesKey(key_plus); D0 = this.SetRightHalvesKey(key_plus); Keys keys = this.SetAllKeys(C0, D0); #endregion

#region proses enkripsi string binaryText = ""; if (IsTextBinary == false) {

binaryText = this.FromTextToBinary(text); }


(11)

binaryText = this.setTextMutipleOf64Bits(binaryText);

StringBuilder EncryptedTextBuilder = new StringBuilder(binaryText.Length);

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

string PermutatedText =

this.DoPermutation(binaryText.Substring(i * 64, 64), DESData.ip); string L0 = "", R0 = "";

L0 = this.SetLeftHalvesKey(PermutatedText); R0 = this.SetRightHalvesKey(PermutatedText);

string FinalText = this.FinalEncription(L0, R0, keys, false);

string selesai = BinaryStringToHexString(FinalText); EncryptedTextBuilder.Append(selesai); } return EncryptedTextBuilder.ToString(); #endregion } #endregion

#region proses dekripsi

public override string DecryptionStart(string text, string key, bool IsTextBinary)

{

#region pengambilan 16 kunci

string binary_key = this.FromTextToBinary(key);

string key_plus = this.DoPermutation(binary_key, DESData.pc_1);

string C0 = "", D0 = "";

C0 = this.SetLeftHalvesKey(key_plus); D0 = this.SetRightHalvesKey(key_plus); Keys keys = this.SetAllKeys(C0, D0); #endregion

#region proses dekripsi string binaryText = ""; if (IsTextBinary == false) {

binaryText = this.FromHexToBinary(text); }

else {


(12)

binaryText = text; }

binaryText = this.setTextMutipleOf64Bits(binaryText);

StringBuilder DecryptedTextBuilder = new StringBuilder(binaryText.Length);

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

string PermutatedText =

this.DoPermutation(binaryText.Substring(i * 64, 64), DESData.ip); string L0 = "", R0 = "";

L0 = this.SetLeftHalvesKey(PermutatedText); R0 = this.SetRightHalvesKey(PermutatedText);

string FinalText = this.FinalEncription(L0, R0, keys, true);

string selesai = FromBinaryToText(FinalText); DecryptedTextBuilder.Append(selesai); } return DecryptedTextBuilder.ToString(); #endregion } #endregion

public static string BinaryStringToHexString(string binary) {

StringBuilder result = new StringBuilder(binary.Length / 8 + 1);

int mod4Len = binary.Length % 8; if (mod4Len != 0)

{

binary = binary.PadLeft(((binary.Length / 8) + 1) * 8, '0');

}

for (int i = 0; i < binary.Length; i += 8) {

string eightBits = binary.Substring(i, 8); result.AppendFormat("{0:X2}",

Convert.ToByte(eightBits, 2)); }

return result.ToString(); }

#region mengubah biner menjadi ascii


(13)

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

string word = binarystring.Substring(i * 8, 8); text.Append((char)Convert.ToInt32(word, 2)); } return text.ToString(); } #endregion

#region pembagian teks menjadi 64 bit

public string setTextMutipleOf64Bits(string text) {

if ((text.Length % 64) != 0) {

int maxLength = 0;

maxLength = ((text.Length / 64) + 1) * 64; text = text.PadRight(maxLength, '0'); }

return text; }

#endregion

#region mengubah ASCII menjadi biner

public string FromTextToBinary(string text) {

StringBuilder binarystring = new

StringBuilder(text.Length * 8);

foreach (char word in text) {

int binary = (int)word; int factor = 128;

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

if (binary >= factor) {

binary -= factor;

binarystring.Append("1"); } else { binarystring.Append("0"); }

factor /= 2; }

}

return binarystring.ToString(); }

public static string FromDeciamlToBinary(int binary) {

if (binary < 0) {

Console.WriteLine("It requires a integer greater than 0.");


(14)

}

string binarystring = ""; int factor = 128;

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

if (binary >= factor) {

binary -= factor; binarystring += "1"; }

else {

binarystring += "0"; }

factor /= 2; }

return binarystring; }

public static byte FromBinaryToByte(string binary) {

byte value = 0; int factor = 128;

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

if (binary[i] == '1') {

value += (byte)factor; }

factor /= 2; }

return value; }

#endregion

#region mengubah heksa ke biner

public string FromHexToBinary(string hexstring) {

string binarystring = ""; try

{

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

int hex =

Convert.ToInt32(hexstring[i].ToString(), 16); int factor = 8;


(15)

binarystring += "1"; }

else {

binarystring += "0"; }

factor /= 2; }

} }

catch (Exception e) {

Console.WriteLine(e.Message + " - wrong hexa integer format."); } return binarystring; } #endregion #region perulangan

public string DoPermutation(string text, int[] order) {

StringBuilder PermutatedText = new StringBuilder(order.Length);

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

PermutatedText.Append(text[order[i] - 1]); }

return PermutatedText.ToString(); }

//untuk S box

public string DoPermutation(string text, int[,] order) {

string PermutatedText = "";

int rowIndex = Convert.ToInt32(text[0].ToString() + text[text.Length - 1].ToString(), 2);

int colIndex = Convert.ToInt32(text.Substring(1, 4), 2);

PermutatedText =

ProcessDES.FromDeciamlToBinary(order[rowIndex, colIndex]); return PermutatedText;

} #endregion

#region memecah blok menjadi kiri dan kanan public string SetLeftHalvesKey(string text) {

return this.SetHalvesKey(true, text); }

public string SetRightHalvesKey(string text) {

return this.SetHalvesKey(false, text); }


(16)

public string SetHalvesKey(bool IsLeft, string text) {

if ((text.Length % 8) != 0) {

Console.WriteLine("The key is not multiple of 8bit.");

return null; }

int midindex = (text.Length / 2) - 1; string result = "";

if (IsLeft) {

result = text.Substring(0, midindex + 1); }

else {

result = text.Substring(midindex + 1); }

return result; }

#endregion

#region pergeseran ke kiri

public string LeftShift(string text) {

return this.LeftShift(text, 1); }

public string LeftShift(string text, int count) {

if (count < 1) {

Console.WriteLine("The count of leftshift is must more than 1 time.");

return null; }

string temp = text.Substring(0, count);

StringBuilder shifted = new StringBuilder(text.Length); shifted.Append(text.Substring(count) + temp);

return shifted.ToString(); }

#endregion

#region pengmabilan semua kunci

public Keys SetAllKeys(string C0, string D0) {

Keys keys = new Keys(); keys.Cn[0] = C0;


(17)

keys.Cn[i] = this.LeftShift(keys.Cn[i - 1], DESData.nrOfShifts[i]);

keys.Dn[i] = this.LeftShift(keys.Dn[i - 1], DESData.nrOfShifts[i]);

keys.Kn[i - 1] = this.DoPermutation(keys.Cn[i] + keys.Dn[i], DESData.pc_2); } return keys; } #endregion #region enkripsi

public string FinalEncription(string L0, string R0, Keys keys, bool IsReverse)

{

string Ln = "", Rn = "", Ln_1 = L0, Rn_1 = R0; int i = 0;

if (IsReverse == true) {

i = 15; }

while (this.IsEnough(i, IsReverse)) {

Ln = Rn_1;

Rn = this.XOR(Ln_1, this.f(Rn_1, keys.Kn[i])); Ln_1 = Ln;

Rn_1 = Rn;

if (IsReverse == false) {

i += 1; }

else {

i -= 1; }

}

string R16L16 = Rn + Ln;

string Encripted_Text = this.DoPermutation(R16L16, DESData.ip_1);

return Encripted_Text; }

public bool IsEnough(int i, bool IsReverse) {

return (IsReverse == false) ? i < 16 : i >= 0; }

#endregion

#region fungsi f

public string f(string Rn_1, string Kn) {


(18)

string E_Rn_1 = this.E_Selection(Rn_1); string XOR_Rn_1_Kn = this.XOR(E_Rn_1, Kn);

string sBoxedText = this.sBox_Transform(XOR_Rn_1_Kn); string P_sBoxedText = this.P(sBoxedText);

return P_sBoxedText; }

#endregion

#region fungsi P

public string P(string text) {

string PermutatedText = "";

PermutatedText = this.DoPermutation(text, DESData.pc_p); return PermutatedText;

}

#endregion

#region transformasi s box

public string sBox_Transform(string text) {

StringBuilder TransformedText = new StringBuilder(32); for (int i = 0; i < 8; i++)

{

string temp = text.Substring(i * 6, 6);

TransformedText.Append(this.DoPermutation(temp, DESData.sBoxes[i])); } return TransformedText.ToString(); } #endregion

#region pemilihan E

public string E_Selection(string Rn_1) {

string ExpandedText = this.DoPermutation(Rn_1, DESData.pc_e);

return ExpandedText; }

#endregion #region XOR

public string XOR(string text1, string text2) {

if (text1.Length != text2.Length) {

Console.WriteLine("Two data blocks for XOR are must get same size.");


(19)

StringBuilder XORed_Text = new StringBuilder(text1.Length);

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

if (text1[i] != text2[i]) {

XORed_Text.Append("1"); }

else {

XORed_Text.Append("0"); }

}

return XORed_Text.ToString(); }

#endregion }


(20)

DAFTAR RIWAYAT HIDUP

DATA PRIBADI

Nama Lengkap : Farid Akbar Siregar Jenis Kelamin : Laki-laki

Tempat, Tanggal Lahir : Medan, 4 April 1994

Alamat : Jl. Kapodang II No.361 P.Mandala, Medan

Agama : Islam

E-mail : farid_akbar_usu@yahoo.com

Pendidikan Terakhir : Universitas Sumatera Utara Medan, Fakultas Ilmu Komputer dan Teknologi Informasi Jurusan S1 Ilmu Komputer

PENDIDIKAN FORMAL

2011 – 2016 : S1 Ilmu Komputer Universitas Sumatera Utara, Medan 2008 – 2011 : SMK Telkom Sandhy Putra Medan

2005 – 2008 : MTsN 2 Medan 1999 – 2005 : MIN Sei Agul Medan

PENGALAMAN ORGANISASI DAN KEGIATAN ILMIAH

 Anggota Departemen Wawasan Kontemporer Ikatan Mahasiswa S1 Ilmu Komputer (IMILKOM), 2012-2013

 Ketua Komisi Pengawas KPU IMILKOM, 2013

 Ketua Departemen Wawasan Kontemporer Ikatan Mahasiswa S1 Ilmu Komputer (IMILKOM), 2013-2014


(21)

DAFTAR PUSTAKA

Alvi, M. R. 2011. Perancangan Aplikasi Kriptografi Menggunakan Algoritma TDES. Skripsi. Universitas Sumatera Utara.

Ariyus, D. 2006. Kriptografi, Keamanan Data dan Komunikasi. Graha Ilmu: Yogyakarta

Ariyus, D. 2008. Pengantar Ilmu Kriptografi: Teori, Analisis dan Implementasi.ANDI: Yogyakarta

Harahap, A.A. 2014. Implementasi Sistem Keamanan Data Menggunakan

Steganografi Teknik Pemetaan Titik Hitam dengan Pencarian Sekuensial dan Rabin Cryptosystem. Skripsi. Universitas Sumatera Utara.

Kromodimoeljo, S. 2010. Teori dan Aplikasi Kriptografi. SPK IT Consulting: Jakarta. Mollin, R.A.2007.An Introduction to Cryptography 2nd Ed. Taylor &Francis Group:

LLC. United State of America.

Munir, Rinaldi. 2006. Kriptografi. Informatika: Bandung.

Mushlih, Hijasma. 2012. Pembuatan Aplikasi Kriptosistem Menggunakan Metode Algoritma Vigenere Cipher. Skripsi. Amikom Yogyakarta.

Paar, C. & Pelzl, J. 2010. Understanding Cryptography. Springer-Verlag: Berlin. Prasetyo, G. C. 2014. Implementasi QR Codedan Algoritma Vigenere pada Sistem

Laporan Kehilangan Kendaraan Bermotor. Skripsi. Universitas Sumatera Utara.

Putra, A. A. 2013. Praktis Pembelajaran Windows Phone 8 A-Z. Anna Arthdi Putra: Yogyakarta.

Sadikin, R. 2012. Kriptografi untuk Keamanan Jaringan dan Implementasinya dalam Bahasa Java. Andi Offset: Yogyakarta.

Wandani, H. 2012. Implementasi Sistem Keamanan Data dengan Menggunakan Teknik Steganografi End Of File(EOF) dan Rabin Public Key


(22)

Berisi tentang uraian analisis mengenai proses kerja dari metode Vigenere danData Encryption Standard yang terdiri dari flowchart, pseudocode, Unified Modeling Language(UML) serta perancangan dari aplikasi.

3.1 Analisis Sistem

Analisis sistem bertujuan untuk memecah sistem ke dalam komponen-komponen subsistem yang lebih kecil untuk mengetahui hubungan setiap komponen tersebut dalam mencapai tujuan.

3.1.1 Analisis Masalah

Saat ini keamanan dalam pengiriman pesan rahasia sangatlah rentan oleh pihak ketiga yang ingin mengetahui isi dari pesan tersebut. Masalah utama yang diambil penulis pada penelitian ini adalah munculnya rasa curiga atau ingin tahu dari pihak ketiga terhadap kerahasian sebuah pesan yang disebabkan faktor perubahan ciphertext dan penggunaan menggunakan satu kunci yang tidak aman dalam mengirimkan pesan kepada orang lain.

Oleh karena itu penulis menawarkan solusi berupa sistem yang akan melakukan proses penguncian ciphertextdengan algortima Vigenere serta mengunci cipherkeydengan algoritma DES dalam pengiriman pesan.

3.1.2 Analisis Kebutuhan Sistem

Analisis kebutuhan sistem meliputi analisis kebutuhan fungsional dan non-fungsional. Kebutuhan fungsional mendeskripsikan fungsi-fungsi yang harus dilakukan oleh sebuah sistem untuk mencapai tujuan.


(23)

Sedangkan kebutuhan non-fungsional mendeskripsikan fitur lain seperti karakteristik, batasan sistem, performa, dokumentasi dan yang lainnya agar sistem berjalan sukses.

a. Analisis kebutuhan fungsional sistem

Untuk dapat melakukan pengamanan pesan pada SMS menggunakan Algoritma Vigenere dan Algoritma Data Encryption Standard (DES), kebutuhan fungsional yang harus dipenuhi antara lain sebagai berikut:

1. Fungsi Enkripsi

Pengguna dapat melakukan proses enkripsi pesan dari plaintext menjadi ciphertext dengan memasukkan kunci enkripsi terlebih dahulu.

2. Fungsi Dekripsi

Pengguna Pengguna dapat melakukan proses dekripsi pesan dari ciphertext menjadi plaintext dengan memasukkan kunci yang sama pada saat proses enkripsi.

b. Analisis kebutuhan nonfungsional sistem

Kebutuhan nonfungsional yang harus dipenuhi oleh sistem antara lain sebagai berikut:

1. Performa

Aplikasi yang dibangun dapat menampilkan hasil dari fungsi kriptografi yang dilakukan oleh sistem.

2. Mudah dipelajari dan digunakan

Aplikasi yang dibangun harus sederhana dan user friendly agar mudah digunakan dan dipelajari oleh pengguna.


(24)

3. Dokumentasi

Aplikasi yang akan dibangun memiliki panduan penggunaan aplikasi.

4. Kontrol

Aplikasi yang akan dibangun memiliki pesan error jika pengguna tidak memasukkan data inputtidak lengkap atau salah.

5. Ekonomi

Aplikasi yang dibangun tidak membutuhkan biaya dan perangkat tambahan.

3.1.3 Analisis Pemodelan Sistem

Pemodelan sistem bertujuan untuk menampilkan kebutuhan dari sebuah perangkat lunak. Salah satu jenis pemodelan kebutuhan sistem adalah model berbasis skenario, model ini menggambarkan spesifikasi kebutuhan perangkat lunak dari berbagai sudut pandang aktor di dalam perangkat lunak.

Pemodelan sistem dalam tulisan ini akan ditampilkan dengan flowchart, use case diagram, sequence diagram dan activity diagram.

a. Flowchartsistem

Flowchart merupakan diagram alir dari bagan-bagan tertentu yang memiliki arus penggambaran mengenai langkah-langkah penyelesaian suatu permasalahan. Selain itu, flowchartjuga memiliki fungsi memudahkan proses pengecekan terhadap sistem yang akan dibuat.


(25)

1. Flowchart enkripsi pesan

Gambar 3.1 Proses enkripsi pesan

Pada Gambar 3.1 dapat dilihat proses enkripsi pesan dimulai dengan mengenkripsikan plaintext pesan menggunakan algoritma vigenere dan akan menghasilkan ciphertextpesan. Kemudian kunci vigenere tersebut dienkripsikan dengan menggunakan algoritma DES dan akan menghasilkan chipertext kunci vigenere.


(26)

2. Flowchart dekripsi pesan

Gambar 3.2 Proses dekripsi pesan

Pada Gambar 3.2 dapat dilihat proses dekripsi pesan dimulai dengan mendekripsikan ciphertext kunci vigenere dengan algoritma DES dan akan menghasilkan kunci vigenere. Kemudian ciphertextpesan didekripsikan dengan menggunakan algoritma vigeneredan akan menghasilkan plaintext pesan.


(27)

b. Use casediagram

Use case diagram adalah gambaran skenario penggunaan aplikasi sistem tentang bagaimana cara sistem bekerja dengan pengguna. Use case diagram membutuhkan identifikasi siapakah pengguna yang akan menggunakan sistem tersebut. Pengguna tersebut dinamakan actor. Actor berperan untuk melakukan komunikasi dengan sistem. Hubungan antar actor dengan use case dihubungkan dengan garis lurus. Sedangkan hubungan dimana satu use case digunakan untuk meredudansi use case lainnya digunakan garis putus-putus dengan keterangan include. Untuk extend digunakan untuk mensimplifikasi satu use casedengan use caselainnya.

Gambar 3.3 Use case diagram sistem

Pada gambar 3.3 terdapat actor yang mempunyai peran yaitu sebagai pengirim atau penerima. Actor (pengirim pesan) mengenkripsikan pesan terlebih dahulu dengan algoritma vigeneresetelah plaintextdienkripsikan menjadi ciphertext lalu kunci dari vigeneredienkripsikan dengan algoritma Data Encryption Standard. Kemudian actor (penerima) membutuhkan kunci Data Encryption Standard untuk mendeksripsikan ciphertext kunci vigenere menjadi plaintext kunci vigenere yang digunakan untuk mendeksripsikan pesan yang sebenarnya.


(28)

c. SequenceDiagram

Sequence diagram berfungsi untuk menggambarkan rangkaian pesan yang akan dikirim antara objek yang ada serta interaksi yang terjadi antar objek. Sequence dari sistem yang akan dibangun dapat dilihat pada Gambar 3.4 dan Gambar 3.5.

Gambar 3.4 Sequence diagram enkripsi


(29)

d. Activity diagram

Activity diagram menggambarkan berbagai alur aktivitas yang ada di dalam sistem yang sedang dirancang dan bagaimana masing-masing alur yang ada berawal serta berakhir. Activity diagram juga bertujuan untuk membantu bagaimana memahami proses dan menggambarkan setiap interaksi yang ada antara beberapa use caseyang digunakan. Activity diagram dari sistem yang akan dibangun dapat dilihat pada Gambar 3.6 dan Gambar 3.7.


(30)

Gambar 3.7 Activity diagram dekripsi

3.2 Perancangan Sistem

Perancangan sistem merupakan spesifikasi dari solution berbasis komputer secara detail, disebut juga dengan physical design. Perancangan sistem menekankan pada implementasi sistem secara teknis (Whitten, 2007).

Berawal dari saat spesifikasi kebutuhan perangkat lunak telah dianalisis dan dimodelkan, perancangan perangkat lunak merupakan tindakan rekayasa perangkat lunak yang terakhir di dalam aktivitas pemodelan dan kemudian merupakan landasan yang sangat penting bagi aktivitas konstruksi (penulisan kode) perangkat lunak (Pressman, 2010).


(31)

Perangkat lunak akan dibangun dengan bahasa pemrograman C# (C Sharp) dan menggunakan library .NET sebagai Graphical User Interface-nya. Berikut ini akan dijelaskan prototipe dari perangkat lunak yang akan dibuat.

3.2.1 Prototipe Perancangan Graphical User Interface

Perangkat lunak akan memiliki tiga bagian utama yaitu tampilan utama atau home, tampilan buat pesan, dan tampilan dekripsi pesan. Berikut ini adalah prototipe dari perangkat lunak yang akan dibangun.

a. Tampilan utama

Tampilan utama adalah tampilan awal dari sistem ketika dijalankan. Gambar 3.8 menunjukkan tampilan sementara dari tampilan utama atau home.

Gambar 3.8 Rancangan tampilan utama

b. Tampilan buat pesan

Pada tampilan buat pesan, pengguna dapat melakukan proses enkripsi pesan dan kunci pesan yang akan dikirim ke penerima. Gambar 3.9 menunjukkan tampilan sementara dari tampilan buat pesan.


(32)

Gambar 3.9 Rancangan tampilan buat pesan

Keterangan :

1. Pengguna dapat menginputkan nomor tujuan yang akan dituju. 2. Plainteks, kunci vigenere, dan kunci DES diinputkan oleh pengguna.

3. Button enkrip pesan digunakan untuk mengenkripsi plainteks dengan menggunakan kunci vigeneredan akan ditampilkan pada cipherteks.

4. Button enkrip kunci digunakan untuk mengenkripsi kunci vigenere dengan menggunakan kunci DES dan akan ditampilkan pada cipherkey.

5. Button kirim digunakan untuk mengirim cipherteks ke nomor tujuan.

c. Tampilan dekripsi pesan

Tampilan dekripsi pesan adalah halaman dimana pengguna dapat melakukan proses dekripsi pesan dan dekripsi kunci pesan dari si pengirim. Gambar 3.10 menunjukkan tampilan sementara dari tampilan dekripsi pesan.


(33)

Gambar 3.10 Rancangan tampilan dekripsi pesan

Keterangan :

1. Cipherteks adalah pesan masuk yang sudah dienkripsi oleh si pengirim. 2. Cipherkeydan kunci DES diinputkan oleh pengguna.

3. Button dekrip kunci digunakan untuk mendekripsi cipherkey dengan menggunakan kunci DES dan akan ditampilkan pada kunci vigenere.

4. Button dekrip pesan digunakan untuk mendekripsi cipherteks dengan menggunakan kunci vigeneredan akan ditampilkan pada plainteks.


(34)

Pada tahap ini dilakukan pembuatan sistem sesuai dengan analisis dan perancangan dan kemudian melakukan pengujian sistem.

4.1 Implementasi Sistem

Sistem dibangun dengan bahasa pemrograman C# dengan .NET sebagai libraryuntuk menyajikan Graphical User Interface terhadap user. Program ini terdiri 5 tampilan yaitu tampilan utama, tampilan buat pesan, tampilan dekrip pesan, tampilan bantuan, dan tampilan tentang.

4.1.1. Tampilan Utama

Tampilan utama atau home merupakan tampilan yang pertama kali muncul apabila sistem dibuka. Pada tampilan ini, terdapat limabutton yang memiliki fungsi masing-masing pada sistem. Tampilan utama dapat dilihat pada Gambar 4.1.


(35)

4.1.2. Tampilan Buat Pesan

Tampilan pesan baru digunakan untuk membuat pesan dari plaintext ke ciphertext yang kemudian pesan tersebut dikirim melalui jaringan seluler. Pada form ini pengguna dapat menginputkan nomor handphonetujuan dengan menginputkan secara langsung. Tampilan buat pesan dapat dilihat pada Gambar 4.2.

Gambar 4.2 Tampilan buat pesan

4.1.3. Tampilan Dekripsi Pesan

Tampilan dekripsi pesan digunakan untuk mendekripsikan pesan rahasia yang masuk ke perangkat seluler dengan menggunakan kunci yang sudah disepakati oleh pengirim dan pengguna dalam mengembalikan ciphertextke plaintext. Tampilan dekripsi pesan dapat dilihat pada Gambar 4.3.


(36)

Gambar 4.3 Tampilan dekripsi pesan

4.1.4. Tampilan Bantuan

Tampilan bantuan merupakan tampilan yang berisi panduan dalam menggunakan sistem ini. Tampilan bantuan dapat dilihat pada Gambar 4.4.


(37)

4.1.5. Tampilan Tentang

Tampilan tentang merupakan tampilan yang berisi info singkat dari penulis. Tampilan tentang dapat dilihat pada Gambar 4.5.

Gambar 4.5 Tampilan tentang

4.2 Pengujian Sistem

Pengujian sistem dilakukan untuk melihat keberhasilan dan ketepatan sistem dalam proses enkripsi-dekripsi pesan menggunakan algoritma vigenere dan proses enkripsi-dekripsi kunci menggunakan algoritma DES, serta untuk mengetahui pengaruh panjang plaintextterhadap lama proses enkripsi dan dekripsi pesan. Pada pengujian ini dimisalkan plaintext= farid akbar, kunci vigenere= komputer, kunci DES = likaliku.

4.2.1. Skenario Enkripsi Pesan Dengan Algoritma Vigenere

Misalkan plaintextadalah “farid akbar” dan kunci vigenereadalah “komputer”. Proses enkripsi pesan dengan algoritma vigenereditampilkan pada Tabel 4.1.

Tabel 4.1 Enkripsi vigenere

Pt Key PASCII KeyASCII CASCII= ((PASCII+ KeyASCII) mod 95)+32 Ct

F k 102 107 51 3

A o 97 111 50 2


(38)

I p 105 112 59 ;

D u 100 117 59 ;

(space) t 32 116 85 U

A e 97 101 40 (

K r 107 114 63 ?

B k 98 107 47 /

A o 97 111 50 2

R m 114 109 65 A

Dari proses enkripsi didapat ciphertext= “32A;;U(?/2A”.

4.2.2. Skenario Enkripsi Pesan Dengan Algoritma DES

Pada skenario ini dimisalkan plaintext yang merupakan kunci vigenere yaitu “komputer”, dan kunci DES adalah “likaliku”. Sebelum melakukan proses enkripsi, ubah plaintextdan kunci DES kedalam bentuk biner.

Plaintext: Key:

k = 01101011 l = 01101100

o = 01101111 i = 01101001

m = 01101101 k = 01101011

p = 01110000 a = 01100001

u = 01110101 l = 01101100

t = 01110100 i = 01101001

e = 01100101 k = 01101011

r = 01110010 u = 01110101

a. Initial permutation key

Generate kunci yang akan digunakan untuk mengenkripsi plaintext dengan menggunakan tabel 4.2, pada langkah ini terjadi kompresi dengan membuang 1 bit masing-masing blok kunci dari 64 bit menjadi 56 bit.


(39)

Tabel 4.2 Tabel PC-1

57 49 41 33 25 17 9 1 58 50 42 33 26 18

10 2 59 51 43 35 27 19 11 3 60 52 44 36

63 55 47 39 31 23 15 7 62 54 46 38 30 22

14 6 61 53 45 37 29 21 13 5 28 20 12 4

Sehingga k+ = 00000000111111111111111110000100010010010001011101110000

b. Splitting key

Bagi k+ menjadi dua bagian yaitu C0dan D0yang masing-masing berjumlah 28 bit.

k+ = 00000000111111111111111110000100010010010001011101110000 C0 = 0000000011111111111111111000

D0 = 0100010010010001011101110000

c. Membuat 16subkeymenggunakanshifting

Buat 16 pasang Cn dan Dn untuk 1 <= n <= 16. Setiap Cn dan Dn diciptakan dari

pasangan sebelumnya Cn-1dan Dn-1untuk 1 <= n <= 16 melalui sejumlah "pergeseran

ke kiri" dari blok bit sebelumnya. Untuk melakukan pergeseran ke kiri dilakukan dengan bergerak setiap bit dari blok data satu tempat ke kiri dengan bit pertama pergi ke ujung blok. Proses pembuatan Cn dan Dnditampilkan pada Tabel 4.3.

Tabel 4.3 Pembuatan Cndan Dn

Literasi ke- Banyaknya pergeseran Subkey

C0: 0000000011111111111111111000

D0: 0100010010010001011101110000

1 1 C1: 0000000111111111111111110000

D1: 1000100100100010111011100000

2 1 C2: 0000001111111111111111100000

D2: 0001001001000101110111000001

3 2 C3: 0000111111111111111110000000

D3: 0100100100010111011100000100

4 2 C4: 0011111111111111111000000000


(40)

5 2 C5: 1111111111111111100000000000 D5: 1001000101110111000001000100

6 2 C6: 1111111111111110000000000011

D6: 0100010111011100000100010010

7 2 C7: 1111111111111000000000001111

D7: 0001011101110000010001001001

8 2 C8: 1111111111100000000000111111

D8: 0101110111000001000100100100

9 1 C9: 1111111111000000000001111111

D9: 1011101110000010001001001000

10 2 C10: 1111111100000000000111111111

D10: 1110111000001000100100100010

11 2 C11: 1111110000000000011111111111

D11: 1011100000100010010010001011

12 2 C12: 1111000000000001111111111111

D12: 1110000010001001001000101110

13 2 C13: 1100000000000111111111111111

D13: 1000001000100100100010111011

14 2 C14: 0000000000011111111111111111

D14: 0000100010010010001011101110

15 2 C15: 0000000001111111111111111100

D15: 0010001001001000101110111000

16 1 C16: 0000000011111111111111111000

D16: 0100010010010001011101110000

d. Final permutation key

Sebelum melakukan permutasi akhir, gabungkan terlebih dahulu masing-masing pasangan data. Setelah itugenerate setiap blok bit CnDn untuk 1 <= n <= 16 dengan


(41)

Tabel 4.4. Tabel PC-2

14 7 11 24 1 5 3 28 15 6 21 10

23 19 12 4 26 8 16 7 27 20 13 2

41 52 31 37 47 55 30 40 51 45 33 48

44 49 39 56 34 53 46 42 50 36 29 32

Sehingga

K1 = 111100 001011 111001 100110 000010 001110 011000 101110

K2 = 111000 001011 111001 110110 000000 000101 110100 111001

K3 = 111001 001111 011001 110110 000010 110011 100000 110100

K4 = 111001 101101 011101 110010 111000 010100 100110 110000

K5 = 111011 101101 001101 110011 000000 010000 101000 011111

K6 = 101011 111101 001101 011011 110101 110001 000010 010100

K7 = 001011 110101 001111 011011 000000 010000 001111 101101

K8 = 001111 110101 100111 011001 000100 101011 100010 000101

K9 = 000111 110101 100111 011001 001110 000010 000001 001111

K10 = 000111 110110 100111 011101 101001 101111 000010 000010

K11 = 000111 110110 110110 001101 001001 000010 011101 100011

K12 = 010110 110010 110110 101101 101111 101000 100001 000010

K13 = 110110 011010 110010 101101 010001 001100 011101 010010

K14 = 110100 011010 111010 101110 000111 011010 010001 001000

K15 = 111100 001011 111010 100110 111010 001101 010001 000000

K16 = 111100 001011 111000 100110 010110 111001 100010 101000

e. Initial permutation plaintext

Permutasi awal IP dari plaintext M adalah langkah pertama dari enkripsi pesan. Generate plaintextdengan menggunakan tabel 4.5.


(42)

Tabel 4.5 Tabel IP

58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4

62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8

57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3

61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7

Sehingga,

IP = 1111111110111000011101100101011100000000111111110000011110000011

f. Splitting IP

Bagi IP menjadi dua bagian yaitu L0dan R0yang masing-masing berjumlah 32 bit.

IP = 1111111110111000011101100101011100000000111111110000011110000011 L0= 11111111 10111000 01110110 01010111

R0= 00000000 11111111 00000111 10000011

g. Iterasi

Lakukan 16 kali iterasi untuk 1 <= n <= 16 dihitung: Ln= Rn-1

Rn= Ln-1⊕?(Rn-1, Kn)

Fungsi ? beroperasi pada dua blok data yaitu Rn-1dan Knyang akan menghasilkan 32

bit blok data. Proses perhitungan fungsi ? terdiri dari 4 langkah: 1. E permutasi

2. XOR dengan subkey 3. Transformasi S box 4. P permutasi

1. E permutasi

Perluas blok Rn-1 dari 32 bit menjadi 48 bit dengan cara generate Rn-1 dengan

menggunakan tabel 4.6.


(43)

Tabel 4.6. Fungsi Ekspansi

32 1 2 3 4 5 4 5 6 7 8 9

8 9 10 11 12 13 12 13 14 15 16 17

16 17 18 19 20 21 20 21 22 23 24 25

24 25 26 27 28 29 28 29 30 31 32 1

Sehingga,

E(R0) = 100000 000001 011111 111110 100000 001111 110000 000110

2. XOR dengan subkey

XOR E(Rn-1) dengan Knkunci. Pada iterasi pertama itu adalah K1⊕E(R0).

K1 = 111100 001011 111001 100110 000010 001110 011000 101110

E(R0) = 100000 000001 011111 111110 100000 001111 110000 000110

K1⊕ E(R0) = 011100 001010 100110 011000 100010 000001 101000 101000

3. Transformasi S box

Pecah 48 bit dari K1⊕ E(R0) menjadi 8 kelompok yang berisi 6 bit. Setelah itu

lakukan transformasi dengan menggunakan S boxsehingga 8 kelompok yang berisi 6 bit akan digantikan dengan 8 kelompok 4 bit.

Cara melakukan transformasi : bit pertama dan bit terakhir dari kelompok 6 bit akan membentuk bilangan biner dalam range desimal 0 sampai 3 yang mewakili dari nomor baris dari tabel S1 box. 4 bit ditengah dari kelompok 6 bit akan membentuk bilangan biner dalam range desimal 0 sampai 15 yang mewaliki dari nomor kolom dari tabel S1 box. Kedua kordinat baris dan kolom tersebut akan menunjuk kepada angka desimal dalam bentuk biner 4 bit. Lakukan berulang kepada 8 kelompok 6 bit terhadap 8 S boxsehingga mengeluarkan output 8 kelompok 4 bit. Tabel S box dapat dilihat pada Tabel 4.7, 4.8, 4.9, 4.10, 4.11, 4.12, 4.13, dan 4.14.


(44)

Tabel 4.7. S box 1

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7

1 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8

2 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0

3 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13

Tabel 4.8. S box 2

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10

1 3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5

2 0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15

3 13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9

Tabel 4.9. S box 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8

1 13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1

2 13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7

3 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12

Tabel 4.10. S box 4

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15

1 13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9


(45)

Tabel 4.11. S box 5

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9

1 14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 15

2 4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14

3 11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3

Tabel 4.12. S box 6

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11

1 10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8

2 9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6

3 4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13

Tabel 4.13. S box 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1

1 13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6

2 1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2

3 6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12

Tabel 4.14. S box 8

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7

1 1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2

2 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8


(46)

Sehingga,

K1 ⊕ E(R0) = B1B2B3B4B5B6B7B8=

011100 001010 100110 011000 100010 000001 101000 101000

S(B1)S(B2)S(B3)S(B4)S(B5)S(B6)S(B7)S(B8) =

0000 1011 1001 1011 0010 1010 1100 1001

4. P permutasi

Langkah terakhir dari perulangan adalah generatedengan menggunakan tabel 4.15. S(B1)S(B2)S(B3)S(B4)S(B5)S(B6)S(B7)S(B8) =

0000 1011 1001 1011 0010 1010 1100 1001

Tabel 4.15. Permutasi P

16 7 20 21 29 12 28 17 1 15 23 26 5 8 31 10

2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25

Sehingga,

? = P[S(B1)S(B2)S(B3)S(B4)S(B5)S(B6)S(B7)S(B8)] =

1101 1100 0111 1000 0100 1001 1100 0001

jadi pada perulangan pertama didapat :

L0 = 1111 1111 1011 1000 0111 0110 0101 0111

?(R0,K1) = 1101 1100 0111 1000 0100 1001 1100 0001

R1= L0 ⊕ ?(R0,K1) = 0010 0011 1100 0000 0011 1111 1001 0110

dan

L1= R0 = 0000 0000 1111 1111 0000 0111 1000 0011

setelah 16 kali perulangan akan didapat L16dan R16:

L16= 0001 1000 0001 0000 0110 1101 1111 1101


(47)

h. Reverse

Balikkan urutan kedua blok kemudian gabungkan. L16= 0001 1000 0001 0000 0110 1101 1111 1101

R16= 1101 0010 1110 1110 0001 1100 1011 1111

R16L16=

11010010 11101110 00011100 10111111 00011000 00010000 01101101 11111101

i. IP-1permutation

Generatedengan menggunakan tabel 4.16 untuk mendapatkan hasil akhir ciphertext. R16L16=

11010010 11101110 00011100 10111111 00011000 00010000 01101101 11111101 Tabel 4.16. Permutasi Akhir

40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31

38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29

36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27

34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25

Sehingga,

IP-1 = 1001011110111111100111101100001110111011100010110101110011110001 dan menghasilkan ciphertext(dalam heksadesimal) = “97BF9EC3BB8B5CF1”.

4.2.3. Skenario Dekripsi Pesan Dengan Algoritma DES

DES menggunakan algoritma yang sama untuk proses enkripsi dan dekripsi. Jika pada proses enkripsi urutan kunci internal yang digunakan adalah K1, K2, ..., K16, maka

pada proses dekripsi urutan kunci yang digunakan adalah K16, K15, ..., K1untuk setiap

putaran. Dari proses enkripsi didapat ciphertext dalam bentuk heksa yaitu “97BF9EC3BB8B5CF1” dan kunci DES adalah “likaliku". Sebelum melakukan proses dekripsi, ubah ciphertextdan kunci DES kedalam bentuk biner.

M = 1001011110111111100111101100001110111011100010110101110011110001 k = 0110110001101001011010110110000101101100011010010110101101110101


(48)

a. 16 rounds keys

Urutan kunci pada proses dekripsi merupakan kebalikan dari urutan kunci pada proses enkripsi. 16 kunci untuk proses dekripsi ditampikan pada Tabel 4.17.

Tabel 4.17. 16 kunci dekripsi

KiEnkripsi KiDekripsi

K1

111100 001011 111001 100110 000010 001110 011000 101110

111100 001011 111000 100110 010110 111001 100010 101000

K2

111000 001011 111001 110110 000000 000101 110100 111001

111100 001011 111010 100110 111010 001101 010001 000000

K3

111001 001111 011001 110110 000010 110011 100000 110100

110100 011010 111010 101110 000111 011010 010001 001000

K4

111001 101101 011101 110010 111000 010100 100110 110000

110110 011010 110010 101101 010001 001100 011101 010010

K5

111011 101101 001101 110011 000000 010000 101000 011111

010110 110010 110110 101101 101111 101000 100001 000010

K6

101011 111101 001101 011011 110101 110001 000010 010100

000111 110110 110110 001101 001001 000010 011101 100011

K7

001011 110101 001111 011011 000000 010000 001111 101101

000111 110110 100111 011101 101001 101111 000010 000010

K8

001111 110101 100111 011001 000100 101011 100010 000101

000111 110101 100111 011001 001110 000010 000001 001111

K9

000111 110101 100111 011001 001110 000010 000001 001111

001111 110101 100111 011001 000100 101011 100010 000101

K10

000111 110110 100111 011101 101001 101111 000010 000010

001011 110101 001111 011011 000000 010000 001111 101101

K11

000111 110110 110110 001101 001001 000010 011101 100011

101011 111101 001101 011011 110101 110001 000010 010100

K12

010110 110010 110110 101101 101111 101000 100001 000010

111011 101101 001101 110011 000000 010000 101000 011111


(49)

K14

110100 011010 111010 101110 000111 011010 010001 001000

111001 001111 011001 110110 000010 110011 100000 110100

K15

111100 001011 111010 100110 111010 001101 010001 000000

111000 001011 111001 110110 000000 000101 110100 111001

K16

111100 001011 111000 100110 010110 111001 100010 101000

111100 001011 111001 100110 000010 001110 011000 101110

b. Initial permutation ciphertext

Generate plaintextdengan menggunakan tabel 4.5.

M = 0000101101010001000111111001111111100111000110110101101001010011 Sehingga,

IP = 1101001011101110000111001011111100011000000100000110110111111101

c. Splitting IP

Bagi IP menjadi dua bagian yaitu L0dan R0yang masing-masing berjumlah 32 bit.

IP = 1101001011101110000111001011111100011000000100000110110111111101 L0= 11010010 11101110 00011100 10111111

R0= 00011000 00010000 01101101 11111101

d. Iterasi

Lakukan 16 kali iterasi untuk 1 <= n <= 16 dihitung: Ln= Rn-1

Rn= Ln-1⊕?(Rn-1, Kn)

Sama seperti enkripsi, proses perhitungan fungsi ? terdiri dari 4 langkah: 1. E permutasi

2. XOR dengan subkey 3. Transformasi S box 4. P permutasi

setelah 16 kali perulangan akan didapat L16dan R16:

L16= 00000000 11111111 00000111 10000011


(50)

e. Reverse

Balikkan urutan kedua blok kemudian gabungkan. L16= 00000000 11111111 00000111 10000011

R16 = 11111111 10111000 01110110 01010111

R16L16=

1111111110111000011101100101011100000000111111110000011110000011

f. IP-1permutation

Generatedengan menggunakan tabel 4.16 untuk mendapatkan hasil akhir plaintext. R16L16=

1111111110111000011101100101011100000000111111110000011110000011 Sehingga,

IP-1 = 0110101101101111011011010111000001110101011101000110010101110010 dan menghasilkan plaintext (dalam bentuk heksadesimal) = “6b6f6d7075746572” yang bila dikonversi menjadi bentuk ASCII = “komputer”.

4.2.4. Skenario Dekripsi Pesan Dengan Algoritma Vigenere

Dari proses enkripsi didapat ciphertext yaitu “32A;;U(?/2A” dan kunci vigenere adalah “komputer”. Proses dekripsi pesan dengan algortima vigenere ditampilkan pada Tabel 4.18.

Tabel 4.18 Dekripsi vigenere

Ct Key CASCII KeyASCII PASCII= ((CASCII - 32) - KeyASCII) mod 95 Pt

3 k 51 107 102 F

2 o 50 111 97 A

A m 65 109 114 R

; p 59 112 105 I

; u 59 117 100 D

U t 85 116 32 (space)


(51)

2 o 50 111 97 A

A m 65 109 114 R

Dari proses dekripsi didapat plaintextyang merupakan pesan asli yaitu “farid akbar”.

4.2.5. Pengujian Enkripsi Dan Dekripsi Pesan a. Pengujian enkripsi pesan

Pengujian ini dilakukan untuk mengetahui pengaruh panjang plaintext terhadap lama proses enkripsi pesan dengan menggunakan panjang kunci yang tetap dalam proses enkripsi algoritma vigenere.

Tabel 4.19 Pengujian enkripsi dengan variasi panjang plaintext No. Panjang Plaintext (karakter) Waktu (milliseconds)

1 14 0.1272

2 23 0.1617

3 42 0.2471

4 81 0.2771

5 160 0.3637

Berdasarkan Tabel 4.19 dapat dilihat grafik yang terdapat pada Gambar 4.6 yaitu lama waktu dalam melakukan proses enkripsi pesan dengan lima contoh panjang plaintextyang berbeda.

Gambar 4.6 Grafik pengujian enkripsi pesan

0 0.1 0.2 0.3 0.4 0.5

0 50 100 150 200

W a k tu ( m il li s e c o n d )

Panjang plaintext (karakter)

Waktu Enkripsi


(52)

b. Pengujian dekripsi pesan

Pengujian ini dilakukan untuk mengetahui pengaruh panjang ciphertext terhadap lama proses dekripsi pesan dengan menggunakan panjang kunci yang tetap dalam proses dekripsi algoritma vigenere.

Tabel 4.20 Pengujian dekripsi dengan variasi panjang ciphertext No. Panjang Ciphertext (karakter) Waktu (milliseconds)

1 14 0.1518

2 23 0.1728

3 42 0.2684

4 81 0.3440

5 160 0.3961

Berdasarkan Tabel 4.20 dapat dilihat grafik yang terdapat pada Gambar 4.7 yaitu lama waktu dalam melakukan proses dekripsi pesan dengan lima contoh panjang ciphertextyang berbeda.

Gambar 4.7 Grafik pengujian dekripsi pesan

0 0.1 0.2 0.3 0.4 0.5

0 50 100 150 200

W

a

k

tu

(

m

il

li

s

e

c

o

n

d

)

Panjang ciphertext (karakter)

Waktu Dekripsi


(53)

Tabel 4.21 Perbandingan waktu enkripsi dan dekripsi pesan No. Panjang pesan

(karakter)

Waktu enkripsi (milliseconds)

Waktu dekripsi (milliseconds)

1 14 0.1272 0.1518

2 23 0.1617 0.1728

3 42 0.2471 0.2684

4 81 0.2771 0.3440

5 160 0.3637 0.3961

Gambar 4.8 Grafik perbandingan enkripsi dan dekripsi pesan

Berdasarkan tabel 4.21 dan grafik pada gambar 4.8, dapat diinformasikan bahwa jumlah proses waktu enkripsi dan dekripsi berbeda. Sistem memerlukan waktu yang lebih lama untuk melakukan proses dekripsi pesan daripada melakukan proses enkripsi pesan tersebut.

0 0.1 0.2 0.3 0.4 0.5

0 50 100 150 200

W a k tu ( m il li s e c o n d )

Panjang ciphertext (karakter)

Wakt u Dekripsi Wakt u Enkripsi


(54)

BAB V

KESIMPULAN DAN SARAN

5.1 Kesimpulan

Berdasarkan pembahasan dan hasil dari penelitian, maka diperoleh beberapa kesimpulan sebagai berikut:

1. Algoritma Vigenere berfungsi untuk mengamankan informasi pesan yang akan dienkripsi sementara algoritma Data Encrytption Standard berfungsi untuk mengamankan kunci dari pesan yang telah dienkripsi..

2. Jumlah karakter dari pesan setelah dienkripsi berjumlah sama dengan pesan awal sebelum dienkripsi.

3. Semakin panjang jumlah karakter pesan maka semakin lama waktu yang dibutuhkan untuk mengenkripsi pesan.

5.2 Saran

Adapun saran-saran yang dapat dipertimbangkan untuk mengembangkan penelitian ini lebih lanjut adalah sebagai berikut:

1. Pesan yang dienkripsi dan didekripsi berupa aplikasi chat, email, ataupun media sosial.

2. Meperhitungkan keamanan pesan dalam server tersebut. 3. Pesan yang dirahasiakan merupakan pesan suara. 4. Panjang kunci DES dapat lebih dari 8 karakter.


(55)

Bab II ini berisi tentang pembahasan teori-teori tentang kriptografi, algoritma VigeneredanData Encrytpion Standard.

2.1. Kriptografi

Kata Cryptography berasal dari bahasa Yunani yang terdiri dari dua kata yaitu kryptos yang berarti rahasia dan graphein yang berarti tulisan (Mollin,2007).

Kriptografi adalah ilmu mengenai tekhnik enkripsi dimana data diacak menggunakan suatu kunci enkripsi menjadi sesuatu yang sulit dibaca oleh seseorang yang tidak memiliki kunci dekripsi (Kromodimoeljo, 2010).

2.1.1. Terminologi

Ketika seorang pengirim ingin mengirimkan suatu pesan kepada si penerima, dimana si pengirim ingin pesan yang disampaikannya tidak dapat dibaca oleh orang lain yang ingin melakukan penyadapan. Dalam kriptografi pesan asli biasa disebut plaintext dan pesan yang disamarkan disebut ciphertext. Proses menyamarkan pesan sedemikian rupa untuk menyembunyikan substansinya disebut enkripsi. Sebuah pesan yang dienkripsi disebut ciphertext. Proses untuk mengubah ciphertextkembali ke plaintextadalah dekripsi (Mollin,2007).

Pada standar ISO 7498-2 menggunakan istilah encipher untuk proses enkripsi dan decipher untuk proses dekripsi. Skema rangkaian proses enkripsi dan dekripsi ditunjukkan secara umum pada Gambar 2.1.

Seni dan ilmu untuk menjaga keamanan pesan disebut kriptografi dan pelakunya adalah kriptografer. Kriptanalis adalah yang melakukan kriptanalisis, yaitu seni dan ilmu untuk memecahkan pesan tersembunyi (ciphertext). Cabang


(56)

matematika yang meliputi kriptografi dan kriptanalisis adalah kriptologi dan praktisinya disebut kriptologis (Munir, 2006).

Gambar 2.1. Skema Proses enkripsi dan dekripsi (Schneier, 1996)

2.1.2. Komponen Kriptografi

Dalam kriptografi terdapat beberapa istilah penting antara lain : 1. Pesan, Plaintext, dan Ciphertext

Pesan merupakan data atau informasi yang dapat dibaca dan dimengerti maknanya. Nama lain untuk pesan adalah plaintext. Pesan dapat berupa data atau informasi yang dikirim atau yang disimpan dalam media penyimpanan. Pesan yang tersimpan bisa berbentuk teks, citra (image), suara/bunyi (audio) dan video. Agar pesan tidak dapat dimengerti maknanya oleh pihak lain maka, pesan dapat disandikan ke bentuk lain yang tidak dapat dipahami. Bentuk pesan yang tersandi disebut ciphertext.

2. Pengirim dan Penerima

Komunikasi data melibatkan pertukaran pesan antara dua entitas. Pengirim (sender) adalah entitas yang mengirim pesan kepada entitasnya yang lain. Penerima (receiver) adalah entitas yang menerima pesan. Entitas di sini dapat berupa orang, mesin (komputer), kartu kredit, dan sebagainya.

3. Enkripsi dan Dekripsi

Proses menyandikan pesan asli (plaintext) menjadi pesan tersandi (ciphertext) disebut enkripsi (encryption) sedangkan proses untuk mengembalikan pesan tersandi (ciphertext) menjadi plaintextsemula dinamakan dekripsi (decryption).

4. Cipher dan Kunci

Enkripsi Dekripsi


(57)

Keamanan algoritma kriptografi sering diukur dari banyaknya kerja (work) yang dibutuhkan untuk memecahkan ciphertext menjadi plaintext tanpa mengetahui kunci yang digunakan. Kunci (key) merupakan parameter yang digunakan untuk transformasi enciphering dan deciphering. Kunci biasanya berupa string atau deretan bilangan.

5. Sistem kriptografi

Kriptografi membentuk sebuah sistem yang dinamakan sistem kriptografi. Sistem kriptografi (cryptosystem) terdiri dari algoritma kriptografi, semua plaintext dan ciphertextyang mungkin dan kunci.

6. Penyadap (eavesdropper)

Penyadap merupakan orang yang mencoba menangkap pesan selama ditransmisikan. Tujuan penyadap adalah untuk mendapatkan informasi sebanyak-banyaknya mengenai sistem kriptogafi yang digunakan untuk berkomunikasi dengan maksud untuk memecahkan ciphertext. Nama lain penyadap : enemy, adversary, intruder, interceptor, bad guy.

7. Kriptanalisis

Kriptografi berkembang sedemikian rupa sehingga melahirkan bidang yang berlawanan yaitu kriptanalisis (Munir, 2006). kriptanalisis (cryptanalysis) adalah ilmu dan seni untuk memecahkan ciphertextmenjadi plaintexttanpa mengetahui kunci yang digunakan. Pelakunya disebut kriptanalis.

2.1.3. Tujuan Kriptografi

Kriptografi bertujuan untuk memberikan layanan keamanan (Paar & Pelzl, 2010) sebagai berikut:

1. Kerahasian (Confidentiality)

Informasi dirahasiakan dari semua pihak yang tidak berwenang. 2. Keutuhan Data (Integrity)

Pesan tidak berubah dalam proses pengiriman hingga pesan diterima oleh penerima.


(58)

3. Autentikasi (Anthentication)

Kepastian terhadap identitas setiap entitas yang terlibat dan keaslian sumber data. 4. Nirpenyangkalan

Setiap entitas yang berkomunikasi tidak dapat menolak atau menyangkal atas data yang telah dikirim atau diterima.

2.2. Jenis-Jenis Algoritma Kriptografi

Algoritma Kriptografi dibagi tiga berdasarkan kunci yang dipakai, yaitu algoritma simetri (menggunakan satu kunci untuk proses enkripsi dan dekripsi), algoritma asimetri (menggunakan kunci yang berbeda untuk proses enkripsi dan dekripsi), dan fungsi hash(Ariyus, 2008).

Karakteristik kriptografi dibagi dua berdasarkan tipe operasi yang dipakai untuk enkripsi dan dekripsi (teknik substitusi dan teknik permutasi) serta berdasarkan tipe pengolahan pesan (block cipherdan stream cipher) (Sadikin, 2012).

2.2.1. Algoritma Simetris

Algoritma simetris adalah algoritma yang menggunakan kunci enkripsi yang sama dengan kunci dekripsinya (Wandani, 2012). Bila mengirim pesan dengan algoritma ini, si penerima pesan harus diberitahu kunci dari pesan tersebut agar bisa mendekripsikan pesan yang dikirim. Keamanan dari pesan yang menggunakan algoritma ini tergantung pada kunci.

Jika kunci tersebut diketahui oleh orang lain maka orang tersebut dapat melakukan enkripsi dan dekripsi pada pesan (Sadikin, 2012). Yang termasuk algoritma kunci simetris adalah OTP, DES, RC2, RC4, RC5, IDEA, Twofish, Magenta, FEAL, SAFER, LOKI, CAST, Rijndael (AES), Blowfish, GOST, A5, Kasumidan lain-lainnya. Skema kriptografi simetris dapat dilihat pada Gambar 2.2.


(59)

Gambar 2.2. Skema kriptografi simetris

2.2.2. Algoritma Asimetris

Algoritma asimetris disebut juga dengan kriptografi kunci publik karena algortima ini memiliki kunci yang berbeda untuk enkripsi dan dekripsi, dimana enkripsi menggunakan public keydan untuk dekripsinya menggunakan private key. Public key dan private key harus saling berpasangan secara matematis. Dengan memberikan public key, pembuat kunci berhak memberikan dan mendapatkan public key agar pesan aman dan hanya bisa dibaca oleh si pembuat kunci. Dalam kriptografi kunci asimetri, hampir semua algoritma kriptografinya menggunakan konsep kunci publik, seperti Rivest-Shamir-Adleman (RSA), El-Gamal, Rabin dan sebagainya (Harahap, 2014). Kecuali algoritma Pohlig˗Hellman karena kunci enkripsi maupun kunci dekripsinya bersifat rahasia. Skema kriptografi asimetris dapat dilihat pada Gambar 2.3.

Gambar 2.3. Kriptografi asimetris (Wandani, 2012)

2.3. Sandi Vigenere

Sandi vigenere merupakan bagian dari kriptografi. kriptografi adalah kajian mengenai teknik matematika yang digunakan untuk keamanan informasi. Sandi vigenere menurut Bruen & Forcinito (2011) adalah sebuah sandi klasik yang memiliki konsep yang relatif sederhana dan banyak digunakan sampai sekarang. Ide dari sandi vigenere ini adalah sandi caesaryang dimodifikasi. Jika sandi caesarmenggunakan kata kunci sandi tunggal, sedangkan sandi vigenere menggunakan kata kunci yang diulang sebanyak yang diperlukan dengan panjang pesan. Huruf yang akan disandikan di

Algorit m a Enkripsi

Algorit ma Dekripsi Kunci Rahasia


(60)

sesuaikan dengan angka, a = 0, b = 1, c = 2, …, z = 25. Kemudian tambahkan angka kata kunci dan angka pesan. Lalu hasilnya dimodulukan dengan 26, dan hasilnya yang berupa angka tersebut dirubah ke dalam huruf untuk mendapatkan huruf yang tersandi. Sandi vigenere merupakan sebuah algoritma kriptografi klasik, algoritma ini tergolong algoritma dasar karena menggunakan algoritma berbasis karakter (Mushlih, 2012).

2.3.1. Cara Kerja Sandi Vigenere

Gambar 2.4 digunakan untuk menyandikan sebuah pesan. Setiap huruf yang disandikan dengan menggunakan baris yang berbeda, sesuai dengan kata kunci yang diulang-ulang.

Contoh :

Pesan = S E R A T U S R I B U Kata kunci = J A L A N

Kata kunci harus diulang sampai jumlah huruf sama dekan pesan. Jumlah huruf pada pesan ada 11 huruf sedangkan kata kunci ada 5 huruf. Kata kunci menjadi “ J A L A N J A L A N J ” sesuai dengan banyaknya huruf pesan.

Huruf pertama pada pesan di sandikan dengan huruf pertama kata kunci, dan begitu seterusnya. Huruf pertama pada contoh adalah “S” dan huruf pertama pada kata kunci “J” disandikan/enkripsi menjadi huruf “B”. (Lihat Gambar 2.4.)

Pesan = S E R A T U S R I B U Kata kunci = J A L A N J A L A N J Pesan tersandi = B E C A G D S C I O D


(61)

Gambar 2.4. Contoh gambar tabel vigenere

Untuk proses deskripsi atau mengembalikan sama seperti di atas. Huruf pertama pesan tersandi, disandikan dengan huruf pertama kata kunci, dan begitu seterusnya.

Pesan tersandi = B E C A G D S C I O D Kata kunci = J A L A N J A L A N J Pesan = S E R A T U S R I B U

Sandi vigenere dapat ditulis secara matematis, seperti dengan penjelasan vigeneredi atas yang menggunakan penjumlahan dan modulus yaitu:


(62)

rumus enkripsi

Ci = ( Pi + Ki ) mod 26 ... (2.1)

rumus deskripsi

Pi = ( Ci – Ki ) mod 26 ... (2.2) Keterangan

Ci = nilai desimal (a=0) karakter tersandi ke-i Pi = nilai desimal karakter pesan ke-i

Ki = nilai desimal karakter kata kunci ke-i Contoh :

menggunakan kasus di atas dengan menggunakan Rumus Enkripsi dimana Pi = S dan Ki = J

Ci = ( Pi + Ki ) mod 26 Ci = ( S + J ) mod 26 Ci = ( 18 + 9 ) mod 26 Ci = 27 mod 26 Ci = 1 = B

Sedangkan Rumus Dekripsi Pi = ( Ci – Ki ) mod 26 Pi = ( B – J ) mod 26 Pi = ( 1 – 9 ) mod 26 Pi = -8 mod 26 Pi = 18 = S

2.3.2. Sandi Vigenere Dengan 95 Karakter

Sandi vigenere dengan 95 karakter merupakan pengembangan dari kriptografi vigenere yang asli dengan menambahkan beberapa karakter yang terdapat pada tabel ASCII sehingga berjumlah 95 karakter yang sebelumnya berjumlah 26 karakter. Penambahan karakter ini, berguna untuk mempersulit pemecahan sandi dan untuk memudahkan di aplikasi ke bahasa pemrograman komputer (Prasetyo, 2014). Pada Tabel 2.1 dapat dilihat karakter ASCII yang digunakan pada sistem.


(63)

Tabel 2.1. Karakter ASCII yang digunakan

Desimal Karakter Desimal Karakter Desimal Karakter

32 Spasi 64 @ 96 `

33 ! 65 A 97 a

34 “ 66 B 98 b

35 # 67 C 99 c

36 $ 68 D 100 d

37 % 69 E 101 e

38 & 70 F 102 f

39 ‘ 71 G 103 g

40 ( 72 H 104 h

41 ) 73 I 105 i

42 * 74 J 106 j

43 + 75 K 107 k

44 , 76 L 108 l

45 - 77 M 109 m

46 . 78 N 110 n

47 / 79 O 111 o

48 0 80 P 112 p

49 1 81 Q 113 q

50 2 82 R 114 r

51 3 83 S 115 s

52 4 84 T 116 t

53 5 85 U 117 u

54 6 86 V 118 v

55 7 87 W 119 w

56 8 88 X 120 x

57 9 89 Y 121 y

58 : 90 Z 122 z

59 ; 91 [ 123 {

60 < 92 \ 124 |

61 = 93 ] 125 }

62 > 94 ^ 126 ~

63 ? 95 _

2.4. Data Encryption Standard (DES)

Data Encryption Standarddikembangkan pada awal 1970an. Pada tahun 1972, NBS (National Bureau of Standard) yang merupakan badan pemberian standart Amerika Serikat mengidentifikasikan sebuah kebutuhan untuk memberikan standart pemerintah tentang pengenkripsian informasi sensitive yang belum terklasifikasi. Pada 15 Mei 1973, setelah NBS berkonsultasi dengan NSA, NBS mengajukan proposal untuk sebuah cipher yang memenuhi kriteria yang diinginkan. Pada pengajuan proposal yang pertama ini, NBS tidak menemukan cipher yang memenuhi kriteria. Pada 27


(64)

Agustus 1974 pengajuan yang ke dua diserahkan. Kali ini, IBM mencalonkan cipher Lucifer yang dikembangkan oleh Horst Feistel, Walter Tuchman, Don Coppersmith, Alam Konheim, Carl Meyer, Mike Matyas, Roy Adler, Edna Grossman, Bill Notz, Lynn Smith dan Bryan Tuckerman. Penamaan Lucifer diambil berdasarkan nama Lucifer yang merupakan salah satu Demon. Demonpada hal ini berarti Demonstration (Ariyus, 2006).

Metode DES termasuk ke dalam sistem kriptografi simetri dan tergolong jenis cipher block. DES dirancang untuk melakukan encipherdan decipherdata yang berisi 56-bit di bawah kendali 56-bit kunci internal atau upa-kunci. Dalam melakukan decipher harus dilakukan dengan menggunakan kunci yang sama dengan saat proses encipher tetapi saat melakukan decipher pemberian alaman berubah sehingga proses decipher merupakan kebalikan dari proses encipher. Sejumlah data yang akan di encipherdisebut sebagai permutasi awal atau initial permutation(IP). Komputasi key-dependentdidefenisikan sebagai fungsi f cipherdan fungsi KS sebagai key schedule. Dekripsi dari komputasi diberikan pertama bersama dengan detail bagaimana algoritma digunakan dalan proses encipher. Selanjutnya penggunaan algoritma untuk proses decipher dideskripsikan. Pada akhirnya, sebuah defenisi cipher fungsi f diberikan dalam bentuk fungsi primitif yang disebut fungsi seleksi Si dan fungsi

permutasi P (Alvi, 2011).

2.4.1. Skema Global DES

Pada awalnya, blok plaintext dipermutasikan dengan matriks permutasi awal (initial permutation atau IP). Hasil dari permutasi awal tersebut kemudian di encipher sebanyak 16 kali atau 16 putaran. Setiap putarannya menggunakan kunci internal yang berbeda. Hasil dari proses encipher kembali dipermutasi dengan matriks permutasi balikan (invers initial permutation atau IP-1) menjadi block ciphertext. Skema global dari DES dapat dilihat pada Gambar 2.5 dan skema enkripsi dari DES dapat dilihat pada Gambar 2.6.


(65)

Gambar 2.5. Skema global data encryption standard

Dalam proses encipher, blok plaintext terbagi menjadi dua bagian yaitu bagian kiri (L) dan bagian kanan (R), yang masing-masing memiliki panjang 32-bit. Pada setiap putaran i, blok R merupakan masukan untuk fungsi tranformasi f. Pada fungsi f, blok R dikombinasikan dengan kunci internal Ki. Keluaran dari fungsi ini di XOR kan

dengan blok L yang langsung diambil dari blok R sebelumnya. Ini merupakan 1 putaran DES. Secara matematis, satu putaran DES dinyatakan sebagai berikut:

Li= Ri - 1 ... (2.3)

Ri= Li - 1 XOR f (Ri – 1, Ki) ... (2.4)


(66)

2.4.2. Permutasi Awal (Initial Permutation)

Sebelum putaran pertama, terhadap blok plaintext dilakukan permutasi awal (initial permutation atau IP). Tujuan permutasi awal adalah mengacak plaintext sehingga urutan bit-bit didalamnya berubah. Pengacakan dilakukan dengan menggunakan matriks permutasi seperti pada Tabel 2.2.

Tabel 2.2. Permutasi awal (initial pemutation)

29 21 42 34 26 18 10 2 60 52 44 36 28 20 12 4

62 54 46 38 30 22 14 6 64 56 48 55 30 24 16 8

57 49 41 33 25 17 9 32 59 51 43 35 27 19 11 3

61 53 45 37 58 50 13 5 63 1 47 39 31 23 15 7

Cara membaca Tabel 2.2. dua entry ujung kiri atas (29 dan 21) berarti: “pindahkan bit ke-29 ke posisi bit 1”

“pindahkan bit ke-21 ke posisi bit 2”

2.4.3. Pembangkit Kunci Internal

Kunci internal dibutuhkan sebanyak 16 buah karena ada 16 putaran. Kunci tersebut yaitu K1, K2, ..., K16. Kunci-kunci internal ini dapat dibangkitkan dari kunci eksternal

yang diberikan oleh pengguna. Kunci ekternal panjangnya 64-bit atau 8 karakter. Misalkan kunci ekternal yang disusun dari 64-bit adalah K.

Kunci eksternal ini menjadi masukkan untuk permutasi dengan menggunakan matrik permutasi kompresi PC-1 seperti pada Tabel 2.3.

Tabel 2.3. Matrik permutasi kompresi

57 49 41 33 25 17 9 1 58 50 42 33 26 18

10 2 59 51 43 35 27 19 11 3 60 52 44 36

63 55 47 39 31 23 15 7 62 54 46 38 30 22

14 6 61 53 45 37 29 21 13 5 28 20 12 4

Dalam permutasi ini, tiap bit ke delapan (parity bit) dari delapan byte kunci diabaikan. Hasil permutasinya adalah sepanjang 56-bit, sehingga dapat dikatakan panjang kunci DES adalah 56-bit. Selanjutnya, 56-bit ini dibagi menjadi 2 (dua) bagian, kiri dan kanan, yang masing-masing disimpan di dalam C0dan D0:


(67)

C0: berisi bit-bit dari K pada posisi

57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36

D0: berisi bit-bit dari K pada posisi

63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4

Selanjutnya, ke dua bagian digeser ke kiri (left shift) sepanjang 1 (satu) atau 2(dua) bit tergantung pada setiap putaran. Operasi bergeser bersifat wripping atau round shift.

Misalkan (Ci, Di) menyatakan penggabungan Cidan Di. (Ci+1, Di+1) diperoleh

dengan menggeser Ci dan Di satu atau dua bit.

Setelah pergeseran bit, (Ci , Di) mengalami permutasi kompresi dengan

menggunakan matriks PC-2, seperti pada Tabel 2.4.

Tabel 2.4. Permutasi kompresi 2

14 7 11 24 1 5 3 28 15 6 21 10

23 19 12 4 26 8 16 7 27 20 13 2

41 52 31 37 47 55 30 40 51 45 33 48

44 49 39 56 34 53 46 42 50 36 29 32

Dengan permutasi ini, kunci internal Kiditurunkan dari (Ci, Di) yang dalam hal

ini Kimerupakan penggabungan bit-bit Cipada posisi:

14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2 Dengan bit-bit Dipada posisi:

41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32

Jadi, setiap kunci internal Ki mempunyai panjang 48-bit. Proses pembangkitan Ki tersebut dapat dilihat pada Gambar 2.7.


(68)

Gambar 2.7. Proses pembangkitan kunci-kunci internal DES

2.4.4. Proses Enkripsi

Proses enciphering terhadap blok plaintext dilakukan setelah permutasi awal. Setiap blok plaintext mengalami 16 kali putaran enciphering. Setiap putaran enciphering merupakan jaringan Feistel yang secara matematis dinyatakan seperti rumus 2.3 dan rumus 2.4.


(1)

vii

IMPLEMENTATION OF COMBINATION VIGENERE ALGORITHM AND DATA ENCRYPTION STANDARD (DES) ALGORITHM

IN SHORT MESSAGE SERVICE (SMS) APPLICATION WINDOWS PHONE-BASED

ABSTRACT

The continued development of technology, the security of the message is very important to be maintained. There are techniques that are used to maintain the confidentiality of message, namely cryptography where the message disguised as a password. In this research, the author of combining two symmetric algorithms to secure messages to be sent. Vigenere Cipher algorithm used for securing data message text and Data Encyption Standard algorithm to secure key from a message that has been encrypted. Key form will be turned into hexadecimal when encrypted and will return to normal after decrypted. The average time encryption for 0,00367 milliseconds, while the average time decryption for 0,00416 milliseconds.


(2)

Halaman Persetujuan ii Pernyataan iii Penghargaan iv Abstrak vi Abstract vii

Daftar Isi viii

Daftar Tabel x

Daftar Gambar xi

Daftar Lampiran xii

Bab I Pendahuluan

1.1 Latar Belakang 1

1.2 Rumusan Masalah 3

1.3 Batasan Masalah 3

1.4 Tujuan Penelitian 4

1.5 Manfaat Penelitian 4

1.6 Metode Penelitian 4

1.7 Sistematika Penulisan 5

Bab II Landasan Teori

2.1 Kriptografi 7

2.1.1 Terminologi 7

2.1.2 Komponen Kriptografi 8

2.1.3 Tujuan Kriptografi 9

2.2 Jenis-Jenis Algoritma Kriptografi 10

2.2.1 Algoritma Simetris 10

2.2.2 Algoritma Asimetris 11

2.3 Sandi Vigenere 11

2.3.1 Cara Kerja Sandi Vigenere 12

2.3.2 Sandi Vigeneredengan 95 Karakter 14

2.4 Data Encryption Standard(DES) 15

2.4.1 Skema Global DES 16

2.4.2 Permutasi Awal (Initial Permutation) 18

2.4.3 Pembangkit Kunci Internal 18

2.4.4 Proses Enkripsi 20

2.4.5 Permutasi Akhir (Invers Initial Permutation) 22

2.4.6 Proses Dekripsi 23

2.5Windows Phone 23

2.6 Penelitian yang Relevan 24


(3)

ix

Bab 3 Analisis dan Perancangan Sistem

3.1 Analisis Sistem 25

3.1.1 Analisis Masalah 25

3.1.2 Analisis Kebutuhan Sistem 25

3.1.3 Analisis Permodalan Sistem 27

3.2 Perancangan Sistem 33

3.2.1 Prototipe Perancangan Graphical User Interface 34 Bab 4 Implementasi dan Pengujian

4.1 Implementasi Sistem 37

4.1.1 Tampilan Utama 37

4.1.2 Tampilan Buat Pesan 38

4.1.3 Tampilan Dekripsi Pesan 38

4.1.4 Tampilan Bantuan 39

4.1.5 Tampilan Tentang 40

4.2 Pengujian Sitem 40

4.2.1 Skenario Enkripsi Pesan Dengan Algoritma Vigenere 40 4.2.2 Skenario Enkripsi Pesan Dengan Algoritma DES 41 4.2.3 Skenario Dekripsi Pesan Dengan Algoritma DES 50 4.2.4 Skenario Dekripsi Pesan Dengan Algoritma Vigenere 53 4.2.5 Pengujian Enkripsi Dan Dekripsi Pesan 54 Bab 5 Kesimpulan dan Saran

5.1 Kesimpulan 57

5.2.Saran 57


(4)

DAFTAR TABEL

Nomor

Tabel Nama Tabel Halaman

2.1 Karakter ASCII yang digunakan 15

2.2 Permutasi awal (initial pemutation) 18

2.3 Matrik permutasi kompresi 18

2.4 Permutasi kompresi 2 19

2.5 Fungsi ekspansi 21

2.6 Matriks permutasi P 22

2.7 Matrik permutasi akhir 23

4.1 Enkripsi vigenere 40

4.2 Tabel PC-1 42

4.3 Pembuatan Cndan Dn 42

4.4 Tabel PC-2 44

4.5 Tabel IP 45

4.6 Fungsi ekspansi 46

4.7 S box 1 47

4.8 S box 2 47

4.9 S box 3 47

4.10 S box 4 47

4.11 S box 5 48

4.12 S box 6 48

4.13 S box 7 48

4.14 S box 8 48

4.15 Permutasi P 49

4.16 Permutasi akhir 50

4.17 16 kunci dekripsi 51

4.18 Dekripsi vigenere 53

4.19 Pengujian enkripsi dengan variasi panjang plaintext 54 4.20 Pengujian dekripsi dengan variasi panjang ciphertext 55 4.21 Perbandingan waktu enkripsi dan dekripsi pesan 56


(5)

xi

DAFTAR GAMBAR

Nomor

Gambar Nama Gambar Halaman

2.1 Skema proses enkripsi dan dekripsi 8

2.2 Skema kriptografi simetris 11

2.3 Kriptografi asimetris 11

2.4 Contoh gambar tabel Vigenere 13

2.5 Skema global data encryption standard 17

2.6 Algoritma enkripsi dengan DES 17

2.7 Proses pembangkitan kunci-kunci internal DES 20

2.8 Rincian komputasi fungsi ? 21

2.9 Skema perolehan Ri 22

3.1 Proses enkripsi pesan 28

3.2 Proses dekripsi pesan 29

3.3 Use casediagram sistem 30

3.4 Sequence diagram enkripsi 31

3.5 Sequence diagram dekripsi 31

3.6 Activity diagram enkripsi 32

3.7 Activity diagram dekripsi 33

3.8 Rancangan tampilan utama 34

3.9 Rancangan tampilan buat pesan 35

3.10 Rancangan tampilan dekripsi pesan 36

4.1 Tampilan utama 37

4.2 Tampilan buat pesan 38

4.3 Tampilan dekripsi pesan 39

4.4 Tampilan bantuan 39

4.5 Tampilan tentang 40

4.6 Grafik pengujian enkripsi pesan 54

4.7 Grafik pengujian dekripsi pesan 55


(6)

DAFTAR LAMPIRAN

Halaman

Lampiran 1 Listing Program 59

Lampiran 2 Daftar Riwayat Hidup (Curriculum Vitae) 78


Dokumen yang terkait

Implementasi Algoritma Affine Cipher dan Algoritma Advanced Encryption Standard (AES) pada Aplikasi Short Message Service (SMS) Berbasis Android

6 135 102

Implementasi Algoritma Vernam Cipher dan Algoritma DES (Data Encryption Standard) pada Aplikasi Chatting Berbasis Android

2 9 85

Implementasi Kombinasi Algoritma Vigenere dan Algoritma Data Encryption Standard (DES) pada Aplikasi Short Message Service (SMS) Berbasis Windows Phone

0 0 13

Implementasi Kombinasi Algoritma Vigenere dan Algoritma Data Encryption Standard (DES) pada Aplikasi Short Message Service (SMS) Berbasis Windows Phone

0 0 6

Implementasi Kombinasi Algoritma Vigenere dan Algoritma Data Encryption Standard (DES) pada Aplikasi Short Message Service (SMS) Berbasis Windows Phone

0 0 18

Implementasi Kombinasi Algoritma Vigenere dan Algoritma Data Encryption Standard (DES) pada Aplikasi Short Message Service (SMS) Berbasis Windows Phone

0 1 1

Implementasi Kombinasi Algoritma Vigenere dan Algoritma Data Encryption Standard (DES) pada Aplikasi Short Message Service (SMS) Berbasis Windows Phone

0 0 20

Analisis Perbandingan Algoritma Advanced Encryption Standard Untuk Enkripsi Short Message Service (SMS) Pada Android

0 2 9

Implementasi Algoritma Affine Cipher dan Algoritma Advanced Encryption Standard (AES) pada Aplikasi Short Message Service (SMS) Berbasis Android

0 1 22

BAB II TINJAUAN PUSTAKA - Implementasi Algoritma Affine Cipher dan Algoritma Advanced Encryption Standard (AES) pada Aplikasi Short Message Service (SMS) Berbasis Android

0 0 18