Implementasi Super Enkripsi Algoritma Elgamal Dengan Teknik Transposisi Segitiga

(1)

LISTING PROGRAM

1. Listing Program untuk Mainform

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Infragistics.Win.AppStyling.StyleManager.Load("MyStyleSet3.isl") Timer1.Start()

End Sub

Private Sub UltraToolbarsManager1_ToolClick(ByVal sender As System.Object, ByVal e As Infragistics.Win.UltraWinToolbars.ToolClickEventArgs) Handles UltraToolbarsManager1.ToolClick If (e.Tool.Key = "Encryption") Then

Dim ctrl As New EncryptControl

UltraPanel1.ClientArea.Controls.Clear() UltraPanel1.ClientArea.Controls.Add(ctrl) UltraStatusBar1.Panels(0).Text = e.Tool.Key ElseIf (e.Tool.Key = "Decryption") Then Dim ctrl As New DecryptControl UltraPanel1.ClientArea.Controls.Clear() UltraPanel1.ClientArea.Controls.Add(ctrl) UltraStatusBar1.Panels(0).Text = e.Tool.Key ElseIf (e.Tool.Key = "Help") Then

System.Diagnostics.Process.Start(Application.StartupPath & "\HelpSystem.chm") ElseIf (e.Tool.Key = "About") Then

Dim ctrl As New AboutForm ctrl.ShowDialog()

UltraStatusBar1.Panels(0).Text = e.Tool.Key ElseIf (e.Tool.Key = "Light") Then

Infragistics.Win.AppStyling.StyleManager.Load("MyStyleSet2.isl") ElseIf (e.Tool.Key = "Dark") Then

Infragistics.Win.AppStyling.StyleManager.Load("MyStyleSet.isl") ElseIf (e.Tool.Key = "Purple") Then

Infragistics.Win.AppStyling.StyleManager.Load("MyStyleSet3.isl") ElseIf (e.Tool.Key = "Exit") Then

Me.Close() End If End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

UltraStatusBar1.Panels(1).Text = Date.Now.ToString("dddd, d-MMMM-yyyy hh:mm:ss tt") End Sub

Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing


(2)

