pemanfaatan algoritma ecdsa (elliptic curve digital
TRANSCRIPT
PEMANFAATAN ALGORITMA ECDSA (Elliptic Curve
Digital Signature Algorithm) UNTUK
PENANDATANGANAN DIGITAL CHIPERTEXT
ElGamal ELLIPTIC CURVE CRYPTOGRAPHY
Skripsi ini diajukan untuk melengkapi dan memenuhi salah satu syarat untuk
memperoleh gelar sarjana pada jurusan (S1) Teknik Informatika, Fakultas Ilmu
Komputer
Universitas Pembangunan Nasional ”Veteran” Jakarta
Disusun Oleh :
WAHAB ADAM
204.511.076
FAKULTAS ILMU KOMPUTER
UNIVERSITAS PEMBANGUNAN NASIONAL
“VETERAN” JAKARTA
2009
PEMANFAATAN ALGORITMA ECDSA (Elliptic Curve
Digital Signature Algorithm) UNTUK
PENANDATANGANAN DIGITAL CHIPERTEXT
ElGamal ELLIPTIC CURVE CRYPTOGRAPHY
Skripsi ini diajukan untuk melengkapi dan memenuhi salah satu syarat untuk
memperoleh gelar sarjana pada jurusan (S1) Teknik Informatika, Fakultas Ilmu
Komputer
Universitas Pembangunan Nasional ”Veteran” Jakarta
Disusun Oleh :
WAHAB ADAM
204.511.076
FAKULTAS ILMU KOMPUTER
UNIVERSITAS PEMBANGUNAN NASIONAL
“VETERAN” JAKARTA
2009
LEMBAR PENGESAHAN
1. Judul : PEMANFAATAN ALGORITMA ECDSA
(Elliptic Curve Digital Signature Algorithm)
UNTUK PENANDATANGANAN DIGITAL
CHIPERTEXT ElGamal ELLIPTIC CURVE
CRYPTOGRAPHY
2. Nama Mahasiswa : Wahab Adam
3. NRP : 204.511.076
4. Jurusan : Teknik Informatika
Jakarta, Mei 2009
Disetujui oleh :
Dosen Pembimbing
Jayanta, S.Kom., M.Si
Disahkan oleh :
Kepala Program
Teknik Informatika
Yuni Widiastiwi, S.Kom., M.Si
Yang bertanda tangan di bawah ini menerangkan, bahwa :
Nama : Wahab Adam
NRP : 204.511.076
Judul Skripsi : “PEMANFAATAN ALGORITMA ECDSA
(Elliptic Curve Digital Signature Algorithm)
UNTUK PENANDATANGANAN DIGITAL
CHIPERTEXT ElGamal ELLIPTIC CURVE
CRYPTOGRAPHY ”.
Telah Lulus Ujian Skripsi Pada Tanggal : 30 April 2009
Tim Penguji Sidang Skripsi
No Nama Jabatan Tanda Tangan
1. Yuni Widiastiwi, S.Kom., M.Si Penguji I
2. Didit Widiyanto, S.Kom, M.Si Penguji II
Jakarta, Mei 2009
Mengetahui,
Ketua Jurusan Teknik Informatika
Yuni Widiastiwi, S.Kom., M.Si
ABSTRAKSI
Wahab Adam, 2009. PEMANFAATAN ALGORITMA ECDSA (Elliptic
Curve Digital Signature Algorithm) UNTUK PENANDATANGANAN
DIGITAL CHIPERTEXT ElGamal ELLIPTIC CURVE CRYPTOGRAPHY
Fakultas Ilmu Komputer, Universitas Pembangunan Nasional ‘Veteran’ Jakarta .
Konsep “tanda tangan digital” (digital signature) yang dikenal pada dunia
keamanan komputer saat ini adalah merupakan hasil dari penerapan teknik-teknik
Kriptografi, dimana tanda tangan digital merupakan bentuk autentifikasi dan
keabsahan data dan informasi dari author (pihak dimana data dan informasi
berasal). Pengaplikasian prototype yang dibahas di dalam tugas akhir ini
mengkorelasikan antara tanda tangan digital dan proses enkripsi serta dekripsi
yang berfungsi untuk menjaga keamanan informasi yang sampai ke penerima
informasi.
Enkripsi adalah suatu proses untuk mengubah pesan asli (plaintext)
menjadi pesan sandi (chipertext) dan dekripsi adalah proses untuk mengembalikan
chipertext menjadi plaintext.. Berdasarkan jenis kuncinya, algoritma kriptografi
dibagi menjadi dua, yaitu algoritma simetri dan asimetri (public key algorithm).
Tujuan penulisan tugas akhir ini adalah untuk menjelaskan cara kerja
penandatanganan digital meggunakan Algoritma ECDSA (Elliptic Curve Digital
Signature Algorithma) yang diembed pada chipertext (kode sandi) public key
algorithma ElGamal ECC (Elgamal Elliptic Curve Cryptography), bertolak dari
hal di atas maka dibentuklah sebuah model aplikasi penandatanganan digital yang
menggunakan enkripsi data yang memanfaatkan metode Curva elliptic pada
penandatangananya serta enkripsi dan dekripsinya.
Metode yang digunakan dalam penelitian tugas akhir ini adalah studi
literatur dan implementasi program. Melalui studi literatur, dipelajari teori-teori
yang berhubungan dengan kriptografi kurva elliptik, Kemudian membuat
prototype aplikasinya untuk mengimplementasikanya.
Kata Kunci : Tanda tangan digital, ECDSA, ElGamal ECC, Enkripsi, Dekripsi.
KATA PENGANTAR
Assalamu’alaikum Wr. Wb.
Alhamdullilah hirobbil ‘alamin, segala puji dan syukur ke Hadirat Allah
SWT yang telah memberi petunjuk serta nikmat yang luar biasa karena atas berkat
rahmat dan karunia-Nya, penulis dapat menyelesaikan tugas akhir ini yang
berjudul “Pemanfaatan Algoritma ECDSA (Elliptic Curve Digital Signature
Algorithm) untuk Penandatanganan Digital Chipertext ElGamal Elliptic Curve
Cryptography ”. Laporan Tugas Akhir ini diajukan sebagai salah satu syarat
untuk menempuh ujian akhir pada Program Studi Teknik Informatika Strata satu,
Fakultas Ilmu Komputer, UPN ”Veteran” Jakarta.
Selama penyusunan tugas akhir ini, penulis telah banyak memperoleh
bantuan, bimbingan, serta dorongan dari berbagai pihak. Untuk itu penulis
ucapkan terima kasih yang sebesar-besarnya kepada :
1. Allah SWT atas rahmat dan petunjuk serta hidayah yang diberikan dalam
kelancaran menulis laporan tugas akhir ini.
2. Orangtua, Ayah, Ibu, Nini serta kedua saudara, Fajar dan Hilmi yang
membantu saya dalam doa, semangat serta memberikan dukungan Moril
dan materiil.
3. Bapak Dr.Dwi Nugroho, M.Sc selaku Dekan Fakultas Ilmu Komputer.
4. Ibu Yuni Widiastiwi, S.Kom., M.Si selaku Kepala Program Teknik
Informatika yang telah memberikan persetujuan pengajuan dan
pengesahan tugas akhir ini serta masukan-masukan untuk kesempurnaan
dalam penulisan skripsi ini.
5. Bapak Jayanta, S.Kom., M.Si selaku Dosen Pembimbing. yang telah
banyak memberikan masukan, bimbingan, dorongan dan waktunya yang
sangat berharga.
6. Seluruh Dosen pengajar di Fakultas Ilmu Komputer yang telah
mengajarkan banyak ilmu yang bermanfaat.
7. Rekan-rekan MKAI, LPM AspirasI khususnya angkatan 23, SENAT-FIK,
VICOM dan BEMF-IK yang telah memberikan dukungan kepada saya.
8. kepada rekan-rekan OPK-X yang selalu memberikan candaan penghilang
penat, semangat selalu (Komputeeer...Slash).
9. Rekan-rekan mahasiswa S1-Teknik Informatika FIK UPN ”Veteran”
Jakarta khususnya TI-2004 yang telah memberikan dukungan hingga
penulis bisa menyelesaikan skripsi ini.
10. Serta semua pihak yang tidak dapat disebutkan satu persatu, yang telah
banyak membantu dan memberikan dorongan dan doa sehingga tugas
akhir ini dapat diselesaikan.
Penulis menyadari bahwa penulisan tugas akhir ini masih jauh dari
sempurna, walaupun penulis telah berusaha dengan segala kemampuan yang
dimiliki. Untuk itu, penulis mengharapkan saran dan kritik dari semua pihak
untuk memperbaiki kesalahan-kesalahan dalam penyempurnaan tugas akhir ini.
Akhir kata dari penulis, semoga tugas akhir ini dapat bermanfaat bagi para
pembaca khususnya mahasiswa FIK UPN “Veteran” Jakarta.
Wassalamu’alaikum Wr. Wb
Jakarta, April 2009
Penulis
(Wahab Adam)
DAFTAR ISI
Halaman
HALAMAN JUDUL ………………………………………………………......
HALAMAN PENGESAHAN …………………...………………………….....
ABSTRAKSI ………….……………………………...……………………......
KATA PENGANTAR ………………………………………………………...
DAFTAR ISI …………………………………………………………………..
DAFTAR TABEL … ………………………………………………………….
DAFTAR GAMBAR ………………………………………………………….
BAB I
PENDAHULUAN ……………………………………………...……………...
1.1. Latar Belakang …………..…………………………….....……....
1.2. Perumusan Masalah …………...………………………......……...
1.3. Tujuan dan Manfaat Penulisan …………...…………...…...……...
1.4. Pembatasan Masalah …………...……………………...…..……...
1.5. Sistematika Penulisan ………………………………..…….……...
BAB II
LANDASAN TEORI ………………………………….....................................
2.1. Pengenalan Kriptografi …………......……………………..……...
2.1.1. Kerahasiaan …………………...…...................................
2.1.2. Autentifikasi …………...……...…………...……............
2.1.3. Integritas …………...…...……..……………...................
2.1.4. Non-Repudiasi …………………...………………...……
2.2. Algoritma Kriptografi …………...……………………….……....
2.2.1. Algoritma Simetrik ……………….…..............................
2.2.2. Algoritma Asimetrik …..……………......………............
2.3. Algoritma ElGamal ECC .……….……………………..…………
2.3.1. Algoritma Penentu Kunci ………….……......…..............
2.3.2. Algoritma Enkripsi …..…..…………...…………............
i
ii
iv
v
vii
xi
xii
1
3
3
3
4
4
6
6
8
9
11
12
14
14
15
16
18
19
2.3.3. Algoritma Dekripsi ……...………..…..…………………
2.4. ECDSA ..….................. ..………………………………………….
2.4.1. Skematik ECDSA ................................... ..…...................
2.4.2. Parameter Domain ECDSA ........... ………...…...………
2.4.3. Proses ECDSA ..............…....…...……………...............
2.4.3.1. Generasi Kunci (Key Generation) .....................
2.4.3.2. Penandaan (Signing) ..........................................
2.4.3.3. Verifikasi (Verifying) .....…....…....……...........
2.5. Kecepatan ECC .…….........……………………………………….
2.6. Ukuran .……………...…………………………………………….
2.7. Protokol Kriptografi ....………………...………………………….
2.7.1. Pengertian Protokol …………...….......…………............
2.7.2. Fungsi Protokol ………….……..….……………............
2.7.3. Jenis Protokol Kriptografi ………………...….................
2.7.3.1. Protokol Pembagi Rahasia ………......………..
2.7.3.2. Protokol Komitmen-Bit ….…......……………..
2.7.3.3. Tanda Tangan Buta ……......………………….
2.7.3.4. Protokol Uang Digital ………………………...
2.7.4. Penyerangan terhadap Protokol ….........….......................
2.7.4.1. Jenis-jenis Pola Penyerangan …………………
2.7.4.1.1. Interuption …………..…..…………..
2.7.4.1.2. Interception …………..……………..
2.7.4.1.3. Modification ………………………...
2.7.4.1.4. Fabrication ……………...…………...
2.7.5. Beberapa Metode Penyadapan Data ……..……………...
2.7.5.1. Wiretapping …………………………………...
2.7.5.2. Electromagnetic eavesdropping ………………
2.7.5.3. Acoustic eavesdropping ……………………...
2.7.6. Jenis-jenis Serangan ……..……………………………...
2.7.6.1. Exhaustive Attack ..…………………………...
2.7.6.2. Analytical Attack ……………..........................
2.8. Bilangan Acak ………..…………………………………………...
19
22
22
23
23
24
24
24
26
27
27
27
28
29
29
30
30
31
33
34
34
34
35
35
36
36
36
36
36
36
37
38
BAB III
METODE PENELITIAN ……………………...................................................
3.1. Kerangka Berfikir ………………………..………….…………….
3.2. Perangkat Penelitian ………...…………...………………………..
3.3 Waktu dan Tempat Penelitian ..........................................................
BAB IV
ANALISA DAN PERANCANGAN ………………………………………….
4.1. Analisa ECC ……………………………………………...............
4.1.1. Analisa KeyGen (Key Generator) ………........…………
4.1.2. Analisa Proses Enkripsi ……………………………..…..
4.1.3. Analisa Proses Dekripsi ………………………………...
4.1.4. Analisa Fungsi-fungsi Pembantu ……………………….
4.1.4.1. Fungsi Text2int1 …..………………………….
4.1.5.2. Analisa Fungsi penandatanganan …………......
4.1.5. Analisa Panjang Pesan ………………......……………...
4.2. Rancangan Tampilan Aplikasi ………..………………..................
4.2. Tampilan Enkripsi ………………………………………..
4.3. Tampilan Dekripsi …….….………………………….........
BAB V
PEMBAHASAN DAN IMPLEMENTASI …………………………................
5.1. Pembahasan Dan Implementasi ………..…………………………
5.1.1. Spesifikasi Perangkat Keras ………..…………………...
5.1.2. Spesifikasi Perangkat Lunak ………………………..…
5.1.2.1. Operating system ……………………….…….
5.1.2.2. Programming ………………………..………...
5.2. Implementasi Kerja Perangkat Lunak ……..……………………...
5.2.1. Implementasi ElGamal ECC ……......……………..……
5.2.2. Proses-proses di dalam Perangkat Lunak ……………….
5.3. Pengujian Perangkat Lunak ………...….………………………….
5.3.1. Analisa Waktu dan Hasil Implementasi ElGamal ECC ..
5.3.1.1. Analisa Waktu Aritmetika Kurva Elliptic ….....
5.3.1.2. Analisa Waktu Representasi Plaintext ……….
39
39
41
42
43
43
44
46
51
55
55
56
57
59
59
60
62
62
63
63
63
64
64
64
66
63
71
71
72
5.3.1.3. Analisa Waktu Enkripsi dan Dekripsi ElGamal
ECC ..................................................................
5.3.2. Hasil Implementasi Aplikasi Tnda Tangan Digital ..........
5.4. Tampilan Aplikasi ..........................................................................
5.5.1.Tampilan Enkripsi .............................................................
5.5.2. Tampilan Dekripsi ............................................................
BAB VI
PENUTUP …………………………………………………………………….
6.1. Kesimpulan ………..…………………………………………...…
6.2. Saran …...…..……………………………………………...............
DAFTAR PUSTAKA …………………………………………………………
LAMPIRAN …………………………………………………………………...
73
73
76
76
77
79
79
79
80
81
DAFTAR TABEL
Halaman
1. Tabel 2.1. Perbandingan kecepatan pembuatan kunci ............................................... 26
2. Tabel 2.2. Waktu yang diperlukan untuk exhaustive key search ............................... 37
3. Tabel 3.1. Jadwal penelitian ........................................................ ...............................42
4. Tabel 5.1. Waktu Untuk Operasi Aritmetika Kurva Elliptik........................... ...........71
5. Tabel 5.2. Waktu Untuk Representasi Plaintext – Numerik....................................... 72
6. Tabel 5.3. Waktu Untuk Enkripsi dan Dekripsi ElGamal ECC ................................. 73
7. Tabel 5.4. Input .......................................................................................................... 75
8. Tabel 5.5. Output........................................................................................................ 76
DAFTAR GAMBAR
Halaman
1. Gambar 1.1 Konsep tanda tangan digital ..................................................................... 2
2. Gambar 2.1 Gambaran umum proses kriptografi ....................................................... 13
3. Gambar 2.2 Prosedur kerja algoritma simetris ........................................................... 14
4. Gambar 2.3 Prosedur kerja algoritma asimetris ......................................................... 16
5. Gambar 2.4 Contoh Kurva Elliptic …………… ....................................................... 17
6. Gambar 2.5 Flowchart ElGamal ECC........... ............................................................. 21
7. Gambar 2.6 Flowchart ECDSA .................................................................................... 21
8. Gambar 2.7 Interruption ............................................................................................ 34
9. Gambar 2.8 Interception ............................................................................................ 35
10. Gambar 2.9 Modification .......................................................................................... 35
11. Gambar 2.10 Fabrication ........................................................................................... 35
12. Gambar 3.1 Kerangka berfikir ................................................................................... 39
13. Gambar 4.1 Flowchart key_generator ....................................................................... 45
14. Gambar 4.2 Flowchart Enkripsi ................................................................................ 49
15. Gambar 4.3 Flowchart Dekripsi ................................................................................ 53
16. Gambar 4.4 Flowchart ECDSA ................................................................................. 58
17. Gambar 4.5 Rancangan Aplikasi Menu Enkripsi ...................................................... 59
18. Gambar 4.6 Rancangan Aplikasi Menu Dekripsi ...................................................... 60
19. Gambar 4.7 Rancangan Aplikasi Menu Keterangan .................................................. 60
20. Gambar 4.8 Flowchart Perangkat Lunak.................................................................... 61
21. Gambar 5.1 State Transition Diagram (STD) Perangkat Lunak ................................ 66
22. Gambar 5.2 Skema enkripsi dan penandatanganan .................................................... 69
23. Gambar 5.3 Tampilan Enkripsi .................................................................................. 77
24. Gambar 5.4 Tampilan Dekripsi... ............................................................................... 78
BAB I
PENDAHULUAN
1.1. Latar Belakang
Telah disepakati bersama bahwa kemampuan untuk menyediakan layanan
yang tidak dapat disangkal (non-repudiation services) adalah kebutuhan yang
fundamental untuk aplikasi e-commerce maupun e-goverment. Tanda tangan
digital adalah salah satu pilihan mekanisme keamanan yang menyediakan layanan
tersebut. Tanda tangan digital juga dapat digunakan untuk menyediakan layanan
keamanan juga seperti layanan autentikasi (penyelarasan) dan integritas data.
Tanda tangan digital mengacu kepada “data yang diembed (dibawa dengan label)
ke atau transformasi kriptografi dari unit data yang mengizinkan penerima data
untuk menguji sumber dari data dan integritas data sehingga melindungi data dari
kepalsuan”.
Dalam proses komunikasi data, walaupun data telah dienkripsi, terdapat
kemungkinan data tersebut dapat diketahui oleh orang lain. Salah satu
kemungkinan tersebut adalah orang tersebut menyadap media komunikasi yang
digunakan oleh kedua orang yang sedang berkomunikasi tersebut. Dalam keadaan
ini, orang yang menyadap berada di antara kedua orang yang sedang
berkomunikasi. Data-data yang dikirimkan oleh orang yang sedang berkomunikasi
satu sama lain selalu melalui orang yang menyadap tersebut, sehingga orang yang
menyadap tersebut dapat mengetahui semua informasi yang dikirimkan satu sama
lain. Keadaan ini muncul karena kedua orang yang sedang berkomunikasi tersebut
tidak dapat mem-verifikasi status dari orang yang berkomunikasi dengannya
tersebut, dengan mengambil asumsi bahwa proses penyadapan tersebut tidak
menyebabkan gangguan dalam jaringan.
Problema ini dapat diilustrasikan sebagai berikut, misalkan Adam hendak
mengirim kunci publiknya (PbA) kepada Badu. Tapi saat kunci itu dikirim lewat
jaringan publik, Maling mencuri kunci PbA. Kemudian Maling menyerahkan kunci
publiknya (PbM) kepada Badu, sambil mengatakan bahwa kunci itu adalah kunci
publik milik Adam. Badu, karena tidak pernah memegang kunci publik Adam
yang asli, percaya saja saat menerima PbM. Saat Adam hendak mengirim
dokumen yang telah ditandai dengan kunci privatnya (PvA) kepada Badu, sekali
lagi Maling mencurinya. Tanda tangan Adam pada dokumen itu lalu dihapus, dan
kemudian Maling membubuhkan tanda dengan kunci privatnya (PvM). Maling
mengirim dokumen itu ke Badu sambil mengatakan bahwa dokumen ini berasal
dari Adam dan ditandatangani oleh Adam. Badu kemudian memeriksa tanda
tangan itu, dan mendapatkan bahwa tanda tangan itu sah dari Adam. Tentu saja
kelihatan sah, karena Badu memeriksanya dengan kunci publik PbM, bukan
dengan PbA.
Untuk mengatasi masalah sekuritas pendistribusian kunci publik, dan
mencegah terjadinya ilustrasi penyadapan di atas, maka kunci publik ‘direkatkan’
pada suatu tanda tangan digital (digital signature). Tanda tangan ini digital selain
berisi kunci publik juga berisi informasi lengkap mengenai jati diri pemilik kunci
tersebut, sebagaimana layaknya KTP, seperti nomor seri, nama pemilik, kode
negara/perusahaan, dsb. Dengan menggunakan kunci publik, pemeriksa tanda
tangan dapat merasa yakin bahwa kunci publik itu memang berkorelasi dengan
seseorang yang namanya tercantum dalam file yang bertanda tangan digital
tersebut.
Gambar 1.1 Konsep tanda tangan digital
Penulis merasa sangat tertarik untuk mempelajari problema ini dan
solusinya dengan menggunakan metode Kurva Elliptik (Elliptic Curve). Oleh
karena itu, penulis mengambil tugas akhir (skripsi) dengan judul “ Pemanfaatan
Algoritma ECDSA (Elliptic Curve Digital Signature Algorithm) untuk
Penandatanganan Digital Chipertext ElGamal Elliptic Curve Cryptography”.
1.2. Perumusan Masalah
Berdasarkan latar belakang pemilihan judul, maka yang menjadi
permasalahan adalah bagaimana menjelaskan proses sekuritas transformasi data,
menjelaskan proses kerja algoritma kurva elliptic yaitu ECDSA dan ElGamal
ECC (ElGamal Elliptic Curve Cryptography) untuk mengatasi problema
sekuritas, pembuatan aplikasi penendatanganan digital dengan Algoritma Kurva
elliptik.
1.3. Tujuan dan Manfaat Penulisan
Tujuan penyusunan tugas akhir (skripsi) ini adalah:
a. Merancang prototipe perangkat lunak untuk pengamanan data.
b. Proses solusi dengan menggunakan tanda tangan digital kurva
elliptic (ECDSA).
c. Memahami proses enkripsi dan dekripsi menggunakan algoritma
ElGamal ECC (ElGamal Elliptic Curve Cryptography).
Manfaat dari penyusunan tugas akhir (skripsi) ini, yaitu :
a. Membantu pemahaman proses enkripsi dan dekripsi dan proses
pencegahan penyadapan dengan menggunakan tanda tangan
digital.
b. Perangkat lunak dapat digunakan sebagai fasilitas pendukung
dalam proses belajar mengajar, terutama untuk mata kuliah
Kriptografi.
c. Aplikasinya dapat dikembangkan dalam berbagai bidang, yaitu
transaksi online, internet banking, dan lain sebagainya.
1.4. Pembatasan Masalah
Karena keterbatasan waktu dan pengetahuan penulis, maka ruang lingkup
permasalahan dalam merancang perangkat lunak ini adalah sebagai berikut :
a. Proses enkripsi dan dekripsi pesan menggunakan algoritma
ElGamal ECC.
b. Konversi chipertext ke plaintext dalam algoritma ElGamal ECC,
dan sebaliknya.
c. Proses penandatanganan ECDSA (Ellipitc Curve Digital Signature
Algorithm).
d. Pajang pesan yang dapat digunakan dalam bentuk karakter (*.txt) .
1.5. Sistematika Penulisan Sistem
Dimaksudkan agar materi yang dibahas dapat disajikan secara
sistematis dan terarah maka dibuat sistematika penulisan sebagai
berikut :
BAB I PENDAHULUUAN
Bab ini mengemukakan latar belakang, perumusan masalah,
maksud dan tujuan penulisan, ruang lingkup, metode penelitian
dan sistematika penulisan.
BAB II LANDASAN TEORI
Dalam bab ini berisi tentang landasan teoritis yang berkaitan
dengan judul.
BAB III METODOLOGI PENELITIAN
Bab ini berisikan metode dan tahap-tahap yang akan digunakan
dalam penyusunan laporan tugas akhir. Serta tools atau alat yang
digunakan dalam pembuatan perangkat lunak.
BAB IV ANALISA DAN PERANCANGAN SISTEM
Bab ini berisikan analisa dan perancangan sistem perangkat
lunak yang akan dibangun. Analisa sistem membahas analisa
kebutuhan sistem dan analisa fasilitas sistem yang dibangun.
BAB V IMPLEMENTASI DAN PEMBAHASAN
Berisikan implementasi sistem perangkat lunak yang dibangun,
serta analisa dari perangkat lunak yang dibuat.
BAB VI KESIMPULAN DAN SARAN
Bab ini berisi kesimpulan yang diperoleh dari pembahasan
masalah yang telah dilakukan pada bab sebelumnya serta
beberapa saran yang coba disampaikan oleh penyusun untuk
pengembangan lebih lanjut.
BAB II
LANDASAN TEORI
2.1. Pengenalan Kriptografi
Cryptography (Kriptografi) adalah ilmu yang mempelajari teknik-teknik
matematika yang berhubungan dengan aspek-aspek pada keamanan informasi
misalnya kerahasiaan, integritas data, otentikasi pengirim / penerima data, dan
otentikasi data.
Cryptography (kriptografi) berasal dari bahasa Yunani yaitu dari kata
‘crypto’ dan ‘graphia’ yang berarti penulisan rahasia. Kriptografi adalah suatu
ilmu yang mempelajari penulisan secara rahasia. Kriptografi merupakan bagian
dari suatu cabang ilmu matematika yang disebut cryptology. Kriptografi bertujuan
menjaga kerahasiaan informasi yang terkandung dalam data sehingga informasi
tersebut tidak dapat diketahui oleh pihak yang tidak sah.
Cryptography (kriptografi) menggunakan teknik untuk mengubah
informasi yang dapat dibaca/teks asli (plaintext) menjadi kode-kode tertentu
disebut sebagai enkripsi (encryption) dan hasilnya disebut chipertext. Sedangkan
teknik untuk mengubah chipertext menjadi plaintext disebut dekripsi
(decryption). Algoritma yang digunakan untuk proses enkripsi dan dekripsi adalah
algoritma kriptografi (cryptographic algorithm) atau sering disebut chiper.
Algoritma kriptografi ini bekerja dengan menggunakan kunci (key) seperti kata,
nomor maupun frase tetentu. Jika dilakukan enkripsi pada plaintext yang sama
dengan menggunakan kunci yang berbeda, maka akan menjadi chipertext yang
berbeda. Menurut Menezes et al. dan Doraiswamy et al., kriptografi
(cryptography) adalah seni dan ilmu pengetahuan untuk menjaga keamanan
informasi. Orangnya disebut sebagai cryptographer . Kebalikan dari kriptografi
adalah cryptanalysis, yaitu seni dan ilmu untuk memecahkan chipertext menjadi
plaintext tanpa melalui cara yang seharusnya. Orangnya disebut sebagai
cryptanalyst.
Berdasarkan jenis kuncinya, algoritma kriptografi dapat dibagi menjadi
dua kelompok yaitu algoritma simetri (konvensional/ private key algorithm ) dan
algoritma asimetri (public key algorithm). algoritma simetri adalah algoritma
yang menggunakan kunci enkripsi yang sama dengan kunci dekripsinya. Pada
algoritma ini, pengirim dan penerima harus menyetujui suatu kunci tertentu yang
dinamakan kunci rahasia (secret key). Contohnya adalah DES (Data Encryption
Standard), Rijndael, Blowfish dan lain-lain. Sedangkan algoritma asimetri
didesain sedemikian sehingga kunci yang digunakan untuk enkripsi berbeda
dengan kunci untuk dekripsi. Kunci yang digunakan untuk enkripsi disebut kunci
publik (public key) dan dapat diketahui oleh orang lain. Sedangkan kunci untuk
dekripsi dinamakan kunci rahasia atau sering disebut sebagai private key dan
hanya diketahui oleh pemiliknya. Contohnya adalah RSA (Rivest-Shamir-
Adleman), ECC (Elliptic Curve Cryptography) dan lain-lain.
Istilah “kunci rahasia” pada algoritma simetri digunakan untuk
menyatakan kunci enkripsi sekaligus kunci dekripsi dan disebut secret key.
Sedangkan pada algoritma asimetri, kunci rahasia hanya digunakan untuk
menyatakan kunci dekripsi dan sering disebut sebagai private key. Hal ini dapat
mengakibatkan kesalahan penafsiran pada istilah “kunci rahasia”. Karena itu,
untuk pernyataan-pernyataan berikutnya digunakan istilah aslinya. Menurut Ono
W Purbo, saat ini terdapat tiga macam public key algorithm yang aman dan
efisien berdasarkan permasalahan matematis, yaitu Integer Factorization Problem
(IFP) , Discrete Logarithm Problem (DLP) dan Elliptic Curve Discrete
Logarithm Problem (ECDLP).
Menurut Stalling, ada beberapa tuntutan yang terkait dengan isu keamanan
data, yaitu:
a. Kerahasiaan (Confidentiality). Menjamin bahwa data-data tersebut hanya
bisa diakses oleh pihak-pihak tertentu saja.
b. Autentikasi (Authentication). Baik pada saat mengirim atau menerima
informasi, kedua belah pihak perlu mengetahui bahwa pengirim dari pesan
tersebut adalah orang yang sebenarnya seperti yang diklaim.
c. Integritas (Integrity). Tuntutan ini berhubungan dengan jaminan setiap
pesan yang dikirim pasti sampai pada penerimanya tanpa ada bagian dari
pesan tersebut yang diganti, diduplikasi, dirusak, diubah urutannya, dan
ditambahkan.
d. Non-Repudiasi (Nonrepudiation. Mencegah pengirim maupun penerima
mengingkari bahwa mereka telah mengirimkan atau menerima suatu
pesan/informasi. Jika sebuah pesan dikirim, penerima dapat membuktikan
bahwa pesan tersebut memang dikirim oleh pengirim yang tertera.
Sebaliknya, jika sebuah pesan diterima, pengirim dapat membuktikan
bahwa pesannya telah diterima oleh pihak yang ditujunya.
e. Kontrol akses (Access Control). Membatasi sumber-sumber data hanya
kepada orang-orang tertentu.
f. Ketersediaan (Availability). Jika diperlukan setiap saat semua informasi
pada sistem komputer harus tersedia bagi semua pihak yang berhak atas
informasi tersebut.
Dari keenam aspek keamanan data tersebut, empat diantaranya dapat diatasi
dengan menggunakan kritografi (cryptography) yaitu kerahasiaan
(confidentiality), integritas (integrity), autentikasi (authentication), dan Non-
Repudiasi (nonrepudiation).
2.1.1. Kerahasiaan (Confidentiality)
Pada sistem e-government dan e-commerce kerahasiaan data-data
pribadi (privacy) sangat penting. Hal ini kurang mendapat perhatian di
sistem e-government dan e-commerce yang sudah ada. Bayangkan jika
data pribadi anda, misalnya data KTP atau kartu keluarga, kartu kredit
dapat diakses secara online. Maka setiap orang dapat melihat tempat dan
tanggal lahir anda, alamat anda, dan data lainnya. Data ini dapat digunakan
untuk melakukan penipuan dan pembobolan dengan mengaku-aku sebagai
anda (atau keluarga anda).
Ancaman atau serangan terhadap kerahasiaan data ini dapat dilakukan
dengan menggunakan penerobosan akses, penyadapan data (sniffer, key
logger), social engineering (yaitu dengan menipu), dan melalui kebijakan
yang tidak jelas (tidak ada).
Untuk itu kerahasiaan data ini perlu mendapat perhatian yang besar
dalam implementasi sistem e-government dan e-commerce. Proteksi
terhadap data ini dapat dilakukan dengan menggunakan firewall (untuk
membatasi akses), segmentasi jaringan (juga untuk membatasi akses),
enkripsi (untuk menyandikan data sehingga tidak mudah disadap), serta
kebijakan yang jelas mengenai kerahasiaan data tersebut.
Pengujian terhadap kerahasian data ini biasanya dilakukan secara
berkala dengan berbagai metode.
Ada beberapa jenis informasi yang tersedia didalam sebuah
jaringan komputer. Setiap data yang berbeda pasti mempunyai grup
pengguna yang berbeda pula dan data dapat dikelompokkan sehingga
beberapa pembatasan kepada pengunaan data harus ditentukan. Pada
umumnya data yang terdapat didalam suatu perusahaan bersifat rahasia
dan tidak boleh diketahui oleh pihak ketiga yang bertujuan untuk menjaga
rahasia perusahaan dan strategi perusahaan. Backdoor, sebagai contoh,
melanggar kebijakan perusahaan dikarenakan menyediakan akses yang
tidak diinginkan kedalam jaringan komputer perusahaan.
Kerahasiaan dapat ditingkatkan dan didalam beberapa kasus
pengengkripsian data atau menggunakan VPN. Topik ini tidak akan, tetapi
bagaimanapun juga, akan disertakan dalam tulisan ini. Kontrol akses
adalah cara yang lazim digunakan untuk membatasi akses kedalam sebuah
jaringan komputer. Sebuah cara yang mudah tetapi mampu untuk
membatasi akses adalah dengan menggunakan kombinasi dari username-
dan-password untuk proses otentifikasi pengguna dan memberikan akses
kepada pengguna (user) yang telah dikenali. Didalam beberapa lingkungan
kerja keamanan jaringan komputer, ini dibahas dan dipisahkan dalam
konteks otentifikasi.
Dalam menjaga kerahasiaan data, kriptografi mentransformasikan
data jelas (plaintext) ke dalam bentuk data sandi (ciphertext) yang tidak
dapat dikenali. Ciphertext inilah yang kemudian dikirimkan oleh pengirim
(sender) kepada penerima (receiver). Setelah sampai di penerima,
ciphertext tersebut ditranformasikan kembali ke dalam bentuk plaintext
agar dapat dikenali.
2.1.2. Autentikasi (Authentication)
Autentikasi merupakan identifikasi yang dilakukan oleh masing –
masing pihak yang saling berkomunikasi, maksudnya beberapa pihak yang
berkomunikasi harus mengidentifikasi satu sama lainnya. Informasi yang
didapat oleh suatu pihak dari pihak lain harus diidentifikasi untuk
memastikan keaslian dari informasi yang diterima. Identifikasi terhadap
suatu informasi dapat berupa tanggal pembuatan informasi, isi informasi,
waktu kirim dan hal-hal lainnya yang berhubungan dengan informasi
tersebut.
Aspek ini berhubungan dengan metode untuk menyatakan bahwa
informasi betul-betul asli, orang yang mengakses atau memberikan
informasi adalah betul-betul orang yang dimaksud, atau server yang kita
hubungi adalah betul-betul server yang asli.
Masalah pertama, membuktikan keaslian dokumen, dapat
dilakukan dengan teknologi watermarking dan digital signature.
Watermarking juga dapat digunakan untuk menjaga “intelectual property”,
yaitu dengan menandai dokumen atau hasil karya dengan “tanda tangan”
pembuat. Masalah kedua biasanya berhubungan dengan akses kontrol,
yaitu berkaitan dengan pembatasan orang yang dapat mengakses
informasi.
Dalam hal ini pengguna harus menunjukkan bukti bahwa memang
dia adalah pengguna yang sah, misalnya dengan menggunakan password
Aspek / servis dari security biometric (ciri-ciri khas orang), dan
sejenisnya. Ada tiga hal yang dapat ditanyakan kepada orang untuk
menguji siapa dia:
a. What you have (misalnya kartu ATM)
b. What you know (misalnya PIN atau password)
c. What you are (misalnya sidik jari, biometric)
Penggunaan teknologi smart card, saat ini kelihatannya dapat
meningkatkan keamanan aspek ini. Secara umum, proteksi authentication
dapat menggunakan digital certificates. Authentication biasanya diarahkan
kepada orang (pengguna), namun tidak pernah ditujukan kepada server
atau mesin. Pernahkan kita bertanya bahwa mesin ATM yang sedang kita
gunakan memang benar-benar milik bank yang bersangkutan? Bagaimana
jika ada orang nakal yang membuat mesin seperti ATM sebuah bank dan
meletakkannya di tempat umum? Dia dapat menyadap data-data
(informasi yang ada di magnetic strip) dan PIN dari orang yang tertipu.
Memang membuat mesin ATM palsu tidak mudah.
Tapi, bisa anda bayangkan betapa mudahnya membuat web site
palsu yang menyamar sebagai web site sebuah bank yang memberikan
layanan Internet Banking. (Ini yang terjadi dengan kasus klikBCA.com.)
2.1.3. Integritas (Integrity)
Aspek integrity (integritas) terkait dengan keutuhan data. Aspek ini
menjamin bahwa data tidak boleh diubah (tampered, altered, modifed)
tanpa ijin dari yang berhak. Acaman terhadap aspek integritas dilakukan
dengan melalui penerobosan akses, pemalsuan (spoofing), virus yang
mengubah atau menghapus data, penyadapan dan penyerangan dengan
memasukkan diri di tengah-tengah pengiriman data. Proteksi terhadap
serangan ini dapat dilakukan dengan menggunakan digital signature,
digital certificate, message authentication code, hash function, dan
checksum. Pada prinsipnya mekanisme proteksi tersebut membuat kode
sehingga perubahan satu bit pun akan mengubah kode.
Jaringan komputer yang dapat diandalkan juga berdasar pada fakta
bahwa data yang tersedia apa yang sudah seharusnya. Jaringan komputer
mau tidak mau harus terlindungi dari serangan (attacks) yang dapat
merubah data selama dalam proses persinggahan (transmit). penyadapan
merupakan jenis serangan yang dapat merubah integritas dari sebuah data
yang mana penyerang (attacker) dapat membajak "session" atau
memanipulasi data yang terkirim.
Didalam jaringan komputer yang aman, partisipan dari sebuah
"transaksi" data harus yakin bahwa orang yang terlibat dalam komunikasi
data dapat diandalkan dan dapat dipercaya. Keamanan dari sebuah
komunikasi data sangat diperlukan pada sebuah tingkatan yang dipastikan
data tidak berubah selama proses pengiriman dan penerimaan pada saat
komunikasi data. Ini tidak harus selalu berarti bahwa "traffic" perlu di
enkripsi, tapi juga tidak tertutup kemungkinan serangan "Penyadap" dapat
terjadi. “Man in the middle attack” dimana seseorang menempatkan diri di
tengah pembicaraan dan menyamar sebagai orang lain.
2.1.4. Non-Repudiasi (Nonrepudiation)
Aspek ini menjaga agar seseorang tidak dapat menyangkal telah
melakukan sebuah transaksi. Sebagai contoh, seseorang yang mengirimkan
email untuk memesan barang tidak dapat menyangkal bahwa dia telah
mengirimkan email tersebut. Aspek ini sangat penting dalam hal electronic
commerce. Penggunaan digital signature, certifiates, dan teknologi
kriptografi secara umum dapat menjaga aspek ini. Akan tetapi hal ini
masih harus didukung oleh hukum sehingga status dari digital signature
itu jelas legal.
Setiap tindakan yang dilakukan dalam sebuah sistem yang aman
telah diawasi (logged), ini dapat berarti penggunaan alat (tool) untuk
melakukan pengecekan sistem berfungsi sebagaimana seharusnya. "Log"
juga tidak dapat dipisahkan dari bagian keamanan "system" yang dimana
bila terjadi sebuah penyusupan atau serangan lain akan sangat membantu
proses investigasi. "Log" dan catatan waktu, sebagai contoh, bagian
penting dari bukti di pengadilan jika cracker tertangkap dan diadili. Untuk
alasan ini maka "nonrepudiation" dianggap sebagai sebuah faktor penting
didalam keamanan jaringan komputer yang berkompeten.
ITU (International Telecommunication Union) telah
mendefinisikan "nonrepudition" sebagai berikut :
a. Kemampuan untuk mencegah seorang pengirim untuk
menyangkal kemudian bahwa dia telah mengirim pesan atau
melakukan sebuah tindakan.
b. Proteksi dari penyangkalan oleh satu satu dari entitas yang
terlibat didalam sebuah komunikasi yang turut serta secara
keseluruhan atau sebagian dari komunikasi yang terjadi.
Proses tranformasi dari plaintext menjadi ciphertext disebut proses
encipherment atau enkripsi (encryption), sedangkan proses
mentransformasikan kembali ciphertext menjadi plaintext disebut proses
dekripsi (decryption).
Untuk mengenkripsi dan mendekripsi data, kriptografi
menggunakan suatu algoritma (cipher) dan kunci (key). Cipher adalah
fungsi matematika yang digunakan untuk mengenkripsi dan mendekripsi.
Sedangkan kunci merupakan sederetan bit yang diperlukan untuk
mengenkripsi dan mendekripsi data.
Suatu pesan yang tidak disandikan disebut sebagai plaintext
ataupun dapat disebut juga sebagai cleartext. Proses yang dilakukan untuk
mengubah plaintext ke dalam ciphertext disebut encryption atau
encipherment. Sedangkan proses untuk mengubah ciphertext kembali ke
plaintext disebut decryption atau decipherment. Secara sederhana, istilah-
istilah di atas dapat digambarkan sebagai berikut :
Gambar 2.1 Gambaran umum proses kriptografi
Cryptography adalah suatu ilmu ataupun seni mengamankan pesan,
dan dilakukan oleh cryptographer. Sedang, cryptanalysis adalah suatu
ilmu dan seni membuka (breaking) ciphertext dan orang yang
melakukannya disebut cryptanalyst.
Cryptographic system atau cryptosystem adalah suatu fasilitas
untuk mengkonversikan plaintext ke ciphertext dan sebaliknya. Dalam
sistem ini, seperangkat parameter yang menentukan transformasi
pencipheran tertentu disebut suatu set kunci. Proses enkripsi dan dekripsi
diatur oleh satu atau beberapa kunci kriptografi. Secara umum, kunci-
kunci yang digunakan untuk proses pengenkripsian dan pendekripsian
tidak perlu identik, tergantung pada sistem yang digunakan. Secara umum
operasi enkripsi dan dekripsi dapat diterangkan secara matematis sebagai
berikut :
EK (M) = C (Proses Enkripsi)
DK (C) = M (Proses Dekripsi)
Pada saat proses enkripsi kita menyandikan pesan M dengan suatu
kunci K lalu dihasilkan pesan C. Sedangkan pada proses dekripsi, pesan C
tersebut diuraikan dengan menggunakan kunci K sehingga dihasilkan
pesan M yang sama seperti pesan sebelumnya.
Dengan demikian keamanan suatu pesan tergantung pada kunci
ataupun kunci-kunci yang digunakan, dan tidak tergantung pada algoritma
yang digunakan. Sehingga algoritma-algoritma yang digunakan tersebut
dapat dipublikasikan dan dianalisis, serta produk-produk yang
menggunakan algoritma tersebut dapat diproduksi massal. Tidaklah
menjadi masalah apabila seseorang mengetahui algoritma yang kita
gunakan. Selama ia tidak mengetahui kunci yang dipakai, ia tetap tidak
dapat membaca pesan.
2.2. Algoritma Kriptografi
2.2.1. Algoritma Simetrik (Symmetric Algorithms)
Algoritma kriptografi simetris atau disebut juga algoritma
kriptografi konvensional. Algoritma ini menggunakan kunci yang sama
untuk proses enkripsi dan proses dekripsi.
Algoritma kriptografi simetris dibagi menjadi 2 kategori yaitu
algoritma aliran (Stream Ciphers) dan algoritma blok (Block Ciphers).
Pada algoritma aliran, proses penyandiannya berorientasi pada satu bit
atau satu byte data. Sedang pada algoritma blok, proses penyandiannya
berorientasi pada sekumpulan bit atau byte data (per blok). Contoh
algoritma kunci simetris yang terkenal adalah DES (Data Encryption
Standard).
PlaintextEnkripsi
Ciphertext PlaintextDekripsi
KUNCI
Gambar 2.2 Prosedur kerja algoritma simetris
2.2.2. Algoritma Asimetrik (Asymmetric Algorithms)
Algoritma kriptografi asimetris adalah algoritma yang
menggunakan kunci yang berbeda untuk proses enkripsi dan dekripsinya.
Algoritma ini disebut juga algoritma kunci umum (publik key algorithm)
karena kunci untuk enkripsi dibuat umum (publik key) atau dapat diketahui
oleh setiap orang, tapi kunci untuk dekripsi hanya diketahui oleh orang
yang berwenang mengetahui data yang disandikan atau sering disebut
kunci pribadi (private key). Contoh algoritma terkenal yang menggunakan
kunci asimetris adalah ECC dan RSA.
Syarat – syarat yang harus dipenuhi oleh suatu algoritma publik-key
yaitu (Stalling, 1995):
a. Mudah secara komputasi bagi suatu pihak B untuk
mengkonstruksi sepasang kunci asimetris (kunci publik KU,
kunci pribadi KR).
b. Mudah secara komputasi bagi pengirim A, dengan memiliki
kunci publik B dan pesan yang ingin dienkripsi, M, untuk
menghasilkan ciphertext (C).
c. Mudah secara komputasi bagi penerima B untuk mendekripsi
ciphertext yang dihasilkan dengan menggunakan kunci
pribadinya untuk mengembalikan pesan aslinya.
d. Tidak bisa secara komputasi bagi pihak ketiga untuk
memperoleh kunci pribadi KRb hanya dengan mengetahui
kunci publik KUb.
e. Tidak bisa secara komputasi bagi pihak ketiga untuk
mengembalikan data asli M hanya dengan mengetahui kunci
publik KUb dan ciphertext C.
Walaupun bukanlah suatu keharusan bagi semua aplikasi publik-
key, namun persyaratan keenam bisa ditambahkan :
f. Fungsi enkripsi dan dekripsi bisa diterapkan dengan urutan
yang dibalik.
Kegunaan dari persyaratan keenam adalah untuk penerapan tanda
tangan digital (digital signature) yang digunakan memecahkan isu
otentikasi (authentication) dalam masalah keamanan data.
Menurut Stalling (Stalling, 1995), proses enkripsi publik-key
sederhana melibatkan empat tahap berikut :
a. Setiap user di dalam jaringan membuat sepasang kunci untuk
digunakan sebagai kunci enkripsi dan dekripsi dari pesan yang
akan diterima.
b. User kemudian mempublikasikan kunci enkripsinya dengan
menempatkan kunci publiknya ke tempat umum. Pasangan
kunci yang lain tetap dijaga kerahasiaannya.
c. Jika user A ingin mengirimkan sebuah pesan ke user B, ia akan
mengenkripsi pesan tersebut dengan menggunakan kunci
publik user B.
d. Pada saat user B ingin mendeskripsikan pesan dari user A, ia
akan menggunakan kunci pribadinya sendiri. Tidak ada pihak
lain yang bisa mendekripsi pesan itu karena hanya B sendiri
yang mengetahui kunci pribadi B.
Gambar 2.3 Prosedur kerja algoritma asimetris
2.3. Algoritma ElGamal ECC (ElGamal Elliptic Curve Cryptography)
Tahun 1985, Koblitz dan Miller mengenalkan kriptografi kurva elliptic
(elliptic curve cryptography) dan dikembangkan Taher ElGamal pada tahun yang
sama, dimana metode ini menggunakan masalah logaritma diskrit pada titik kurva
elliptic. Kriptografi kurva elliptic dapat digunakan untuk beberapa keperluan
seperti skema enkripsi (contohnya ElGamal ECC), tanda tangan digital
(contohnya ECDSA) dan protokol pertukaran kunci (contohnya Diffie-Hielman
ECC). Dalam penulisan skripsi ini, dibahas tentang ElGamal ECC dan hal-hal
yang diperlukan atau berkaitan dengan ElGamal ECC. Kemudian dibuat program
yang merupakan implementasi dari ElGamal ECC. ECC memiliki keamanan
berbasis pada salah satu masalah matematika yaitu elliptic curve (kurva berbentuk
elips). elliptic curvei merupakan operasi yang menyediakan fungsi satu atah yang
bisa digunakan untuk menghasilkan sistem kriptografis yang efisien. Fungsi satu
arah yang digunakan pada ECC disebut elliptic curve discrete logarithm problem
(ECDLP).
Gambar 2.4, Contoh Kurva Elliptic yxx =++ 1 atau E(1,1)
Operasi kriptografi yang utama pada ECC dalah scalar point multiplication
dimana komputer menghitung Q = [a]P, point P dimultiplikasi oleh integer a yang
menghasilkan point Q di kurva. Multiplikasi skalar dilakukan melalui kombinasi
penambahan point dan menggandaan point. Grup elliptic curve yang digunakan
pada kriptografi didefinisikan menjadi dua jenis:
1. GF(p), dimana p adalah prima
2. GF(2m) dimana setiap elemen adalahpolinomial biner tingkat m (yang
direpresentasikan sebagai m-bit string karena tiap koefisien hanya bisa
bernilai 0 atau 1)
ECC merupakan salah satu teknik enkripsi dan dekripsi dengan
menggunakan dua buah kunci. Kunci-kunci tersebut diperoleh dari hasil
perhitungan eksponensial, perkalian, pembagian, penjumlahan dan pengurangan.
Perhitungan dilakukan terhadap dua buah bilangan prima.
Besaran-besaran yang digunakan di dalam algoritma ElGamal ECC:
1. Bilangan prima, p (tidak rahasia)
2. Bilangan acak, g ( g < p ) (tidak rahasia)
3. Bilangan acak, x (x < p ) (rahasia)
4. M (plainteks) (rahasia)
5. a dan b (cipherteks) (tidak rahasia)
Prosedur Membuat Pasangan Kunci :
1. Pilih sembarang bilangan prima p.
2. Pilih dua buah bilangan acak, g dan x, dengan syarat g < p dan
1 ≤ x ≤ p – 2.
3. Hitung y = gx mod p.
Kunci publik adalah y, kunci rahasia adalah x. Nilai g dan p tidak
dirahasiakan dan dapat diumumkan kepada anggota kelompok.
ada 3 algoritma dalam generalized ElGamal encryption, yaitu algoritma
penentuan kunci, algoritma enkripsi dan algoritma dekripsi :
2.3.1. Algoritma penentuan kunci
Setiap pengguna berhak menentukan public key dan private
key yang akan digunakan bersama. Langkah-langkah yang perlu dilakukan
adalah :
a. Menentukan elemen Gα , sedemikian sehingga Gα
merupakan elemen pembangun dari grup G atas Fp.
b. Memilih bilangan bulat V∈[ ] 1, 1 n − secara random, n
merupakan order dari Gα .
c. Menghitung β = (Gα)V
d. β adalah public key dan V adalah private key.
2.3.2. Algoritma Enkripsi
Pasangan a dan b adalah cipherteks untuk blok pesan m. Jadi, ukuran
cipherteks dua kali ukuran plainteksnya.
a. Plainteks disusun menjadi blok-blok m1, m2, …, sedemikian
sehingga setiap blok merepresentasikan nilai di dalam rentang
0 sampai p – 1.
b. Pilih bilangan acak k, yang dalam hal ini 0 £ k £ p – 1,
sedemikian sehingga k relatif prima dengan p – 1.
c. Setiap blok m dienkripsi dengan rumus :
a = gk mod p
b = ykm mod p
Pasangan a dan b adalah cipherteks untuk blok pesan m. Jadi,
ukuran cipherteks dua kali ukuran plainteksnya.
Diasumsikan bahwa Adam mengirim plaintext yang dienkripsi
kepada Bedu dan Iwan telah mendapatkan public key Iwan, yaitu β .
Untuk mengenkripsi plaintext diperlukan langkah-langkah sebagai berikut
:
a. Merepresentasikan plaintext menjadi elemen grup G, misalnya
m ε G.
b. Memilih bilangan bulat k secara random, k ε [1,n −1].
c. Menghitung C1= (Gα)k dan dan C2 = m.( β k).
d. Mengirim chipertext Ck = (C1, C2) kepada Iwan.
2.3.3. Algoritma Dekripsi
Untuk mendekripsi a dan b digunakan kunci rahasia, x, dan
plainteks m diperoleh kembali dengan persamaan : m = b/a^x mod p
Catatlah bahwa karena : a^x gkx (mod p) Maka :
a. b/a^x ykm/ax
b. g^x km/gxk
c. m (mod p)
yang berarti bahwa plainteks dapat ditemukan kembali dari pasangan cipherteks a
dan b.
Diasumsikan Iwan menerima chipertext Ck = (C1, C2) dari Bedu. Untuk
mendekripsi chipertext tersebut, diperlukan langkah-langkah sebagai berikut :
a. Menghitung (C1)-V , V adalah private key Iwan.
b. Menghitung m = C2. (C1)-V , m adalah representasi dari
plaintext.
c. Mengkonversi m menjadi plaintext.
FlowChart :
N
Y
Gambar 2.5 Flowchart ElGamal ECC
Mulai
Masukan Sembarang bilangan prima p, bilangan acak g dan x
(g < p dan a <= x <= -2)
Gunakan kunci private (x,p)
Hitung y = g^x mod p
Dekripsi ?
Masukan nilai ciphertext
Hitung a^p-1-1 mod p
Hitung a^p-1-1 mod p
selesai
Gunakan kunci private (y,g,p)
Masukan nilai plaintext m ( m = [ 0, p - 1 ] )
Masukan bilangan acak k ( 0 <= k p - 1 )
Hitung a = g^k mod p
b = y^ m mod p
selesai
2.4. ECDSA (Elliptic Curve Digital Signature Algorithm)
Eliliptic Curve Digital Signature Algorithm (ECDSA) adalah kurva elliptic
analog dari Digital signature Algorithm (DSA). Tidak seperti permasalahan
logaritma diskrit dan permasalahan faktorisasi integer, algoritma subexponensial
diketahui untuk permasalahan kurva logarima diskrit. Untuk alasan ini, strength-
per-key-bit adalah subtansial terbesar dalam sebuah algoritma yang menggunakan
kurva elliptic.
2.4.1. Skematik ECDSA
Skematik ECDSA adalah part penghitung digital untuk menulis
penandaan. Sebuah penandaan digital adalah sebuah bilangan bebas pada
beberapa rahasia yang hanya diketahui oleh penandaan dan tambahannya,
pada sesuatu dari pesan yang ditandai. Penandaan ini akan menjadi
pembuktian.
Paparan ini dipersoalkan pada penandaan digital Asymetrik dengan
sebuah tambahan. “Asymetrik” berarti bahwa kesatuan memiliki sepasang
kunci dari kunci pribadi dan panghubung kunci umum. Kesatuan
melindungi dari kunci pribadi yang digunakan untuk penandaan pesan, dan
membuat tiruan yang tepat dari kunci umum untuk kesatuan yang lain
yang menggunakan ini untuk menetapkan penandaan. “Tambahan” berarti
sebuah cryptogrhaphic memiliki fungsi yang digunakan untuk
menimbulkan sebuah intisari pesan dari suatu pesan, dan menandakan
transformasi digunakan pada intisari pesan lebih dari pesan itu sendiri.
Skematik penandaan digital paenggunaan hari ini dapat
diklasifikasikan berdasarkan pada permasalahan matematika yang
menyediakan dasar untuk keamanan.
a. Integer Faktorisasi (IF). Yang dasar keamanan mereka pada
intrektabiliti dari permasalahan faktorisasi integer.
b. Diskrit logaritma (DL) yang dasar keamanannya dititik beratkan
pada permasalahan logaritma dalam sebuah daerah terbatas.
c. Skema Kurva Elliptik. Yang dasar keamanan dititik beratkan pada
permasalahan curva elliptic logaritma diskrit.
2.4.2. Parameter-parameter domain ECDSA
Parameter-parameter domain untuk ECDSA terdiri dari sebuah
pilihan yang sesuai dengan kurva eliptik E yang didefinisikan melebihi
bidang tak hingga Fq dari karakteristik p, dan sebuah titik dasar (base
point) G E(Fq). Parameter-parameter domain basa saja bersama-sama
dengan sebuah grup , atau khusus untuk seorang pemakai tunggal. Untuk
menyimpulkan, parameter-parameter domain terdiri dari :
a. Sebuah bidang ukuran q, dimana salah satu q = p , sebuah prime
ganjil, atau q = 2m ;
b. Sebuah indikasi FR (field representation) dari representasi yang
digunakan untuk elemen dari Fq ;
c. (opsional) sebuah string bit seedE dari ukuran minimal 160 bit ,
jika kurva eliptik dihasilkan sesuai dengan metode yang
dijelasksan pada sect.5.2;
d. dua elemen bidang xg dan yg dalam Fq yang mendefinisikan sebuah
titik tak hingg G = (xg , yg) dari orde primadalam E(Fq);
e. orde n dari titik G, dengan n >2160 dan n > 4 q ; dan
f. kofaktor h = #E(Fq)/n.
2.4.3. Proses ECDSA
Dalam protokol ECDSA, pihak yang akan melakukan tanda tangan
digital, mempunyai parameter domain kurva eliptik berupa D
={q,FR,a,b,G,n,h} dan pasangan kunci kunci rahasia dA dan kunci publik
QA. Kemudian pihak yang akan melakukan verifikasi terhadap tanda
tangan, memiliki salinan dokumen D yang otentik dan kunci publik QA.
2.4.3.1. Generasi kunci (Key Generation)
a. Memilih sebuah bilangan bulat random dA, yang nilainya
diantara [1,n-1]
b. Menghitung QA = dA • G = (x1,y1)
c. Kunci rahasia = dA, dan kunci publik = QA.
2.4.3.2. Penandaan (Signing)
a. Memilih sebuah bilangan bulat random k, yang nilainya
diantara [1,n-1].
b. Menghitung QA = k • G = (x1,y1) dan r = x1 modn, jika r
= 0, maka kembali ke langkah 1.
c. Kunci rahasia = dA, dan kunci publik = QA.
d. Menghitung k-1 mod n
e. Menghitung e = Hash(m)
f. Menghitung s = k-1 {e+dA • r} mod nAsd
g. tanda tangan Author untuk message (m) adalah (r,s)
2.4.3.3. Verifikasi (Verifying)
a. Memverifikasi bahwa r dan s adalah bilangan bulat yang
antara [1,n-1]
b. Menghitung e = Hash (m)
c. Menghitung w = s-1 mod n
d. Menghitung u1 = ew mod n dan u2 = rw mod n
e. Menghitung u1 • G + u2 • QA = (x1,y1)
f. Menghitung v = x1 mod n
g. Menerima tanda tangan jika dan hanya jika v = r
Flowchart ECDSA :
N
Y
Gambar 2.6 Flowchart ECDSA
Mulai
Random dA (1,n-1) (g < p dan a <= x <= -1)
Pubkey & privkey (g,g*secret)
Gunakan kunci private (x1,y1)
Hitung QA =
dA • G = (x1,y1)
Signing
Embed kunci ke pesan Kunci rahasia =
dA
k-1 mod n
e = Hash(m)
s = k-1 {e+dA •
r} mod nAsd
selesai
Verifikasi (r,s) [1,n-1]
Masukan tanda tangan ( r,s )
Masukan bilangan acak
w = s-1 mod n ( u1 u2)
Hitung v = x1 mod n
v = r
selesai
2.5. Kecepatan ECC
Untuk perbandingan algoritma berbasis ECC yang digunakan adalah
ECDSA (Elliptic Curve Digital Signature Algorithm), Dari tabel diatas ada
beberapa hal yang bias disimpulkan:
a. Kecepatan pembuatan kunci ECDDSA lebih cepat dari RSA
b. Kecepatan penandatanganan ECDSA lebih cepat dari RSA tapi
perbedaannya tidak berfaktor terlalu besar.
c. Kecepatan verifikasi algoritma RSA jauh lebih cepat dari ECDSA
Kecepatan Algoritma berbasis ECC, dimana kecepatan membuat tanda
tangan berdasar penandatangan melakukan hash, 1 multiplikasi skalar dan 1
multiplikasi modulo. Kecepatan memverifikasi tanda tangan dimana Komputer
menghitung hash, 1 multiplikasi skalar dan 1 multi eksponensial.
Tabel 2.1. Perbandingan ECC dan RSA dalam kecepatan memberi dan
memverifikasi tanda tangan
Dari fakta di atas kita bisa lihat bahwa RSA menggunakan perhitungan
modular eksponensial pada saat memberi tanda tangan ataupun saat memverifikasi
tanda tangan. Sedangkan pada ECC, pada menandatangan hanya melakukan
multiplikasi modulo dan skalar saja dan saat memverifikasi menggunakan satu
kali multieksponensial. Bisa kita katakan bahwa proses ECC lebih cepat dari RSA
Dapat dilihat dari Gambar di atas bahwa kecepatan menandatangan dan
memverifikasi tanda tangan oleh algoritma berbasis ECC jauh lebih cepat
daripada yang menggunakan algoritma RSA. Tanda tangan berbasis ECC pada
sertifikat bersifat lebih kecil dan lebih cepat diciptakan dan kunci publik dimana
tersimpan pada sertifikat juga lebih kecil dan agile. Verifikasi juga lebih cepat
terutama pada kekuatan kunci yang lebih tinggi.
2.6. Ukuran
Panjang tanda tangan digital ECDSA = 320 bit (2 x 160 bit, tanda tangan
merupakan pasangan r dan s yang masing-masing panjangnya 160 bit), atau 40
bytes. Sedangkan ukuran tanda tangan digital RSA adalah
1020 bit ≈ 1024 bit = 128 bytes. Sehingga total ukuran tanda tangan digital
ECDSA jauh lebih kecil dari RSA.
Untuk ukuran Kunci Publik, Kunci public RSA mengandung (n,e) dimana
n adalah modulus dan e adalah eksponen publik. Di 1024-bit RSA. N akan
memiliki 1024 bit. Dan nilai untuk eksponen publik e=216+1. Lalu, kunci publik
RSA akan memiliki 128 byte untuk modulud dan 3 byte untuk ekponen publik,
total adalah 131 byte. Kunci publik ECC mengandung point dari elliptic curve.
Setiap point direpresentasikan dengan elemen (x,y) masing-masing dengan 192
bit. Untuk 192 bit elliptic curve, kunci public akan direpresentasikan oleh 48byte.
Ukuran tanda tangan:
1. Tanda tangan RSA mengandung 1024 bit = 128 byte.
2. Tanda tangan ECC mengandung dua 192 bit = 48 byte
2.7. Protokol Kriptografi
2.7.1. Pengertian Protokol
Suatu protokol adalah serangkaian langkah yang melibatkan
dua pihak atau lebih dan dirancang untuk menyelesaikan suatu tugas.
Dari definisi ini dapat diambil beberapa arti sebagai berikut :
a. protokol memiliki urutan dari awal hingga akhir;
b. setiap langkah harus dilaksanakan secara bergiliran;
c. suatu langkah tidak dapat dikerjakan bila langkah sebelumnya
belum selesai;
d. diperlukan dua pihak atau lebih untuk melaksanakan protokol;
e. protokol harus mencapai suatu hasil;
Selain itu, suatu protokol pun memiliki karakteristik yang lain, yaitu :
a. setiap orang yang terlibat dalam protokol harus mengetahui
terlebih dahulu mengenai protokol dan seluruh langkah yang
akan dilaksanakan;
b. setiap orang yang terlibat dalam protokol harus menyetujui
untuk mengikutinya;
c. protokol tidak boleh menimbulkan kerancuan;
d. protokol harus lengkap;
Cryptographic protocol adalah suatu protokol yang
menggunakan kriptografi. Protokol ini melibatkan sejumlah algoritma
kriptografi, namun secara umum tujuan protokol lebih dari sekedar
kerahasiaan. Pihak-pihak yang berpartisipasi mungkin saja ingin
membagi sebagian rahasianya untuk menghitung sebuah nilai,
menghasilkan urutan random, atau pun menandatangani kontrak secara
bersamaan. Penggunaan kriptografi dalam sebuah protokol terutama
ditujukan untuk mencegah atau pun mendeteksi adanya eavesdropping
dan cheating.
2.7.2. Fungsi Protokol
Dalam kehidupan kita sehari-hari terdapat banyak sekali
protokol tidak resmi, misalnya saja dalam permainan kartu,
pemungutan suara dalam pemilihan umum. Akan tetapi tidak ada
seorang pun yang memikirkan mengenai protokol-protokol ini,
protokol-protokol ini terus berkembang, semua orang mengetahui
bagaimana menggunakannya.
Saat ini, semakin banyak interaksi antar manusia dilakukan
melalui jaringan komputer. Komputer ini tentu saja memerlukan suatu
protokol formal agar dapat melakukan hal yang biasa dilakukan
manusia tanpa berpikir. Bila kita berpindah dari satu daerah ke daerah
lain dan mengetahui bahwa kartu pemilihan suaranya berbeda dengan
yang biasa kita gunakan, kita dapat beradaptasi dengan mudah. Akan
tetapi kemampuan ini belum dimiliki oleh komputer, sehingga
diperlukan suatu protokol.
Protokol digunakan untuk mengabtraksikan proses
penyelesaian suatu tugas dari mekanisme yang digunakan. Protokol
komunikasi adalah sama meskipun diimplementasikan pada PC atau
VAX. Bila kita yakin bahwa kita memiliki protokol yang baik, kita
dapat mengimplementasikannya dalam segala benda mulai dari telepon
hingga pemanggang roti cerdas.
2.7.3. Jenis Protokol Kriptografi
2.7.3.1. Protokol Pembagian Rahasia
Jika Adam memiliki rahasia, ia dapat memberikan
‘separuh’ rahasia itu kepada Badu dan ‘separuh’ rahasia itu kepada
Iwan. Badu, yang menerima paruh pertama rahasia Adam, tidak
bisa mengetahui apa isi rahasia itu. Demikian pula dengan Iwan.
Namun, jika Badu dan Iwan menggabungkan potongan-potongan
rahasia itu, maka akan tergambar rahasia Adam. Pembagian rahasia
(secret splitting) dapat dilakukan dengan cara:
a. Adam membuat seuntai string acak R yang panjangnya
sama dengan pesan rahasia M.
b. Adam melakukan operasi XOR antara M dengan R,
sehingga menghasilkan S.
c. Adam memberikan R kepada Badu dan S kepada Iwan
d. Jika Badu dengan Iwan bertemu, maka mereka sanggup
mendapatkan pesan rahasia M dengan cara melakukan
operasi XOR antara S dengan R.
2.7.3.2. Protokol Komitmen-Bit
Protokol ini bermanfaat kalau misalnya Adam hendak
membuat suatu pernyataan atau komitmen (katakanlah suatu string
binari 1000), namun Adam tak ingin agar Badu mengetahui isi
pernyatan tersebut sebelum saatnya. Badu harus merasa yakin
bahwa Adam pada saatnya nanti, benar-benar mengeluarkan isi
pernyataan yang sebenarnya saat melakukan komitmen, dan tidak
mengeluarkan pernyataan yang sudah diubah (misalnya mengubah
string tadi menjadi 1001). Ada beberapa jenis protokol komitmen-
bit, namun di bawah ini hanya dijelaskan salah satu diantaranya,
yakni dengan fungsi hash satu arah:
a. Adam membuat dua buah string secara acak, yakni R1 dan
R2
b. Adam menggabungkan kedua string acak itu ke dalam
pernyataannya (b) yang akan dikomitmenkan menjadi (R1,
R2, b)
c. Adam menghitung hash dari gabungan string itu, Hash(R1,
R2, b).
d. Adam kemudian mengirimkan hash tersebut beserta R1
kepada Badu. Badu akan menyimpannya untuk
pemeriksaan nanti.
e. Jika sudah tiba saatnya untuk menunjukkan pernyataannya,
Adam memberikan seluruh string (R1, R2, b) kepada Badu.
f. Badu memeriksa fungsi hash dari (R1, R2, b). Jika cocok
dengan hash yang diperiksanya dulu, maka pernyataan
Adam tidak diubah.
2.7.3.3. Tanda Tangan Buta
Badu disodori 100 amplop tertutup oleh Adam. Amplop itu
berisi secarik pesan dan kertas karbon. Badu membuka 99 amplop
secara acak. Jika seluruh amplop yang dibuka ternyata berisi pesan
yang mirip, maka Badu dapat merasa bahwa amplop ke-100 juga
berisi pesan yang mirip pula. Namun, jika satu saja dari 99 amplop
tadi ada yang isi berbeda dari yang lain, maka Badu dapat
mencurigai bahwa isi amplop ke-100 bisa saja juga tidak mirip
dengan isi ke-98 amplop lainnya.
Dalam kasus dimana ternyata ke-99 amplop yang dibuka
secara acak tadi berisi pesan yang mirip, maka dengan keyakinan
yang cukup tinggi Badu berani menandatangani amplop terakhir
yang belum dibuka. Tanda tangan Badu akan menembus amplop
dan kertas karbon, sehingga pesan dalam amplop akan
tertandatangani oleh Badu. Badu kurang lebih tahu apa isi pesan di
amplop ke-100 itu. Protokol tanda tangan buta (blind signature)
bekerja sebagai berikut:
a. Adam ‘mengalikan’ dokumen (yang akan ditandatangani)
dengan sebuah faktor pembuta.
b. Adam mengirimkan dokumen itu kepada Badu
c. Badu menandatangani dokumen itu
d. Badu mengembalikan dokumen yang sudah ditandatangani
tadi kepada Adam
e. Adam membaginya dengan faktor pembuta, sehingga
mendapatkan dokumen yang asli sudah tertandatangani
oleh Badu.
2.7.3.4. Protokol Uang Digital
David Chaum, memiliki beberapa paten atas protokol uang
digital yang diciptakannya. Berikut ini dijelaskan salah satu
protokol uang digital:
a. Adam menyiapkan n lembar uang dengan nilai tertentu.
Setiap uang diberi nomor seri acak X yang cukup panjang,
sehingga kemungkinan 2 bilangan acak sama kecil sekali.
Dalam setiap uang juga ada n (I1, I2, …, In) string
identifikasi yang berguna untuk memberikan informasi
mengenai pemilik uang, yakni Adam. Adam kemudian
memecah tiap-tiap string identitas diri itu tadi menjadi dua
bagian dengan menggunakan protokol pemecahan rahasia.
Lantas Adam melakukan bit-komitmen pada setiap
pecahan. Contoh uang yang disiapkan adalah:
Nilai: Rp.1.000,-
Nomor seri acak: X
String identitas: I1 = (I1L, I1R)
I2 = (I2L, I2R)
....
In = (InL, InR)
b. Adam memasukkan uang itu kedalam yang juga disisipi
kertas karbon amplop (mengalikan uang dengan faktor
pembuta), lalu memberikannya kepada bank.
c. Bank akan meminta Adam untuk membuka n - 1 amplop itu
secara acak. Bank memeriksa apakah semua uang tersebut
memiliki nilai yang sama. Bank juga meminta kepada
Adam untuk membuktikan kejujuran dirinya saat
menuliskan string identifikasi pada uang itu, dengan cara
menggabungkan pasangan-pasangan string identifikasi.
d. Jika bank merasa bahwa Adam tidak melakukan
kecurangan, maka bank akan menandatangani uang terakhir
yang masih di dalam amplop itu dan menyerahkannya
kepada Adam. Tanda tangan bank akan menembus amplop
dan kertas karbon sehingga uang di dalamnya
tertandatangani.
e. Adam membuka amplop. Uang siap dipakai.
f. Adam menyerahkan uang kepada Badu. Badu sebagai
penerima uang, akan memeriksa apakah tanda tangan bank
pada uang itu absah.
g. Badu akan menyuruh Adam untuk membuka salah satu sisi
dari setiap string identifikasi di setiap uang dengan cara
memberikan string pemilih sepanjang n-bit. Artinya, jika
string pemilih itu b1, b2, …, bn maka Adam harus membuka
sisi kiri atau kanan dari Ii, tergantung apakah bi itu 0 atau 1.
h. Setelah itu Badu membawa uang tersebut ke bank. Bank
akan memeriksa apakah nomor seri uang tersebut sudah
pernah diterima oleh bank. Kalau belum ada, maka uang
tersebut dinyatakan sah.
i. Jika nomor seri uang itu sudah pernah diterima oleh bank,
maka bank akan memeriksa string identitas yang sudah
terbuka pada uang itu dan membandingkannya dengan
string identitas pada uang dengan nomor seri sama yang
pernah diterima bank sebelumnya. Jika ternyata string
identitas itu sama, maka berarti Badu yang menggandakan
uang tersebut. Namun jika berbeda, maka berarti Adam
yang menggandakan uang digital tersebut.
2.7.4. Penyerangan Terhadap Protokol
Penyerangan cryptographic dapat ditujukan pada beberapa
hal berikut :
a. algoritma cryptographic yang digunakan dalam protokol;
b. teknik cryptographic yang digunakan untuk
mengimplementasikan algoritma dan protokol;
c. protokol itu sendiri;
Seseorang dapat mencoba berbagai cara untuk menyerang suatu
protokol. Mereka yang tidak terlibat dalam protokol dapat menyadap
sebagian atau seluruh protokol. Tindakan ini disebut penyerangan
pasif, karena si penyerang tidak mempengaruhi atau mengubah
protokol, ia hanya mengamati protokol dan berusaha untuk
memperoleh informasi.
Selain itu, seorang penyerang dapat berusaha untuk mengubah
protokol demi keuntungannya sendiri. Ia dapat mengirimkan pesan
dalam protokol, menghapus pesan, atau bahkan mengubah informasi
yang ada di dalam suatu komputer. Tindakan-tindakan ini disebut
sebagai penyerangan aktif, karena ia membutuhkan suatu campur
tangan aktif.
Seorang penyerang tidaklah hanya berasal dari lingkungan luar
protokol, namun ia mungkin juga berasal dari dalam protokol itu
sendiri, ia dapat merupakan salah satu pihak yang terlibat dalam
protokol. Tipe penyerang semacam ini disebut sebagai cheater.
Passive cheater mengikuti protokol, tetapi berusaha memperoleh
informasi lebih banyak daripada yang diperbolehkan protokol bagi
dirinya. Active cheater mengubah protokol dalam usahanya untuk
berbuat curang.
Usaha untuk menjaga keamanan protokol akan semakin sulit
apabila pihak-pihak yang terlibat umumnya merupakan active cheater,
oleh karena itu suatu protokol yang baik harus mampu atau pun harus
aman terhadap kemungkinan passive cheating maupun active cheating.
2.7.4.1. Jenis-jenis Pola Penyerangan
Proteksi data dan informasi dalam komunikasi komputer
menjadi penting karena nilai informasi itu sendiri dan meningkatnya
penggunaan komputer di berbagai sektor. Melihat kenyataan semakin
banyaknya data yang diproses dengan komputer dan dikirim melalui
perangkat komunikasi elektronik maka ancaman terhadap pengamanan
data akan semakin meningkat. Beberapa pola ancaman atau serangan
pada komunkasi data dalam komputer dapat diterangkan sebagai
berikut :
2.7.4.1.1 Interruption
Interruption terjadi bila data yang dikirimkan dari A
tidak sampai pada orang yang berhak (B). Interruption
merupakan pola penyerangan terhadap sifat availability
(ketersediaan data).
Gambar 2.7 Interruption
2.7.4.1.2. Interception
Serangan ini terjadi bila pihak ketiga C berhasil
membaca data yang dikirimkan. Interception merupakan pola
penyerangan terhadap sifat confidentiality (kerahasiaan data).
Gambar 2.8 Interception
2.7.4.1.3. Modification
Pada serangan ini pihak ketiga C berhasil merubah
pesan yang dikirimkan. Modification merupakan pola
penyerangan terhadap sifat integrity (keaslian data).
Gambar 2.9 Modification
2.7.4.1.4. Fabrication
Pada serangan ini, penyerang berhasil mengirimkan
data ke tujuan dengan memanfaatkan identitas orang lain.
Fabrication merupakan pola penyerangan terhadap sifat
authenticity.
Gambar 2.10 Fabrication
2.7.5. Beberapa metode penyadapan data
2.7.5.1. Wiretapping
Penyadap mencegat data yang ditransmisikan pada saluran kabel
komunikasi dengan menggunakan sambungan perangkat keras.
2.7.5.2. Electromagnetic eavesdropping
Penyadap mencegat data yang ditransmisikan melalui saluran
wireless, misalnya radio dan microwive.
2.7.5.3. Acoustic Eavesdropping.
Menangkap gelombang suara yang dihasilkan oleh suara
manusia.
Yang dimaksud dengan serangan (attack) adalah usaha (attempt)
atau percobaan yang dilakukan oleh kriptanalis.
2.7.6. Jenis-jenis serangan
2.7.6.1. Exhaustive attack atau brute force attack
Percobaan yang dibuat untuk mengungkap plainteks atau
kunci dengan mencoba semua kemungkinan kunci (trial and error).
Asumsi yang digunakan:
a. Kriptanalis mengetahui algoritma kriptografi
b. Kriptanalis memiliki sebagian plainteks dan chiperteks
yang bersesuaian.
Caranya: plainteks yang diketahui dienkripsikan dengan
setiap kemungkinan kunci, dan hasilnya dibandingkan dengan
chiperteks yang bersesuaian. Jika hanya chiperteks yang tersedia,
chiperteks tersebut didekripsi dengan dengan setiap kemungkinan
kunci dan plainteks hasilnya diperiksa apakah mengandung makna.
Misalkan sebuah sistem kriptografi membutuhkan kunci
yang panjangnya 8 karakter, karakter dapat berupa angka (10
buah), huruf (26 huruf besar dan 26 huruf kecil), maka jumlah
kunci yang harus dicoba adalah
62 62 62 62 62 62 62 62 = 628 buah
Secara teori, serangan secara exhaustive ini dipastikan
berhasil mengungkap plainteks tetapi dalam waktu yang sangat
lama.
Tabel 2.2 Waktu yang diperlukan untuk exhaustive key search
Untuk menghadapi serangan ini, perancang kriptosistem
(kriptografer) harus membuat kunci yang panjang dan tidak mudah
ditebak.
Ukuran
kunci
Jumlah kemungkinan
kunci
Lama waktu untuk 106
percobaan per detik
Lama waktu untuk 1012
percobaan per detik
16 bit 216 = 65536 32.7 milidetik 0.0327 mikrodetik
32 bit 232 = 4.3 109 35.8 menit 2.15 milidetik
56 bit 256 = 7.2 1016 1142 tahun 10.01 jam
128 bit 2128 = 4.3 1038 5.4 1024 tahun 5.4 1018 tahun
2.7.6.2. Analytical attack
Pada jenis serangan ini, kriptanalis tidak mencoba-coba
semua kemungkinan kunci tetapi menganalisis kelemahan algoritma
kriptografi untuk mengurangi kemungkinan kunci yang tidak
mungkin ada.
Analisis dilakukan dengan dengan memecahkan persamaan-
persamaan matematika (yang diperoleh dari definisi suatu algoritma
kriptografi) yang mengandung peubah-peubah yang
merepresentasikan plainteks atau kunci. Asumsi yang digunakan:
kriptanalis mengetahui algoritma kriptografi.
Untuk menghadapi serangan ini, kriptografer harus membuat
algoritma kriptografi yang kompleks sedemikian sehingga plianteks
merupakan fungsi matematika dari chiperteks dan kunci yang cukup
kompleks, dan tiap kunci merupakan fungsi matematika dari
chiperteks dan plainteks yang cukup kompleks. Metode analytical
attack biasanya lebih cepat menemukan kunci dibandingkan dengan
exhaustive attack.
2.8 Bilangan Acak
Bilangan acak adalah deretan angka atau nilai yang acak dan tidak dapat
diprediksi secara keseluruhan. Untuk menghasilkan bilangan acak merupakan hal
yang sulit, kebanyakan pembangkit bilangan acak (random number generator =
RNG) mempunyai beberapa bagian yang dapat diprediksi dan berhubungan dan
biasanya kebanyakan RNG mengulang string yang sama setelah melakukan n
putaran.
Suatu pembangkit bilangan acak atau random number generator (RNG)
adalah suatu peralatan komputasional atau fisik yang dirancang untuk
menghasilkan suatu urutan nilai yang tidak dapat mudah ditebak polanya, jadi
urutan tersebut dapat diperlakukan sebagai suatu keadaan acak. Setiap output dari
suatu RNG adalah berupa true random numbers, yang berarti nilai-nilai dimana
secara keseluruhan bersifat acak, tidak dapat diprediksi dan tidak bergantung pada
nilai-nilai yang dihasilkan sebelumnya. Untuk menghasilkan true random
numbers merupakan hal yang sulit.
Sedangkan pembangkit bilangan acak semu atau pseudo random number
generator (PRNG) merupakan suatu algoritma yang menghasilkan suatu urutan
nilai dimana elemen-elemennya bergantung pada setiap nilai yang dihasilkan.
Bilangan acak yang dihasilkan adalah bilangan acak semu (pseudo), karena
pembangkitan bilangannya dapat diulang kembali. Oleh karena itu, pembangkit
deret bilangan acak semacam itu disebut pembangkit bilangan acak semu (pseudo
random number generator atau PRNG).
BAB III
METODOLOGI PENELITIAN
3.1 Kerangka Berfikir
Berikut merupakan tahapan dalam pembuatan aplikasi tanda tangan
digital menggunakan algoritma ECDSA (Elliptic Curve Digital Sugnature
Algorithm) pada chiperteks ElGamal Elliptic Curve Cryptography
menggunakan Matlab.
` Try & error
Gambar 3.1 Kerangka berfikir
Identifikasi masalah
Mulai
Studi Pustaka
Metode Algoritma kurva elliptik
Tanda tangan Digital Fungsi Enkripsi Fungsi Dekripsi Panjang data yang
digunakan GUI
Analisa Fungsi
Fungsi & metodologi
Kurva Elliptik
Perancangan aplikasi
Verifikasi fungsi
Identifikasi fungsi
Penerapan metode dan fungsi pada aplikasi
Dokumentasi
Selesai
Metode key_gen ECC Metode Enkripsi ECC Metode Dekripsi ECC Metode pembubuhan tanda
tangan ECDSA
a. Identifikasi Masalah
Identifikasi masalah merupakan tahap awal dari penelitian ini.
Masalah yang diidentifikasi adalah Algoritma kurva elliptik secara
global, metodologi serta fungsi yang digunakan dalam penanda
tanganan digital serta metode enkripsinya yang di bahas pada BAB I.
b. Studi Pustaka
Studi pustaka dilakukan untuk melengkapi pengetahuan dasar yang
dimiliki peneliti, sehingga peneliti dapat menyelesaikan penelitian ini,
dimana pada tahap ini dikumpulkan beberapa referensi yang berkaitan
dengan metodologi-metodologi yang digunakan dalam perancangan
aplikasi penandatanganan menggunakan algoritma Kurva elliptik.
c. Analisa fungsi
Analisa fungsi berfungsi untuk menganalisa permasalahan
keamanan data yang dibutuhkan pada saat ini, analisa dilakukan
denagn mengambilan data fungsional sebagai bahan baku penelitian.
Dalam hal ini dilakukan pengambilan fungsi-fungsi yang telah
diperoleh dari studi pustaka untuk diimplementasikan di dalam
aplikasi.
d. Perancangan Aplikasi
Perancangan aplikasi merupakan tindak lanjut dari analisa fungsi,
dimana pada tahap ini dibuat sampel-sampel fungsi, diantaranya fungsi
enkripsi, dekripsi dan penandatanganan kemudian diolah dan
diaplikasikan untuk membentuk suatu algoritma yang dapat
menjadikan aplikasi yang dapat mengimplementasikan fungsi-fungsi di
atas.
e. Identifikasi
Setelah tahap analisa fungsi dan perancangan aplikasi selesai
dilakukan maka akan terbentuk Metode aplikasi, model aplikasinya,
serta panjang data yang telah ditetapkan yang dapat digunakan untuk
pengujian menggunakan tanda tangan digital tersebut, tahap inilah
metode-metode tersebut akan dikaji serta dilakukan pengujian terhadap
akusisi data yang digunakan.
f. Verifikasi
Setelah tahap identifikasi selesai dilakukan, maka fungsi akan
dikaji ulang untuk memperoleh hasil yang maksimal, fungsi-fungsi dan
metode akan dimaksimalkan sehingga dapat digunakan sebagai data
pelatihan dan membentuk Algoritma yang akan digunakan untuk
pengujian metode penanda tanganan, enkripsi, dan dekripsi, serta
penggunaan panjang data yang digunakan.
g. Aplikasi Algoritma ElGamal ECC.
Pada proses inilah hasil pengujian diimplementasikan dan
dihasilkan final project menggunakan tanda tangan digital dengan
Algoritma ECDSA (Elliptic Curve Digital Signature Algorithm)
ElGamal ECC.
3.2 Perangkat Penelitian
Perangkat penelitian yang digunakan terdiri dari:
3.2.1 Hardware
Adapun hardware komputer yang digunakan penulis untuk
membangun aplikasi tanda tangan digital dengan menggunakan
algoritma ElGamal ECC ini, adalah sebagai berikut:
a. Processor Intel Pentium IV 2,21 Ghz
b. RAM DDR 2 Gb
c. VGA Memory NVDIA GeForce FX 5500 256 Mb
d. Harddisk Seagate 320 Gb
e. Monitor 17 inch at resolution 1024x768
f. Mouse dan Keyboard
3.2.2 Software
Sedangkan kebutuhan software untuk membangun aplikasi tanda
tangan digital dengan menggunakan algoritma ElGamal ECC ini, penulis
menggunakan pendukung sebagai berikut :
a. Sistem Operasi Microsoft Windows XP Profesional SP2
b. MATLAB 7.4 Programming
c. Open office
3.3 Waktu dan Tempat Penelitian
Penelitian ini dilaksanakan mulai Desember 2008 hingga April 2009,
dan bertempat di Fakultas Ilmu Komputer, Universitas Pembangunan
Nasional “Veteran” Jakarta dan kediaman di daerah Gambir, Jakarta Pusat.
Waktu penelitian dan jenis penelitian :
Tabel 3.1 Jadwal Penelitian
BAB IV
ANALISA DAN PERANCANGAN
Desember Januari Februari Maret NO KEGIATAN
1 2 3 4 5 1 2 3 4 5 1 2 3 4 1 2 3 4 5A Persiapan
1. Pemilihan Topik 2. Pengumpulan Informasi 3. Study Lapangan 4. Pengajuan Proposal
B Penyusunan
1. Perancangan Aplikasi 2. Pembuatan Program Aplikasi 3. Uji Coba Aplikasi 4. Analisa Aplikasi C Penulisan Tugas Akhir
D Penyerahan Tugas Akhir
4.1. Analisa Ecc
Analisa untuk merancang prototipe perangkat lunak pemanfaatan tanda
tangan digital menggunakan algoritma ElGamal ECC (ElGamal Elliptic Curve
Cryptography) terbagi menjadi 3 bagian, yaitu:
4.1.1 Analisa KeyGen (Key Generator) yaitu pengaktifan kunci public kuva
Elliptik.
a. Menentukan bilangan bulat secara random p ε [1, NG−1] , dengan NG
adalah order dari basic point GE (elemen pembangun grup elliptic).
b. Menghitung public key (Betaa) β =VGE .
c. p adalah private key dan (Betaa) β adalah public key.
4.1.2. Analisa enkripsi.
a. Merepresentasikan plaintext menjadi titik kurva elliptic PM.
b. Memilih bilangan bulat secara random k ε [1, NG−1].
c. Mengenkripsi titik kurva elliptic PM menjadi chipertext pair of points
PC dengan menggunakan public key penerima.
4.1.3. Analisa dekripsi
a. Misalkan PC adalah chipertext pair of points hasil enkripsi.
b. Titik pertama pada PC dikalikan dengan private key penerima.
c. Hasil perkaliannya untuk mengurangi titik yang kedua pada PC .
d. Menguraikan PC sehingga dihasilkan titik kurva elliptic PM.
e. Mengkonversi PM menjadi menjadi plaintext.
4.1.4. Analisa panjang pesan
4.1.1. Analisa KeyGen (Key Generator) Kunci Publik ECC
Analisa Key_gen publik ECC digunakan dalam proses enkripsi.
Analisa proses pembentukan kunci dalam bentuk pseudocode adalah
sebagai berikut:
‘Hitung kunci publik
y1 y2 num_plaintext y1, Y2
% menggenerasi p, Alpha, dan meletakkan kunci
rahasianya (secret key) (kunci rahasia tersebut
telah di-set di dalam algoritma ini)
% maka variabel ini akan menjadi global sepanjang
sesi ini (aktifasi fungsi pub_key_gen)”
‘Set kunci rahasia
a 2
% Set kunci rahasia untuk user / penguna (ini
merupakan tahap dimana user harus mengganti kode
paka kunci rahasia contoh : a = 2)
% tampilkan p (kunci publik), Alpha dan Betaa :
disp('') disp('Publishing p, Alpha and Betaa:')
‘Acak Bilangan prima
p nextprime(rand(0..2^128))
% menggenerasi / menampilkan secara acak bilangan
prima p (p adalah antara 0 and 2^128)
‘Hitung Alpha
Alpha primroot (p)
% hitung root awal (primitive root) Alpha
‘Hitung Betaa
Betaa (Alpha^a) mod p
% hitung kunci publik (public key) Betaa
Gambar 4.1 Flowchart key_generator
4.1.2. Analisa proses enkripsi
Analisa proses Enkripsi dalam bentuk pseudocode adalah
sebagai berikut :
‘Fungsi Enkripsi
Fungsi ciphertext p,Alpha,Betaa,m
% Fungsi untuk menekripsi pesan yang akan dikirim
‘Hitung Alpha, Betaa dan p
y1 y2 global y1 y2
% mengkalkulasi Kunci Publik Betaa, Alpha
(primitive root) dan Bilangan Prima p.
‘panjang pesan
message_length (panjang pesan) numel(m)
% menentukan panjang pesan
‘Konversi array
n 1
j 2
mnum ''
% mengkonversi seluruh karakter didalam pesan ke
dalam angka dan disimpan di dalam mnum_array
h text2int1(m(1))
% konversi sring karakter pertama
mnum_array(1) h
% array 1 (n)
N 2
while j <= message_length % panjang pesan
h text2int1(m(j)) % konversi sring, array 2
(j)
if h <= 9 % selama karakter angka(h)
kurang dari10
mnum_array(n) 0 % set karakter angka “0”
mnum_array(n+1) h
n n + 2 % tidak membutuhkan anga nol di awal
karakter angka
% (jika angka tersebut kurang dar 10) <10
else
mnum_array(n) h
n n + 1 % simpan karakter angka “0” di depan
angka
end;
j j + 1
end;
‘Simpan panjang Array
mnum_array_length numel(mnum_array)
for n 1:mnum_array_length,
% simpan setiap nilai di dalam array secara
bersamaan dan menentukan ke variabel mnum (pesan
numerik)
end;
‘Pentuan panjang pesan
p_length numel(p); % bandingkan panjang mnum
dan p
flag 0 % tandai
if mnum_length = p_length % pajang mnum =
panjang p
for index 1: p_length
if(mnum(index) > p(index)) % panjang mnum > p
flag 1 tandai
end
end
if(mnum_length > p_length) % panjang mnum > p
flag 1 % tandai
end
if flag =1
% Jika if mnum lebih besar dari p (mnum > p) maka
tapilkan pesan error tampilkan : disp('Pesan
terlalu panjang, buat lebih ringkas.')
‘Proses enkripsi
else % jika mnum kurang dari p (mnum
< p)
k rand % lakukan proses Ekripsi
Menggenerasi integer k secara
acak
y1 Alpha&^k mod p % Menghitung y1
y2 (Betaa&^k)*mnum) mod p' % Menghitung y2
end;
Y
Y
N
N
a b
Gambar 4.2 Flowchart Enkripsi
Y
N
b a
4.1.3. Analisa Dekripsi
Analisa proses dekripsi bentuk pseudocode adalah sebagai berikut :
‘Fungsi Dekripsi
function message decrypt(y1, y2) % fungsi dekripsi
‘y1 dan y2 untuk mendekripsi pesan
Maple y1: y1
Maple y2: y2
% memanggil nilai dari y1 & y2
‘ Mengkonversi karakter numerik
num_plaintext (((y1&^a)&^(-1))*y2) mod p')
num_plaintext_length numel(num_plaintext)
odd rem(num_plaintext_length,2);
% Mengkalkulasi (Menghitung) karakter numerik
plain text menggunakan y1 dan y2 dari pengirim
pesan
% Jika pesan dari karakter numerik tersebut terdapat
karakter nomor maka nilai numeriknya dari karakter
utama sama dengan atau lebih besar dari 10 (x => 10)
% lalu kita dapat konversi setiap 2 nomor yang
berurutan menjadi satu karakter
if
odd =0 % pangil bil “0”
z 1 % set karakter numerik
plaintext '' % memnggil pesan plaintext
for
n 1:num_plaintext_length/2
% kalkulasi panjang karakter dalam
plaintext
q ((num_plaintext(z)-
48)*10)+(num_plaintext(z+1)-48)
% kalkulasi karakter plaintext pada
array
plaintext strcat(plaintext,char(q+'a'-1))
% konversi pesan ke string
zz+2;
end;
message plaintext % tampilkan pesan plaintext
end;
% jika panjang pesan dari numerik plain text
merupakan / terdapat angka gajil
%maka nilai numerik dari karakter utama / pertama
adalah kurang dari 10 (x < 10)
‘ Konversi angka single yang pertama ke dalam
karakter
% sisanya, akan dikonversi setiap dua angka yang
berurutan ke dalam satu karakter
if odd =1 % panggil bil “1”
m floor(num_plaintext_length/2) + 1
% kalkulasi panjang karakter dalam
plaintext
q num_plaintext(1)-48
% kalkulasi karakter plaintext pada array
plaintext char(q+'a'-1)
z 2 % konversi pesan ke string
for
n2:m
q ((num_plaintext(z)-
48)*10)+(num_plaintext(z+1)-48)
plaintext strcat(plaintext,char(q+'a'-1))
zz+2
end;
message plaintext % tampilkan pesan plaintext
end;
a b
Gambar 4.3 Flowchart Dekripsi
a b
4.1.4. Analisa Fungsi-Fungsi Pembantu
Analisa fungsi-fungsi pembantu dalam perangkat lunak simulasi ini adalah
sebagai berikut :
4.1.4.1 Fungsi Text2int1
Fungsi ini digunakan sebagai pemanggil pesan dalam bentuk string x dan
mengkonversi string di dalam pesan ke dalam integer, Fungsi konversi
Text2int1 ditampilkan dalam bentuk pseudocode adalah sebagai berikut:
‘Fungsi konversi String ke Integer
function y text2int1 (x) % bentuk konversi dari
fungsi ini berupa :
' ' 0
a 1
b > 2
% terletak pada fungsi :
[s1,s2] size(x)
Yvec x - 'a'+1
Inds find(yvec<1)
yvec(inds) zeros(size(inds))
% meletakan seluruh spasi / ruang kosong mejadi
nilai=0
‘Fungsi untuk mengkonvesi angka
Y zeros(s1,1);
for k 1:s1,
for j 0:s2-1,
ind s2-j;
y(k) y(k)+yvec(k,ind)*100^(j)
end
end
4.1.4.2. Analisa Fungsi penandatanganan
Generasi signature EDSA, untuk pesan isarat m, kesatuan A dengan
parameter domain D= (q, FR, a, b, G, n, h) dan diasosiasikan kunci
pasangan (d, q) dengan mengikuti :
a. Pilih integer secara acak atau pseudorandom(samaran acak) 1≤ k ≤
n -1 (p), degenerasikan bersama key generator dari Ecc,
menggunaan satu penggenerasian tetapi memiliki dua buah
generator pembentuk elliptic.
b. Hitung kG = (x, y) dan rubah x1 kesebuah integer 1
_
x
c. Hitung r = x1 mode n. Jika r = 0 maka menuju kestep 1
d. Hitung k-1 mode n
e. Htung SHA-1(m) dan rubah bit string ini kesebuah e integer
f. Hitung s = k-1 (e + dr) mod n. Jika s = 0 maka lanjutka ke step 1
g. A adalah siganture pesan m(r,s)
Verifikasi signature ECDSA. Untuk memferifikasi A sebagai siganture
(r, s) pada m, b memperoleh salinan otentik A dari parameter domain D =
(q, FR, a, b, G, n, h) dan diasosiasikan kunci publik Q.
Indirekomendasikan bahwa B juga mensahkan D dan Q (lihat bagian 5.4
dan 6.2) B dilakukan mengikuti :
a. Verifikasi bahwa r dan s integer pada interval [1, n-1]
b. Hitung SHA-1(m) dan rubah bit string ini ke e integer
c. hitung w = s-1 mod n
d. hitung u1 = ew mod n dan u2 = rw mod n
e. Hitung X = u1G + u2Q
f. Jika X = 0 , maka tolak siganture dengan cara lain rubah koordinat
x1 dari X untuk 1
x dan hitung v = 1
x mod n
g. Terima jika dan hanya jika V = r
Pembuktian kerja verifikasi signature. Jika signature(r, s) pada sebuah
pesan m sesungguhnya dihasilkan oleh A ,maka s = k-1(e + dr) mod n.
Penyusunan kembali memeberikan :
k ≡ s-1 (e + dr) ≡ s-1 e + s-1 rd ≡ we + wrd
≡ u1 + u2d (mod n)
maka u1G + u2Q = (u1 + u2d)G = kG, dan juga v = r diperlukan.
4.1.5. Analiasa panjang pesan
Fungsi-fungsi di atas mendukung jenis file berekstensikan karakter, yang
tidak termasuk spasi (space), fungsi-fungsi di atas hanya digunakan ntuk
menkonversi plaintext berbentuk karater (.txt) yang panjangnya (bitrate) 128 bit.
Metode penenda tanganan di atas hanya mengutamakan funsi penanda
tanganan digital yang merupakan pengembangan dari metode enkrpsi.
Flowchart ECDSA :
N
Y
Gambar 4.4 Flowchart ECDSA
Mulai
Random dA (1,n-1) (g < p dan a <= x <= -1)
Pubkey & privkey (g,g*secret)
Gunakan kunci private (x1,y1)
Hitung QA =
dA • G = (x1,y1)
Signing
Embed kunci ke pesan Kunci rahasia =
dA
k-1 mod n
e = Hash(m)
s = k-1 {e+dA •
r} mod nAsd
selesai
Verifikasi (r,s) [1,n-1]
Masukan tanda tangan ( r,s )
Masukan bilangan acak
w = s-1 mod n ( u1 u2)
Hitung v = x1 mod n
v = r
selesai
4.2 Rancangan Tampilan Apikasi
4.2.1 Tampilan Enkripsi
Tampilan Enkripsi ini merupakan tampilan yang dirancang sebagai
tahapan penggenerasi kunci privat dan kunci publik di dalam key_Gen (kunci
generator). Sebagai penginput pesan serta peletakan koordinat pesan plaintext
ke dala chipertext, serta jenis tanda tangan yang digunakan untuk memproteksi
pesan. Yang dimulai dari mempublikan kunci generator (pub_key_gen) ,
koordinasi titik dan pembubuhan tanda tangan nantinya digunakan untuk men-
Enkripsi pesan yang akan di kirim.
Gambar 4.5 Rancangan Aplikasi Menu Enkripsi
Nama Aplikasi __ X
Hasil kunci public (text) Kunci Publik (p)
Masukan pesan
Enkripsi
y1
Hasil Alpha (text)
y2
Hasil Betaa (text)
Input pesan (text)
Author
Sign
name (text)
Enkripsi
Alpha
Betaa
Hasil y1 (text)
Hasil y1 (text)
pub_key_gen
4.2.2 Tampilan Dekripsi
Rancangan tampilan dekripsi ini digunakan untuk mengkonversi
chipertext ke dalam plaintext (pesan asli), serta menguji apakah tanda tangan
digital yang diinput dalam peng-enkripsi dapat berfungsi
Gambar 4.6 Rancangan Aplikasi Menu Dekripsi
Nama Aplikasi __ X
Dekripsi
Pesan
Kunci Publik (p) Input kunci publik
Hasil pesan
Author
Sign
Author (text)
Dekripsi
Pub_Key_Gen
Gambar 4.8 Flowchart Perangkat Lunak
Hitung Y1 & y2
Pesan (Plaintext)
Proses Enkripsi
Proses Dekripsi
Mulai
End
Embed tanda tangan
(chiperteks)
pesan (Plaintext)
Panggil kunci
Publik (p)
Kirim
Verifikasi
BAB V
PEMBAHASAN DAN IMPLEMENTASI
5.1 Pembahasan
Pada bagian pembahasan ini, akan dibahas mengenai bagaimana alur kerja
perangkat lunak dan proses-proses yang terjadi di dalam perangkat lunak. Masing-
masing pembahasan akan dibahas dalam sub bab berikut ini.
Proses implementasi dalam membuat aplikasi pengenalan pola tanda tangan
dibagi menjadi beberapa tahap, yaitu :
a. Tahap penggenerasian Key generator (Pub_Key_Gen).
Pada tahap ini aplikasi akan menjalankan fungsi pub_key_gen, yang
diawali dengan menggenerasi kunci publik (public key) generator untuk
penerima pesan, lalu fungsi ini akan memilih dan memutuskan p (bilangan
prima kunci publik), Alpha, dan Betaa untuk metode enkripsi Ecc, dan q
dan d untuk penandatanganan digitalnya yang telah di-set d dalam fungsi
tersebut yang akan dimasukan ke dalam koordinat pesan yang akan di
enkripsi.
b. Tahap Enkripsi.
Pada tahap ini akan diinput pesan yang akan di enkripsi dan ditujukan
kepada pengirim pesan, setelah pesan diinput maka fungsi enkripsi akan
memangil fungsi pub_key_gen yang memiliki kunci publik yang telah
digenerasi, kunci publik inilah yang akan diembed bersama dangan tanda
tangan digital ke dalam pesan, kemudian dieksekusi ke dalam mode
enkripsi yang menjadikana pesan asli (plaintext) ke dalam pesan sandi
(chipertext) bersama tanda tangan digital.
c. Tahap Penandatangan
Tahap ini merupakan tahap dimana pair dari pesan yang telah dienkripsi
akan di embed dengan tanda tangan digital, tanda tangan digital dapat
berupa identitas maupun file yang dibutuhkan oleh author sebagai tanda
pengenal pesa tersebut, setelah diembed, tanda tangan dan pesan akan
dikirim terpisah ke penerima pesan.
d. Tahap Verifikasi
Pesan yang sampai ke penerima tidak langsung dibuka, tetapi akan
diverifikasi terlebih dahulu kebsahan dari pengirimya, maka sang
penerima akan menggenerasikan pair tanda tangan terlebih dahulu, jika
tanda tangan telah diverifikasi dan telah diketahui keabsahan data tanda
tanganya, maka penerima dapat menggenerasi pesan (chiper), dan
membuka pesan aslinya (plain)
e. Tahap Dekripsi.
Tahap ini ditujukan kepada penerima pesan, penerima pesan akan
menerima pesan dalam bentuk kode (chipertext), fungsi dekripsi inilah yang
akan membantu user penerima untuk membuka pesan atau mengkonversi
pesan dari pesan sandi (chipertext) ke pesan asli (plaintext) yang berisikan
pesan atau informasi rahasia dari pengirim pesan dengan menggunakan kunci
publik (public key) untuk membukanya.
5.1.1. Spesifikasi Perangkat Keras (Hardware)
Di dalam melakukan proses tanda tangan digital, perangkat keras
sangat mendukung. Berikut adalah perangkat keras yang digunakan di
dalam pembuatan perangkat lunak:
a. Processor : Processor yang digunakan adalah Intel Pentium IV
2,21 Ghz.
b. System Memory : Memori yang dipakai dalam pengujian ini
menggunakan DDR berkapasitas 2 Gb.
c. Display Adapter : Display Adapter yang dipakai adalah NVidia
GeForce FX 5500 256 Mb.
d. Harddisk : Harddisk yang digunakan berkapasitas 320 Gb.
5.1.2. Spesifikasi Perangkat Lunak (Software)
Pada saat pengujian, perangkat lunak yang dipakai adalah:
5.1.2.1 Operating System: Microsoft Windows XP Professional Edition
Service Pack 2
Sebagai sistem operasi yang mendukung aplikasi-aplikasi
pemrograman berbasis windows. Windows XP mampu memberi
kemudahan bagi para penggunanya untuk mengaplikasikan
pemrograman yang bisa merancang sebuah aplikasi seperti pada
aplikasi penanda tanganan ini. Disamping itu Windows XP lebih
unggul dari versi Windows sebelumnya.
5.1.2.2 Programming: MATLAB 7.4
MATLAB 7.4 adalah bahasa pemrograman level tinggi yang
dikhususkan untuk komputasi teknis. Bahasa pemrograman ini
mengintegrasikan kemampuan komputasi, visualisasi dan
pemrograman dalam sebuah lingkungan yang tunggal dan mudah
digunakan. Matlab memberikan sistem interaktif yang menggunakan
konsep array/matrik sebagai standar variabel elemennya tanpa
membutuhkan pendeklarasian array seperti pada bahasa lainnya.
5.2. Implementasi Kerja Perangkat Lunak
5.2.1. Implementasi ElGamal ECC
Setelah dijelaskan tentang algoritma ElGamal ECC dan berbagai
definisi serta dasar-dasar teori yang diperlukan, langkah selanjutnya adalah
mengimplementasikannya dalam program komputer. Dalam penulisan
skripsi ini, digunakan software Matlab version 7.4 untuk
mengimplementasikan algoritma ElGamal ECC. Software Matlab
menyediakan berbagai macam function untuk melakukan perhitungan atau
analisa yang dapat diterapkan dalam berbagai bidang ilmu, termasuk
matematika, simulasi dan lain sebagainya. Selain itu, programmer juga
dapat membuat program atau function sendiri sesuai dengan kebutuhan.
Function tersebut dapat ditambahkan atau diintegrasikan dalam Matlab.
Sehingga aplikasi Matlab bertambah luas dengan bertambahnya database
dari fungsi yang dibuat oleh programmer. Implementasi ini dibagi menjadi
3 bagian program utama, yaitu :
a. Program Penentuan Kunci.
b. Program Enkripsi ElGamal ECC.
c. Program Dekripsi ElGamal ECC.
Dalam proses simulasi tampilan enkripsi, diasumsikan terdapat dua
pihak yang sedang berkomunikasi (Pengirim dan Penerima). Sebelum
proses enkripsi pesan dijalankan atau di eksekusi, user harus
mengesktraksi/menggenerasi kunci privat dan kunci publik yang terdapat
pada fungsi pub_key_gen. Setelah penggenerasian kunci generator
(key_gen) user akan menapatkan form Input Kunci. Input kunci juga dapat
dihasilkan secara acak oleh komputer. Pengacakan menggunakan random
number generator yang terdapat dalam syntax keygen. Setelah itu,
ditampilkan proses dan cara kerja dari kunci ElGamal ECC yang
membentuk beberapa proses enkripsi dan dekripsi yang dilakukan oleh
pengirim dan penerima.
Selanjutnya, pengirim dapat meng-input sendiri pesan yang akan
dikirim kepada penerima atau sebaliknya,. Dalam proses tampilan enkripsi
dan dekripsi ini, pengirim dan penerima harus juga mengerti terlebih
dahulu bagaimana konsep dari enkripsi tanda tangan digital ini bekerja,
seperti software-software lain yang opensource maupun closesource akan
disertakan manual book, readme files atau panduan dalam menjalankan
software tersebut, begitu pula interface enkripsi dan dekripsi yang penulis
sampaikan ini terdapat panduan dalam penggunannya, agar user lebuh
mudah dalam menggunakan dan memanfaatkan kinerja dari software ini.
Untuk lebih jelasnya. Alur kerja perangkat lunak dapat
digambarkan dalam bentuk state transition diagram (STD), seperti terlihat
pada gambar 4.1.
Gambar 5.1 State Transition Diagram (STD) Perangkat Lunak
5.2.2. Proses-Proses di dalam Perangkat Lunak
5.2.2.1. Proses Pertama, user harus meng-input kunci rahasia dan
menggenerasi kunci generator pada fungsi pub_key_gen
pada fungsi Enkripsi. Input kunci adalah:
a. Generasi kunci publik pada fungsi pub_key_gen
b. Nilai a merupakan kuci rahasia, (set a = 2 (contoh)).
c. Dari input kunci rahasia tersebut akan muncul beberapa
bilangan hasil fungsi yang telah di kalkulasi oleh
pub_key_gen yang akan digenerasikan.
d. Nilai p, adalah bilangan prima, merupakan kunci publik
yang ditampilkan secara acak yang memiliki maksimum
Windows (operating system)
Form Dekripsi
Form Enkripsi
Pesan
Key_Gen
Kunci_publik Kunci_privat
Tampilan Utama
Tanda tangan digital
Bit 128 (p adalah antara 0 and 2^128). Yang di hitung
dengan fungsi : ('p:=','nextprime(rand(0..2^128)())').
e. Nilai Alpha, merupakan fungsi pembentuk koordinat
Kurva Elliptik, Alpha merupakan bilanggan primer
awal dari p. Dalam fungsi : ('Alpha:=','primroot(p)')
f. Nilai Betaa, merupakan fungsi pembentuk koordinat
kedua dari Kurva Elliptik kunci publik (public key),
fungsi kalkulasi dari betaa : ('Betaa:=','(Alpha^a) mod
p')
g. Seluruh fungsi di atas diset otomatis di dalam Fungsi
Pub_Key_ken, sehingga user haya tinggal
menggenerasi dari fungsi tersebut.
5.2.2.2. Proses kedua, user dapat menginput pesan yang akan di kirim
dan meggunakan fungsi enkripsi untuk mengunci pesan :
a. Setelah kunci generator di publish maka akan tertera
hasil proses dari enkripsi tersebut, berupa kunci publik
(Betaa, public key), p yang merupakan bilangan prima
pembentuk kunci publik dan pembentuk koordinat
kurva elliptik (Alpha, prime root p)
b. Input pesan yang akan di kirim ke penerima di dalam
text box pesan (pesan hanya dapat menampung panjang
128 bit sesuai kunci yang diinput)
c. Pesan asli (plaintext) dikonversi kedalam pesan sandi
(chipertext)
d. Pesan dikonversi ke dalam bentuk array (n dan j) dan
dikalkulasi sesuai dengan rumus persamaan algoritma
ElGamal ECC dengan fungsi penghitungan koordinat
Y1 dan Y2 (x,y)
e. Enkripsi pesan dengan mengeksekusi tools enkripsi,
dan akan digenerasi bersama fungsi penanda tanganan
digital
f. User akan mengirimkan pesan yang telah dienkripsi
kepada penerima, maka penerima akan menggunakan
fungsi dekripsi untuk membuka pesan tersebut.
5.2.2.3. Proses ketiga, pesan diterima oleh penerima
a. Pesan tersebut akan membawa kunci publik (Betaa) dan
bentuk pesan
b. sandi (chipertext) yang berbentuk koordinat kurva
elliptik Y1 dan Y2 (x,y)
c. Untuk menggenerasinya maka penerima harus
mengetahui kunci publik
d. yang dibawa, (input public_key)
e. Setelah kunci publik diinput maka Fungsi dekripsi
(decrypt) akan
f. memanggil fungsi penggenerasi kunci (key_generator)
untuk menggenerate koordinat Y1 dan Y2 (x,y), fungsi
: message = decrypt(y1, y2)
g. Lalu fungsi dekripsi akan Mengkalkulasi (Menghitung)
karakter numerik
h. plain text menggunakan y1 dan y2 dari pengirim pesan :
'num_plaintext :=', '(((y1&^a)&^(-1))*y2) mod p')
Setelah fungsi di atas dieksekusi maka pesan akan dikonversi dari pesan
sandi (chipertext) ke pesan asli (plaintext) dan menampilkan serta tanda
tangan digital yang diembed.
Visualisasi Penanda tanganan digambarkan dalam bentuk skema dan dapat
dilihat pada gambar 4.2 berikut ini.
Gambar 5.2 Skema enkripsi dan penandatanganan
Berikut keterangan dari gambar 4.2.
a. Adam = pihak pertama yang melakukan komunikasi (pengirim).
b. KPA = Kunci publik Adam.
Y1
SA
Y2
Mp
Y1’ SB Y2’
Mp’
Mpp
Tanda tangan Digital
Key_Gen : p
Betaa Alpha
Adam Bedu
KPA KPB
c. Mp = Pesan Adam (Plaintext).
d. SA = Pesan Awal Adam yang akan dikonversi (Mp + KPA )
(Plaintext).
e. Y1 = koordinat pesan Adam (x) yang akan dienkripsi (chipertext).
f. Y2 = koordinat pesan Adam (y) yang akan dienkripsi (chipertext).
g. MPP = Pesan Adam yang telah dienkripsi dan diberikan tanda tangan
(chipertext).
h. Bedu = pihak kedua yang melakukan komunikasi (Penerima).
i. KPB = Kunci publik Bedu.
j. Y1’ = koordinat pesan Bedu (x) yang akan didekripsi (chipertext).
k. Y2’ = koordinat pesan Bedu (y) yang akan didekripsi (chipertext).
l. SB = Penggabungan koordinat pesan Adam oleh Bedu (KPB + Mp’).
m. Mp’ = Pesan Bedu (Plaintext).
Dengan menggunakan Tanda tangan digital, keamanan pesan dapat
terintegrasi dengan baik, walaupun kunci publik Adam (pengirim) berhasil
didapatkan dan diganti oleh penyadap, tetapi penyadap tidak dapat menjalankan
prosedur penyadapan untuk melihat dan mengubah pesan. Hal ini dikarenakan
pesan terenkripsi terbagi menjadi dua bagian sesuai dengan koordinat ElGamal
ECC yaitu pada koordinat Y1 dan Y2 (x,y), serta pemberian tanda tangan digital
yanga memungkinkan penerima pesan mengetahui pengirim pesan yang
diterimanya, sehingga dapat mengantisipasi pesan yang tidak diharapkan.
5.3. Pengujian Perangkat Lunak
5.3.1. Analisa Waktu dan Hasil Implementasi ElGamal ECC
Analisa waktu implementasi dilakukan untuk mengetahui performa
waktu setiap proses perhitungan dalam implementasi tanda tangan digital
dengan algoritma ElGamal ECC. Analisa waktu tersebut dibagi dalam tiga
kategori, yaitu waktu yang dibutuhkan dalam proses aritmetika kurva
elliptic, proses representasi plaintext dan proses enkripsi serta dekripsi
tanda tangan digital.
5.3.1.1 Analisa Waktu Aritmetika Kurva Elliptic
Pengujian dilakukan untuk melihat waktu yang dibutuhkan
masing-masing operasi aritmetika kurva elliptic. Operasi tersebut
meliputi operasi penjumlahan, operasi pengurangan dan operasi
perkalian skalar kurva elliptic. Hasil implementasi terhadap waktu
yang dibutuhkan masing-masing operasi aritmetika kurva elliptic
ditunjukkan dalam Tabel berikut :
Tabel 5.1. Waktu Untuk Operasi Aritmetika Kurva Elliptic
Hasil pengujian pada Tabel 4.1 menunjukkan bahwa
operasi perkalian merupakan operasi yang membutuhkan waktu
paling banyak dibandingkan operasi aritmetika kurva elliptic yang
Operasi Kunci Perulangan Waktu
Penjumlahan 32 bit 1000 4 – 5 detik
Pengurangan 32 bit 1000 4 – 5 detik
32 bit 1000 178 – 180 detik
24 bit 1000 109 – 110 detik
16 bit 1000 54 – 55 detik
Perkalian
8 bit 1000 10 – 11 detik
lain. Operasi perkalian skalar kurva elliptic membutuhkan waktu
sekitar 36 kali lebih banyak dibandingkan dengan operasi
penjumlahan dan pengurangan. Sedangkan waktu yang dibutuhkan
untuk operasi penjumlahan dan pengurangan kurva elliptic tidak
jauh berbeda. Berdasarkan Tabel 4.1, dalam interval waktu [4,5]
detik, program mampu melakukan pehitungan operasi penjumlahan
atau pengurangan aritmetika kurva elliptic 32 bit sebanyak 1000
kali. Sehingga untuk 1 kali operasi penjumlahan atau pengurangan
dengan panjang kunci 32 bit hanya dibutuhkan waktu sekitar 0.004
sampai 0.005 detik.
5.3.1.2 Analisa Waktu Representasi Plaintext
Untuk melakukan enkripsi menggunakan algoritma
ElGamal ECC, setiap plaintext akan direpresentasikan menjadi
nilai numerik dan selanjutnya direpresentasikan menjadi titik kurva
elliptic. Sedangkan proses pengembalian representasi titik kurva
elliptic menjadi plaintext diperlukan dalam proses dekripsi yang
menggunakan algoritma ElGamal ECC. Waktu yang dibutuhkan
untuk representasi plaintext diberikan dalam Tabel berikut :
Tabel 5.2. Waktu Untuk Representasi Plaintext – Numerik
Hasil pengujian pada Tabel 4.11 menunjukkan bahwa
interval waktu yang dibutuhkan untuk representasi plaintext
menjadi nilai numerik sama dengan proses pengembalian numerik
menjadi plaintext. Waktu yang dibutuhkan untuk 1000 kali proses
representasi plaintext menjadi numerik sekitar 8 sampai 9 detik,
Representasi
Kunci Perulangan Waktu
Plaintext – Numerik 32 bit 1000 8 – 9 detik
Numerik-Plaintext 32 bit 1000 8 – 9 detik
dengan panjang kunci 32 bit. Sehingga untuk 1 kali proses
representasi plaintext menjadi numerik hanya dibutuhkan waktu
sekitar 0.008 sampai 0.009 detik. Waktu yang dibutuhkan untuk
mengembalikan nilai numerik menjadi plaintext memiliki interval
waktu yang sama dengan proses representasi plaintext menjadi
numerik. Untuk panjang kunci 32 bit, jika dalam plaintext terdapat
3000 karakter maka waktu yang dibutuhkan untuk representasi
plaintext menjadi numerik sekitar 8 sampai 9 detik. Karena untuk
panjang kunci 32 bit, pemotongan pesan dilakukan untuk setiap 3
karakter.
5.3.1.3. Analisa Waktu Enkripsi dan Dekripsi ElGamal ECC
Pengujian dilakukan untuk mengetahui waktu yang
dibutuhkan dalam proses enkripsi dan dekripsi menggunakan
algoritma ElGamal ECC. Waktu yang dibutuhkan untuk kedua
implementasi tersebut diberikan pada Tabel berikut :
Proses
Kunci Karakter Perulangan Total
Karakter
Waktu
Enkripsi 32 bit 3 10 30 3 – 5 detik
Dekripsi 32 bit 3 10 30 3 - 5 detik
Tabel 5.3. Waktu Untuk Enkripsi dan Dekripsi ElGamal ECC
5.3.2. Hasil Implementasi aplikasi Tanda Tangan Digital
Hasil implementasi tanda tangan meggunakan algoritma ElGamal
ECC merupakan hasil dari running program yang dibuat oleh penulis. Ada
tiga program utama yang dibuat penulis, yaitu
a. Program penentuan kunci
b. Program enkripsi ElGamal ECC
c. Program dekripsi ElGamal ECC
ketiga program utama ini merupakan kesatuan hasil implementasi
ElGamal ECC pada tanda tangan digital, diberikan salah satu contoh output
dari ketiga program utama yang merupakan hasil implementasi ElGamal ECC.
Hasil running ketiga program utama tersebut diberikan pada penjelasan dan
tabel berikut. Penulisan hasil implementasi dalam bentuk tabel bertujuan
untuk mempermudah dalam membedakan input/output hasil running program.
Selain itu, dapat membantu dan mempermudah pembaca dalam memahami
hasil implementasi penenda tanganan menggunakan algoritma ElGamal ECC.
Misalkan, set a = 234 sebagai kunci.
Hasil eksekusi proses pembentukan kunci adalah sebagai berikut:
---------------------------------------------
Penggenerasian kunci Generator (pub_key_gen)
---------------------------------------------
a. p = 259203700352654436088189496208753692701 (hasil
randomisasi)
('p:=','nextprime(rand(0..2^128)())')
b. Alpha = 2
('Alpha:=','primroot(p)') bilangan prima terkecil
= 2
c. Betaa = 107638503513013662226454483634091109050
('Betaa:=','(Alpha^a) mod p')
Betaa = 2^234 mod
259203700352654436088189496208753692701
Betaa = 107638503513013662226454483634091109050
INPUT
Panjang Kunci (nkunci) 24
OUTPUT
Bilangan Prima (p) 25920370035265443608
8189496208753692701
A 2
Koefisien Persamaan Kurva
Elliptic B 10763850351301366222
6454483634091109050
Kofaktor ( k ) Random (k)
Tabel 5.4. Input
-------------------------
Input & Enkripsi pesan
-------------------------
d. silahkan ketik pesan yang akan anda kirim :
Pesan : KOMPUTER
y1 = 256319791380606717893935715510368320715
('y1:=','Alpha&^k mod p')
e. y1 = 2^k mod
259203700352654436088189496208753692701
y1 = 256319791380606717893935715510368320715
f. y2 = 228420603800096151015053415566351339624
g. ('y2:=','((Betaa&^k)*mnum) mod p')
Y2 = (107638503513013662226454483634091109050
^k * mnum) mod
259203700352654436088189496208753692701
Y2 = 228420603800096151015053415566351339624
Tabel 5.5. Output
5.4. Tampilan Aplikasi
`Aplikasi ini merupakan aplikasi yang digunakan sebagai penendatanganan
digital yang mencakup proses enkripsi dan dekripsi pada kurva elliptik. Berikut
ini merupakan penjelasan dari setiap menu yang terdapat dalam aplikasi ini
5.4.1 Tampilan Enkripsi
Tampilan Enkripsi merupakan tampilan awal pada saat program
pertama kali dijalankan. Pada rancangan enkripsi ini akan terdapat
beberapa menu bar, dan tombol eksekusi diantaranya Bar File dan proses,
Tobol generasi dan sign (tanda tangan), serta simpan. Aplikasi ini diberi
nama Program Aplikasi Penandatanganan Digital
INPUT
Panjang Kunci (nkunci) 24
OUTPUT
Bilangan Prima (p) 25920370035265443608
8189496208753692701
A 2
Koefisien Persamaan Kurva
Elliptic B 10763850351301366222
6454483634091109050
Kofaktor ( k ) Random (k)
KOMPUTER Pesan
Jumlah Bit : 64 Bit
Y1
25631979138060671789
3935715510368320715
Chipertext
Y2
22842060380009615101
5053415566351339624
Gambar 5.3 Tampilan Menu Enkripsi
5.4.2. Tampilan Dekripsi
Tampilan Dekripsi ini merupakan tampilan yang digunakan
sebagai tahapan verifikasi tanda tangan dan pengembalian pesan awal
(palianteks). Yang dimulai dengan pengambilan tnda tangan, proses
verifikasi lalu tahap pendekripsian pesan.
Gambar 5.4 Menu Dekripsi
BAB VI
KESIMPULAN DAN SARAN
A. Kesimpulan
Setelah menyelesaikan perangkat lunak penanda tanganan digital yang
menggunakan algoritma Kurva Elliptik, penulis menarik kesimpulan sebagai
berikut:
1. Perangkat lunak penanda tanganan digital ini mengadopsi metode kerja
kriptografi dan keamanan komputer, sehingga perangkat lunak dapat
digunakan untuk mendukung proses belajar mengajar, terutama dalam mata
kuliah Kriptografi dan keamanan komputer.
2. Dengan menggunakan aplikasi penanda tanganan tersebut sistem keamanan
dapat diperketat dan meminimalisir adanya penyadapan data, karena tanda
tangan digital dapat memenuhi syarat keamanan data antara pengirim dan
penerima pesan melalui tanda tangan yang diembed (dibawa) beserta data
yang dikirim.
3. Aplikasi ini dapat diterapkan dalam pertukaran yang dapat diaplikasikan pada
sitsem perbankanan, aplikasi E-Commerce maupun E-Government yang
berkembang pada saat ini.
B. Saran
Penulis ingin memberikan beberapa saran yang mungkin dapat membantu
dalam pengembangan perangkat lunak ini yaitu :
1. Perangkat lunak ini dapat dikembangkan dengan menambahkan fitur-fitur
lainya seperti mengadopsi jenis file yang lain seperti : file gambar dan
multimedia yang memungkinkan pengiriman dalam jumlah kapasitas yang
besar.
2. Spesifikasi jenis tanda tangan lebih mndetail, seperti menyertakan jaringan
syaraf tiruan sidik jari, atau deteksi retina, untuk memperketat keamanan data.
3. Perangkat lunak dapat dikembangkan dengan menambahkan fitur tampilan
yang lebih menarik.
LAMPIRAN
Fungsi Enkripsi (Source code) function varargout = Ecc(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @Ecc_OpeningFcn, ... 'gui_OutputFcn', @Ecc_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end function Ecc_OpeningFcn(hObject, eventdata, Ecc, varargin) % inisialisasi paramters untuk menjalankan Ecc Ecc.params.characterList = ... sprintf('0123456789'); Ecc.params.nRotors = 8; % Inisialisasi parameter GUI kontrol tmp = length(Ecc.params.characterList); fillMenu = cell(length(Ecc.params.characterList),1); for iA = 1:length(fillMenu); fillMenu{iA} = Ecc.params.characterList(iA); end guidata(hObject, Ecc); uiwait(Ecc.figure1); function varargout = Ecc_OutputFcn(hObject, eventdata, Ecc) if ~isempty(Ecc) close(Ecc.figure1) end function inputText_Callback(hObject, eventdata, Ecc) function inputText_CreateFcn(hObject, eventdata, Ecc) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function outputText_Callback(hObject, eventdata, Ecc) function outputText_CreateFcn(hObject, eventdata, Ecc) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function runButton_Callback(hObject, eventdata, Ecc)
Ecc=guidata(gcbo); global s ecdsa Ecc = guidata(hObject); inputText = get(Ecc.listbox6,'String'); if ~isempty(inputText); Ecc.params = getParams(Ecc); if sum(Ecc.params.rotorUse) > 0 if sum(sum(Ecc.params.plugboard ~= 0)) < length(unique(Ecc.params.plugboard(:))) listbox10 = runEcc(inputText,Ecc.params); set(Ecc.listbox10,'String',listbox10); else set(Ecc.listbox10,... 'String',''); end else set(Ecc.listbox10,'String','1'); end else set(Ecc.listbox10,'String','masukan sign'); end guidata(hObject, Ecc); Ecc=guidata(gcbo); s=get(Ecc.inputText,'string'); set(Ecc.listbox11,'string',(s)); function paramButton_Callback(hObject, eventdata, Ecc) function params = getParams(Ecc) params = Ecc.params; % rangka Gui objek function outMsg = runEcc(inMsg,params) % parameter pembangun GUI skeleton (kerangka GUI) randn('seed',0); randn('state',0); rand('seed',0); rand('state',0); params.rotors = buildRotors(params.nRotors,length(params.characterList),params.rotorState); params.rotorState = params.rotorState(logical(params.rotorUse)); params.nRotors = length(params.rotorState); params.rotors = params.rotors(:,logical(params.rotorUse)); params.reflector = buildReflector(length(params.characterList)); % preproses pesan procMsg = preprocess(inMsg,params.characterList); outMsg = ''; % fungsi looping pesan saat dienkrip
for iA = 1:length(procMsg) % konversi numerik(plain ke chiper) msgNum = strfind(params.characterList,procMsg(iA)); msgNum = runPlugboard(msgNum,params.plugboard); tmpOut = passThroughRotors(msgNum,params); tmpOut = runPlugboard(tmpOut,params.plugboard); % menyimpan tchipertext ke kotak pesan keluar outMsg(iA) = params.characterList(tmpOut); params = rotateRotors(params); end function msgOut = runPlugboard(msgIn,plugboard) if sum(msgIn == plugboard(:,1)) == 1 msgOut = plugboard(msgIn == plugboard(:,1),2); elseif sum(msgIn == plugboard(:,2)) == 1 msgOut = plugboard(msgIn == plugboard(:,2),1); else msgOut = msgIn; end function params = rotateRotors(params) params.nRotors = size(params.rotors,2); exitFlag = 0; rotorNum = 1; while ~exitFlag tmp = params.rotors(:,rotorNum); params.rotors(:,rotorNum) = [tmp(2:end); tmp(1)]; params.rotorState(rotorNum) = ... mod(params.rotorState(rotorNum),size(params.rotors,1)) + 1; if ~isequal(params.rotorState(rotorNum),1) exitFlag = 1; end rotorNum = rotorNum + 1; if rotorNum > params.nRotors exitFlag = 1; end end function letterOut = passThroughRotors(letterIn,params) tmpOut = letterIn; for iB = 1:size(params.rotors,2) tmpIn = tmpOut; tmpOut = params.rotors(tmpIn,iB); end tmpIn = tmpOut; tmpOut = params.reflector(tmpIn); for iB = size(params.rotors,2):-1:1 tmpIn = tmpOut; tmpOut = find(params.rotors(:,iB)==tmpIn); end letterOut = tmpOut; function procMsg = preprocess(inMsg,characterList) inMsg = upper(inMsg); procMsg = inMsg(ismember(inMsg,characterList)); function reflector = buildReflector(nCharacters) tmp = randperm(nCharacters)'; reflector = zeros(nCharacters,1);
while ~isempty(tmp) fillers = tmp(1:2); tmp(1:2) = []; reflector(fillers(1)) = fillers(2); reflector(fillers(2)) = fillers(1); end function rotors = buildRotors(nRotors,nCharacters,rotorState) rotors = zeros(nCharacters,nRotors); for iRotor = 1:nRotors rotors(:,iRotor) = randperm(nCharacters)'; end for iRotor = 1:nRotors tmp = rotors(:,iRotor); if rotorState(iRotor) > 1 tmp = [tmp(rotorState(iRotor):end); tmp(1:rotorState(iRotor)-1)]; rotors(:,iRotor) = tmp; end end function slider1_Callback(hObject, eventdata, Ecc) set(Ecc.edit1,'String',Ecc.params.characterList(round(get(hObject,'Value')))); function slider1_CreateFcn(hObject, eventdata, Ecc) if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end function slider2_Callback(hObject, eventdata, Ecc) set(Ecc.edit2,'String',Ecc.params.characterList(round(get(hObject,'Value')))); function slider2_CreateFcn(hObject, eventdata, Ecc) if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end function slider3_Callback(hObject, eventdata, Ecc) set(Ecc.edit3,'String',Ecc.params.characterList(round(get(hObject,'Value')))); function slider3_CreateFcn(hObject, eventdata, Ecc) if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end function slider4_Callback(hObject, eventdata, Ecc) set(Ecc.edit4,'String',Ecc.params.characterList(round(get(hObject,'Value')))); function slider4_CreateFcn(hObject, eventdata, Ecc) if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end function slider5_Callback(hObject, eventdata, Ecc) set(Ecc.edit5,'String',Ecc.params.characterList(round(get(hObject,'Value')))); function slider5_CreateFcn(hObject, eventdata, Ecc) if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end
function slider6_Callback(hObject, eventdata, Ecc) set(Ecc.edit6,'String',Ecc.params.characterList(round(get(hObject,'Value')))); function slider6_CreateFcn(hObject, eventdata, Ecc) if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end function slider7_Callback(hObject, eventdata, Ecc) set(Ecc.edit7,'String',Ecc.params.characterList(round(get(hObject,'Value')))); function slider7_CreateFcn(hObject, eventdata, Ecc) if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end function slider8_Callback(hObject, eventdata, Ecc) set(Ecc.edit8,'String',Ecc.params.characterList(round(get(hObject,'Value')))); function slider8_CreateFcn(hObject, eventdata, Ecc) if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end function edit1_Callback(hObject, eventdata, Ecc) function edit1_CreateFcn(hObject, eventdata, Ecc) function edit2_Callback(hObject, eventdata, Ecc) function edit2_CreateFcn(hObject, eventdata, Ecc) function edit3_Callback(hObject, eventdata, Ecc) function edit3_CreateFcn(hObject, eventdata, Ecc) function edit4_Callback(hObject, eventdata, Ecc) function edit4_CreateFcn(hObject, eventdata, Ecc) function edit5_Callback(hObject, eventdata, Ecc) function edit5_CreateFcn(hObject, eventdata, Ecc) function edit6_Callback(hObject, eventdata, Ecc) function edit6_CreateFcn(hObject, eventdata, Ecc) function edit7_Callback(hObject, eventdata, Ecc) function edit7_CreateFcn(hObject, eventdata, Ecc) function edit8_Callback(hObject, eventdata, Ecc) function edit8_CreateFcn(hObject, eventdata, Ecc) function checkbox1_Callback(hObject, eventdata, Ecc) function checkbox2_Callback(hObject, eventdata, Ecc) function checkbox3_Callback(hObject, eventdata, Ecc) function checkbox4_Callback(hObject, eventdata, Ecc) function checkbox5_Callback(hObject, eventdata, Ecc) function checkbox6_Callback(hObject, eventdata, Ecc) function checkbox7_Callback(hObject, eventdata, Ecc) function checkbox8_Callback(hObject, eventdata, Ecc) function popupmenu1a_Callback(hObject, eventdata, Ecc) function popupmenu1a_CreateFcn(hObject, eventdata, Ecc) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function popupmenu1b_Callback(hObject, eventdata, Ecc) function popupmenu1b_CreateFcn(hObject, eventdata, Ecc) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end function popupmenu2a_Callback(hObject, eventdata, Ecc) function popupmenu2a_CreateFcn(hObject, eventdata, Ecc) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function popupmenu2b_Callback(hObject, eventdata, Ecc) function popupmenu2b_CreateFcn(hObject, eventdata, Ecc) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function popupmenu3a_Callback(hObject, eventdata, Ecc) function popupmenu3a_CreateFcn(hObject, eventdata, Ecc) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function popupmenu3b_Callback(hObject, eventdata, Ecc) function popupmenu3b_CreateFcn(hObject, eventdata, Ecc) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function popupmenu4a_Callback(hObject, eventdata, Ecc) function popupmenu4a_CreateFcn(hObject, eventdata, Ecc) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function popupmenu4b_Callback(hObject, eventdata, Ecc) function popupmenu4b_CreateFcn(hObject, eventdata, Ecc) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function popupmenu5a_Callback(hObject, eventdata, Ecc) function popupmenu5a_CreateFcn(hObject, eventdata, Ecc) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function popupmenu5b_Callback(hObject, eventdata, Ecc) function popupmenu5b_CreateFcn(hObject, eventdata, Ecc) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function checkPlug1_Callback(hObject, eventdata, Ecc) function checkPlug2_Callback(hObject, eventdata, Ecc) function checkPlug3_Callback(hObject, eventdata, Ecc) function checkPlug4_Callback(hObject, eventdata, Ecc) function checkPlug5_Callback(hObject, eventdata, Ecc) function btnloadpesan_Callback(hObject, eventdata, Ecc) % hObject handle to btnloadpesan (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB
% Ecc structure with Ecc and user data (see GUIDATA) m=1; h=waitbar(0,'harap tunggu...'); pjg=length(m); while m <=pjg Ecc=guidata(gcbo); maple('with(numtheory)'); disp('Warning: harap tunggu kunci sedang digenerasikan.') % **********Set kunci rahasia untuk user / penguna*********** % % ini merupakan part dimana user harus mengganti kode paka kunci rahasia global m maple('a:=', 234); disp(' ') disp('Tampilkan p, Alpha and Betaa:') % menggenerasi / menampilkan secara acak bilangan prima p (p adalah antara 0 and 2^128) maple('p:=','nextprime(rand(0..2^128)())') p = maple('p'); set(Ecc.listbox1,'string',num2str(p)); % hitung root awal (primitive root) Alpha maple('Alpha:=','primroot(p)') Alpha = maple('Alpha'); set(Ecc.listbox2,'string',num2str(Alpha)); % hitung kunci publik (public key) Betaa maple('Betaa:=','(Alpha^a) mod p') Betaa = maple('Betaa'); set(Ecc.listbox3,'string',num2str(Betaa)); [namafile,direktori]=uigetfile('*.txt','loaddata'); eval(['cd ''' direktori ''';']); fid = fopen(namafile,'r'); m = fread(fid, 'uint8=>char'); fclose(fid); plainteks=sprintf(m); set(Ecc.listbox4,'string',plainteks); set(Ecc.listbox4,'Userdata',plainteks); ELGencrypt(p,Alpha,Betaa,m) waitbar(p/pjg) end close(h); % --- Executes on selection change in listbox1. function listbox1_Callback(hObject, eventdata, Ecc) % hObject handle to listbox1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % Ecc structure with Ecc and user data (see GUIDATA)
% Hints: contents = get(hObject,'String') returns listbox1 contents as cell array % contents{get(hObject,'Value')} returns selected item from listbox1 % --- Executes during object creation, after setting all properties. function listbox1_CreateFcn(hObject, eventdata, Ecc) % hObject handle to listbox1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % Ecc empty - Ecc not created until after all CreateFcns called % Hint: listbox controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on selection change in listbox2. function listbox2_Callback(hObject, eventdata, Ecc) % hObject handle to listbox2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % Ecc structure with Ecc and user data (see GUIDATA) % Hints: contents = get(hObject,'String') returns listbox2 contents as cell array % contents{get(hObject,'Value')} returns selected item from listbox2 % --- Executes during object creation, after setting all properties. function listbox2_CreateFcn(hObject, eventdata, Ecc) % hObject handle to listbox2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % Ecc empty - Ecc not created until after all CreateFcns called % Hint: listbox controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on selection change in listbox3. function listbox3_Callback(hObject, eventdata, Ecc) % hObject handle to listbox3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % Ecc structure with Ecc and user data (see GUIDATA)
% Hints: contents = get(hObject,'String') returns listbox3 contents as cell array % contents{get(hObject,'Value')} returns selected item from listbox3 % --- Executes during object creation, after setting all properties. function listbox3_CreateFcn(hObject, eventdata, Ecc) % hObject handle to listbox3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % Ecc empty - Ecc not created until after all CreateFcns called % Hint: listbox controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on selection change in listbox4. function listbox4_Callback(hObject, eventdata, Ecc) % hObject handle to listbox4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % Ecc structure with Ecc and user data (see GUIDATA) % Hints: contents = get(hObject,'String') returns listbox4 contents as cell array % contents{get(hObject,'Value')} returns selected item from listbox4 % --- Executes during object creation, after setting all properties. function listbox4_CreateFcn(hObject, eventdata, Ecc) % hObject handle to listbox4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % Ecc empty - Ecc not created until after all CreateFcns called % Hint: listbox controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on selection change in listbox5. function listbox5_Callback(hObject, eventdata, Ecc) % hObject handle to listbox5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % Ecc structure with Ecc and user data (see GUIDATA)
% Hints: contents = get(hObject,'String') returns listbox5 contents as cell array % contents{get(hObject,'Value')} returns selected item from listbox5 % --- Executes during object creation, after setting all properties. function listbox5_CreateFcn(hObject, eventdata, Ecc) % hObject handle to listbox5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % Ecc empty - Ecc not created until after all CreateFcns called % Hint: listbox controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in btnsign. function btnsign_Callback(hObject, eventdata, Ecc) % hObject handle to btnsign (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % Ecc structure with Ecc and user data (see GUIDATA) Ecc=guidata(gcbo); global y1 y2 m=get(Ecc.listbox4,'Userdata'); set(Ecc.listbox5,'string',(y1)); set(Ecc.listbox6,'string',(y2)); if isequal(m,0) return end if isequal(m,[]) msgbox('load pesan terlebih dahulu ...','perhatian','warn') return end % --- Executes on selection change in listbox6. function listbox6_Callback(hObject, eventdata, Ecc) % hObject handle to listbox6 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % Ecc structure with Ecc and user data (see GUIDATA) % Hints: contents = get(hObject,'String') returns listbox6 contents as cell array % contents{get(hObject,'Value')} returns selected item from listbox6 % --- Executes during object creation, after setting all properties.
function listbox6_CreateFcn(hObject, eventdata, Ecc) % hObject handle to listbox6 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % Ecc empty - Ecc not created until after all CreateFcns called % Hint: listbox controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in btnenkrip. function btnenkrip_Callback(hObject, eventdata, Ecc) % hObject handle to btnenkrip (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % Ecc structure with Ecc and user data (see GUIDATA) Ecc=guidata(gcbo); maple('a:=', 234); disp(' ') disp('Tampilkan p, Primelist and sign:') % menggenerasi / menampilkan secara acak bilangan prima p (p adalah antara 0 and 2^128) maple('p:=','nextprime(rand(0..2^128)())') p = maple('p'); set(Ecc.listbox8,'string',num2str(p)); % hitung root awal (primitive root) Alpha maple('Alpha:=','primroot(p)') Alpha = maple('Alpha'); % hitung kunci publik (public key) Betaa maple('Betaa:=','(Alpha^a) mod p') Betaa = maple('Betaa'); set(Ecc.listbox9,'string',num2str(Betaa)); % --- Executes on selection change in listbox8. function listbox8_Callback(hObject, eventdata, Ecc) % hObject handle to listbox8 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % Ecc structure with Ecc and user data (see GUIDATA) % Hints: contents = get(hObject,'String') returns listbox8 contents as cell array % contents{get(hObject,'Value')} returns selected item from listbox8 % --- Executes during object creation, after setting all properties. function listbox8_CreateFcn(hObject, eventdata, Ecc) % hObject handle to listbox8 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % Ecc empty - Ecc not created until after all CreateFcns called % Hint: listbox controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on selection change in listbox9. function listbox9_Callback(hObject, eventdata, Ecc) % hObject handle to listbox9 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % Ecc structure with Ecc and user data (see GUIDATA) % Hints: contents = get(hObject,'String') returns listbox9 contents as cell array % contents{get(hObject,'Value')} returns selected item from listbox9 % --- Executes during object creation, after setting all properties. function listbox9_CreateFcn(hObject, eventdata, Ecc) % hObject handle to listbox9 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % Ecc empty - Ecc not created until after all CreateFcns called % Hint: listbox controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in btndekripsi. function btndekripsi_Callback(hObject, eventdata, Ecc) % hObject handle to btndekripsi (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % Ecc structure with Ecc and user data (see GUIDATA) % Gunakan y1 dan y2 untuk mendecrypt (membuka) pesan % memanggil nilai dari y1 & y2 : Ecc=guidata(gcbo); global y1 y2 Ecc=guidata(gcbo); y1=str2double(get(Ecc.listbox5,'string')); y2=str2double(get(Ecc.listbox6,'string')); % Mengkalkulasi (Menghitung) karakter numerik plain text menggunakan y1 dan y2 dari pengirim pesan : maple('num_plaintext :=', '(((y1&^a)&^(-1))*y2) mod p'); num_plaintext = maple('num_plaintext'); % Mengkonversi karakter numerik plain text ke dalam karakter :
num_plaintext_length = numel(num_plaintext); odd = rem(num_plaintext_length,2); % Jika pesan dari karakter numerik tersebut terdapat karakter nomor % maka nilai numeriknya dari karakter utama sama dengan atau lebih besar dari 10 (x => 10) % lalu kita dapat konversi setiap 2 nomor yang berurutan menjadi satu karakter if odd==0,; z=1; plaintext = ''; for n=1:num_plaintext_length/2,; q = ((num_plaintext(z)-48)*10)+(num_plaintext(z+1)-48); plaintext = strcat(plaintext,char(q+'a'-1)); z=z+2; end; message = plaintext end; % jika panjang pesan dari numerik plain text merupakan / terdapat angka gajil % maka nilai numerik dari karakter utama / pertama adalah kurang dari 10 (x < 10) % konversi angka single yang pertama ke dalam karakter % dan sisanya, maka kita konversi setiap dua angka yang berurutan ke dalam satu karakter if odd==1, m = floor(num_plaintext_length/2) + 1; q = num_plaintext(1)-48; plaintext = char(q+'a'-1); z=2; for n=2:m, q = ((num_plaintext(z)-48)*10)+(num_plaintext(z+1)-48); plaintext = strcat(plaintext,char(q+'a'-1)); z=z+2; end; message = plaintext end; set(Ecc.listbox11,'string',(message)); % --- Executes on selection change in listbox11. function listbox11_Callback(hObject, eventdata, Ecc) % hObject handle to listbox11 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % Ecc structure with Ecc and user data (see GUIDATA) % Hints: contents = get(hObject,'String') returns listbox11 contents as cell array % contents{get(hObject,'Value')} returns selected item from listbox11 % --- Executes during object creation, after setting all properties.
function listbox11_CreateFcn(hObject, eventdata, Ecc) % hObject handle to listbox11 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % Ecc empty - Ecc not created until after all CreateFcns called % Hint: listbox controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in btnsimpanteks. function btnsimpanteks_Callback(hObject, eventdata, Ecc) % hObject handle to btnsimpanteks (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % Ecc structure with Ecc and user data (see GUIDATA) Ecc=guidata(gcbo); [namafile,direktori]=uiputfile('*.txt','Simpanpesan'); pesan=fopen(namafile,'w'); namafile=get(Ecc.listbox10,'string'); fprintf(pesan,namafile); fclose(pesan); % --- Executes on selection change in listbox10. function listbox10_Callback(hObject, eventdata, handles) % hObject handle to listbox10 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: contents = get(hObject,'String') returns listbox10 contents as cell array % contents{get(hObject,'Value')} returns selected item from listbox10 % --- Executes during object creation, after setting all properties. function listbox10_CreateFcn(hObject, eventdata, handles) % hObject handle to listbox10 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: listbox controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in pushbutton9.
function pushbutton9_Callback(hObject, eventdata, handles) % hObject handle to pushbutton9 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Ecc=guidata(gcbo); [namafile,direktori]=uiputfile('*.txt','Simpanpesan'); pesan=fopen(namafile,'w'); namafile=get(Ecc.listbox5,'string'); fprintf(pesan,namafile); fclose(pesan); % --- Executes on button press in btnbersih. function btnbersih_Callback(hObject, eventdata, handles) % hObject handle to btnbersih (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Ecc=guidata(gcbo); set(Ecc.listbox1,'string',''); set(Ecc.listbox2,'string',''); set(Ecc.listbox3,'string',''); set(Ecc.listbox4,'string',''); set(Ecc.listbox5,'string',''); set(Ecc.listbox6,'string',''); set(Ecc.listbox8,'string',''); set(Ecc.listbox9,'string',''); set(Ecc.listbox10,'string',''); set(Ecc.inputText,'string',''); % -------------------------------------------------------------------- function file_Callback(hObject, eventdata, handles) % hObject handle to file (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % -------------------------------------------------------------------- function bersih_Callback(hObject, eventdata, handles) % hObject handle to bersih (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Ecc=guidata(gcbo); set(Ecc.listbox1,'string',''); set(Ecc.listbox2,'string',''); set(Ecc.listbox3,'string',''); set(Ecc.listbox4,'string',''); set(Ecc.listbox5,'string',''); set(Ecc.listbox6,'string',''); set(Ecc.listbox8,'string',''); set(Ecc.listbox9,'string',''); set(Ecc.listbox10,'string','');
set(Ecc.inputText,'string',''); % -------------------------------------------------------------------- function keluar_Callback(hObject, eventdata, handles) % hObject handle to keluar (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) pilihan= questdlg(['Anda yakin keluar dari aplikasi',... get(handles.figure1,'name'),'?'],... ['Konfirmasi tutup'],'Ya','Tidak','Ya'); if strcmp(pilihan,'Tidak') return; end delete(handles.figure1); % -------------------------------------------------------------------- function proses_Callback(hObject, eventdata, handles) % hObject handle to proses (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % -------------------------------------------------------------------- function enkripsi_Callback(hObject, eventdata, handles) % hObject handle to enkripsi (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) enkrip; % -------------------------------------------------------------------- function dekripsi_Callback(hObject, eventdata, handles) % hObject handle to dekripsi (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) dekrip;
Fungsi Dekripsi (Source code)
function varargout = Ecc(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @dekrip_OpeningFcn, ... 'gui_OutputFcn', @dekrip_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end function dekrip_OpeningFcn(hObject, eventdata, handles, varargin) % Inisialisasi parameter handles.params.characterList = ... sprintf('0123456789'); handles.params.nRotors = 8; % Inisialisasi parameter kontrol Gui tmp = length(handles.params.characterList); fillMenu = cell(length(handles.params.characterList),1); for iA = 1:length(fillMenu); fillMenu{iA} = handles.params.characterList(iA); end set(handles.slider1,'SliderStep',[1/(tmp-1), 5/(tmp-1)],'Min',1,'Max',tmp,'Value',1) set(handles.slider2,'SliderStep',[1/(tmp-1), 5/(tmp-1)],'Min',1,'Max',tmp,'Value',1) set(handles.slider3,'SliderStep',[1/(tmp-1), 5/(tmp-1)],'Min',1,'Max',tmp,'Value',1) set(handles.slider4,'SliderStep',[1/(tmp-1), 5/(tmp-1)],'Min',1,'Max',tmp,'Value',1) set(handles.slider5,'SliderStep',[1/(tmp-1), 5/(tmp-1)],'Min',1,'Max',tmp,'Value',1) set(handles.slider6,'SliderStep',[1/(tmp-1), 5/(tmp-1)],'Min',1,'Max',tmp,'Value',1) set(handles.slider7,'SliderStep',[1/(tmp-1), 5/(tmp-1)],'Min',1,'Max',tmp,'Value',1) set(handles.slider8,'SliderStep',[1/(tmp-1), 5/(tmp-1)],'Min',1,'Max',tmp,'Value',1) set(handles.edit1,'String',handles.params.characterList(1)); set(handles.edit2,'String',handles.params.characterList(1)); set(handles.edit3,'String',handles.params.characterList(1)); set(handles.edit4,'String',handles.params.characterList(1)); set(handles.edit5,'String',handles.params.characterList(1)); set(handles.edit6,'String',handles.params.characterList(1)); set(handles.edit7,'String',handles.params.characterList(1)); set(handles.edit8,'String',handles.params.characterList(1)); set(handles.checkbox1,'Value',1); set(handles.checkbox2,'Value',1); set(handles.checkbox3,'Value',1); set(handles.checkbox4,'Value',1); set(handles.checkbox5,'Value',1); set(handles.checkbox6,'Value',0); set(handles.checkbox7,'Value',0); set(handles.checkbox8,'Value',0); set(handles.popupmenu1a,'String',fillMenu); set(handles.popupmenu1b,'String',fillMenu); set(handles.popupmenu2a,'String',fillMenu); set(handles.popupmenu2b,'String',fillMenu); set(handles.popupmenu3a,'String',fillMenu);
set(handles.popupmenu3b,'String',fillMenu); set(handles.popupmenu4a,'String',fillMenu); set(handles.popupmenu4b,'String',fillMenu); set(handles.popupmenu5a,'String',fillMenu); set(handles.popupmenu5b,'String',fillMenu); guidata(hObject, handles); uiwait(handles.figure2); function varargout = dekrip_OutputFcn(hObject, eventdata, handles) if ~isempty(handles) close(handles.figure2) end function inputText_Callback(hObject, eventdata, handles) function inputText_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function outputText_Callback(hObject, eventdata, handles) function outputText_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function runButton_Callback(hObject, eventdata, handles) Ecc=guidata(gcbo); global s s = s maple('s:=',s); r=get(Ecc.listbox1,'string'); if r > 0 s=s; else s=r; end set(Ecc.listbox6,'string',(s)); set(Ecc.listbox6,'Userdata',(s)); handles = guidata(hObject); listbox1 = get(handles.listbox1,'String'); if ~isempty(listbox1); handles.params = getParams(handles); if sum(handles.params.rotorUse) > 0 if sum(sum(handles.params.plugboard ~= 0)) < length(unique(handles.params.plugboard(:))) listbox3 = runEcc(listbox1,handles.params); set(handles.listbox3,'String',listbox3); else set(handles.listbox3,... 'String',''); end else
set(handles.listbox3,'String',''); end else set(handles.listbox3,'String','masukan sign'); end guidata(hObject, handles); function loadButton_Callback(hObject, eventdata, handles) [inputFileName, inputPathName] = uigetfile('*.txt', 'Pick a Text File for Input'); if ~isequal(inputFileName,0) [outputFileName, outputPathName] = uiputfile('*.txt', 'Pick a Text File for Output'); if ~isequal(outputFileName,0) [fidIn] = fopen(sprintf('%s%s%s',inputPathName,filesep,inputFileName),'r'); [fidOut] = fopen(sprintf('%s%s%s',outputPathName,filesep,outputFileName),'w'); params = getParams(handles); while 1 inLine = fgetl(fidIn); if ~ischar(inLine) break else outLine = runEcc(inLine,params); end fprintf(fidOut,'%s\n',outLine); end fclose(fidIn); fclose(fidOut); set(handles.listbox1,'String','Your Text File'); set(handles.listbox3,'String','Has Been Processed'); end end function paramButton_Callback(hObject, eventdata, handles) if get(hObject,'Value') == 1; set(handles.uipanel1,'Visible','on'); set(handles.uipanel2,'Visible','on'); set(handles.inputTitle,'Visible','off'); set(handles.outputTitle,'Visible','off'); set(handles.listbox1,'Visible','off'); set(handles.listbox3,'Visible','off'); set(handles.runButton,'Visible','off'); set(handles.loadButton,'Visible','off'); set(hObject,'String','Return to Enigma'); else set(handles.uipanel1,'Visible','off'); set(handles.uipanel2,'Visible','off'); set(handles.inputTitle,'Visible','on'); set(handles.outputTitle,'Visible','on');
set(handles.listbox1,'Visible','on'); set(handles.listbox3,'Visible','on'); set(handles.runButton,'Visible','on'); set(handles.loadButton,'Visible','on'); set(hObject,'String','Edit Parameters'); end function params = getParams(handles) params = handles.params; % Parameter Gui kontrol params.rotorState = ones(params.nRotors,1); params.rotorState(1) = get(handles.slider1,'Value'); params.rotorState(2) = get(handles.slider2,'Value'); params.rotorState(3) = get(handles.slider3,'Value'); params.rotorState(4) = get(handles.slider4,'Value'); params.rotorState(5) = get(handles.slider5,'Value'); params.rotorState(6) = get(handles.slider6,'Value'); params.rotorState(7) = get(handles.slider7,'Value'); params.rotorState(8) = get(handles.slider8,'Value'); params.rotorState = round(params.rotorState); params.rotorUse(1) = get(handles.checkbox1,'Value'); params.rotorUse(2) = get(handles.checkbox2,'Value'); params.rotorUse(3) = get(handles.checkbox3,'Value'); params.rotorUse(4) = get(handles.checkbox4,'Value'); params.rotorUse(5) = get(handles.checkbox5,'Value'); params.rotorUse(6) = get(handles.checkbox6,'Value'); params.rotorUse(7) = get(handles.checkbox7,'Value'); params.rotorUse(8) = get(handles.checkbox8,'Value'); params.plugboard = zeros(5,2); params.plugboard(1,1) = get(handles.popupmenu1a,'Value'); params.plugboard(1,2) = get(handles.popupmenu1b,'Value'); params.plugboard(2,1) = get(handles.popupmenu2a,'Value'); params.plugboard(2,2) = get(handles.popupmenu2b,'Value'); params.plugboard(3,1) = get(handles.popupmenu3a,'Value'); params.plugboard(3,2) = get(handles.popupmenu3b,'Value'); params.plugboard(4,1) = get(handles.popupmenu4a,'Value'); params.plugboard(4,2) = get(handles.popupmenu4b,'Value'); params.plugboard(5,1) = get(handles.popupmenu5a,'Value'); params.plugboard(5,2) = get(handles.popupmenu5b,'Value'); if get(handles.checkPlug1,'Value')==0, params.plugboard(1,:) = 0; end if get(handles.checkPlug2,'Value')==0, params.plugboard(2,:) = 0; end if get(handles.checkPlug3,'Value')==0, params.plugboard(3,:) = 0; end if get(handles.checkPlug4,'Value')==0, params.plugboard(4,:) = 0; end if get(handles.checkPlug5,'Value')==0, params.plugboard(5,:) = 0; end function outMsg = runEcc(inMsg,params) randn('seed',0); randn('state',0); rand('seed',0); rand('state',0); params.rotors = buildRotors(params.nRotors,length(params.characterList),params.rotorState); params.rotorState = params.rotorState(logical(params.rotorUse)); params.nRotors = length(params.rotorState);
params.rotors = params.rotors(:,logical(params.rotorUse)); params.reflector = buildReflector(length(params.characterList)); % praprocess pesan procMsg = preprocess(inMsg,params.characterList); outMsg = ''; for iA = 1:length(procMsg) % Chiper ke plainteks msgNum = strfind(params.characterList,procMsg(iA)); msgNum = runPlugboard(msgNum,params.plugboard); tmpOut = passThroughRotors(msgNum,params); tmpOut = runPlugboard(tmpOut,params.plugboard); outMsg(iA) = params.characterList(tmpOut); params = rotateRotors(params); end function msgOut = runPlugboard(msgIn,plugboard) if sum(msgIn == plugboard(:,1)) == 1 msgOut = plugboard(msgIn == plugboard(:,1),2); elseif sum(msgIn == plugboard(:,2)) == 1 msgOut = plugboard(msgIn == plugboard(:,2),1); else msgOut = msgIn; end function params = rotateRotors(params) params.nRotors = size(params.rotors,2); exitFlag = 0; rotorNum = 1; while ~exitFlag tmp = params.rotors(:,rotorNum); params.rotors(:,rotorNum) = [tmp(2:end); tmp(1)]; params.rotorState(rotorNum) = ... mod(params.rotorState(rotorNum),size(params.rotors,1)) + 1; if ~isequal(params.rotorState(rotorNum),1) exitFlag = 1; end rotorNum = rotorNum + 1; if rotorNum > params.nRotors exitFlag = 1; end end function letterOut = passThroughRotors(letterIn,params) tmpOut = letterIn; for iB = 1:size(params.rotors,2) tmpIn = tmpOut; tmpOut = params.rotors(tmpIn,iB); end tmpIn = tmpOut; tmpOut = params.reflector(tmpIn); for iB = size(params.rotors,2):-1:1 tmpIn = tmpOut; tmpOut = find(params.rotors(:,iB)==tmpIn); end letterOut = tmpOut; function procMsg = preprocess(inMsg,characterList)
inMsg = upper(inMsg); procMsg = inMsg(ismember(inMsg,characterList)); function reflector = buildReflector(nCharacters) tmp = randperm(nCharacters)'; reflector = zeros(nCharacters,1); while ~isempty(tmp) fillers = tmp(1:2); tmp(1:2) = []; reflector(fillers(1)) = fillers(2); reflector(fillers(2)) = fillers(1); end function rotors = buildRotors(nRotors,nCharacters,rotorState) rotors = zeros(nCharacters,nRotors); for iRotor = 1:nRotors rotors(:,iRotor) = randperm(nCharacters)'; end for iRotor = 1:nRotors tmp = rotors(:,iRotor); if rotorState(iRotor) > 1 tmp = [tmp(rotorState(iRotor):end); tmp(1:rotorState(iRotor)-1)]; rotors(:,iRotor) = tmp; end end function slider1_Callback(hObject, eventdata, handles) set(handles.edit1,'String',handles.params.characterList(round(get(hObject,'Value')))); function slider1_CreateFcn(hObject, eventdata, handles) if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end function slider2_Callback(hObject, eventdata, handles) set(handles.edit2,'String',handles.params.characterList(round(get(hObject,'Value')))); function slider2_CreateFcn(hObject, eventdata, handles) if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end function slider3_Callback(hObject, eventdata, handles) set(handles.edit3,'String',handles.params.characterList(round(get(hObject,'Value')))); function slider3_CreateFcn(hObject, eventdata, handles) if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end function slider4_Callback(hObject, eventdata, handles) set(handles.edit4,'String',handles.params.characterList(round(get(hObject,'Value')))); function slider4_CreateFcn(hObject, eventdata, handles) if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end
function slider5_Callback(hObject, eventdata, handles) set(handles.edit5,'String',handles.params.characterList(round(get(hObject,'Value')))); function slider5_CreateFcn(hObject, eventdata, handles) if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end function slider6_Callback(hObject, eventdata, handles) set(handles.edit6,'String',handles.params.characterList(round(get(hObject,'Value')))); function slider6_CreateFcn(hObject, eventdata, handles) if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end function slider7_Callback(hObject, eventdata, handles) set(handles.edit7,'String',handles.params.characterList(round(get(hObject,'Value')))); function slider7_CreateFcn(hObject, eventdata, handles) if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end function slider8_Callback(hObject, eventdata, handles) set(handles.edit8,'String',handles.params.characterList(round(get(hObject,'Value')))); function slider8_CreateFcn(hObject, eventdata, handles) if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end function edit1_Callback(hObject, eventdata, handles) function edit1_CreateFcn(hObject, eventdata, handles) function edit2_Callback(hObject, eventdata, handles) function edit2_CreateFcn(hObject, eventdata, handles) function edit3_Callback(hObject, eventdata, handles) function edit3_CreateFcn(hObject, eventdata, handles) function edit4_Callback(hObject, eventdata, handles) function edit4_CreateFcn(hObject, eventdata, handles) function edit5_Callback(hObject, eventdata, handles) function edit5_CreateFcn(hObject, eventdata, handles) function edit6_Callback(hObject, eventdata, handles) function edit6_CreateFcn(hObject, eventdata, handles) function edit7_Callback(hObject, eventdata, handles) function edit7_CreateFcn(hObject, eventdata, handles) function edit8_Callback(hObject, eventdata, handles) function edit8_CreateFcn(hObject, eventdata, handles) function checkbox1_Callback(hObject, eventdata, handles) function checkbox2_Callback(hObject, eventdata, handles) function checkbox3_Callback(hObject, eventdata, handles) function checkbox4_Callback(hObject, eventdata, handles) function checkbox5_Callback(hObject, eventdata, handles) function checkbox6_Callback(hObject, eventdata, handles) function checkbox7_Callback(hObject, eventdata, handles) function checkbox8_Callback(hObject, eventdata, handles) function popupmenu1a_Callback(hObject, eventdata, handles) function popupmenu1a_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function popupmenu1b_Callback(hObject, eventdata, handles) function popupmenu1b_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function popupmenu2a_Callback(hObject, eventdata, handles) function popupmenu2a_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function popupmenu2b_Callback(hObject, eventdata, handles) function popupmenu2b_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function popupmenu3a_Callback(hObject, eventdata, handles) function popupmenu3a_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function popupmenu3b_Callback(hObject, eventdata, handles) function popupmenu3b_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function popupmenu4a_Callback(hObject, eventdata, handles) function popupmenu4a_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function popupmenu4b_Callback(hObject, eventdata, handles) function popupmenu4b_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function popupmenu5a_Callback(hObject, eventdata, handles) function popupmenu5a_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function popupmenu5b_Callback(hObject, eventdata, handles) function popupmenu5b_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function checkPlug1_Callback(hObject, eventdata, handles)
function checkPlug2_Callback(hObject, eventdata, handles) function checkPlug3_Callback(hObject, eventdata, handles) function checkPlug4_Callback(hObject, eventdata, handles) function checkPlug5_Callback(hObject, eventdata, handles) % --- Executes on button press in pushbutton4. function pushbutton4_Callback(hObject, eventdata, handles) % hObject handle to pushbutton4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Ecc=guidata(gcbo); % Mengkalkulasi (Menghitung) karakter numerik plain text menggunakan y1 dan y2 dari pengirim pesan : maple('num_plaintext :=', '(((y1&^a)&^(-1))*y2) mod p'); num_plaintext = maple('num_plaintext'); % Mengkonversi karakter numerik plain text ke dalam karakter : num_plaintext_length = numel(num_plaintext); odd = rem(num_plaintext_length,2); % Jika pesan dari karakter numerik tersebut terdapat karakter nomor % maka nilai numeriknya dari karakter utama sama dengan atau lebih besar dari 10 (x => 10) % lalu kita dapat konversi setiap 2 nomor yang berurutan menjadi satu karakter if odd==0,; z=1; plaintext = ''; for n=1:num_plaintext_length/2,; q = ((num_plaintext(z)-48)*10)+(num_plaintext(z+1)-48); plaintext = strcat(plaintext,char(q+'a'-1)); z=z+2; end; message = plaintext end; % jika panjang pesan dari numerik plain text merupakan / terdapat angka gajil % maka nilai numerik dari karakter utama / pertama adalah kurang dari 10 (x < 10) % konversi angka single yang pertama ke dalam karakter % dan sisanya, maka kita konversi setiap dua angka yang berurutan ke dalam satu karakter if odd==1, m = floor(num_plaintext_length/2) + 1; q = num_plaintext(1)-48; plaintext = char(q+'a'-1); z=2; for n=2:m, q = ((num_plaintext(z)-48)*10)+(num_plaintext(z+1)-48); plaintext = strcat(plaintext,char(q+'a'-1));
z=z+2; end; message = plaintext end; global y1 y2 maple('y1:=',y1); maple('y2:=',y2); y1=str2double(get(Ecc.listbox3,'string')); y2=str2double(get(Ecc.listbox4,'string')); if y2 > 0 m = message; else m = y; end set(Ecc.listbox5,'string',(m)); set(Ecc.listbox5,'Userdata',(m)); % --- Executes on button press in pushbutton5. function pushbutton5_Callback(hObject, eventdata, handles) % hObject handle to pushbutton5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Ecc=guidata(gcbo); [namafile,direktori]=uigetfile('*.txt','Buka Teks'); teks=fopen(namafile,'r'); charteks=fread(teks,'uint8=>char'); fclose(teks); pesan=sprintf(charteks); set(Ecc.listbox1,'string',pesan); set(Ecc.listbox1,'Userdata',pesan); % --- Executes on selection change in listbox1. function listbox1_Callback(hObject, eventdata, handles) % hObject handle to listbox1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: contents = get(hObject,'String') returns listbox1 contents as cell array % contents{get(hObject,'Value')} returns selected item from listbox1 % --- Executes during object creation, after setting all properties. function listbox1_CreateFcn(hObject, eventdata, handles) % hObject handle to listbox1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: listbox controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on selection change in listbox3. function listbox3_Callback(hObject, eventdata, handles) % hObject handle to listbox3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: contents = get(hObject,'String') returns listbox3 contents as cell array % contents{get(hObject,'Value')} returns selected item from listbox3 % --- Executes during object creation, after setting all properties. function listbox3_CreateFcn(hObject, eventdata, handles) % hObject handle to listbox3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: listbox controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on selection change in listbox4. function listbox4_Callback(hObject, eventdata, handles) % hObject handle to listbox4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: contents = get(hObject,'String') returns listbox4 contents as cell array % contents{get(hObject,'Value')} returns selected item from listbox4 % --- Executes during object creation, after setting all properties. function listbox4_CreateFcn(hObject, eventdata, handles) % hObject handle to listbox4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called % Hint: listbox controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in btnambilpesan. function btnambilpesan_Callback(hObject, eventdata, handles) % hObject handle to btnambilpesan (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Ecc=guidata(gcbo); [namafile,direktori]=uigetfile('*.txt','Buka Teks'); teks=fopen(namafile,'r'); charteks=fread(teks,'uint8=>char'); fclose(teks); pesan=sprintf(charteks); set(Ecc.listbox4,'string',pesan); set(Ecc.listbox4,'Userdata',pesan); % --- Executes on selection change in listbox5. function listbox5_Callback(hObject, eventdata, handles) % hObject handle to listbox5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: contents = get(hObject,'String') returns listbox5 contents as cell array % contents{get(hObject,'Value')} returns selected item from listbox5 % --- Executes during object creation, after setting all properties. function listbox5_CreateFcn(hObject, eventdata, handles) % hObject handle to listbox5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: listbox controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end
% --- Executes on selection change in listbox6. function listbox6_Callback(hObject, eventdata, handles) % hObject handle to listbox6 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: contents = get(hObject,'String') returns listbox6 contents as cell array % contents{get(hObject,'Value')} returns selected item from listbox6 % --- Executes during object creation, after setting all properties. function listbox6_CreateFcn(hObject, eventdata, handles) % hObject handle to listbox6 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: listbox controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in btnbesih. function btnbesih_Callback(hObject, eventdata, handles) % hObject handle to btnbesih (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Ecc=guidata(gcbo); set(Ecc.listbox1,'string',''); set(Ecc.listbox3,'string',''); set(Ecc.listbox4,'string',''); set(Ecc.listbox5,'string',''); set(Ecc.listbox6,'string',''); % -------------------------------------------------------------------- function bersih_Callback(hObject, eventdata, handles) % hObject handle to bersih (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Ecc=guidata(gcbo); set(Ecc.listbox1,'string',''); set(Ecc.listbox3,'string',''); set(Ecc.listbox4,'string',''); set(Ecc.listbox5,'string',''); set(Ecc.listbox6,'string','');
% -------------------------------------------------------------------- function keluar_Callback(hObject, eventdata, handles) % hObject handle to keluar (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) pilihan= questdlg(['Anda yakin keluar dari aplikasi',... get(handles.figure2,'name'),'?'],... ['Konfirmasi tutup'],'Ya','Tidak','Ya'); if strcmp(pilihan,'Tidak') return; end delete(handles.figure2); % -------------------------------------------------------------------- function enkripsi_Callback(hObject, eventdata, handles) % hObject handle to enkripsi (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) enkrip; % -------------------------------------------------------------------- function dekripsi_Callback(hObject, eventdata, handles) % hObject handle to dekripsi (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) dekrip;
Fungsi ECDSA (Source code) function ECDSA = public,private (key) ecdsa=guidata(gcbo); global v r message_length = numel(m); % panjang pesan g=generator; n=g.order; % mengkonversi seluruh karakter didalam pesan ke dalam angka dan disimpan % di dalam mnum_array r = r; % objek tanda tangan s = s; % bentuk tanda tangan mnum = ''; % Untuk karakter pertama, tidak membutuhkan anga nol di awal karakter angka % (jika angka tersebut kurang dar 10) <10 h =generator(m(1)); mnum_array(1) = h; % Untuk sisa pesan tersebut, jika karakter angka kurang dari 10 maka n= 2; while (j <= message_length) h = generator(m(j)); if ( h <= 9 ) mnum_array(n) = 0; mnum_array(n+1) = h; n = n + 2; else mnum_array(n) = h; n = n + 1; end; j = j + 1; end; % simpan setiap nilai di dalam array secara bersamaan dan menentukan ke % variabel mnum (pesan numerik) mnum_array_length = numel(mnum_array); for n=1:mnum_array_length, mnum = strcat(mnum,num2str(mnum_array(n))); end; maple('mnum:=',mnum); mnum_length = numel(mnum); % membandingkan mnum dengan p. jika mnum lebih besar dari p (mnum > p)
% maka set flag (tanda) ke angka 1 p_length = numel(p); flag = 0; if (mnum_length == p_length) for index=1: p_length, if(mnum(index) > p(index)) flag = 1; break; end; end; end; if(mnum_length > p_length) flag =1; end; % Jika if mnum lebih besar dari p (mnum > p) maka tapilkan pesan error if(flag ==1) disp('') % jika mnum kurang dari p (mnum < p), lakukan proses Ekripsi else % Menggenerasi integer k secara acak maple('k:=','rand()'); k = maple('k'); % Menghitung hash maple('hash:=','d&^k mod p'); hash = maple('hash') % Menghitung signature maple('signature:=','((q&^k)*mnum) mod p'); signature = maple('signature') end; function y = generator (x,y) % Fungsi ini berfungsi untuk memanggil pesan dalam bentuk string x dan mengkonversi string tersebut % ke dalam integer. % bentuk konversi dari fungsi ini berupa : % ' ' --> 0 % a --> 1 % b --> 2 % terletak pada fungsi ... [s1,s2]=size(x); yvec=x - 'a'+1; inds=find(yvec<1); yvec(inds)=zeros(size(inds)); % meletakan seluruh spasi / ruang kosong mejadi nilai=0 % Fungsi untuk mengkonvesi angka : y=zeros(s1,1); for k=1:s1, for j=0:s2-1, ind=s2-j;
y(k)=y(k)+yvec(k,ind)*100^(j); end; end;
Fungsi Kurva Elliptik (Source code) function ciphertext = ELGencrypt (p, Alpha, Betaa, m) global y1 y2 message_length = numel(m); % panjang pesan % mengkonversi seluruh karakter didalam pesan ke dalam angka dan disimpan % di dalam mnum_array n = 1; j = 2; mnum = ''; % Untuk karakter pertama, tidak membutuhkan anga nol di awal karakter angka % (jika angka tersebut kurang dar 10) <10 h =text2int1(m(1)); mnum_array(1) = h; % Untuk sisa pesan tersebut, jika karakter angka kurang dari 10 maka % bubuhkan karakter angka 0 di ala / depan karakter angka tersebut n= 2; while (j <= message_length) h = text2int1(m(j)); if ( h <= 9 ) mnum_array(n) = 0; mnum_array(n+1) = h; n = n + 2; else mnum_array(n) = h; n = n + 1; end; j = j + 1; end; % simpan setiap nilai di dalam array secara bersamaan dan menentukan ke % variabel mnum (pesan numerik) mnum_array_length = numel(mnum_array); for n=1:mnum_array_length, mnum = strcat(mnum,num2str(mnum_array(n))); end; maple('mnum:=',mnum); mnum_length = numel(mnum); % membandingkan mnum dengan p. jika mnum lebih besar dari p (mnum > p) % maka set flag (tanda) ke angka 1 p_length = numel(p);
flag = 0; if (mnum_length == p_length) for index=1: p_length, if(mnum(index) > p(index)) flag = 1; break; end; end; end; if(mnum_length > p_length) flag =1; end; % Jika if mnum lebih besar dari p (mnum > p) maka tapilkan pesan error if(flag ==1) disp('Pesan terlalu panjang, buat lebih ringkas.') % jika mnum kurang dari p (mnum < p), lakukan proses Ekripsi else % Menggenerasi integer k secara acak maple('k:=','rand()'); k = maple('k'); % Menghitung y1 maple('y1:=','Alpha&^k mod p'); y1 = maple('y1') % Menghitung y2 maple('y2:=','((Betaa&^k)*mnum) mod p'); y2 = maple('y2') end; function y = text2int1 (x) % Fungsi ini berfungsi untuk memanggil pesan dalam bentuk string x dan mengkonversi string tersebut % ke dalam integer. % bentuk konversi dari fungsi ini berupa : % ' ' --> 0 % a --> 1 % b --> 2 % terletak pada fungsi ... [s1,s2]=size(x); yvec=x - 'a'+1; inds=find(yvec<1); yvec(inds)=zeros(size(inds)); % meletakan seluruh spasi / ruang kosong mejadi nilai=0 % Fungsi untuk mengkonvesi angka : y=zeros(s1,1); for k=1:s1, for j=0:s2-1, ind=s2-j; y(k)=y(k)+yvec(k,ind)*100^(j); end; end;
Tampilan Enkripsi
Tampilan awal (Author)
Tampilan ambil pesan tunggu
Tampilan Attaching file
Tampilan Save signature
Tampilan Dekripsi
Tampilan pengambilan signature & pesan chperteks
Tampilan hasil enkripsi sigature
Tampilan Tambahan
Tampilan Top-Bar
Tampilan File-Bar
Tampilan Process -Bar
Tampilan keluar aplikasi