If (MessageBox.Show("Exit Application?", "Exit?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.No) Then

e.Cancel = True Else

Dim frm = Application.OpenForms("SplashScreen") frm.Close()

End If End Sub End Class

2. Listing Program untuk Form Encrypt

Imports System.Numerics Imports System.IO

Imports Infragistics.Win.UltraWinGrid Imports System.Diagnostics

Public Class EncryptControl

Private isLarge As Boolean = False

Private Sub txtPlaintext_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtPlaintext.ValueChanged

lblChar.Text = ": " & txtPlaintext.TextLength & " Char" End Sub

Private Function checkKey() As Boolean Dim retValue As Boolean = True

For Each ctrl In UltraGroupBox3.Controls If TypeName(ctrl) = "UltraTextEditor" Then If ctrl.Text = "" Then

retValue = False End If

End If Next

Return retValue End Function

Private Sub btnEncrypt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEncrypt.Click

If (txtPlaintext.Text = "") Then

MessageBox.Show("Input your Plaintext!", "Encrypt Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

txtPlaintext.Focus() Exit Sub

ElseIf (Not checkKey()) Then

MessageBox.Show("Your Key is missing!", "Encrypt Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

txtPrime.Focus() Exit Sub


(3)

End If

Dim EncryptTime As Stopwatch = New Stopwatch() Dim time As String = ""

EncryptTime.Start() ciphertext = ""

Dim trans As Transpose = New Transpose

txtTransCipher.Text = trans.TransposeEncrypt(txtPlaintext.Text) TriGrid.DataSource = trans.getTriangle()

TriGrid.DisplayLayout.Override.DefaultColWidth = 25

TriGrid.DisplayLayout.Override.HeaderClickAction = HeaderClickAction.Select TriGrid.DisplayLayout.Override.SelectTypeCol = SelectType.None

TriGrid.DisplayLayout.Override.CellClickAction = CellClickAction.RowSelect txtCiphertext.Text = Elgamal.Encrypt(txtTransCipher.Text)

EncryptTime.Stop()

If EncryptTime.ElapsedMilliseconds < 1000 Then

time = EncryptTime.ElapsedMilliseconds.ToString & " miliseconds" ElseIf EncryptTime.ElapsedMilliseconds < 60000 Then

time = Math.Round((EncryptTime.ElapsedMilliseconds / 1000), 3).ToString & " seconds" Else

time = Math.Round((EncryptTime.ElapsedMilliseconds / 60000), 3).ToString & " minutes" End If

lblTimeEncrypt.Text = "Time to Encrypt File : " & time End Sub

Private Sub btnGetPrime_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetPrime.Click

txtPrime.Text = Elgamal.getPrime(optBit.Value).ToString() End Sub

Private Sub btnGenerate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGenerate.Click

If txtPrime.Text = "" Then

MessageBox.Show("Choose Prime Number First", "Generate Key", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

txtPrime.Focus() Exit Sub

End If

Dim GenerateTime As Stopwatch = New Stopwatch() GenerateTime.Start()

Elgamal.GenerateKey(BigInteger.Parse(txtPrime.Text)) If Elgamal.isInputPrime = True Then

txtAlpha.Text = alpha txtA.Text = a

txtAlphaA.Text = alphaA Else

txtAlpha.Text = "" txtA.Text = ""


(4)

txtAlphaA.Text = "" txtPrime.Focus() End If

GenerateTime.Stop() Dim time As String = ""

If GenerateTime.ElapsedMilliseconds < 1000 Then

time = GenerateTime.ElapsedMilliseconds.ToString & " miliseconds" ElseIf GenerateTime.ElapsedMilliseconds < 60000 Then

time = Math.Round((GenerateTime.ElapsedMilliseconds / 1000), 3).ToString & " seconds" Else

time = Math.Round((GenerateTime.ElapsedMilliseconds / 60000), 3).ToString & " minutes" End If

lblTimeGenerate.Text = "Time to Generate Key : " & time End Sub

Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click

Dim open As OpenFileDialog = New OpenFileDialog() open.Filter = "txt Files|*.txt"

open.FileName = "*.txt"

If (open.ShowDialog() = DialogResult.OK) Then

Dim fstream As FileStream = New FileStream(open.FileName, FileMode.Open, FileAccess.ReadWrite)

Dim sreader As StreamReader = New StreamReader(fstream) sreader.BaseStream.Seek(0, SeekOrigin.Begin)

txtPlaintext.Text = sreader.ReadToEnd() sreader.Close()

lblFilename.Text = ": " & Path.GetFileName(open.FileName) lblLocation.Text = ": " & Path.GetFullPath(open.FileName) End If

End Sub

Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click

Dim saveFileDialog1 As SaveFileDialog = New SaveFileDialog saveFileDialog1.Filter = "txt files |*.txt|All files |*.*"

saveFileDialog1.Title = "Save File" saveFileDialog1.FileName = "*.txt"

If (saveFileDialog1.ShowDialog() = DialogResult.OK) Then Dim filename As String = saveFileDialog1.FileName

Dim fstream As FileStream = New FileStream(filename, FileMode.OpenOrCreate) Dim sw As StreamWriter = New StreamWriter(fstream)

Dim seekorigin As SeekOrigin = New SeekOrigin() sw.BaseStream.Seek(0, seekorigin)

sw.WriteLine(txtCiphertext.Text) sw.Flush()

sw.Close() End If


(5)

End Sub

Private Sub TriGrid_MouseHover(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TriGrid.MouseHover

If TriGrid.Dock = DockStyle.None Then

ToolTip1.Show("Double Click to Enlarge", Me.TriGrid, 1000) Else

ToolTip1.Hide(Me.TriGrid) End If

End Sub

Private Sub TriGrid_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TriGrid.DoubleClick

If TriGrid.Dock = DockStyle.Fill Then isLarge = False

UltraGroupBox4.Dock = DockStyle.None TriGrid.Dock = DockStyle.None

Else

isLarge = True

UltraGroupBox4.Dock = DockStyle.Fill TriGrid.Dock = DockStyle.Fill

UltraGroupBox4.BringToFront() TriGrid.BringToFront() EscSplash.Show() ToolTip1.Hide(Me.TriGrid) End If End Sub

Private Sub TriGrid_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TriGrid.KeyDown

If e.KeyCode = Keys.Escape Then isLarge = False

UltraGroupBox4.Dock = DockStyle.None TriGrid.Dock = DockStyle.None

End If End Sub

Private Sub TriGrid_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TriGrid.MouseLeave

isLarge = True End Sub

Private Sub EncryptControl_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

primeNumber = 0 alpha = 0

a = 0 b = 0 alphaA = 0 plaintext = 0 ciphertext = 0


(6)

End Sub

Private Sub txtPrime_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtPrime.ValueChanged

If txtPrime.Text <> "" Then primeNumber = txtPrime.Text End If

End Sub End Class

3. Listing Program untuk Form Decrypt

Imports System.Numerics Imports System.IO

Imports Infragistics.Win.UltraWinGrid Public Class DecryptControl

Private isLarge As Boolean = False

Private Sub btnDecrypt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDecrypt.Click

If (txtCiphertext.Text = "") Then

MessageBox.Show("Input your Ciphertext", "", MessageBoxButtons.OK, MessageBoxIcon.Warning)

txtCiphertext.Focus() Exit Sub

End If

If (txtPrime.Text = "") Then

MessageBox.Show("Prime number is missing", "", MessageBoxButtons.OK, MessageBoxIcon.Warning)

txtPrime.Focus() Exit Sub

End If

If (txtA.Text = "") Then

MessageBox.Show("Private Key is missing", "", MessageBoxButtons.OK, MessageBoxIcon.Warning)

txtA.Focus() Exit Sub End If

If (Not (Elgamal.Fermat(primeNumber))) Then

MessageBox.Show("Number is not Prime", "", MessageBoxButtons.OK, MessageBoxIcon.Warning)

txtPrime.Focus() Exit Sub

End If


(7)

Dim time As String = "" EncryptTime.Start()

txtPlaintext.Text = Elgamal.Decrypt(txtCiphertext.Text) Dim trans As Transpose = New Transpose

txtTransPlain.Text = trans.TransposeDecrypt(txtPlaintext.Text) TriGrid.DataSource = trans.getTriangle()

TriGrid.DisplayLayout.Override.DefaultColWidth = 25

TriGrid.DisplayLayout.Override.HeaderClickAction = HeaderClickAction.Select TriGrid.DisplayLayout.Override.SelectTypeCol = SelectType.None

TriGrid.DisplayLayout.Override.CellClickAction = CellClickAction.RowSelect EncryptTime.Stop()

If EncryptTime.ElapsedMilliseconds < 1000 Then

time = EncryptTime.ElapsedMilliseconds.ToString & " miliseconds" ElseIf EncryptTime.ElapsedMilliseconds < 60000 Then

time = Math.Round((EncryptTime.ElapsedMilliseconds / 1000), 3).ToString & " seconds" Else

time = Math.Round((EncryptTime.ElapsedMilliseconds / 60000), 3).ToString & " minutes" End If

lblTimeDecrypt.Text = "Time to Decrypt File : " & time End Sub

Private Sub txtPrime_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtPrime.ValueChanged

If (txtPrime.Text <> "") Then

primeNumber = BigInteger.Parse(txtPrime.Text) End If

End Sub

Private Sub txtA_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtA.ValueChanged

If txtA.Text <> "" Then

a = BigInteger.Parse(txtA.Text) End If

End Sub

Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click

Dim saveFileDialog1 As SaveFileDialog = New SaveFileDialog saveFileDialog1.Filter = "txt files |*.txt|All files |*.*"

saveFileDialog1.Title = "Save File" saveFileDialog1.FileName = "*.txt"

If (saveFileDialog1.ShowDialog() = DialogResult.OK) Then Dim filename As String = saveFileDialog1.FileName

Dim fstream As FileStream = New FileStream(filename, FileMode.OpenOrCreate) Dim sw As StreamWriter = New StreamWriter(fstream)


(8)

sw.BaseStream.Seek(0, seekorigin) sw.WriteLine(txtTransPlain.Text) sw.Flush() sw.Close() End If End Sub

Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click

Dim open As OpenFileDialog = New OpenFileDialog() open.Filter = "txt Files|*.txt"

open.FileName = "*.txt"

If (open.ShowDialog() = DialogResult.OK) Then

Dim fstream As FileStream = New FileStream(open.FileName, FileMode.Open, FileAccess.ReadWrite)

Dim sreader As StreamReader = New StreamReader(fstream) sreader.BaseStream.Seek(0, SeekOrigin.Begin)

txtCiphertext.Text = sreader.ReadToEnd() sreader.Close()

lblFilename.Text = ": " & Path.GetFileName(open.FileName) lblLocation.Text = ": " & Path.GetFullPath(open.FileName) End If

End Sub

Private Sub txtCiphertext_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtCiphertext.ValueChanged

lblChar.Text = ": " & txtCiphertext.Text.Split(" ").Length - 1 & " Char" End Sub

Private Sub TriGrid_MouseHover(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TriGrid.MouseHover

If TriGrid.Dock = DockStyle.None Then

ToolTip1.Show("Double Click to Enlarge", Me.TriGrid, 1000) Else

ToolTip1.Hide(Me.TriGrid) End If

End Sub

Private Sub TriGrid_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TriGrid.DoubleClick

If TriGrid.Dock = DockStyle.Fill Then isLarge = False

UltraGroupBox4.Dock = DockStyle.None TriGrid.Dock = DockStyle.None

Else

isLarge = True

UltraGroupBox4.Dock = DockStyle.Fill TriGrid.Dock = DockStyle.Fill

UltraGroupBox4.BringToFront() TriGrid.BringToFront()


(9)

ToolTip1.Hide(Me.TriGrid) End If

End Sub

Private Sub TriGrid_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TriGrid.KeyDown

If e.KeyCode = Keys.Escape Then isLarge = False

UltraGroupBox4.Dock = DockStyle.None TriGrid.Dock = DockStyle.None

End If End Sub

Private Sub DecryptControl_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseLeave

isLarge = True End Sub

Private Sub DecryptControl_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

alpha = 0 b = 0 alphaA = 0 plaintext = 0 ciphertext = 0

txtPrime.Text = primeNumber.ToString() txtA.Text = a.ToString()

End Sub End Class

4. Listing Program untuk Class ElGamal

Imports System.Numerics Imports System.IO Public Class Elgamal

Public Shared isInputPrime As Boolean

Private Shared primitiveRoots As New ArrayList Dim r As BigInteger()

Private Shared Rnd As Random = New Random() Private Shared primitiveRootsTotal As Integer Private Shared KeyLimit As Integer

Public Shared Function Fermat(ByVal prime As BigInteger) As Boolean Dim a As BigInteger = 0

For i = 0 To prime.ToString().Length a = Random(prime)

If (Not (BigInteger.ModPow(a, prime - 1, prime).IsOne)) Then Return False


(10)

End If Next Return True End Function

Public Shared Function Random(ByVal prime As BigInteger) As BigInteger Dim bigVal As BigInteger

Dim limit As Integer = Rnd.Next(2, prime.ToString().Length) Do

Dim strVal As String = ""

If (prime.ToString().Length = 1) Then For i = 0 To prime.ToString().Length - 1 Dim val = Rnd.Next(2, 10)

strVal += val.ToString() Next

bigVal = BigInteger.Parse(strVal) Else

Dim val As Integer For i = 0 To limit - 1 If (i = 0) Then

val = Rnd.Next(0, Convert.ToInt32(prime.ToString().Substring(0, 1))) strVal += val.ToString()

Else

val = Rnd.Next(0, 10) strVal += val.ToString() End If

Next

bigVal = BigInteger.Parse(strVal) End If

Loop While (bigVal < 2 Or bigVal >= prime) Return bigVal

End Function

Public Shared Function orderNumber(ByVal prime As Integer, ByVal n As Integer) As BigInteger Dim hasil As BigInteger = 0

Dim i As Integer = 1 While hasil <> 1

hasil = BigInteger.ModPow(n, i, prime) i += 1

End While Return i - 1 End Function

Public Shared Function getTotien(ByVal value As Integer) As Integer Dim retValue As Integer = 0

For i = 1 To value

If (BigInteger.GreatestCommonDivisor(i, value).IsOne) Then retValue += 1

End If Next


(11)

Return retValue End Function

Public Shared Function getPrimitiveRoot(ByVal prime As BigInteger) As Integer Dim totienP As Integer = prime - 1

Dim leastPrimitive As Integer = 0 Dim hasil As BigInteger = 0 Dim powers As Integer = 2

Dim factor As List(Of Long) = FindFactors(prime - 1) Dim nilaiRandom As Integer

leastPrimitive = powerTest(factor) primitiveRoots.Add(leastPrimitive) If prime < 9999 Then

For i = leastPrimitive To prime - 1

If (BigInteger.GreatestCommonDivisor(i, prime - 1).IsOne) Then primitiveRoots.Add(i)

End If Next

Dim ordNum As BigInteger Do

nilaiRandom = Rnd.Next(0, primitiveRoots.Count - 1)

ordNum = orderNumber(prime, Integer.Parse(primitiveRoots(nilaiRandom).ToString())) If totienP = ordNum Then

hasil = BigInteger.Parse(primitiveRoots(nilaiRandom).ToString()) End If

Loop While totienP <> ordNum Else

While prime > hasil

If (BigInteger.GreatestCommonDivisor(powers, prime - 1).IsOne) Then hasil = Math.Pow(leastPrimitive, powers)

primitiveRoots.Add(hasil) End If

powers += 1 End While

primitiveRoots.RemoveAt(primitiveRoots.Count - 1) nilaiRandom = Rnd.Next(0, primitiveRoots.Count - 1)

If (BigInteger.ModPow(BigInteger.Parse(primitiveRoots(nilaiRandom).ToString()), BigInteger.Parse(totienP.ToString()), prime).IsOne) Then

hasil = BigInteger.Parse(primitiveRoots(nilaiRandom).ToString()) End If

End If Return hasil End Function


(12)

Dim isPrime As Boolean = False Dim prime As BigInteger = 0 While (Not isPrime)

Dim value As BigInteger = Rnd.Next(100, bit) If (Fermat(value)) Then

isPrime = True

prime = value.ToString() End If

End While Return prime End Function

Public Shared Sub GenerateKey(ByVal prime As BigInteger) primitiveRoots.Clear()

primeNumber = prime If primeNumber > 9999 Then KeyLimit = 9999

Else

KeyLimit = primeNumber End If

If (Fermat(primeNumber)) Then

alpha = getPrimitiveRoot(primeNumber) a = Rnd.Next(2, KeyLimit - 1)

alphaA = BigInteger.ModPow(alpha, a, primeNumber) isInputPrime = True

Else

MessageBox.Show("The Number is not Prime", "Generate Key", MessageBoxButtons.OK, MessageBoxIcon.Warning)

isInputPrime = False End If

End Sub

Public Shared Function Encrypt(ByVal plain As String) As String Dim cipher1 As BigInteger()

Dim cipher2 As BigInteger() Dim m As Integer

plaintext = plain Dim idx As Integer = 0

cipher1 = New BigInteger(plaintext.Length) {} cipher2 = New BigInteger(plaintext.Length) {} Dim rnd As New Random

For Each c In plaintext

m = System.Convert.ToInt32(c) b = rnd.Next(2, KeyLimit - 1)

cipher1(idx) = BigInteger.ModPow(alpha, b, primeNumber)

cipher2(idx) = (m * (BigInteger.Pow(alphaA, b))) Mod primeNumber idx += 1

Next


(13)

ciphertext &= cipher1(i).ToString() & " " Next

ciphertext += "/"

For i = 0 To cipher2.Length - 2

ciphertext &= cipher2(i).ToString() & " " Next

Return ciphertext End Function

Public Shared Function Decrypt(ByVal cipher As String) As String Dim cipher1 As BigInteger()

Dim cipher2 As BigInteger() Dim ciphertext = cipher.Split("/") Dim m1, m2 As BigInteger Dim plaintext As String = "" Dim cip1 = ciphertext(0).Split(" ")

cipher1 = New BigInteger(cip1.Length - 2) {} For i = 0 To cip1.Length - 2

cipher1(i) = cip1(i) Next

Dim cip2 = ciphertext(1).Split(" ")

cipher2 = New BigInteger(cip2.Length - 2) {} For i = 0 To cip2.Length - 2

cipher2(i) = cip2(i) Next

For i = 0 To cipher1.Length - 1

m1 = BigInteger.ModPow(cipher1(i), (primeNumber - 1 - a), primeNumber) m2 = (m1 * cipher2(i)) Mod primeNumber

plaintext &= Char.ConvertFromUtf32(m2) Next

Return plaintext End Function

Public Shared Function FindFactors(ByVal num As Long) As List(Of Long) Dim result As List(Of Long) = New List(Of Long)()

Do While (num Mod 2 = 0) result.Add(2)

num \= 2 Loop

Dim factor As Long = 3

Do While (factor * factor <= num) If (num Mod factor = 0) Then result.Add(factor)

num \= factor Else


(14)

End If Loop

If (num > 1) Then result.Add(num) Dim flag As Integer = 0

For i = 1 To result.Count - 1 If (result(flag) = result(i)) Then result(i) = 0

Else flag = i End If Next

For i = 1 To result.Count - 1 result.Remove(0)

Next

Return result End Function

Public Shared Function powerTest(ByVal factors As List(Of Long)) As Integer Dim hasil As Integer = 1

Dim value As Integer = 2

Dim powertes As List(Of Long) = New List(Of Long)() For i = 0 To factors.Count - 1

powertes.Add(((primeNumber - 1) / factors(i))) Next

While hasil = 1

For i = 0 To powertes.Count - 1

hasil = BigInteger.ModPow(value, powertes(i), primeNumber) If hasil = 1 Then

Exit For End If Next value += 1 End While Return value - 1 End Function End Class

5. Listing Program untuk Class Transpose

Public Class Transpose #Region "Variable"


(15)

Public ciphertext As String = "" Public plaintext As String = "" Dim pola As String = "" Dim textLength As Integer = 0 Dim j As Integer = 1

Dim limit As Integer = 1 Dim row As Integer = 1 Dim col As Integer = 0 Dim triangle As String(,) #End Region

Public Function TransposeEncrypt(ByVal plain As String) As String plaintext = plain

textLength = plain.Length limit = 1

row = 1 j = 1

For i = 1 To textLength If textLength > limit Then j += 2

limit += j row += 1 End If Next j = 1 col = 0

For i = 1 To row col += j j = 2 Next row -= 1 col -= 1

triangle = New String(row, col) {}

Dim mid As Integer = Math.Floor((col + 1) / 2) Dim idx As Integer = 0

For i = 0 To row

For j = (mid - i) To (mid + i) If (textLength <= idx) Then triangle(i, j) = Chr(191) Else

triangle(i, j) = plaintext(idx) idx += 1

End If Next Next


(16)

For j = 0 To row

If (triangle(j, i) <> "") Then ciphertext += triangle(j, i) End If

Next Next

Return ciphertext End Function

Public Function TransposeDecrypt(ByVal cipher As String) As String Dim plain As String = ""

ciphertext = cipher

Dim textLength As Integer = cipher.Length j = 1

limit = 1 row = 1 pola = ""

For i = 1 To textLength If textLength > limit Then j += 2

limit += j row += 1 End If Next j = 1 col = 0

For i = 1 To row col += j j = 2 Next row -= 1 col -= 1

triangle = New String(row, col) {} Dim mid As Integer = col / 2 Dim idx As Integer = 0 For i = 0 To col If i > mid Then

For j = i - row To row

triangle(j, i) = ciphertext(idx) idx += 1

Next Else

For j = (row - i) To row

triangle(j, i) = ciphertext(idx) idx += 1

Next End If


(17)

Next

For i = 0 To row For j = 0 To col

If (triangle(i, j) <> "") Then plain += triangle(i, j) End If

Next Next

plaintext = plain.Trim(Chr(191)) Return plaintext

End Function

Public Function getTriangle() As DataTable Dim dt As DataTable = New DataTable() For i = 0 To col

dt.Columns.Add(New DataColumn(i + 1)) Next

For i = 0 To row dt.Rows.Add() Next

For i = 0 To row For j = 0 To col

dt.Rows(i)(j) = triangle(i, j) Next

Next Return dt End Function


(18)

CURRICULUM VITAE

Nama : Ismail Fata Lubis

Tempat/Tanggal Lahir : Sibolga, 5 Oktober 1990

Agama : Islam

Alamat Sekarang : Jl. Jalak 12 No. 195 P. Mandala Medan Alamat Orang Tua : Jl. Jalak 12 No. 195 P. Mandala Medan

Telp/ Hp : 081375530101

Email : ismailfatalubis@yahoo.co.id Riwayat Pendidikan

2009 – 2015 : S1 Ilmu Komputer Universitas Sumatera Utara, Medan 2005 – 2008 : SMA Negeri 8 Medan

2002 – 2005 : SMP Negeri 13 Medan 1996 – 2002 : SDN 067980 Medan

Pengalaman Organisasi dan Kegiatan Ilmiah

 Anggota Departemen Komunikasi dan Informasi Pemerintahan Mahasiswa Fakultas Matematika dan Ilmu Pengetahuan Alam (PEMA FMIPA) periode 2010-2011  Anggota Departemen Seni & Olahraga Ikatan Mahasiswa S1 Ilmu Komputer

(IMILKOM) periode 2011-2012

 Anggota Departemen Sumber Daya Mahasiswa Pemerintahan Mahasiswa Fakultas Ilmu Komputer dan Teknologi Informasi (PEMA FASILKOM-TI) periode 2012-2013

 Anggota bidang Programming kepanitiaan ARTechno 2013

 Ketua bidang Humas kepanitiaan Penerimaan Mahasiswa Baru (PMB) Ilmu Komputer USU Tahun 2011


(19)

Ariyus, Dony. 2006. Computer Security. Yogyakarta: ANDI.

Bahary, Barra Rizky. 2010. Pengamanan Pesan Teks Menggunakan Algoritma

ElGamal. Skripsi. Universitas Negeri Semarang.

Department of The Army. 1990. Basic Cryptanalysis. Washington D.C.: Aegean Park Press.

Fauzana. 2013. Analisis dan perancangan sistem autentikasi pengguna pada web

menggunakan metode multiple-key RSA. Skripsi. Universitas Sumatera

Utara.

Kromodimoeljo, Sentot. 2010. Teori dan Aplikasi Kriptografi. Jakarta: SPK IT Consulting .

Mollin, Richard. A. 2007. An Introduction to Cryptography. 2nd ed. Florida: Chapman & Hall/CRC.

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

Ramdan Mangunpraja, Dadan. 2007. Peningkatan Keamanan Pertukaran Kunci

Deffie-Hellman Dengan pengimbuhan Algoritma Algoritma RSA. Bandung,

Indonesia: STEI ITB.

Sadikin, Rifki. 2012. Kriptografi untuk Keamanan Jaringan. Yogyakarta: ANDI. Singh, Rashmi. 2012. ElGamal's Algorithm in Cryptography. International Journal of

Scientific & Engineering Research Vol. 3, No. 12.

Stallings, William. 2011. Cryptography and Network Security: Principles and

Practice. 5th Edition. New York: Pearson Education, Inc.

Tamam, M. Taufiq. 2010. Penerapan Algoritma Kriptografi ElGamal untuk


(20)

The Security Divison of EMC. 2009. RSA BSafe Security Concept. Sydney: RSA Security, Inc.

Ulfa, Rininda. 2011. Penerapan Sistem Kriptografi Elgamal Atas Zp* Dalam Pembuatan Tanda Tangan Digital. Skripsi. Universitas Negeri Yogyakarta.


(21)

BAB III

ANALISIS DAN PERANCANGAN SISTEM

3.1 Analisis Sistem

Tahapan dilakukan untuk menjabarkan kebutuhan-kebutuhan dalam perancangan sistem. Tahap ini menjelaskan gambaran sistem yang akan dibuat sesuai dengan permasalahan yang akan diselesaikan.

3.1.1 Analisis Masalah

Masalah utama yang diangkat adalah penyimpanan pesan secara aman dengan mengimplemantasikan algoritma ElGamal dengan transposisi segitiga. Sistem ini menggunakan algoritma ElGamal karena kelebihan dari algoritma ini adalah tingkat keamanannya berdasarkan logaritma diskrit pada bilangan bulat modulo prima yang dipakai. Sedangkan pada transposisi segitiga pengurutan karakter yang didasarkan pada bentuk segitiga yang dibangun akan memperkuat keamanan dari sistem yang akan dipakai.

Analisis masalah digambarkan dengan Diagram Ishikawa (fishbone Diagram) berikut ini. Bagian kepala atau segiempat yang berada di sebelah kanan merupakan masalah. Sementara di bagian tulang-tulangnya merupakan penyebab.


(22)

Implementasi Super Enkripsi Algoritma

Elgamal dan Transposisi Segitiga

Jaringan User

Proses Metode

Jaringan komunikasi

Yang tidak aman User membutuhkanKeamanan data

Dibutuhkan aplikasi Yang cepat dan tepat

Metode yang memiliki Kunci dan proses yang Sama mudah untuk dipecahkan

Gambar 3.1 Diagram Ishikawa Untuk Analisa Masalah

3.1.2 Analisis Kebutuhan (Requirement Analysis)

Analisis persyaratan terdiri atas dua bagian yaitu analisis fungsional dan analisis nonfungsional. Kedua analisis ini merupakan hal penting untuk menentukan hal-hal yang harus dimiliki sistem.

3.1.2.1 Analisis Fungsional

Analisis fungsional dibutuhkan untuk mengetahui hal-hal yang bisa dikerjakan oleh sistem. Berikut dijabarkan fungsi-fungsi yang dapat dikerjakan oleh sistem. 1. Sistem melakukan enkripsi pesan awal (plaintext) dengan bilangan prima

diinputkan oleh user atau di-generate oleh sistem yang nantinya dilakukan perhitungan oleh sistem untuk mendapatkan kunci.

2. Sistem akan melakukan enkripsi dengan transposisi segitiga dan algoritma ElGamal dan memunculkan ciphertext yang dihasilkan pada layar program. 3. Sistem akan melakukan dekripsi dengan algoritma ElGamal dan transposisi

segitiga dan memunculkan plaintext hasil dekripsi.

4. Plaintext dan ciphertext dapat disimpan dalam bentuk dokumen dengan


(23)

3.1.2.2 Analisis Nonfungsional

Analisis nonfungsional berhubungan dengan hal-hal berikut ini (Fauzana, 2013): 1. Performa

Perangkat lunak yang akan dibangun dapat menunjukkan hasil dari proses enkripsi dan dekripsi yang dilakukan oleh sistem.

2. Mudah dipelajari dan digunakan

Perangkat lunak yang akan dibangun memiliki tampilan yang user friendly dan responsif.

3. Hemat biaya

Perangkat lunak yang dibangun akan menggunakan teknologi yang bebas digunakan (free to use).

4. Dokumentasi

Perangkat lunak yang akan dibangun dapat menyimpan hasil enkripsi dan dekripsi serta memiliki panduan penggunaan.

5. Manajemen kualitas

Perangkat lunak yang akan dibangun akan memiliki kualitas yang baik. 6. Kontrol

Perangkat lunak yang dibangun akan menampilkan pesan error untuk setiap input yang tidak sesuai.

3.1.2.3 Pemodelan Persyaratan Sistem dengan Use Case

Use case adalah salah satu pemodelan yang digunakan untuk memodelkan

persyaratan sistem. Dengan use case ini digambarkan siapa saja yang berinteraksi dengan sistem dan apa saja yang dapat dilakukan sistem.

Aktor yang berinteraksi dengan sistem ini adalah user. Sesuai dengan analisis fungsional, sistem dapat melakukan enkripsi dan dekripsi seperti diagram pada gambar 3.2.


(24)

Encryptor

Decryptor

Enkripsi

Dekripsi

Enkripsi ElGamal Enkripsi Transposisi Segitiga

Dekripsi Transposisi Segitiga

Dekripsi ElGamal

<< include >>

<< include

>>

<< include >>

<< i nclud

e >>

System

Gambar 3.2 Use case Diagram yang akan Dikembangkan

Diagram pada gambar 3.2 menjelaskan aksi yang dapat dilakukan oleh

user, user melakukan enkripsi dengan menggunakan algoritma ElGamal dan

Tranposisi Segitiga. User juga dapat melakukan dekripsi dengan Algoritma ElGamal dan Transposisi Segitiga. Kedua metode yang dipakai baik Algoritma ElGamal dan Transposisi Segitiga dalam sistem ini tidak dapat dipisahkan satu sama lain. Dimana ketika kita melakukan enkripsi, maka kedua metode ini akan dipakai secara berurutan, begitu pula dengan proses dekripsi, kedua metode ini akan digunakan secara berurutan.

Berikut ini merupakan spesifikasi use caseuntuk enkripsi Tabel 3.1 Spesifikasi Use Case Enkripsi

Name Enkripsi

Actors User

Trigger User menginputkan plaintext yang akan dienkripsi dan nilai bilangan


(25)

Preconditions User telah menyimpan plaintext yang akan dienkripsi Post Conditions User dapat melihat ciphertext hasil proses enkripsi

Success Scenario

1. User telah menginputkan plaintext yang akan dienkripsi dan

bilangan prima yang akan dipakai dapat diinput ataupun

di-generate oleh sistem.

2. User mengakses tombol enkripsi.

3. Sistem akan melakukan proses enkripsi terhadap plaintext yang diinputkan dan menampilkan hasil enkripsi (ciphertext). 4. User dapat melihat ciphertext hasil proses enkripsi dan dapat

menyimpan ciphertext tersebut dalam format teks dokumen (.txt)

Alternative Flows -

Berikut ini adalah activity diagram untuk proses enkripsi:

Sistem User

masukkan plaintext

masukkan bilangan prima

generate bilangan prima / TIDAK

/ YA

enkripsi pesan

Tampil hasil enkrpsi simpan hasil enkripsi

Proses penyimpanan ciphertext / YA

/ TIDAK


(26)

Berikut ini adalah spesifikasi untuk use case dekripsi

Tabel 3.2 Spesifikasi Use Case Dekripsi

Name Dekripsi

Actors User

Trigger User menginputkan ciphertext dan bilangan prima yang digunakan.

Preconditions User telah menyimpan Ciphertext sebelumnya Post Conditions User dapat melihat Plaintext hasil dekripsi.

Success Scenario

1. User memasukkan ciphertext dan bilangan prima serta kunci private yang digunakan.

2. Sistem akan mendekripsi pesan dengan kunci yang diinputkan 3. User dapat melihat plaintext hasil dari proses dekripsi

Alternative Flows -

berikut ini adalah activity diagram untuk proses dekripsi

Sistem User

masukkan ciphertext

masukkan bilangan prima dan kunci private Dekripsi pesan

Tampil plaintext yang dihasilkan

Simpan plaintext hasil dekripsi

/ YA

Proses penyimpan plaintext / Tidak


(27)

3.1.3 Analisis Sistem Proses

Pada implementasi sistem ini kita menggunakan dua metode dalam proses enkripsi dan dekripsi. Sistem ini mengunakan algoritma ElGamal dan Transposisi Segitiga. Pada proses enkripsi, transposisi segitiga terlebih dahulu digunakan yang dilanjutkan dengan proses enkripsi menggunakan algoritma ElGamal. Pada gambar 3.5 dapat dilihat sequence diagram untuk proses enkripsi.

User Class Transposisi Class ElGamal Sistem

input plaintext

Input Bilangan Prima

Enkripsi Transposisi

Generate Kunci()

Enkripsi ElGamal

Tampilkan Ciphertext

Simpan Ciphertext

Browse Tempat penyimpanan

Simpan Ciphertext

Gambar 3.5 Sequence Diagram Proses Enkripsi

Hasil dari enkripsi akan disimpan di tempat yang diinginkan dan untuk proses dekripsi dapat dilihat pada gambar 3.6.


(28)

User Class Transposisi Class ElGamal Sistem

Input Ciphertext Input Bilangan Prima

Dekripsi Transposisi

Generate Kunci

Dekripsi ElGamal

Tampilkan Plaintext

Simpan Plaintext

Browse Tempat penyimpanan

Simpan Plainrtext Input Kunci Private

Gambar 3.6 Sequence Diagram untuk Dekripsi

Dari sequnce diagram pada gambar 3.6 dapat dilihat bahwa user dapat menyimpan kembali plaintext hasil dari proses dekripsi.

3.2 Perancangan Sistem

3.2.1 Flowchart Sistem

3.2.1.1 Flowchart Gambar Umum

Secara umum, sistem akan melakukan enkripsi dan dekripsi terhadap pesan yang dimasukkan oleh user. Proses ini dapat dilihat pada flowchart gambaran umum pada gambar 3.7.


(29)

start

plaintext

Ciphertext

End Enkripsi dengan Transposisi Segitiga

Enkripsi dengan Algoritma Elgamal

Dekripsi dengan Algoritma Elgamal

Dekripsi dengan Transposisi Segitiga

Gambar 3.7 Flowchart Umum Sistem Keterangan :

Dari flowchart pada gambar 3.7 dapat dilihat flowchart umum sistem yang akan dibuat. User akan memasukkan plaintext yang akan dienkripsi. Kemudian dilakukan enkripsi dengan menggunakan transposisi segitiga yang hasil dari enkripsi ini akan dienkripsi kembali dengan mengunakaan algoritma ElGamal.

User akan mendapatkan ciphertext, hasil enkripsi dari plaintext yang diinputkan

sebelumnya. Ciphertext ini akan didekripsi dengan mengunakaan algoritma ElGamal dan hasil dekripsi dari ElGamal ini akan didekripsi kembali dengan transposisi segitiga yang akan menghasilkan plaintext.


(30)

3.2.1.2 Flowchart Proses Enkripsi dengan Algoritma ElGamal

Proses enkripsi pada sistem ini menggunakan algoritma ElGamal. Berikut ini

flowchart yang menggambarkan langkah-langkah mengenkripsi pesan. start

Plaintext (m)

C1 =

C2 =

End

Ciphertext (C) Pembangkitan Kunci

C = (C1, C2)

Gambar 3.8 Flowchart Enkripsi Pesan dengan Algoritma ElGamal

Keterangan :

Dari flowchart pada gambar 3.8 dapat dilihat proses untuk menghasilkan

ciphertext dengan algoritma ElGamal. Pada algoritma ini, kita terlebih dahulu

membangkitkan kunci yang nantinya akan digunakan dalam proses enkripsi dan dekripsi pesan. Kunci-kunci yang dibangkitkan ini bersifat public dan private. Untuk proses pembangkitan kunci ini dapat dilihat pada gambar 3.9.


(31)

3.2.1.3 Flowchart Pembangkitan Kunci Algoritma ElGamal

Langkah-langkah pembangkitan kunci algoritma ElGamal dapat dilihat pada gambar 3. 9 berikut ini.

Start

Bilangan prima (P)

a = Random(2, p-1)

b = Random(1, p-1)

End

Akar primitif mod p

Gambar 3.9 : Flowchart Pembangkitan Kunci Algoritma ElGamal

Keterangan :

Dari flowchart pada gambar 3.9 dapat dilihat Flowchart pembangkitan kunci untuk memperoleh kunci private dan public yang akan dipakai dalam proses enkripsi dan dekripsi pesan dengan algoritma ElGamal.

3.2.1.4 Flowchart Proses Dekripsi dengan Algoritma ElGamal

Untuk mengembalikan ciphertext ke dalam bentuk plaintext kembali, akan dilakukan proses dekripsi. Langkah-langkah proses dekripsi dengan Algoritma ElGamal dapat dilihat pada gambar 3.10.


(32)

start

Ciphertext (C)

m1 = C1p-1-a mod p

M = m1*C2 mod p

End Plaintext (M)

Gambar 3. 10 Flowchart Dekripsi Pesan dengan Algoritma ElGamal

Keterangan :

Flowchart pada gambar 3.10 ciphertext yang di proses dengan melakukan

perhitungan terhadap angka-angka dari ciphertext dengan kunci-kunci yang telah dibangkitkan sebelumnya. Hasil perhitungan inilah yang akan mengembalikan nilai plaintext kembali.

3.2.2 Rancangan Antar Muka

Sistem akan dibangun menggunakan bahasa pemrograman Visual Basic.Net dengan menggunakan software Microsoft Visual Studio. Rancangan antar muka akan disesuaikan dengan kebutuhan dan software yang digunakan. Antar muka menggunakan tiga form, form utama atau form awal, form enkripsi berfungsi untuk mengenkripsi pesan sedangkan form dekripsi digunakan untuk mendekripsi pesan.


(33)

3.2.2.1 Antar Muka Form Awal

Pada form awal ini kita dapat melihat judul Utama dari sistem ini dan nama pembuat sistem ini. Form ini juga merupakan form loading yang akan memproses untuk masuk ke form selanjutnya.

Gambar 3. 11 Rancangan Form Awal

Komponen yang dipakai untuk membangun antar muka pada gambar 3.11 adalah sebagai berikut:

1. Label (Judul) : label yang digunakan sebagai judul utama dari sistem.

2. Picture Box : Digunakan picture box sebagai tempat untuk menambahkan

logo ke dalam form.

3. Label (Pembuat) : label yang digunakan untuk memberikan nama pembuat sistem.

3.2.2.2 Antar Muka Form Enkripsi

Pada form enkripsi, user akan menginputkan bilangan prima yang nantinya akan dijadikan kunci publik dan privat yang akan dihitung oleh sistem.


(34)

Gambar 3.12 Rancangan Form Enkripsi

Komponen yang dipakai untuk membangun antar muka form enkripsi pada gambar 3.12 adalah sebagai berikut:

1. Label (Judul) : label yang digunakan untuk menampilkan judul dari sistem yang digunakan.

2. Tab : Tab yang digunakan untuk memilih proses yang diinginkan, tab ini terdiri dari 3 proses yang dapat dipilh, 'Encyption', 'Decryption' dan 'About' 3. Groupbox 'Plaintext' : pada grupbox ini kita dapat memilih plaintext yang

akan kita enkripsi.

4. Textbox 4 : textbox yang digunakan sebagai tempat untuk menginputkan plaintext, baik yang berasal dari file yang telah tersimpan maupun text yang

diketik langsung oleh user.

5. Tombol (‘Open File’) : tombol ini berfungsi untuk memilih file text yang akan dienkripsi.


(35)

7. Group box 'File Info' : pada Group box ini akan muncul spesifikasi dari file

yang diinputkan. File name, Location dan Character akan mucul secara otomatis ketika telah dinginputkan plaintext.

8. Group box 'Generate Key' : bilangan prima yang akan digunakan sebagi

kunci akan diinputkan pada Group box ini, selain itu, kunci public dan private yang lain seperti primitive root (alpha), a dan alpha^a juga akan muncul pada

Group box ini.

9. Textbox 9 : textbox ini berfungsi untuk menampilkan bilangan prima yang

digenerate maupun yang diinputkan langsung oleh user.

10. Textbox 10 : textbox ini berfungsi untuk menampilkan primitive root (alpha).

11. Textbox 11 : textbox ini berfungsi untuk menampilkan a yang merupakan

kunci private.

12. Textbox 12 : textbox ini berfungsi untuk menampilkan hasil perkalian dari a

dikali dengan alpha.

13. Tombol ('Get Prime') : tombol ini berfungsi untuk melakukan proses

generate bilangan prima.

14. Group box 'Triangle Transposition' : Group box ini berfungsi untuk

menampilkan hasil enkripsi dengan teknik transposisi segitiga.

15. Textbox 15 : textbox ini berfungsi untuk memunculkan hasil segitiga yang

dibentuk untuk proses enkripsi.

16. Textbox 16 : textbox ini berfungsi untuk menampilkan ciphertext, hasil

enkripsi mengunakan transposisi segitiga

17. Group box 'ElGamal' : Group box ini berfungsi menampilkan hasil enkripsi

dengan Algoritma ElGamal dan untuk menyimpan ciphertext.

18. Textbox 18 : textbox ini berfungsi untuk menampilkan ciphertext, hasil

enkripsi dengan menggunakan Algoritma ElGamal.


(36)

3.2.2.3 Antar Muka Form Dekripsi

Form ini digunakan untuk melakukan proses dekripsi. Proses dekripsi

menggunakan Algoritma ElGamal terlebih dahulu, kemudian dilajutkan dengan proses transposisi segitiga untuk mendapatkan hasil dekripsi yang sama dengan

plaintext yang sebelumnya.

gambar 3. 13 : Rancangan Form Dekripsi

Komponen yang dipakai untuk membangun antar muka form dekripsi pada gambar 3.13 adalah sebagai berikut:

1. Label (Judul) : label yang digunakan untuk menampilkan judul dari sistem yang digunakan.

2. Tab : Tab yang digunakan untuk memilih proses yang diinginkan, tab ini terdiri dari 3 proses yang dapat dipilh, 'Encryption', 'Decryption' dan 'About' 3. Groupbox 'Ciphertext' : pada groupbox ini kita dapat memilih ciphertext yang


(37)

4. Textbox 4 : textbox yang digunakan sebagai tempat untuk menginputkan ciphertext.

5. Tombol (‘Open File’) : tombol ini berfungsi untuk memilih file text yang

akan didekripsi.

6. Group box 'File Info' : pada Group box ini akan muncul spesifikasi dari file

yang diinputkan. File name, Location dan Character akan mucul secara otomatis ketika telah diinputkan ciphertext.

7. Group box 'Input Key' : Group box ini berfungsi sebagai tempat untuk

memsukkan kunci-kunci yang dibutuhkan untuk mendekripsikan ciphertext. 8. Textbox 8 : textbox ini berfungsi untuk menginputkan bilangan prima yang

akan digunakan sebagi kunci.

9. Textbox 9 : textbox ini berfungsi untuk menginputkan a yang merupakan

kunci private.

10. Tombol ('Decrypt') : tombol ini berfungsi untuk melakukan proses deksripsi. 11. Group box 'ElGamal' : Group box ini berfungsi untuk menampilkan hasil

dekripsi dengan Algoritma ElGamal.

12. Textbox 12 : textbox ini berfungsi untuk memunculkan hasil dekripsi yang

diproses dengan Algoritma ElGamal.

13. Group box 'Triangle Tranposition' : Group box ini berfungsi menampilkan

hasil dekripsi dengan Transposisi Segitiga dan untuk menyimpan plaintext. 14. Textbox 15 : textbox ini berfungsi menampilkan segitiga hasil dekripsi dengan

Transposisi segitiga

15. Textbox 14 : textbox ini berfungsi untuk menampilkan plaintext, hasil dekripsi

dengan menggunakan Transposisi Segitiga.


(38)

3.2.3 Tahapan Sistem

3.2.3.1 Tahapan Transposisi Segitiga untuk Enkripsi Pesan

Transposisi segitiga adalah salah satu dari bentuk transposisi yang pada umumnya enkripsinya untuk mengubah posisi. Dimisalkan, diberikan plaintext : ILMU KOMPUTER yang akan dienkripsi mengunakan transposisi segitiga. Maka, hasil transposisi dapat dilihat pada gambar 3.14

Gambar 3.14 : Enkripsi Untuk Transposisi Segitiga

Untuk menghasilkan ciphertext, maka dilakukan pembacaan segitiga dari kolom paling kiri, sehingga ciphertext yang terbentuk adalah :

U TLKEIMORUM¿P¿ ¿

3.2.3.2 Tahapan Algoritma ElGamal untuk Enkripsi Pesan

Algoritma ElGamal adalah salah satu algoritma kriptografi asimetris. Algoritma ElGamal memiliki keunggulan pada sulitnya memecahkan logaritma yang digunakan. Algoritma ElGamal memiliki dua tahapan secara umum, yaitu proses enkripsi dan dekripsi. Sebelum proses enkripsi terlebih dahulu kunci dibangkitkan. Berikut ini proses untuk membangkitkan kunci publik dan kunci privat:

1. Pilih bilangan prima p dan cari akar primitif mod p

2. Pilih bilangan random a dimana 2 < a < p – 1, dan hitung nilai a

3. Public key yang diperoleh adalah p, , dan a sedangkan private key adalah a

Untuk implementasi dari pembangkit kunci ElGamal, maka dilakukan langkah berikut:

I

L M U

K O M P


(39)

1. Dipilih bilangan prima p = 919

2. Primitive root yang diperoleh () adalah 533 3. Nilai random a = 706

4. a = 121

Proses selanjutnya adalah mengenkripsi pesan. Pesan asli (plaintext) akan dienkripsi dengan langkah sebagai berikut :

1. Pilih bilangan random b dengan syarat b < p - 1

2. Hitung nilai b mod p untuk C1 dan m*ab mod p untuk C2, dimana m adalah plaintext

3. Maka setiap satu karakter plaintext memiliki dua ciphertext.

Plaintext yang akan dienkripsi adalah : U TLKEIMORUM¿P¿ ¿

Maka terlebih dahulu huruf-huruf tersebut dikonversikan ke dalam desimal sesuai dengan tabel ASCII. Berdasarkan tabel ASCII, nilai dari plaintext adalah:

U = 85 (spasi) = 32 T = 84 L = 76 K = 75 E = 69 I = 73 M = 77 O = 79 R = 82 U = 85 M = 77 ¿ = 168 P = 80 ¿ = 168 ¿ = 168


(40)

Maka nilai-nilai di atas akan dienkripsi sesuai langkah-langkah berikut : 1. Pilih bilangan random b dengan syarat b < p - 1

2. Hitung nilai b mod p untuk C1 dan m*ab mod p untuk C2, dimana m adalah plaintext

Untuk karakter “U” dengan nilai 85: nilai random b = 674

C1 = 533674 mod 919 = 422

C2 = 85*121674 mod 919 = 466

Untuk karakter “(spasi)” dengan nilai 32: nilai random b = 557

C1 = 533557 mod 919

= 300

C2 = 32*121557 mod 919

= 782

Untuk karakter “T” dengan nilai 84: nilai random b = 893

C1 = 533893 mod 919 = 508

C2 = 84*121893 mod 919 = 293

Untuk karakter “L” dengan nilai 76: nilai random b = 614

C1 = 533614 mod 919 = 179

C2 = 76*121614 mod 919 = 120

Untuk karakter “K” dengan nilai 75: nilai random b = 852


(41)

= 518

C2 = 75*121852 mod 919 = 523

Untuk karakter “E” dengan nilai 69: nilai random b = 766

C1 = 533766 mod 919 = 773

C2 = 69*121766 mod 919 = 380

Untuk karakter I” dengan nilai 73: nilai random b = 886

C1 = 533866 mod 919 = 444

C2 = 73*121866 mod 919

= 523

Untuk karakter “M” dengan nilai 77: nilai random b = 572

C1 = 533572 mod 919 = 100

C2 = 77*121572 mod 919 = 461

Untuk karakter “O” dengan nilai 79: nilai random b = 52

C1 = 53352 mod 919 = 640

C2 = 79*12152 mod 919 = 296

Untuk karakter “R” dengan nilai 82: nilai random b = 756

C1 = 533756 mod 919 = 703


(42)

= 313

Untuk karakter “U” dengan nilai 85: nilai random b = 76

C1 = 53376 mod 919 = 335

C2 = 85*12176 mod 919 = 736

Untuk karakter “M” dengan nilai 77: nilai random b = 647

C1 = 533647 mod 919 = 337

C2 = 77*121647 mod 919 = 424

Untuk karakter “¿” dengan nilai 168: nilai random b = 853

C1 = 533853 mod 919

= 394

C2 = 168*121853 mod 919 = 522

Untuk karakter “P” dengan nilai 80: nilai random b = 406

C1 = 533406 mod 919 = 876

C2 = 80*121406 mod 919 = 850

Untuk karakter “¿” dengan nilai 168: nilai random b = 34

C1 = 53334 mod 919 = 526

C2 = 168*12134 mod 919 = 865


(43)

Untuk karakter “¿” dengan nilai 168: nilai random b = 776

C1 = 533776 mod 919 = 531

C2 = 168*121776 mod 919 = 409

Maka didapat ciphertext :

422 300 508 179 518 773 444 100 640 703 335 337 394 876 526 531 /466 782 293 120 523 380 523 461 296 313 736 424 522 850 865 409

3.2.3.3 Tahapan Algoritma ElGamal untuk Dekripsi Pesan

Untuk mendekripsi pesan, penerima membutuhkan kunci private a yang di dapat dari proses generate kunci sebelumnya. Untuk mendekripsi per karakter dilakukan langkah-langkah berikut :

1. Kunci yang digunakan adalah nilai a.

2. Hitung nilai dengan menggunakan C1 dengan cara C1p-1-a mod p yang disebut

m1

3. Dari hasil perhitungan m1 maka untuk memperoleh hasil dilakukan perhitungan m1*C2 mod p.

Dari generate key di atas a = 706, maka untuk masing-masing karakter dilakukan perhitungan berikut:

Untuk nilai C1 = 422 dan C2 = 466 :

m1 = 422919-1-706 mod 919 = 720

m = 720*466 mod 919

= 85 dikonversi ke dalam simbol/karakter dalam ASCII menjadi “U”


(44)

m1 = 300919-1-706 mod 919 = 362

m = 362*782 mod 919

= 32 dikonversi ke dalam simbol/karakter dalam ASCII menjadi “(spasi)”

Untuk nilai C1 = 508 dan C2 = 293 :

m1 = 508919-1-706 mod 919 = 637

m = 637*293 mod 919

= 84 dikonversi ke dalam simbol/karakter dalam ASCII menjadi “T”

Untuk nilai C1 = 179 dan C2 = 120 :

m1 = 179919-1-706 mod 919

= 889

m = 889*120 mod 919

= 76 dikonversi ke dalam simbol/karakter dalam ASCII menjadi “L”

Untuk nilai C1 = 518 dan C2 = 523 :

m1 = 518919-1-706 mod 919 = 884

m = 884*523 mod 919

= 75 dikonversi ke dalam simbol/karakter dalam ASCII menjadi “K”

Untuk nilai C1 = 773 dan C2 = 380 :

m1 = 773919-1-706 mod 919 = 554

m = 554*380 mod 919

= 69 dikonversi ke dalam simbol/karakter dalam ASCII menjadi “E”

Untuk nilai C1 = 444 dan C2 = 523 :

m1 = 444919-1-706 mod 919 = 211


(45)

m = 211*523 mod 919

= 73 dikonversi ke dalam simbol/karakter dalam ASCII menjadi “I”

Untuk nilai C1 = 100 dan C2 = 461 :

m1 = 100919-1-706 mod 919 = 664

m = 664*461 mod 919

= 77 dikonversi ke dalam simbol/karakter dalam ASCII menjadi “M”

Untuk nilai C1 = 640 dan C2 = 296 :

m1 = 640919-1-706 mod 919 = 22

m = 22*296 mod 919

= 79 dikonversi ke dalam simbol/karakter dalam ASCII menjadi “O” Untuk nilai C1 = 703 dan C2 = 313 :

m1 = 703919-1-706 mod 919 = 288

m = 288*313 mod 919

= 82 dikonversi ke dalam simbol/karakter dalam ASCII menjadi “R”

Untuk nilai C1 = 335 dan C2 = 736:

m1 = 335919-1-706 mod 919 = 336

m = 336*736 mod 919

= 85 dikonversi ke dalam simbol/karakter dalam ASCII menjadi “U” Untuk nilai C1 = 337dan C2 = 424:

m1 = 337919-1-706 mod 919 = 878

m = 878*424 mod 919


(46)

Untuk nilai C1 = 394 dan C2 = 522:

m1 = 394919-1-706 mod 919 = 782

m = 782*522 mod 919

= 168 dikonversi ke dalam simbol/karakter dalam ASCII menjadi “¿”

Untuk nilai C1 = 876 dan C2 = 850 :

m1 = 876919-1-706 mod 919 = 465

m = 465*850 mod 919

= 80 dikonversi ke dalam simbol/karakter dalam ASCII menjadi “P”

Untuk nilai C1 = 526 dan C2 = 865:

m1 = 526919-1-706 mod 919

= 99

m = 99*865 mod 919

= 168 dikonversi ke dalam simbol/karakter dalam ASCII menjadi “¿”

Untuk nilai C1 = 531 dan C2 = 409:

m1 = 531919-1-706 mod 919 = 670

m = 670*409 mod 919

= 168 dikonversi ke dalam simbol/karakter dalam ASCII menjadi “¿”

Hasil akhir yang diperoleh yaitu “U TLKEIMORUM¿P¿¿” sesuai dengan


(47)

3.2.3.4 Tahapan Transposisi Segitiga untuk Dekripsi Pesan

Untuk mengembalikan plaintext yang telah ditransposisi, dilakukan penyusunan kembali karakter kedalam segitiga, dengan karakter pertama menduduki kolom paling kiri dan dibaca dari baris atas ke bawah. Sehingga dari ciphertext “U TLKEIMORUM¿P¿ ¿” didapat hasil yang dapat dilihat pada gambar 3.15 :

I

L M U

K O M P

U T E R ¿ ¿ ¿

Gambar 3.15 : Dekripsi dengan Transposisi Segitiga

Untuk menghasilkan plaintext kembali, pembacaan segitiga dimulai dari baris pertama hingga baris terakhir, sehingga diperoleh plaintext "ILMU

KOMPUTER¿¿¿", dan karakter "¿" akan secara otomatis dihapus oleh sistem, sehingga menghasilkan plaintext "ILMU KOMPUTER".


(48)

BAB IV

IMPLEMENTASI DAN PENGUJIAN SISTEM

4.2.1 Implementasi

Implementasi sistem dibangun dengan menggunakan bahasa pemrograman VB.Net, dengan memakai Software Microsoft Visual Studio 2010. Terdapat 3

form dalam sistem ini, form awal (loading form), form encryption dan form decryption. Sistem ini dibangun sesuai dengan rancangan sistem yang telah dibuat

sebelumnya.

4.1.1 Spesifikasi Perangkat Lunak

Untuk membangun sistem ini digunakan perangkat lunak sebagi berikut : 1. Sistem Operasi Windows 7

2. Software Microsoft Visual Studio 2010

3. Infragistics NetAdvantage AppStylist 2010.3 4.1.2 Form Awal (Loading Form)

Loading form ini adalah form awal untuk masuk ke dalam sistem. Pada form ini


(49)

Gambar 4.1 Loading Form

4.1.3 Form Enkripsi

Form enkripsi ini digunakan oleh user untuk mengenkripsi pesan. Pesan yang dapat

dienkripsi bisa diambil dari file yang telah disimpan sebelumnya yang memiliki ekstensi .txt atau jenis file text. Pesan dapat pula diinput atau diketik oleh user pada kolom yang tersedia. Bilangan prima yang digunakan sebagai kunci juga dapat diinput oleh user pada kolom yang tersedia, dapat pula di-generate oleh sistem dengan menekan tombol get prime.


(50)

Gambar 4.2 Form enkripsi pesan

Jika user memasukkan bilangan yang bukan prima maka akan muncul dialog box

Gambar 4.3 Dialog Box Bilangan Bukan Prima

Jika user tidak memasukkan plaintext untuk dienkripsi maka akan muncul dialog box sebagai pemberitahuan.


(51)

Jika bilangan prima tidak di-generate untuk menghasilkan kunci, maka sistem juga akan memunculkan dialog box pemberitahuan

Gambar 4.5 : Dialog Box Kunci belum di-generate

4.1.4 Form Dekripsi

Form dekripsi berfungsi untuk mendekripsi ciphertext menjadi plaintext kembali atau

mengubah kembali pesan yang telah dienkripsi. Pada form ini, dapat memasukkan

ciphertext yang telah disimpan sebelumnya. Bilangan prima dan kunci private yang

digunakan harus pula diinputkan.


(52)

4.2.2 Pengujian

Pengujian untuk sistem implementasi algoritma ElGamal dengan teknik transposisi segitiga ini dilakukan untuk mendapatkan waktu melakukan enkripsi pesan dan dekripsi pesan dengan ukuran plaintext yang berbeda-beda, juga menguji sistem dalam segi recovery, apakah sistem ini dapat mengembalikan pesan secara utuh kembali. Kriteria pengujian sistem sebagi berikut:

1. Plaintext berupa file text yang telah terlebih dahulu disimpan didalam komputer

atau dapat diinput langsung oleh user.

2. Ciphertext akan disimpan dalam bentuk file text.

3. Bilangan prima dipilih oleh user dan dinputkan maupun di-generate sesuai pilihan.

4. Sistem ini diuji dengan Personal Computer dengan spesifikasi processor intel core i7 - 2600 CPU @3.40 GHz (8CPUs), Memory 8 GB RAM.

4.2.1 Proses Enkripsi

Dalam proses enkripsi, pesan yang akan dienkripsi adalah file Paper.txt dengan ukuran 2 kb. Kunci yang digunakan akan di-generate oleh sistem. Berikut file yang akan dienkripsi.

Gambar 4.7 : Plaintext Pengujian Proses Enkripsi


(53)

Gambar 4.8 Form Enkripsi Pengujian Sistem

Segitiga yang terbentuk dari proses enkripsi dapat dilihat pada gambar 4.9.

Gambar 4.9. Segitiga Hasil Proses Enkripsi

Maka ciphertext yang tersimpan dengan nama ciphertext.txt dapat dilihat pada gambar 4.10.


(54)

Gambar 4.10 Ciphertext Hasil Enkripsi Pengujian Sistem

4.2.2 Proses Dekripsi

Untuk melakukan proses dekripsi, user harus menginputkan file ciphertext yang sudah disimpan sebelumnya, memasukkan bilangan prima yang digunakan sebagai kunci dan nilai kunci private yang digunakan. Proses dekripsi pesan dapat dilihat pada gambar 4.11.


(55)

Gambar 4.11 Form Dekripsi Pengujian Sistem

Untuk segitiga yang dihasilkan oleh proses dekripsi dapat dilihat pada gambar 4.12.


(56)

File hasil enkripsi yang disimpan ke dalam file text dapat dilihat pada gambar 4.13.

Gambar 4.13. File Text Hasil Proses Dekripsi

Dari gambar 4.7 dan gambar 4.13 dapat dilihat sebelum pengujian dan sesudah pengujian menghasilkan file dengan teks yang sama dimana proses dekripsi ini berjalan baik sehinggan tidak ada teks file yang terpotong atau hilang.

4.2.3 Pengujian Sistem Berdasarkan Aspek Recovery

Salah satu aspek yang harus diperhatikan dalam pengujian kriptografi adalah aspek

recovery. Recovery adalah pengembalian pesan ke bentuk awal pesan setelah proses

enkripsi. Pengujian ini dilakukan secara berulang dengan ukuran pesan yang berbeda-beda serta kunci publik dan kunci privat yang berberbeda-beda-berbeda-beda pula. Ini dilakukan untuk pembuktian bahwa proses enkripsi dan dekripsi pesan dengan sistem ini tidak mengubah, manambah maupun mengurangi isi pesan.

Berikut hasil pengujian sistem.

1. Pengujian dengan ukuran file 5.02 kb dan kunci 32 bit.


(57)

Gambar 4.14 : File Uji dengan Ukuran 5.02 kb

Waktu yang dibutuhkan untuk mengenkripsi file dengan ukuran 5.02 kb ini adalah 42.3 second. Gambar 4.15 menunjukkan proses enkripsi yang dilakukan.


(58)

Proses enkripsi ini menghasilkan ciphertext yang dapat dilihat pada gambar 4.16.

Gambar 4.16 : File Ciphertext dengan File Uji 5.02 kb

Karena masing-masing karakter memiliki 2 ciphertext, maka file hasil enkripsi yang disimpan akan memiliki ukuran yang lebih besar dari ukuran pesan awal. Sebagai contoh pesan yang dienkripsi dengan ukuran 5.02 kb, menghasilkan ciphertext dengan ukuran 49.2 kb. Maka akan dilakukan proses dekripsi untuk mengembalikan pesan. Proses dekripsi dapat dilihat pada gambar 4.17.


(59)

Proses dekripsi membutuhkan waktu 97 miliseconds. File hasil dekripsi dapat dilihat pada gambar 4.18. Pada gambar ini dapat dilihat, pesan yang telah dienkripsi kemudian di dekripsi kembali akan sama dengan file yang belum mengalami proses.

Gambar 4.18 : File Hasil Dekripsi dengan File Uji 5.02kb

2. Pengujian dengan ukuran file 10.0 kb dan kunci 32 bit.


(60)

Gambar 4.19: File Uji 10 kb

Proses enkripsi yang dilakukan dapat dilihat pada gambar 4.20.

Gambar 4.20: Proses Enkripsi dengan File Uji 10 kb


(61)

Gambar 4.21 : File Ciphertext dengan File Uji 10 kb

Ciphertext dan kunci yang digunakan akan dimasukkan ke dalam form dekripsi

untuk mengembalikan pesan. Proses dekripsi dapat dilihat pada gambar 4.22.

Gambar 4.22: Proses Dekripsi dengan File Uji 10 kb


(62)

Gambar 4.23 dan gambar 4.18 menunjukkan gambar file dengan isi yang sama, dimana hasil setelah proses enkripsi dan dekripsi sama dengan file yang belum mengalami proses.

Gambar 4.23 : File hasil dekripsi dengan File Uji 10 kb

3. Pengujian dengan ukuran file 2 kb dan kunci 64 bit.

File yang akan dienkripsi dengan kunci 64 bit.


(63)

File uji pada gambar 4.24 akan diinput, dan dilakukan proses enkripsi yang

dapat dilihat pada gambar 2.25.

Gambar 4.25 : Proses Enkripsi dengan File Uji 2 kb dengan kunci 64 bit

Proses enkripsi menghasilkan ciphertext pada gambar 4.26.

Gambar 4.26 : File Ciphertext Hasil Enkripsi dengan File Uji 2 kb

Ciphertext akan diinput ke dalam proses dekripsi untuk menghasilkan teks


(64)

Gambar 4.27 : Proses Dekripsi dengan File Uji 2 kb dan Kunci 64 bit.

Proses dekripsi menghasilkan file hasil pada gambar 4.28. Gambar 4.28 dan gambar 4. 24 memperlihatkan bahwa file yang telah mengalami proses enkripsi dan dekripsi memiliki isi yang sama dengan file masukannya.

Gambar 4.28 : File Hasil Proses Dekripsi dengan File Uji 2 kb

Pengujian dengan file dan kunci yang lain akan diperlihatkan pada tabel 4.1. File yang dienkripsi berukuran leih kecil dan dalam bentuk file text.


(65)

Tabel 4.1. Rangkuman Pengujian Sistem 1.

Plaintext

"Algoritma ElGamal juga adalah algoritma kriptografi kunci publik. Algoritma ini pada mulanya digunakan untuk digital signature, namun kemudian dimodifikasi sehingga juga bisa digunakan untuk enkripsi dan dekripsi."

Kunci

Prima : 149  : 79

a : 11

∗ � : 136

Ciphertext

83 26 136 11 80 74 93 26 116 19 66 136 43 27 55 34 55 95 113 110 77 25 88 35 51 43 147 114 132 94 15 50 31 144 142 114 53 25 112 122 111 18 147 48 117 81 114 140 88 12 107 47 139 35 69 27 24 72 126 47 33 92 26 107 110 49 14 61 23 110 42 144 101 51 144 68 130 28 135 50 135 35 22 19 109 13 52 65 28 77 42 122 122 109 94 88 58 71 147 48 59 124 32 126 128 68 58 67 119 20 123 86 84 130 135 74 105 43 83 146 20 11 101 39 31 43 41 65 92 67 123 48 89 36 72 62 14 102 136 144 85 98 102 51 35 49 97 26 88 110 140 133 71 100 130 93 96 146 3 3 99 98 7 81 131 100 35 52 64 124 77 58 94 119 20 134 121 16 101 28 98 73 23 21 41 140 75 40 15 20 125 10 18 137 43 67 119 100 73 50 146 148 57 131 76 136 88 75 97 125 9 47 89 110 35 35 101 76 124 9 51 41 105 33 14 /118 128 51 81 78 54 103 138 91 74 145 122 112 22 123 114 41 147 1 108 111 125 22 91 34 114 24 92 103 26 130 130 98 35 146 69 114 10 99 47 122 88 116 18 124 11 2 135 137 17 100 15 13 117 39 9 135 16 48 25 137 22 142 135 107 109 35 136 47 94 43 60 64 11 137 10 41 88 15 27 61 35 69 113 48 29 53 31 78 137 61 140 103 69 123 13 57 31 116 139 92 74 25 102 54 51 126 110 109 16 59 138 100 19 12 140 72 61 72 78 78 33 63 41 3 62 73 31 73 54 21 45 20 51 16 125 35 124 122 129 58 129 2 11 35 42 17 90 72 56 147 66 4 16 19 118 146 1 101 90 72 66 93 101 88 93 147 117 56 75 124 57 125 129 16 121 11 110 10 61 107 126 120 42 73 68 111 108 44 47 109 105 81 26 67 57 33 6 27 67 17 117 27 65 110 3 54 107 96 22 104 15 104 8 17 5 50 17 145 89 11 12 99 53 18

Plaintext (Hasil dekripsi)

"Algoritma ElGamal juga adalah algoritma kriptografi kunci publik. Algoritma ini pada mulanya digunakan untuk digital signature, namun kemudian dimodifikasi sehingga juga bisa digunakan untuk enkripsi dan dekripsi." Waktu Enkripsi 19 milisecond

Waktu Dekripsi 3 milisecond

2. Plaintext "El-Gamal encryption/decryption is based on the difficulty of the discrete algorithm problem where it is straight forward to rais e numbers of large powers but it is much harder to do the inverse computation of the discr ete logarithm."

Kunci Prima : 9551

 : 5593

a : 2054


(66)

621 8560 1071 2622 568 2404 1204 5792 6530 6222 2808 8913 4225 6573 5549 1835 1529 5871 3628 8457 1652 1405 8986 2357 6444 675 1382 7833 5168 184 520 7349 1556 3428 6379 1002 1722 203 6230 2666 1835 2169 5726 5200 736 1845 577 6254 644 5213 9004 6341 8923 6277 94 906 4380 5459 7675 2042 850 8977 488 2293 3996 6895 4756 652 3758 5571 3157 707 4709 1592 7327 9085 917 5628 6297 7698 3431 1280 7296 7692 8627 5058 4414 6552 3395 5720 6369 4523 2051 3801 7 1110 2332 1502 146 1938 2177 7745 9512 9118 879 9059 3929 5783 1939 3812 8281 2750 8525 3903 8693 1112 6286 9049 4032 2516 1695 1336 2847 4214 9020 8408 2688 8657 1415 169 9410 8088 6000 2975 105 9038 7559 1836 4407 6869 8058 9453 8529 1140 1404 4625 6561 8904 4426 1607 9528 4143 8484 6294 174 5091 9200 3042 1732 1108 464 5656 4111 6582 7974 8679 6941 8671 5222 1039 7786 7484 1455 319 1169 470 5903 1033 5710 5518 3249 2343 965 2381 3730 4855 3743 2523 793 3719 6705 708 260 8547 9295 2649 1689 5186 4127 9198 1956 6305 5849 6470 5674 1929 2377 326 3478 6964 1364 8713 8638 1714 9031 1537 6570 7254 5886 2443 3960 4719 4395 4725 3727 4256 9381 2102 7352 7451 1415 5738 7773 2440 3040 7478 2140 8755 838 1759 4838 7643 6932 8180 7176 /6190 7765 6866 3189 3659 3820 8885 4072 9129 4424 5994 3227 4349 1504 1600 93 1601 5286 8253 7177 1566 2346 2190 373 5933 4280 7685 214 5261 3330 202 6388 4686 8423 1818 3503 4416 4930 4512 4836 7911 7952 7552 159 4548 5244 3254 7376 26 6605 3084 6671 1282 9205 9031 2581 3512 8971 2428 8264 6522 5771 723 2698 5457 1996 7589 2608 4671 3503 2588 1292 2468 2681 9353 1582 6691 4988 4530 9420 3249 173 237 3341 4567 2959 3378 1104 6589 707 7487 9256 1850 5026 2255 1835 7305 3997 7904 8775 4484 1559 5612 2757 3851 5556 9019 5583 1787 2663 3350 6567 9418 2037 2218 7333 4506 349 4648 4913 7622 2851 2019 4332 1845 3952 3287 1382 1390 2864 1789 9496 7457 7949 5814 4579 2032 8222 1664 3738 1384 7281 7190 6272 5492 3030 6559 5164 8981 3974 6781 4094 6133 89 2355 8110 2546 3880 5707 782 5758 6577 8600 2142 6996 5225 6004 9210 5127 5673 5103 977 8929 7016 6856 598 2889 8776 3018 5240 9028 3403 1185 9077 2919 5862 2791 605 227 758 3575 6125 9527 2874 4603 5530 3676 1427 6050 4776 3608 1006 3403 7777 6950 9209 7458 1152 1650 6594 4950 4865 2660 9290 964 1443 4303 8974 7413 5107 4272 4024 7662 7544 5782 352 5936 2858 8311 8410 1918 388 5229 9112 1164 4150 7049 2419 1719 8603 682 8791 2811 6979 3786 3408 8764 8159 610 6805 7681 269 9060 2833 8696 4092

Plaintext (Hasil dekripsi) "El-Gamal encryption/decryption is based on the difficulty of the discrete algorithm problem where it is straight forward to rais e numbers of large powers but it is much harder to do the inverse computation of the discr ete logarithm."


(67)

Waktu Enkripsi 2.27 second WaktuDekripsi 4 milisecond

3. Plaintext " Menurut terminologinya kriptografi adalah ilmu dan seni untuk menjaga keamanan pesan ketika pesan dikirim dari suatu tempat ke tempat lain."

Kunci Prima : 2479019

 : 512

a : 752

∗ � : 151284

Ciphertext 1477389 1237111 1411853 2093549 125144 1369797

25800 1075342 1856079 1387631 30212 1791854 1298763 954185 589994 771639 648431 1699756 360485 667327 1300827 1025930 2275974 1034643 1510811 1045104 1322509 802298 1241282 1079732 640720 2063247 481580 965393 1125774 795809 168672 835958 1607352 2307889 1058982 838169 574769 1921548 1534506 1888595 1149330 1895126 1882447 1534935 1489278 838700 2296040 938055 632945 2375249 1385228 1337684 696855 2400392 2008142 681935 289664 40700 2398538 994857 970037 218149 767499 1081619 2166722 1016612 352972 1643516 1411853 1579035 1047326 779223 1576663 266430 1345405 301414 2336979 2348663 695814 2257337 1858254 2117507 1009281 344082 712689 2302039 791585 2278542 477308 493807 1671053 1183776 1837101 1942571 682404 1426853 2333598 2067130 235034 2296094 608471 1659777 2434258 99029 2298674 1650588 517536 2115835 1450992 1546829 2345831 746647 918379 1247680 1315957 1101782 1074239 845263 1545151 24382 2419077 1247814 2074129 1504361 695814 1087820 1581867 1877729 301964 2387475 2065109 2159488 990517 2400215 578306 1180484 2446878 1887513 /1484580 1238764 1076535 1788941 2145834 2276481 59979 1795415 1472366 139139 406803 2416097 1448573 61416 784708 21541 905517 1983721 2351462 1545469 759278 2396920 827258 907942 1917076 318421 2320088 2139280 2035149 304813 1408881 180309 2206121 2260775 1090756 1125020 449148 2455329 1760473 246665 1906446 709140 2063305 2131264 649489 1758311 1783363 2237117 1301929 2438046 273725 1311457 1637428 2426784 1866545 1001890 2055284 839198 2095616 1111730 697304 2257857 2099581 84509 413290 1240067 1125400 1086243 2003349 788593 1215323 641334 1153997 1807300 24001 1516620 136777 963741 2444102 2440853 2351685 2110324 2464409 1376200 1692844 281703 2185560 499194 668503 1989409 1800372 1918403 2306357 1843093 1848953 1850757 16117 191232 1982691 197452 197436 281228 2359055 1629537 847763 1112744 624061 1963747 465358 774705 111530 1810789 721393 1852040 572478 1016421 1026296 68252 477122 1510077 2138339 639129 1175211 450668 1856922 239604 2098012 1666749 1570365 1377973 2354646 344942 273024 1608827


(68)

1206820 1875044 1270821 2209481 139951 2020763 2408332 2140452 1970106 1447866

Plaintext (Hasil dekripsi) " Menurut terminologinya kriptografi adalah ilmu dan seni untuk menjaga keamanan pesan ketika pesan dikirim dari suatu tempat ke tempat lain."

Waktu Enkripsi 2.8 second Waktu Dekripsi 8 milisecond

4. Plaintext "Cryptanalysts often attack both symmetric and public-key cryptosystems through their key management.

Why should Eve bother going through all the trouble of trying to break the

cryptographic algorithm if she can recover the key because of sloppy key storage procedures? Why

should she spend $10 million building a cryptanalysis machine if she can spend $1000 bribing a

clerk? Spending a million dollars to buy a well-placed communications clerk in a diplomatic"

Kunci Prima : 77062591

 : 6

a : 2792

∗ � : 39966004

Ciphertext 41876594 18939754 22030480 62806599 68244573

51203259 1120291 54024211 30231150 66193204 58934835 42316237 2557754 31240711 33573629 73899826 7112086 30446227 50645925 40321690 34039228 28389113 34421171 49670013 14328086 7245296 38904346 70861297 16166264 1481772 31411623 63797790 304847 71440712 20035276 13656523 21260965 65342837 41726151 71118930 11847698 13636038 62504688 21872887 6804513 69098281 60301375 3621020 30537367 51879127 54052920 37613349 4431722 8261004 51185453 34418752 19347642 29666412 65529452 21337668 59297817 9331138 22471240 28772919 74545338 41195351 18818169 53089603 33774468 61462234 65505127 23700325 30092065 1949754 42470503 74736561 47152852 57951161 75117053 14283228 2841643 45369994 54825039 56085130 18687660

25824613 43312779 782261 52939685 4671554 17111663 51809672 42652402 5038525 59924194 16961844

20312418 13182576 34432917 10234683 14053073 71619742 60827803 61947398 26081531 66305828 1483868 27451749 51962259 64205817 36388791 474843 4586578 65861656 9099724 27589430 43913172 5470848 29412109 74270486 16619901 62921180 22471370 29418794 69234170 33205900 73899826 53353498 60873182 38726102 31054071 30980689 52139807 9331138 56438829 69633834 33224631 49191642 46862068 30581485 10567655 44939874 12199301 39448030 15283310 29817827 50673627 25762651 2951793 21969006 64529354 36788028 47065172 21282538 69577720 7338272 68479900 33871164


(1)

DAFTAR ISI

Halaman

Persetujuan ii

Pernyataan iii

Penghargaan iv

Abstrak vi

Abstract vii

Daftar Isi viii

Daftar Tabel x

Daftar Gambar xi

Daftar Lampiran xiii

Bab I Pendahuluan

1.1 Latar Belakang 1

1.2 Rumusan Masalah 2

1.3 Batasan Masalah 2

1.4 Tujuan Penelitian 2

1.5 Manfaat Penelitian 3

1.6 Metode Penelitian 3

1.7 Sistematika Penulisan 4

Bab II Landasan Teori

2.1 Kriptografi 5

2.2 Tujuan Kriptografi 8

2.3 Ancaman Kriptografi 8

2.4 Kriptografi Asimetris 9

2.5 Akar Primitif 11

2.6 Fermat’s Little Theorem 12

2.7 Modulus Exponential 12

2.8 Algoritma ElGamal 14

2.9 Transposisi Segitiga 15

2.10 Penelitian Terdahulu 16

Bab III Analisis dan Perancangan Sistem

3.1 Analisis Sistem 18

3.1.1 Analisis Masalah 18

3.1.2 Analisis Kebutuhan 19

3.1.2.1 Analisis Fungsional 19

3.1.2.2 Analisis Nonfungsional 20

3.1.2.3 Pemodelan Persyaratan dengan Use Case 20

3.1.3 Analisis Sistem Proses 24

3.2 Perancangan Sistem 25

3.2.1 Flowchart 25

3.2.1.1 Flowchart Gambaran Umum 25

3.2.1.2 Flowchart Proses Enkripsi dengan Algoritma ElGamal 27


(2)

3.2.1.3 Flowchart Pembangkitan Kunci Algoritma ElGamal 27 3.2.1.4 Flowchart Proses Dekripsi dengan Algoritma ElGamal 28

3.2.2 Rancangan Antar Muka 29

3.2.2.1 Antar Muka Form Awal 30

3.2.2.2 Antar Muka Form Enkripsi 30

3.2.2.3 Antar Muka Form Dekripsi 33

3.2.3 Tahapan Sistem 35

3.2.3.1 Tahapan Transposisi Segitiga Untuk Enkripsi Pesan 35 3.2.3.2 Tahapan Algoritma ElGamal Untuk Enkripsi Pesan 35 3.2.3.3 Tahapan Algoritma ElGamal Untuk Dekripsi Pesan 40 3.2.3.4 Tahapan Transposisi Segitiga Untuk Dekripsi Pesan 44 Bab IV Implementasi dan Pengujian Sistem

4.1 Implementasi 45

4.1.1 Spesifikasi Perangkat Lunak 45

4.1.2 Form Awal (Loading Form) 46

4.1.3 Form Enkripsi 46

4.1.4 Form Dekripsi 48

4.2 Pengujian 49

4.2.1 Proses Enkripsi 49

4.2.2 Proses Dekripsi 51

4.2.3 Pengujian Sistem Berdasarkan Aspek Recovery 53 4.2.4 Pengujian Sistem Berdasarkan Panjang Karakter Plaintext 74 4.2.5 Pengujian Sistem Berdasarkan Panjang Bilangan Prima 75 Bab V Kesimpulan dan Saran

5.1 Kesimpulan 77

5.2 Saran 77


(3)

DAFTAR TABEL

Nomor

Tabel Nama Tabel Halaman

3.1 3.2 4.1 4.2 4.3

Spesifikasi Use Case Enkripsi Spesifikasi Use Case Dekripsi Rangkuman Pengujian Sistem

Pengujian Dengan Kunci yang Sama dan Panjang Karakter Plaintext yang Berbeda

Pengujian Dengan Jumlah Karakter Plaintext yang Sama dan Panjang Bilangan Prima yang Berbeda

21 23 62 75 76


(4)

DAFTAR GAMBAR

Nomor

Gambar Nama Gambar Halaman

2.1 2.2 2.3 2.4 2.5 2.6 2.7 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 3.14 3.15 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

Sistem Kriptografi Konvensional Diagram Kriptografi Simetris Diagram Kriptografi Asimetris

Skema Kriptografi Asimetri Nirkunci Publik Pertukaran Kunci Deffie –Hellman

Enkripsi Transposisi Dekripsi Transposisi

Diagram Ishikawa untuk Analisa Masalah Use Case Diagram Sistem

Activity Diagram untuk Proses Enkripsi Activity Diagram untuk Proses Dekripsi Sequence Diagram Proses Enkripsi Sequence Diagram Proses Dekripsi Gambaran Umum Sistem

Flowchart untuk Proses Enkripsi dengan Algoritma Elgamal Flowchart Pembangkit Kunci Algoritma Elgamal

Flowchart untuk Proses Dekripsi dengan Algoritma Elgamal Rancangan Form Awal

Rancangan Form Enkripsi Rancangan Form Dekripsi

Enkripsi Untuk Transposisi Segitiga Dekripsi Untuk Transposisi Segitiga Loading Form

Form Enkripsi Pesan

Dialog Box Bilangan Bukan Prima Dialog Box Tidak Ada Plaintext Dialog Box Kunci Belum di-generate Form Dekripsi

Plaintext Pengujian Proses Enkripsi Form Enkripsi Pengujian Sistem Segitiga Hasil Proses Enkripsi

Ciphertext Hasil Enkripsi Pengujian Sistem Form Dekripsi Pengujian Sistem

Segitiga Hasil Dekripsi

File Text Hasil Proses Dekripsi File Uji dengan Ukuran 5.02 kb

Proses Enkripsi Pengujian Pesan dangan File Uji 5.02 kb File Ciphertext dengan File Uji 5.02 kb

Proses Dekripsi dengan File Uji 5.02 kb File Hasil Dekripsi dengan File Uji 5.02kb File Uji 10 kb

Proses Enkripsi dengan File Uji 10 kb File Ciphertext dengan File Uji 10 kb

5 7 7 8 10 15 16 19 21 22 23 24 25 26 27 28 29 30 31 33 35 44 46 47 47 47 48 48 49 50 50 51 52 52 53 54 54 55 55 56 57 57 58


(5)

4.22 4.23 4.24 4.25 4.26 4.27 4.28 4.29 4.30

Proses Dekripsi dengan File Uji 10 kb File hasil dekripsi dengan File Uji 10 kb File Uji 2 kb

Proses Enkripsi dengan File Uji 2 kb dengan kunci 64 bit File Ciphertext Hasil Enkripsi dengan File Uji 2 kb Proses Dekripsi dengan File Uji 2 kb dan Kunci 64 bit. File Hasil Proses Dekripsi dengan File Uji 2 kb

Grafik Waktu Enkripsi dan Dekripsi Berdasarkan Panjang Plaintext

Grafik Waktu Enkripsi dan Dekripsi Berdasarkan Panjang Bilangan Prima

58 59 59 60 60 61 61 75 76


(6)

DAFTAR LAMPIRAN

Halaman

A. Listing Program A-1