aplikasi kylix untuk pembuatan sidik ... - digital …/aplikasi... · of digital signature...
Post on 05-Feb-2018
224 Views
Preview:
TRANSCRIPT
APLIKASI FUNGSI HASH MD5 DAN ALGORITMA RSA
UNTUK PEMBUATAN SIDIK DIJITAL
oleh
HIMAWAN YUSUF
M0102027
SKRIPSI
ditulis dan diajukan untuk memenuhi sebagian persyaratan
memperoleh gelar Sarjana Sains Matematika
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS SEBELAS MARET
SURAKARTA
2006
PENGESAHAN
SKRIPSIAPLIKASI FUNGSI HASH MD5 DAN ALGORITMA RSA
UNTUK PEMBUATAN SIDIK DIJITAL
yang disiapkan dan disusun oleh
HIMAWAN YUSUF
NIM. M0102027
Dibimbing oleh
Pembimbing I
Drs. Wiranto, M. Kom
NIP. 132 044 769
Pembimbing II
Drs. Sugiyanto, M.Si
NIP. 132 000 804Telah dipertahankan di depan Dewan Penguji
Pada hari Kamis, tanggal 19 Oktober 2006
dan dinyatakan telah memenuhi syarat.
Anggota Tim Penguji Tanda Tangan
1. Dr. Sutanto, S.Si, DEA 1.
NIP. 132 149 079
2. Umi Salamah, M.Kom 2.
NIP. 132 162 555
3. Sri Kuntari, M.Si 3.
NIP. 132 240 173
Surakarta, 1 November 2006
Disahkan oleh
Fakultas Matematika dan Ilmu pengetahuan Alam
Dekan, Ketua Jurusan Matematika,
Drs. Marsusi, M.S. Drs. Kartiko, M.Si.
NIP. 130 906 776 NIP. 131 569 203
ABSTRAK
Himawan Yusuf, 2006. APLIKASI FUNGSI HASH MD5 DAN ALGORITMA RSA UNTUK PEMBUATAN SIDIK DIJITAL, Fakultas Matematika dan Ilmu Pengetahuan Alam, Universitas Sebelas Maret.
Pengamanan data tidak hanya sebatas data tersebut tidak dapat dibaca orang lain, tetapi juga bagaimana agar data tersebut tidak dapat diubah dan dapat dipastikan dikirim oleh orang yang benar. Selama berabad-abad lamanya tanda tangan telah digunakan untuk membuktikan keabsahan dokumen. Oleh karena itu, data yang dikirim perlu diberi suatu tanda bahwa data tersebut sah. Dari pemikiran tersebut, munculah ide untuk membuat sidik dijital (digital signature). Salah satu cara untuk membuat sidik dijital adalah dengan menggunakan fungsi hash MD5 dan algoritma RSA.
Tujuan dari penelitian ini adalah mengetahui kinerja dari fungsi hash MD5 dan algoritma RSA dalam membuat sidik dijital dan membuktikan keabsahan data dengan menggunakan sidik dijital. Selanjutnya dilakukan analisis untuk mengetahui apakah sidik dijital tersebut mampu menjaga keabsahan data.
Dari penelitian yang telah dilakukan, diketahui bahwa fungsi hash MD5 dan algoritma RSA membuat sidik dijital dengan cara algoritma RSA mengenkripsikan message digest (pesan ringkas) yang dibuat oleh fungsi hash MD5. Kemudian untuk membuktikan keabsahan data, hasil dekripsi sidik dijitalnya disamakan dengan message digest dari data yang diterima. Setelah diadakan pengujian dan analisa dapat diambil kesimpulan bahwa fungsi hash MD5 dan algoritma RSA mampu membuat sidik dijital yang dapat digunakan untuk menjaga keabsahan data.
Kata Kunci : sidik dijital, fungsi hash MD5, algoritma RSA, message digest, keabsahan data
ABSTRACT
Himawan Yusuf, 2006. THE APPLICATION OF MD5 HASH FUNCTION AND RSA ALGORITHM FOR MAKING DIGITAL SIGNATURE. Faculty of Mathematics and Natural Sciences Sebelas Maret University.
Data security is not merely limited to only prohibit acces from other people, but it also keeps the data unchanged by making sure it is completely delivered to right person. For centuries, the hand signature have been used to prove that the document is valid. So, the data which is sent to the second party needs a proof of validity or legality. The tought concerning to that system grows an idea for making digital signature. One of the ways for making digital signature is by employing MD5 hash function and RS algorithm.
The aim of the research is to know the working system of MD5 hash function and RSA algorithm for making digital signature and to prove data validity by using digital signature system. Then the analysis is conducted to know the ability of digital signature in keeping data validity.
From this research, it is known that MD5 hash function and RSA algorithm make digital signature in the way that RSA algorithm encrypts the message digest made by MD5 hash function. To prove data validity, the result of digital signature decryption must be equal to message digest from data received. After the test and analysis are conducted, it is concluded that MD5 hash function and RSA algorithm is able to make digital signature to keep data validity.
Keys : digital signature, MD5 hash function, RSA algorithm, message digest, data validity
MOTO
Tiga kunci sesoeorang untuk mencapai keberhasilan adalah
1. ilmu,
2. usaha,
3. rahmat Allah.
(Penulis)
Allah tidak akan memberi beban kepada hambanya melainkan sesuai dengan kemampuannya.
(QS Al Baqarah : 286)
PERSEMBAHAN
Karya ini kupersembahkan untuk :
- Ibunda tersayang, metode kesabaran dan kurikulum berbasis kasih sayang yang kau berikan
adalah pendidikan terbaik yang pernah kuterima sepanjang hidupku, terimakasih bunda.
- Ayahanda, semoga anakmu ini bisa membuatmu bangga.
- Mas dan Mbakku yang selalu mendukung dan mendo’akanku
Mas Sholikin, Mbak Mung, Mas Nang, Mbak Endah, Mbak Ren, Mas Santoso,dan Ubub.
- 7 keponakanku yang lucu-lucu: Fahri, Ali, Sisil, Sasa, Rahil, Aviv, dan Friday.
- Calon istriku, semoga engkau bisa menjadi istri yang sholehah.
- Pengurus HIMATIKA 2004/2005, the best team in my life.
KATA PENGANTAR
Assalaamu’alaikum Wr. Wb.
Alhamdulillah, puji syukur penulis panjatkan kepada Allah SWT yang
telah melimpahkan rahmat dan kasih sayangnya sehingga skripsi ini dapat
terselesaikan. Sholawat dan salam semoga selalu tercurah kepada suri tauladan
Rasulullah Muhammad SAW, serta keluarga, sahabat, dan orang-orang yang
istiqomah di jalan-Nya.
Terselesaikannya skripsi ini tidak terlepas dari bantuan beberapa
pihak. Untuk itu penulis mengucapkan terimakasih kepada :
1. Drs. Wiranto, M.Kom, selaku pembimbing I yang telah meluangkan
waktunya untuk memberikan bimbingan dan motivasi kepada penulis.
2. Drs. Sugiyanto, M.Si, selaku pembimbing II yang juga telah banyak
membantu penulis dalam menyelesaikan skripsi ini.
3. Dra. Sri Subanti, M.Si, selaku pembimbing akademis yang telah
memberikan perhatian dan bimbingan kepada penulis.
4. Lisda, Ardina, dan Misbachul yang telah memberikan banyak bantuan
kepada penulis.
5. Eko Pramudyo Hadi, S.Si dan Winarno, S.Si yang telah memberi
inspirasi, motivasi dan bimbingan kepada penulis.
6. Najib dan Karin yang telah memberikan bantuan, saran, dan kritik
kepada penulis.
7. Teman-teman angkatan 2002 dan 2003 yang memberikan bantuan dan
motivasi.
8. SAT UNS dan TEAM SAT UNS 2006 yang telah memberikan
bantuan dan fasilitas kepada penulis.
9. UPT PUSKOM UNS yang telah meminjamkan fasilitas kepada
penulis.
10. Semua pihak yang telah membantu penulis dalam menyusun skripsi
ini.
Semoga Allah SWT membalas segala bantuan yang telah diberikan
kepada penulis. Semoga skripsi ini dapat bermanfaat bagi semua pihak yang
membutuhkan.
Surakarta, 12 Oktober 2006
Penulis
DAFTAR ISI
JUDUL i
PENGESAHAN ii
ABSTRAK iii
ABSTRACT iv
MOTO v
PERSEMBAHAN vi
KATA PENGANTAR vii
DAFTAR ISI ix
DAFTAR TABEL xi
DAFTAR GAMBAR xii
DAFTAR LAMPIRAN xiii
DAFTAR NOTASI xiv
I PENDAHULUAN 1
1.1. Latar Belakang Masalah ............................................................. 1
1.2. Perumusan Masalah .................................................................... 2
1.3. Batasan Masalah ......................................................................... 3
1.4. Tujuan ......................................................................................... 3
1.5. Manfaat ....................................................................................... 3
II LANDASAN TEORI 4
2.1. Kajian Pustaka ............................................................................ 4
2.1.1. Keamanan Data .............................................................. 5
2.1.2. Kriptografi ...................................................................... 6
2.1.3. Fungsi Hash .................................................................... 7
2.1.4. Algoritma MD5 .............................................................. 10
2.1.4. RSA Cryptosystem ......................................................... 17
2.1.5. Sidik Dijital .................................................................... 19
2.2. Kerangka Pemikiran ................................................................... 20
III METODOLOGI PENELITIAN 22
IV PEMBAHASAN 23
4.1. Pembuatan Sidik Dijital.............................................................. 23
4.1.1. Prosedur Pembuatan Message Digest.............................. 24
4.1.2. Prosedur Menghasilkan Kunci Untuk Setiap Pemakai ... 24
4.1.3. Prosedur Enkripsi Untuk Pengirim ................................. 25
4.2. Analisis Keabsahan Data .............................................................. 25
4.2.1. Prosedur Dekripsi Untuk Penerima .................................. 26
4.2.2. Prosedur Verifikasi Sidik Dijital ...................................... 26
4.3. Penerapan Kasus ........................................................................... 27
4.3.1. Tahap Pembuatan Sidik Dijital ......................................... 28
4.3.1.1. Tahap Pembuatan Message Digest .................... 28
4.3.1.2. Tahap Menghasilkan Kunci Pribadi dan Kunci
Publik ................................................................. 28
4.3.1.3. Tahap Enkripsi Untuk Operator ........................... 29
4.3.2. Tahap Analisis Keabsahan Data ....................................... 31
4.4. Pembuatan dan Pengujian Aplikasi .............................................. 32
4.4.1. Pembuatan Aplikasi Untuk Pengirim ................................. 33
4.4.2. Pengujian Aplikasi Untuk Pengirim ................................... 37
4.4.3. Pembuatan Aplikasi Untuk Penerima ................................. 42
4.4.4. Pengujian Aplikasi Untuk Penerima ................................... 44
4.5. Analisis Kelebihan dan Kelemahan Pembuatan Sidik Dijital
dengan Menggunakan Fungsi Hash MD5 dan Algoritma RSA .. 46
V PENUTUP 48
5.1. Kesimpulan ................................................................................... 48
5.2. Saran ............................................................................................. 48
DAFTAR PUSTAKA .................................................................................. 49
LAMPIRAN ................................................................................................ 50
DAFTAR TABEL
Tabel 2.1. Fungsi-fungsi dasar MD5 ................................................ 14
Tabel 2.2. Nilai T[i] .......................................................................... 14
Tabel 2.3. Rincian operasi pada fungsi F (b, c, d) (kiri) dan
fungsi G (b, c, d) (kanan) ................................................. 15
Tabel 2.4. Rincian operasi pada fungsi H (b, c, d) (kiri) dan
fungsi I (b, c, d) (kanan) .................................................. 16
DAFTAR GAMBAR
Gambar 2.1. Hubungan kebijakan dan mekanisme keamanan ............. 5
Gambar 2.2. Proses enkripsi dan deskripsi sederhana .......................... 6
Gambar 2.3. Proses enkripsi dan deskripsi kunci simetris .................... 7
Gambar 2.4. Proses enkripsi dan dekripsi kunci asimetris ................... 8
Gambar 2.5. Pembuatan message digest dengan algoritma MD5 ....... 10
Gambar 2.6. Pengolahan blok 512 bit (Proses HMD5) ........................... 12
Gambar 2.7. Operasi dasar MD5 ........................................................... 13
Gambar 4.1. Skema pembuatan sidik dijital dengan menggunakan
fungsi hash ........................................................................ 23
Gambar 4.2. Otentikasi dengan sidik dijital menggunakan fungsi
hash satu-arah ................................................................... 26
Gambar 4.3. Form regristrasi pelanggan prabayar ................................ 27
Gambar 4.4. Skema regristrasi pengguna kartu prabayar ...................... 28
Gambar 4.5. Alur sistem pembuatan sidik dijital .................................. 33
Gambar 4.6. Form petunjuk pemakaian aplikasi ................................... 37
Gambar 4.7. Form regristrasi ................................................................. 38
Gambar 4.8. Form pembuatan message digest ...................................... 38
Gambar 4.9. Peringatan apabila kunci yang dimasukkan tidak prima .. 39
Gambar 4.10. Form pembuatan kunci ................................................... 39
Gambar 4.11. Kunci publik yang dikirimkan kepada penerima ............ 40
Gambar 4.12. Form enkripsi message digest ......................................... 40
Gambar 4.13. Sidik dijital hasil dari enkripsi message digest ............... 41
Gambar 4.14. Alur sistem verifikasi sidik dijital ................................... 42
Gambar 4.15. Form petunjuk pemakaian aplikasi ................................. 44
Gambar 4.16. Tampilan form verifikasi sidik dijital ketika data sah .... 45
Gambar 4.17. Tampilan form verifikasi sidik dijital ketika
data tidak sah .................................................................. 45
DAFTAR LAMPIRAN
Fungsi dan prosedur yang digunakan dalam aplikasi ............................ 51
Source code fungsi hash MD5 ............................................................... 56
(dari www.ficthner.net/delphi/md5.delphi.phtml)
Source code aplikasi pembuatan sidik dijital ......................................... 64
Source code aplikasi verifikasi sidik dijital ......................................... 70
DAFTAR NOTASI
h : Nilai hash.
g : Salah satu fungsi F, G, H, I.
CLSs : Circular left shift sebanyak s bit.
X[k] : Kelompok 32-bit ke-k dari blok 512 bit message ke-q.
Nilai k=0 sampai 15.
T[i] : Elemen Tabel T ke-i (32 bit).
+ : Operasi penjumlahan modulo 232.
IV : Initial vector dari penyangga ABCD, yang dilakukan pada proses
inisialisasi penyangga.
Yq : Blok pesan berukuran 512-bit ke-q.
L : Jumlah blok pesan.
MD : Nilai akhir message digest.
p : Kunci bilangan prima ke-1.
q : Kunci bilangan prima ke-2.
r : Perkalian p dan q.
φ(r) : Perkalian (p – 1) dan (q – 1).
PK : Kunci publik.
SK : Kunci Rahasia.
X : Plaintext.
Y : Chipertext
S : Sidik dijital.
BAB I
PENDAHULUAN
1.1. Latar Belakang
Kemajuan di bidang teknologi informasi telah memungkinkan
seseorang untuk melakukan komunikasi dan transaksi bisnis secara on-line.
Kegiatan-kegiatan tersebut tentu saja akan menimbulkan resiko apabila
informasi yang sensitif dan berharga itu diakses oleh orang-orang yang tidak
berhak. Dengan berpindahnya data dari titik A ke titik B di internet, data itu
akan melalui beberapa titik lain selama perjalanan dan membuka kesempatan
bagi pihak lain untuk memotong, membaca, merusak, atau merubah tujuan
data (Nursanto, 2003). Misalnya, informasi mengenai data pengguna kartu
prabayar yang melakukan regristrasi, apabila informasi ini jatuh kepada orang-
orang jahat dimungkinkan beberapa data seperti nomor kartu atau nomor id
diubah, sehingga ketika nomor kartu yang digantikan itu melakukan tindakan
kriminal, yang tertangkap adalah orang yang sebenarnya tidak mengetahui
apa-apa.
Beberapa cara telah dikembangkan untuk menangani masalah
keamanan ini, salah satu teknik mengamankan data dari suatu sistem
informasi adalah dengan algoritma penyandian data atau yang biasa disebut
dengan kriptografi. Kriptografi merupakan bagian dari suatu cabang ilmu
matematika (cryptology) yang dapat dimanfaatkan untuk kepentingan
keamanan pesan (Nursanto, 2003).
Pengamanan data tidak hanya sebatas data tersebut tidak dapat dibaca
orang lain, tetapi juga bagaimana agar data tersebut tidak dapat diubah dan
dapat dipastikan dikirim oleh orang yang benar. Selama berabad-abad
lamanya tanda tangan telah digunakan untuk membuktikan keabsahan
dokumen. Oleh karena itu, data yang dikirim perlu diberi suatu tanda bahwa
data tersebut sah. Dari pemikiran tersebut, munculah ide untuk membuat sidik
dijital (digital signature). Menurut Munir (2004), sidik dijital bukanlah tanda
tangan yang didijitasi dengan alat scanner, tetapi suatu nilai kriptografis yang
bergantung pada pesan dan pengirim pesan (hal ini kontras dengan tanda
tangan pada dokumen kertas yang bergantung hanya pada pengirim dan selalu
sama untuk semua dokumen).
Sidik dijital dapat dibuat dengan mengubah data menjadi message
digest oleh fungsi hash tertentu. Kemudian dari message digest tersebut dibuat
sidik dijital dengan algoritma kriptografi. Pada tahun 1991, Ronald Rivest
memperkenalkan fungsi hash MD5 (Message Digest Algorithm 5). MD5
adalah fungsi hash kriptografik yang digunakan secara luas dengan hash value
128-bit. Pada standar internet (RFC 1321), MD5 telah dimanfaatkan secara
bermacam-macam pada aplikasi keamanan, dan MD5 juga umum digunakan
untuk melakukan pengujian integritas sebuah file.
Sebelumnya, pada tahun 1977 Rivest bersama Shamir dan Adleman
membuat sebuah algoritma untuk teori penomoran pada sebuah public-key
cryptosystem, algoritma ini dikenal dengan RSA cryptosystem. Algoritma
RSA (Rivest Shamir Adleman) menggunakan kunci asimetris yang
menggunakan dua kunci dalam proses enkripsi dekripsi, sehingga mempunyai
tingkat keamanan lebih tinggi dibandingkan algortima yang menggunakan
kunci simetris. Menurut Munir (2004) untuk membuat sidik dijital, algoritma
yang cocok digunakan hanyalah algoritma kunci publik. Dengan fungsi hash
MD5 dan algoritma RSA, diharapkan dapat menghasilkan sidik dijital yang
mampu menjamin keabsahan data.
1.2. Perumusan Masalah
Dari latar belakang masalah tersebut, dapat dirumuskan permasalahan
yang sedang dihadapi, yaitu :
1. Bagaimana kinerja dari fungsi hash MD5 dan algoritma RSA dalam
membuat sidik dijital.
2. Bagaimana membuktikan keabsahan data dengan menggunakan sidik
dijital.
3. Bagaimana kemampuan sidik dijital yang dibuat oleh fungsi hash
MD5 dan algoritma RSA dalam menjaga keabsahan data.
1.3. Batasan Masalah
Dalam penelitian ini, permasalahan yang dibahas dibatasi pada
pembahasan mengenai sidik dijital saja. Penyandian (enkripsi atau dekripsi)
data tidak dibahas disini.
1.4. Tujuan
Tujuan dari penelitian ini adalah sebagai berikut.
1. Mengetahui kinerja dari fungsi hash MD5 dan algoritma RSA
dalam membuat sidik dijital.
2. Dapat membuktikan keabsahan suatu data dengan menggunakan
sidik dijital.
3. Mengetahui sidik dijital yang dibuat oleh fungsi hash MD5 dan
algoritma RSA mampu menjaga keabsahan data.
1.5. Manfaat
Dari penelitian ini diharapkan pembuatan sidik dijital dengan
menggunakan fungsi hash MD5 dan algoritma RSA dapat diaplikasikan untuk
mengatasi masalah pemalsuan dokumen, sabotase informasi, dan masalah
kejahatan lain yang melibatkan pengubahan isi data maupun pengirimnya.
BAB II
LANDASAN TEORI
2.1. Tinjauan Pustaka
Untuk mencapai tujuan penelitian, diperlukan pengertian dan teori-
teori yang melandasinya. Pada bab ini diberikan penjelasan tentang keamanan
data, kriptografi, fungsi hash, algoritma MD5, RSA cryptosystem, dan sidik
dijital yang diperoleh dari beberapa referensi.
2.1.1. Keamanan Data
Data atau pesan yang diperhatikan dan perlu diamankan adalah yang
bersifat rahasia. Menurut Susanto (2004), tujuan utama adanya keamanan
adalah untuk membatasi akses terhadap informasi dan hanya untuk pemakai
yang memiliki hak akses. Beberapa ancaman yang harus diperhatikan dalam
sistem keamanan data adalah
1. leakage (kebocoran), yaitu pengambilan informasi oleh penerima yang
tidak berhak,
2. tampering, yaitu pengubahan informasi yang tidak legal,
3. validasm (perusakan), yaitu gangguan operasi sistem tertentu.
Beberapa metode penyerangan terhadap keamanan, yaitu
1. eavesdropping, yaitu mendapatkan duplikasi pesan tanpa ijin,
2. masquerading, yaitu mengirim atau menerima pesan menggunakan
identitas lain tanpa seizin pemilik,
3. message tampering, yaitu menghadang atau menangkap pesan dan
mengubah isinya sebelum dilanjutkan ke penerima sebenarnya.
Dalam keamanan data perlu diadakan pemisahan antara kebijakan dan
mekanisme keamanan, yang akan membantu memisahkan kebutuhan
implementasinya, karena kebijakan dapat menspesifikasikan kebutuhan dan
mekanisme dapat menerapkan spesifikasi kebijakan tersebut.
Berdasarkan spesifikasi dari OSI (Open Systems Interconnection),
sebuah layanan (kebijakan) keamanan meliputi
1. access control, yaitu perlindungan data terhadap pemakaian tak legal,
2. authentication, yaitu menyediakan jaminan identitas seseorang,
3. confidentiality (kerahasiaan), yaitu pengungkapan terhadap identitas
tak legal,
4. integrity, yaitu melindungi dari pengubahan data,
5. non-repudiation (penyangkalan), yaitu melindungi terhadap penolakan
komunikasi yang sudah pernah dilakukan.
Untuk mencapai keamanan tersebut, menurut Susanto (2004)
mekanisme-mekanisme yang dapat diterapkan, yaitu
1. enkripsi, dapat digunakan untuk menyediakan kerahasiaan pesan,
dapat menyediakan authentication dan perlindungan identitas,
2. sidik dijital (digital signature), dapat digunakan untuk menyediakan
authentication, perlindungan indentitas, dan non-repudiation,
3. algoritma checksum atau hash, dapat digunakan untuk menyediakan
perlindungan integritas, dan dapat menyediakan authentication.
Dalam keamanan data, hubungan antara kebijakan (layanan) dengan
mekanisme keamanan dapat digambarkan sebagai berikut.
Gambar 2.1. Hubungan kebijakan dan mekanisme keamanan.
SSL
Enkripsi Signature Hashing
RSA DES DSA RSA SHA1 MD5
Kebijakan
Mekanisme
Algoritma
2.1.2. Kriptografi
1. Terminologi
Kriptografi (Cryptography) merupakan seni dan ilmu
menyembunyikan informasi dari penerima yang tidak berhak. Kriptografi
(Cryptography) berasal dari bahasa Yunani yaitu dari kata “cryptos” berarti
tersembunyi dan “graphien” yang berarti menulis. Jadi kriptografi
(cryptography) artinya penulisan tersembunyi atau penulisan rahasia (Rahayu,
2005).
Dalam menjaga kerahasiaan data, kriptografi mentransformasikan data
asli (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
(Sukaridhoto, 2005).
Proses tranformasi dari plaintext menjadi ciphertext disebut proses
encipherment atau enkripsi (encryption), sedangkan proses
mentransformasikan kembali ciphertext menjadi plaintext disebut proses
dekripsi (decryption). Dalam melakukan enkripsi dan dekripsi 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.
Gambar 2.2. Proses enkripsi dan deskripsi sederhana
Enkripsi Dekripsi
Kunci
Plaintext
Chipertext
Plaintext
Kunci
Algoritma kriptografi modern tidak lagi mengandalkan kerahasiaan
algoritma tetapi kerahasiaan kunci. Jadi algoritma kriptografi dapat bersifat
umum dan boleh diketahui siapa saja, karena tanpa pengetahuan tentang kunci
maka data yang tersandi tetap saja tidak dapat dipecahkan. Akan tetapi berlaku
sebaliknya untuk kunci, karena plaintext yang sama bila disandikan dengan
kunci yang berbeda akan menghasilkan ciphertext yang berbeda, walaupun
dengan algoritma yang sama.
Istilah-istilah dalam kriptografi, antara lain cryptosystem,
Cryptographers, cryptanalysis, Cryptanalyst, dan cryptology. Cryptosystem
adalah sebuah algoritma kriptografi ditambah semua kemungkinan plaintext,
ciphertext dan kunci. Para pelaku atau praktisi kriptografi disebut
Cryptographers. Cryptanalysis adalah aksi untuk memecahkan mekanisme
kriptografi dengan cara mendapatkan plaintext atau kunci dari ciphertext yang
digunakan untuk mendapatkan informasi berharga kemudian mengubah atau
memalsukan pesan dengan tujuan untuk menipu penerima yang
sesungguhnya, atau memecahkan ciphertext. Cryptanalyst adalah pelaku atau
praktisi yang menjalankan cryptanalysis. Cryptology merupakan gabungan
dari cryptography dan cryptanalysis (Rahayu, 2005).
2. Algoritma Kriptografi
Berdasarkan kunci yang dipakai, algoritma kriptografi modern dibagi
menjadi dua macam, yaitu :
a. Kunci Simetris
Pada kunci simetris jenis kunci yang digunakan untuk membuat pesan
yang disandikan (enkripsi) sama dengan kunci untuk membuka pesan yang
disandikan (dekripsi). Jadi pengirim dan penerima pesan harus memiliki kunci
yang sama (Budiyono, 2004). Proses enkripsi-dekripsi dengan algoritma kunci
simetris dapat dilihat pada gambar 2.3.
Gambar 2.3. Proses enkripsi dan deskripsi kunci simetris
Contoh algoritma kunci simetris adalah DES (Data Encryption Standard),
AES (Advanced Encryption Standard), Blowfish, IDEA (International Data
Encryption Algorithm), OTP (One-Time-Pad), dan lain-lain.
b. Kunci Asimetris
Pada kunci asimetris jenis kunci yang digunakan untuk enkripsi tidak
sama dengan kunci untuk dekripsi. Kunci publik digunakan untuk
mengenkripsi suatu pesan dimiliki oleh semua orang, dan kunci pribadi
digunakan untuk mendekripsikan pesan yang dikirim untuknya dimiliki satu
orang (Budiyono, 2004). Proses enkripsi-dekripsi dengan algoritma kunci
asimetris dapat dilihat pada gambar 2.4.
Gambar 2.4. Proses enkripsi dan dekripsi kunci asimetris
Dengan menggunakan kunci asimetris ini, semua orang dapat
mengenkripsi pesan dengan memakai public key penerima yang telah
diketahui secara umum. Akan tetapi pesan yang telah terenkripsi, hanya dapat
didekripsi dengan menggunakan private key yang hanya diketahui oleh
penerima pesan. Contoh dari algoritma kunci asimetris adalah RSA, DSA
(Digital Signature Algorithm) dan Merkle-Hellman Scheme
Enkripsi Dekripsi
Kunci Rahasia Kunci Rahasia
Plaintext
Chipertext
Plaintext
Enkripsi Dekripsi
Kunci Publik Kunci Rahasia
Plaintext
Chipertext
Plaintext
2.1.3. Fungsi Hash
Menurut Munir (2004), fungsi hash dinamakan juga fungsi hash satu-
arah karena pesan yang sudah diubah menjadi message digest (pesan ringkas)
oleh fungsi hash tidak dapat dikembalikan lagi menjadi bentuk semula
walaupun digunakan algoritma dan kunci yang sama. Sembarang pesan M
berukuran bebas dikompresi oleh fungsi hash H melalui persamaan
h = H(M). (2.1)
Sifat-sifat fungsi hash adalah sebagai berikut.
a. Fungsi H dapat diterapkan pada blok data berukuran berapa saja.
b. H menghasilkan nilai h dengan panjang tetap (fixed-length output).
c. H(x) mudah dihitung untuk setiap nilai x yang diberikan.
d. Untuk setiap h yang dihasilkan, tidak mungkin dikembalikan nilai x
sedemikian sehingga H(x) = h. Itulah sebabnya fungsi H dikatakan
fungsi hash satu-arah (one-way hash function).
e. Untuk setiap x yang diberikan, tidak mungkin mencari y ≠ x
sedemikian sehingga H(y) = H(x).
f. Tidak mungkin mencari pasangan x dan y sedemikian sehingga H(x) =
H(y).
Nilai fungsi hash satu arah biasanya berukuran kecil, sedangkan pesan
berukuran sembarang. Ada beberapa fungsi hash satu-arah yang sudah dibuat,
antara lain: MD2, MD4, MD5, SHA (Secure Hash Function), Snefru, N-hash,
dan RIPE-MD (Race Integrity Primitivies Evaluation Message Digest).
2.1.4. Algoritma MD5
Algoritma MD5 menerima masukan berupa pesan dengan ukuran
sembarang dan menghasilkan message digest yang panjangnya 128 bit.
Gambaran pembuatan message digest dengan algoritma MD5 diperlihatkan
pada Gambar 2.5.
Pesan 1000...000 Panjang Pesan
K bit Padding bits K mod 264
L x 512 bit
Y0 ... ...Y1 Yq YL - 1
512 512 512 512
HMD5 HMD5ABCD
512 512
128128 128HMD5
512
128 128HMD5
512
128
128
Message Digest
(1 - 512 bit)
Gambar 2.5. Pembuatan message digest dengan algoritma MD5
Menurut Munir (2004), langkah-langkah pembuatan message digest
secara garis besar adalah sebagai berikut.
a. Penambahan bit-bit pengganjal
(i) Pesan ditambah dengan sejumlah bit pengganjal sedemikian
sehingga panjang pesan (dalam satuan bit) kongruen dengan
448 modulo 512. Ini berarti panjang pesan setelah ditambahi
bit-bit pengganjal adalah 64 bit kurang dari kelipatan 512.
Angka 512 ini muncul karena MD5 memproses pesan dalam
blok-blok yang berukuran 512.
(ii) Pesan dengan panjang 448 bit pun tetap ditambah dengan bit-
bit pengganjal. Jika panjang pesan 448 bit, maka pesan tersebut
ditambah dengan 512 bit menjadi 960 bit. Jadi, panjang bit-bit
pengganjal adalah antara 1 sampai 512.
(iii) Bit-bit pengganjal terdiri dari sebuah bit 1 diikuti dengan
sisanya bit 0.
b. Penambahan nilai panjang pesan semula
(i) Pesan yang telah diberi bit-bit pengganjal selanjutnya ditambah
lagi dengan 64 bit yang menyatakan panjang pesan semula.
(ii) Jika panjang pesan > 264 maka yang diambil adalah panjangnya
dalam modulo 264. Dengan kata lain, jika panjang pesan semula
adalah K bit, maka 64 bit yang ditambahkan menyatakan K
modulo 264.
(iii) Setelah ditambah dengan 64 bit, panjang pesan sekarang
menjadi 512 bit.
c. Inisialisasi penyangga message digest
(i) MD5 membutuhkan 4 buah penyangga (buffer) yang masing-
masing panjangnya 32 bit. Total panjang penyangga adalah 4 ×
32 = 128 bit. Keempat penyangga ini menampung hasil antara
dan hasil akhir.
(ii) Keempat penyangga ini diberi nama A, B, C, dan D. Setiap
penyangga diinisialisasi dengan nilai-nilai (dalam notasi HEX)
sebagai berikut.
A = 01234567
B = 89ABCDEF
C = FEDCBA98
D = 76543210
d. Pengolahan pesan dalam blok berukuran 512 bit
(i) Pesan dibagi menjadi L buah blok yang masing-masing
panjangnya 512 bit (Y0 sampai YL – 1).
(ii) Setiap blok 512-bit diproses bersama dengan penyangga MD
menjadi keluaran 128-bit, dan ini disebut proses HMD5.
])16..1[,,( TYABCDfABCD qF←
])32..17[,,( TYABCDfABCD qG←
])48..33[,,( TYABCDfABCD qH←
])64..49[,,( TYABCDfABCD qI←
A B C D
A B C D
A B C D
+ + + +
MDq
MDq + 1
128
Yq
512
Gambar 2.6. Pengolahan blok 512 bit (Proses HMD5)
Proses HMD5 terdiri dari 4 buah putaran, dan masing-masing melakukan
operasi dasar MD5 sebanyak 16 kali dan setiap operasi dasar memakai sebuah
elemen T. Jadi setiap putaran memakai 16 elemen Tabel T. Pada Gambar 2.6,
Yq menyatakan blok 512-bit ke-q dari pesan yang telah ditambah bit-bit
pengganjal dan tambahan 64 bit nilai panjang pesan semula. MDq adalah nilai
message digest 128-bit dari proses HMD5 ke-q. Pada awal proses, MDq berisi
nilai inisialisasi penyangga MD. Fungsi-fungsi fF, fG, fH, dan fI masing-masing
berisi 16 kali operasi dasar terhadap masukan, setiap operasi dasar
menggunakan elemen Tabel T. Operasi dasar MD5 diperlihatkan pada Gambar
2.7.
a b c d
g
+
+
+
CLSs
+
X[k]
T[i]
Gambar 2.7. Operasi dasar MD5
Operasi dasar MD5 yang diperlihatkan pada Gambar 2.7 dapat ditulis
dengan sebuah persamaan sebagai berikut.
a ← b + CLSs(a + g(b, c, d) + X[k] + T[i]) (2.2)
yang dalam hal ini,
a, b, c, d : empat buah peubah penyangga 32-bit,
g : salah satu fungsi F, G, H, I,
CLSs : circular left shift sebanyak s bit,
X[k] : kelompok 32-bit ke-k dari blok 512 bit message ke-q. Nilai
k=0 sampai 15,
T[i] : elemen Tabel T ke-i (32 bit),
+ : operasi penjumlahan modulo 232.
Fungsi fF, fG, fH, dan fI adalah fungsi untuk memanipulasi masukan a,
b, c, dan d dengan ukuran 32-bit. Masing-masing fungsi dapat dilihat
pada Tabel 2.1.
Tabel 2.1. Fungsi-fungsi dasar MD5
Na
ma
Notasi G(a, b, c,
d)fF F(b, c,
d)(b ∧ c) ∨
(~b ∧ d)fG G(b, c,
d)(b ∧ d) ∨ (c
∧ ~d)fH H(b, c,
d)B ⊕ c ⊕ d
fI I(b, c,
d)c ⊕ (b ∧ ~
d)
Nilai T[i] dapat dilihat pada Tabel 2.2. Tabel ini disusun oleh fungsi 232 ×
abs(sin(i)), i dalam radian.
Tabel 2.2. Nilai T[i]T[1] = D76AA478
T[2] = E8C7B756
T[3] = 242070DB
T[4] = C1BDCEEE
T[5] = F57C0FAF
T[6] = 4787C62A
T[7] = A8304613
T[8] = FD469501
T[9] = 698098D8
T[10] = 8B44F7AF
T[11] = FFFF5BB1
T[12] = 895CD7BE
T[13] = 6B901122
T[14] = FD987193
T[15] = A679438E
T[16] = 49B40821
T[17] = F61E2562
T[18] = C040B340
T[19] = 265E5A51
T[20]= E9B6C7AA
T[21] = D62F105D
T[22] = 02441453
T[23] = D8A1E681
T[24]= E7D3FBCB
T[25] = 21E1CDE6
T[26] = C33707D6
T[27] = F4D50D87
T[28] = 455A14ED
T[29] = A9E3E905
T[30] = FCEFA3F8
T[31] = 676F02D9
T[32]= 8D2A4C8A
T[33] = FFFA3942
T[34] = 8771F681
T[35] = 69D96122
T[36] = FDE5380C
T[37] = A4BEEA44
T[38] = 4BDECFA9
T[39] = F6BB4B60
T[40] = BEBFBC70
T[41] = 289B7EC6
T[42] = EAA127FA
T[43] = D4EF3085
T[44] = 04881D05
T[45] = D9D4D039
T[46] = E6DB99E5
T[47] = 1FA27CF8
T[48] = C4AC5665
T[49] = F4292244
T[50] = 432AFF97
T[51] = AB9423A7
T[52] = FC93A039
T[53] = 655B59C3
T[54] = 8F0CCC92
T[55] = FFEFF47D
T[56] = 85845DD1
T[57] = 6FA87E4F
T[58] = FE2CE6E0
T[59] = A3014314
T[60] = 4E0811A1
T[61] = F7537E82
T[62] = BD3AF235
T[63]= 2AD7D2BB
T[64] = EB86D391
Dari persamaan (2.2) dapat dilihat bahwa masing-masing fungsi fF, fG,
fH, dan fI melakukan 16 kali operasi dasar. Misalkan notasi
[abcd k s i]
menyatakan operasi
a ← b + ((a + g(b, c, d) + X[k] + T[i])<<<s)
yang dalam hal ini <<<s melambangkan operasi circular left shift 32-bit,
operasi dasar pada masing-masing putaran dapat ditabulasikan sebagai
berikut.
Tabel 2.3. Rincian operasi pada fungsi F(b, c, d) (kiri) dan fungsi G(b, c, d) (kanan)
No. [abcd k s i] No. [abcd k s i]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[ABCD 0 7 1]
[DABC 1 12 2]
[CDAB 2 17 3]
[BCDA 3 22 4]
[ABCD 4 7 5]
[DABC 5 12 6]
[CDAB 6 17 7]
[BCDA 7 22 8]
[ABCD 8 7 9]
[DABC 9 12 10]
[CDAB 10 17 11]
[BCDA 11 22 12]
[ABCD 12 7 13]
[DABC 13 12 14]
[CDAB 14 17 15]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[ABCD 1 5 17]
[DABC 6 9 18]
[CDAB 11 14 19]
[BCDA 0 20 20]
[ABCD 5 5 21]
[DABC 10 9 22]
[CDAB 15 14 23]
[BCDA 4 20 24]
[ABCD 9 5 25]
[DABC 14 9 26]
[CDAB 3 14 27]
[BCDA 8 20 28]
[ABCD 13 5 29]
[DABC 2 9 30]
[CDAB 7 14 31]
16 [BCDA 15 22 16] 16 [BCDA 12 20 32]
Tabel 2.4. Rincian operasi pada fungsi H(b, c, d) (kiri) dan fungsi I(b, c, d) (kanan)
No. [abcd k s i] No. [abcd k s i]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[ABCD 5 4 33]
[DABC 8 11 34]
[CDAB 11 16 35]
[BCDA 14 23 36]
[ABCD 1 4 37]
[DABC 4 11 38]
[CDAB 7 16 39]
[BCDA 10 23 40]
[ABCD 13 4 41]
[DABC 0 11 42]
[CDAB 3 16 43]
[BCDA 6 23 44]
[ABCD 9 4 45]
[DABC 12 11 46]
[CDAB 15 16 47]
[BCDA 2 23 48]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[ABCD 0 6 49]
[DABC 7 10 50]
[CDAB 14 15 51]
[BCDA 5 21 52]
[ABCD 12 6 53]
[DABC 3 10 54]
[CDAB 10 15 55]
[BCDA 1 21 56]
[ABCD 8 6 57]
[DABC 15 10 58]
[CDAB 6 15 59]
[BCDA 13 21 60]
[ABCD 4 6 61]
[DABC 11 10 62]
[CDAB 2 15 63]
[BCDA 9 21 64]
Setelah putaran keempat, a, b, c, dan d ditambahkan ke A, B, C, dan D,
dan selanjutnya algoritma memproses untuk blok data berikutnya (Yq+1).
Keluaran akhir dari algoritma MD5 adalah hasil penyambungan bit-bit di A, B,
C, dan D (Munir, 2004).
Dari uraian tersebut, secara umum fungsi hash MD5 dapat ditulis
dalam persamaan matematis berikut.
MD0 = IV (2.3)
MDq + 1 = MDq + fI(Yq + fH(Yq + fG(YQ + fF(Yq + MDq))))
MD = MDL – 1 (2.4)
yang dalam hal ini,
IV : initial vector dari penyangga ABCD, yang dilakukan pada
proses inisialisasi penyangga,
Yq : blok pesan berukuran 512-bit ke-q,
L : jumlah blok pesan,
MD : nilai akhir message digest.
2.1.5. RSA Cryptosystem
RSA cryptosystem adalah public-key cryptosystem yang menawarkan
baik enkripsi maupun tanda tangan digital. Keamanan algoritma RSA terletak
pada sulitnya memfaktorkan bilangan yang besar menjadi faktor-faktor prima
(Munir, 2004).
Besaran-besaran yang digunakan pada algoritma RSA adalah :
• p dan q bilangan prima (rahasia)
• r = p ⋅ q (tidak rahasia)
• φ(r) = (p – 1) (q – 1) (rahasia)
• PK (kunci enkripsi) (tidak rahasia)
• SK (kunci dekripsi) (rahasia)
• X (plainteks) (rahasia)
• Y (cipherteks) (tidak rahasia).
Algoritma RSA didasarkan pada teorema Euler yang menyatakan bahwa
aφ(r) ≡ 1 (mod r) (2.5)
yang dalam hal ini,
• a harus relatif prima terhadap r,
• φ(r) = r(1 – 1/p1)(1 – 1/p2) … (1 – 1/pn),
dimana p1, p2, …, pn adalah faktor prima dari r dan φ(r) adalah fungsi
yang menentukan berapa banyak dari bilangan-bilangan 1, 2, 3, …, r
yang relatif prima terhadap r.
Berdasarkan sifat am ≡ bm (mod r) untuk m bilangan bulat ≥ 1, maka
persamaan (2.5) dapat ditulis menjadi
a mφ(r) ≡ 1m (mod r),
atau
amφ(r) ≡ 1 (mod r). (2.6)
Bila a diganti dengan X, maka persamaan (2.6) menjadi
Xmφ(r) ≡ 1 (mod r). (2.7)
Berdasarkan sifat ac ≡ bc (mod r), maka bila persamaan (2.7) dikali dengan X
menjadi
Xmφ(r) + 1 ≡ X (mod r) (2.8)
yang dalam hal ini X relatif prima terhadap r.
Misalkan SK dan PK dipilih sedemikian sehingga
SK ⋅ PK ≡ 1 (mod φ(r)) (2.9)
atau
SK ⋅ PK = mφ(r) + 1. (2.10)
Persamaan (2.10) disubtitusikan ke dalam persamaan (2.8) menjadi
X SK ⋅ PK ≡ X (mod r). (2.11)
Persamaan (2.11) dapat ditulis kembali menjadi
(X PK)SK ≡ X (mod r) (2.12)
yang artinya, perpangkatan X dengan PK diikuti dengan perpangkatan dengan
SK menghasilkan kembali X semula.
Berdasarkan persamaan (2.12), maka enkripsi dan dekripsi dirumuskan
sebagai berikut.
EPK(X) = Y ≡ XPK mod r, (2.13)
DSK(Y) = X ≡ YSK mod r. (2.14)
Karena SK ⋅ PK = PK ⋅ SK, maka enkripsi diikuti dengan dekripsi ekivalen
dengan dekripsi diikuti enkripsi
ESK(DSK(X)) = DSK(EPK(X)) ≡ XPK mod r. (2.15)
Oleh karena XPK mod r ≡ (X + mr)PK mod r untuk sembarang bilangan
bulat m, maka tiap plainteks X, X + r, X + 2r, …, menghasilkan cipherteks
yang sama. Dengan kata lain, transformasinya dari banyak ke satu. Agar
transformasinya satu-ke-satu, maka X harus dibatasi dalam himpunan {0, 1, 2,
…, r – 1} sehingga enkripsi dan dekripsi tetap benar seperti pada persamaan
(2.13) dan (2.14).
2.1.6. Sidik Dijital
Tanda tangan sering digunakan untuk menentukan keotentikan suatu
data, sehingga bentuk tanda tangan seseorang dibuat selalu sama agar orang
lain dapat menentukan apakah data dan orang yang memberi tandatangan
tersebut sah. Sidik dijital mempunyai tujuan yang hampir sama dengan tanda
tangan biasa, tetapi bentuk tanda tangan dijital (sidik dijital) dibuat tergantung
pada data atau pesan yang ditandatangani, bukan siapa yang membuat tanda
tangan. Dengan sidik dijital, integritas data dapat dijamin, disamping itu ia
juga digunakan untuk membuktikan asal pesan. Hanya sistem kriptografi
kunci-publik yang cocok untuk pemberian sidik dijital. Hal ini disebabkan
karena skema sidik dijital berbasis sistem kunci-publik dapat menyelesaikan
masalah non repudiation (penyangkalan), karena baik penerima maupun
pengirim pesan mempunyai pasangan kunci masing-masing.
Menurut Munir (2004) ada dua metode dalam membuat sidik dijital.
1. Sidik dijital dengan algoritma kunci-publik.
2. Sidik dijital dengan menggunakan fungsi hash satu-arah.
Menurut Wibowo (2004), tanda tangan dijital (sidik dijital)
mempunyai sifat-sifat sebagai berikut.
1. Tanda tangan itu asli (tidak mudah ditiru oleh orang lain). Pesan dan
tanda tangan pesan juga dapat menjadi barang bukti, sehingga dapat
mencegah penyangkalan apabila seseorang yang pernah
menandatangani suatu pesan tetapi tidak mengakuinya.
2. Tanda tangan itu hanya sah untuk dokumen itu saja. Tanda tangan
tidak dapat dipindahkan dari suatu dokumen ke dokumen lainnya. Ini
juga berarti bahwa jika dokumen itu diubah, maka tanda tangan digital
dari pesan tersebut tidak lagi sah.
3. Tanda tangan itu dapat diperiksa dengan mudah.
4. Tanda tangan itu dapat diperiksa oleh pihak-pihak yang belum pernah
bertemu dengan penandatangan.
5. Tanda tangan itu juga sah untuk duplikat dari dokumen yang sama.
Dua algoritma signature yang digunakan secara luas adalah RSA dan
Elgamal. Pada RSA, algoritma enkripsi dan dekripsi identik, sehingga proses
signature dan verifikasi juga identik. Selain RSA, terdapat algoritma yang
dikhususkan untuk sidik dijital, yaitu Digital Signature Algorithm (DSA),
yang merupakan bakuan (standard) untuk Digital Dignature Standard (DSS).
Pada DSA, algoritma signature dan verifikasi berbeda.
2.2. Kerangka Pemikiran
Berdasarkan landasan teori dapat disusun kerangka pemikiran untuk
menyelesaikan permasalahan yang ada. Fungsi hash MD5 adalah fungsi hash
satu arah yang digunakan untuk membuat message digest, sedangkan
algoritma RSA merupakan sebuah algoritma kriptografi dengan menggunakan
kunci asimetris. Sehingga sidik dijital dapat dibuat dengan menggunakan
fungsi hash MD5 dan algoritma RSA. Sidik dijital tersebut digunakan oleh
penerima pesan untuk membuktikan data tersebut asli dan dikirim oleh orang
yang benar (sah). Selanjutnya dilakukan analisis untuk mengetahui
kemampuan sidik dijital tersebut dalam menjaga keabsahan data.
BAB IIIMETODOLOGI PENELITIAN
Metode yang digunakan dalam penelitian ini adalah studi literatur dan
pengembangan program komputer. Untuk mencapai tujuan dari penelitian ini
diambil langkah-langkah sebagai berikut.
1. Studi literatur tentang keamanan data, kriptografi, fungsi hash,
algoritma MD5, RSA Cryptosystem dan sidik dijital.
2. Dilakukan proses-proses yang diperlukan untuk menjaga
keabsahan data dengan langkah-langkah sebagai berikut.
a. Ditentukan data yang ingin dijaga keabsahannya.
b. Dibuat sidik dijital dari data tersebut dengan menggunakan fungsi
hash MD5 dan algoritma RSA (pada skripsi ini pembuatan
message digest oleh fungsi hash MD5 dilakukan dengan
menggunakan software yang kode sumbernya diperoleh dari
internet).
c. Sidik dijital dan data dikirimkan bersama-sama.
d. Ditempat penerima, data tersebut dibuktikan keabsahannya.
3. Pembuatan dan pengujian aplikasi, yaitu pembuatan aplikasi
program komputer untuk pembuatan sidik dijital dan verifikasinya
dengan menggunakan software tools Borland Delphi 7, kemudian
mengujinya dengan membandingkan hasil dari aplikasi dengan
hasil secara teori.
4. Analisis, yaitu menganalisis kelebihan serta kelemahan pembuatan
sidik dijital dengan menggunakan fungsi hash MD5 dan algoritma
RSA baik dari teori maupun aplikasi yang telah dibuat.
BAB IVPEMBAHASAN
4.1. Pembuatan Sidik Dijital
Dalam penelitian ini, sidik dijital dibuat dengan metode fungsi hash
satu-arah. Fungsi hash yang digunakan adalah MD5 dan algoritma kriptografi
yang digunakan adalah RSA. Menurut Munir (2004), skema pembuatan sidik
dijital dengan menggunakan fungsi hash satu-arah adalah sebagai berikut.
1. Pesan yang hendak dikirim diubah terlebih dahulu menjadi bentuk
yang ringkas yang disebut message digest. Message digest (MD)
diperoleh dengan mentransformasikan pesan M dengan menggunakan
fungsi hash satu-arah (one-way) H,
MD = H(M) (4.1)
2. Selanjutnya, message digest MD dienkripsikan dengan algoritma
kunci-publik menggunakan kunci rahasia (SK) pengirim menjadi sidik
dijital S,
S = ESK(MD) (4.2)
3. Pesan M disambung (append) dengan sidik dijital S, lalu keduanya
dikirim melalui saluran komunikasi. Dalam hal ini, kita katakan bahwa
pesan M sudah ditandatangani oleh pengirim dengan sidik dijital S.
Pesan yang dikirim tidak hanya pesan dalam bentuk teks, tetapi dapat juga
berformat .dat, .mp3, .pdf, .wmf, dan sebagainya. Langkah-langkah dalam
pembuatan sidik dijital dari pesan M dapat dilihat sebagai berikut.
Gambar 4.1. Skema pembuatan sidik dijital dengan menggunakan fungsi hash
Message Message Digest
SignatureFungsi Hash Signin
g
Secret Key
4.1.1. Prosedur Pembuatan Message Digest
Untuk membuat message digest, terdapat empat langkah utama yang
dilakukan, seperti yang telah dijelaskan pada landasan teori. Adapun langkah–
langkah tersebut adalah
1. penambahan bit,
2. penambahan panjang pesan,
3. inisialisasi penyangga MD5,
4. proses pengolahan pesan dalam blok berukuran 512 bit,
4.1.2. Prosedur Menghasilkan Kunci Untuk Setiap Pemakai
Algoritma RSA menggunakan dua buah kunci, yaitu kunci pribadi
yang digunakan oleh pembuat sidik dijital dan kunci publik yang digunakan
oleh penerima pesan.
Prosedur Pembuatan Pasangan Kunci.
1. Dipilih dua buah bilangan prima sembarang, p dan q.
2. Dihitung r = p ⋅ q. Sebaiknya p ≠ q, sebab jika p = q maka r = p2
sehingga p dapat diperoleh dengan menarik akar pangkat dua dari r.
3. Dihitung φ(r) = (p – 1)(q – 1).
4. Dipilih kunci publik PK yang prima relatif terhadap φ(r).
5. Dibangkitkan kunci rahasia dengan menggunakan persamaan (2.9),
yaitu SK ⋅ PK ≡ 1 (mod φ(r)).
SK ⋅ PK ≡ 1 (mod φ(r)) ekivalen dengan SK ⋅ PK = 1 + mφ(r), sehingga SK
dapat dihitung dengan
PKrmSK )(1 φ+= , (4.3)
terdapat bilangan bulat m yang menghasilkan bilangan bulat SK.
4.1.3. Prosedur Enkripsi Untuk Pengirim
Untuk membuat sidik dijital, message digest yang telah dihasilkan oleh
fungsi hash MD5 dienkripsi menggunakan kunci pribadi. Langkah-langkah
yang diperlukan dalam proses enkripsi adalah sebagai berikut.
1. Plaintext disusun menjadi blok-blok x1, x2, …, xn sedemikian
sehingga setiap blok merepresentasikan nilai di dalam rentang 0
sampai r – 1.
2. Setiap blok xi dienkripsi menjadi blok si dengan rumus
si = xi SK mod r. (4.4)
4.2. Analisis Keabsahan Data
Data atau pesan yang diterima harus diteliti bahwa selama perjalanan,
data tersebut tidak diubah, dihapus atau dikirimkan oleh orang yang tidak
dikehendaki. Menurut Munir (2004), skema verifikasi keabsahan data atau
pesan sebagai berikut.
1. Sidik dijital S didekripsi menggunakan kunci publik (PK) pengirim
pesan, menghasilkan message digest semula, MD, sebagai berikut
MD = DPK(S). (4.5)
2. Pesan M kemudian diubah menjadi message digest MD’ menggunakan
fungsi hash satu-arah yang sama dengan fungsi hash yang digunakan
oleh pengirim.
3. Jika MD’ = MD, berarti pesan yang diterima masih asli dan berasal
dari pengirim yang benar.
Untuk membuktikan data yang dikirim masih asli dan dikirim oleh
orang yang benar, dilakukan langkah-langkah analisis keabsahan data dengan
menggunakan sidik dijital seperti ditunjukkan pada Gambar 4.2.
Gambar 4.2. Otentikasi dengan sidik dijital menggunakan fungsi hash satu-arah
4.2.1. Prosedur Dekripsi Untuk Penerima
Untuk mendapatkan plaintext yang merupakan message digest dari
data yang dikirim, dilakukan dengan cara setiap blok cipherteks yi didekripsi
kembali menjadi blok xi dengan rumus
xi = yi PK mod r (4.6)
4.2.2. Prosedur Verifikasi Sidik Dijtal
Untuk menguji keaslian data dan kebenaran pengirim, dilakukan
proses verifikasi sidik dijital dengan langkah-langkah sebagai berikut.
1. Pesan M (yang diterima bersama sidik dijitalnya) diubah menjadi
message digest dengan menggunakan fungsi hash yang sama (MD5).
2. Message digest tersebut kemudian dicocokkan dengan hasil dekripsi
sidik dijital dari data atau pesan yang dikirim. Apabila sama berarti
data atau pesan tersebut masih asli dan dikirim oleh orang yang benar,
jika tidak berarti data sudah tidak sah (data diubah atau dikirim oleh
orang yang tidak diharapkan).
PublicKey
MessageSignature
Signature
MessageDigest
Verify
Message
FungsiHash
MessageDigest
?=
4.3. Penerapan Kasus
Untuk menjelaskan mengenai mekanisme proses pembuatan sidik
dijital dan verifikasinya, berikut diberikan contoh kasus pada proses regristrasi
pengguna kartu prabayar secara manual, yang mempunyai urutan langkah
sebagai berikut.
1. Pelanggan datang ke dealer operator kartu tertentu.
2. Data diri diisi dan diserahkan kepada operator.
3. Operator mengirimkan data tersebut kepada pemerintah.
Untuk memudahkan pemahaman terhadap proses yang berlangsung,
dimisalkan data yang diserahkan pelanggan prabayar kepada operator adalah
PT EXELCOMINDO PRATAMA
FORM REGRISTRASI PELANGGAN PRABAYARNomor HP : 081802510001
Nama : Joko Wijoyo
Jenis ID(KTP/SIM/PASPOR): KTP
No ID (KTP/SIM/PASPOR) : 08011234081084
Tempat/Tanggal Lahir : Karanganyar, 8 Oktober 1984
Jenis Kelamin : Laki-laki
Alamat : Jl. Slamet No 32
Kota : SurakartaGambar 4.3. Form regristrasi pelanggan prabayar
Data tersebut kemudian disimpan melalui notepad dengan format teks (*.txt)
atau menggunakan format yang lain. Data yang telah diterima operator
sebaiknya tidak langsung dikirim kepada pemerintah, karena dalam perjalanan
dimungkinkan data tersebut disabotase oleh orang-orang yang tidak
bertanggungjawab. Informasi di dalamnya seperti nomor telepon, nomor id,
nama dan yang lainnya dapat diubah tanpa sepengetahuan yang bersangkutan.
Sehingga, pihak operator perlu menjamin bahwa data yang dikirimkan
tersebut aman dan asli. Untuk mengantisipasi hal-hal yang tidak diinginkan,
sidik dijital dapat digunakan untuk mengatasi masalah ini. Pihak operator dan
pemerintah dapat bekerjasama dalam bertukar informasi mengenai kunci yang
digunakan. Selanjutnya data tersebut dibuat sidik dijital dan dikirimkan
kepada pemerintah bersama data aslinya. Seperti yang ditunjukkan Gambar
4.4.
Gambar 4.4. Skema regristrasi pengguna kartu prabayar
4.3.1. Tahap Pembuatan Sidik Dijital
Data yang sudah diisi disimpan di komputer operator dengan nama
regristrasi. Selanjutnya data tersebut dibuat pesan ringkas (message digest)
kemudian dienkripsi setelah sebelumnya ditentukan terlebih dahulu kunci
untuk enkripsi dan dekripsi.
4.3.1.1. Tahap Pembuatan Message Digest
Data dari pelanggan yang melakukan regristrasi tersebut kemudian
diubah menjadi message digest menggunakan algoritma fungsi hash MD5
(source code terdapat pada lampiran), sehingga diperoleh message digest
MD = d5ee40d2753128d165783ba4273bc44f.
4.3.1.2. Tahap Menghasilkan Kunci Pribadi dan Kunci Publik
Misalkan dipilih p = 397 dan q = 229 (keduanya harus bilangan
prima), selanjutnya dihitung nilai
r = p . q = 90913,
dan
φ(r)= (p – 1)(q – 1) = 90288.
Dipilih kunci publik PK = 5, karena 5 relatif prima dengan 90288. PK
dan r dipublikasikan ke pemerintah untuk proses otentikasi sidik dijital.
Selanjutnya dihitung kunci rahasia SK dengan menggunakan persamaan (4.3),
Pengguna Kartu Prabayar
Operator Seluler
PemerintahData Pribadi Data Pribadi
Sidik Dijital
5)90288(1 ×+= mSK .
Dengan mencoba nilai-nilai m = 1, 2, 3,…, diperoleh nilai SK yang bulat
adalah 54173. Ini adalah kunci enkripsi yang harus dirahasiakan.
4.3.1.3. Tahap Enkripsi Untuk Operator
Plaintext (message digest dari data regristrasi) disusun menjadi blok-
blok x1, x2, …, xn sedemikian sehingga setiap blok merepresentasikan nilai di
dalam rentang 0 sampai r – 1. Plaintext yang dienkripsikan yaitu
X = MD = d5ee40d2753128d165783ba4273bc44f
atau dalam sistem desimal (pengkodean ASCII) adalah
“100 53 101 101 52 48 100 50 55 53 51 49 50 56 100 49 54 53 55 56 51 98 97
52 50 55 51 98 99 52 52 102”
X dibagi menjadi blok yang lebih kecil, misalnya X dipecah menjadi 24 blok
yang berukuran 3 digit :
x1 = 100
x2 = 531
x3 = 011
x4 = 015
x5 = 248
x6 = 100
x7 = 505
x8 = 553
x9 = 514
x10 = 950
x11 = 561
x12 = 004
x13 = 954
x14 = 535
x15 = 556
x16 = 519
x17 = 897
x18 = 525
x19 = 055
x20 = 519
x21 = 899
x22 = 525
x23 = 210
x24 = 002
Nilai-nilai xi ini masih terletak di dalam rentang 0 sampai 90913 – 1 (agar
transformasi menjadi satu-ke-satu). Selanjutnya setiap blok xi dienkripsi
menjadi blok si dengan rumus
si = xi SK mod r.
Blok-blok plaintext dienkripsikan sebagai berikut.
10054173 mod 90913 = 65072 = s1
53154173 mod 90913 = 64568 = s2
01154173 mod 90913 =45815 = s3
01554173 mod 90913 = 44410 = s4
24854173 mod 90913 = 18597 = s5
10054173 mod 90913 = 65072 = s6
50554173 mod 90913 = 63270= s7
55354173 mod 90913 = 58301 = s8
51454173 mod 90913 = 86252= s9
95054173 mod 90913 = 67432 = s10
56154173 mod 90913 = 11110 = s11
00454173 mod 90913 = 10049 = s12
95454173 mod 90913 = 39652 = s13
53554173 mod 90913 = 15830 = s14
55654173 mod 90913 = 27211 = s15
51954173 mod 90913 = 44011 = s16
89754173 mod 90913 = 24684 = s17
52554173 mod 90913 = 5409 = s18
05554173 mod 90913 = 62459 = s19
51954173 mod 90913 = 44011 = s20
89954173 mod 90913 =18384= s21
52554173 mod 90913 = 5409 = s22
21054173 mod 90913 = 1326 = s23
00254173 mod 90913 = 29890 = s24
Jadi, ciphertext yang dihasilkan adalah
S = 65072 64568 45815 44410 18597 65072 63270 58301 86252 67432
11110 10049 39652 15830 27211 44011 24684 5409 62459 44011
18384 5409 1326 29890.
Ciphertext tersebut merupakan sidik dijital yang telah dibuat dengan
menggunakan algoritma RSA, selanjutnya sidik dijital tersebut dikirimkan
kepada pemerintah besama dengan data aslinya.
4.3.2. Tahap Analisis Keabsahan Data
Pemerintah menerima data dan sidik dijital dari operator, kemudian
menyimpannya dalam basis data daftar pengguna kartu prabayar. Pemerintah
harus menyimpan keduanya (tidak hanya data pengguna kartu prabayar saja)
untuk mengantisipasi apabila pada suatu saat terjadi tindakan kriminal dari
salah satu nomor yang sudah terdaftar, sedangkan orang yang memiliki nomor
tersebut tidak mengakui perbuatannya. Sebelum melakukan tindakan lebih
lanjut, pihak yang berwajib melakukan verifikasi terlebih dahulu apakah data
tersebut benar dan belum diubah oleh siapapun dalam perjalanan dari operator
ke pemerintah.
Sebagai contoh akan diperiksa data dari Joko Wijoyo, pengguna kartu
prabayar dengan nomor handphone 081802510001 yang tidak mengaku telah
melakukan tindakan penipuan melalui SMS. Langkah pertama yang dilakukan
adalah sidik dijitalnya, S = 65072 64568 45815 44410 18597 65072 63270
58301 86252 67432 11110 10049 39652 15830 27211 44011 24684 5409
62459 44011 18384 5409 1326 29890 didekripsi dengan menggunakan kunci
publik untuk mendapatkan kembali message digest dari data tersangka.
Dengan menggunakan kunci publik PK=5, blok-blok ciphertext
didekripsikan sebagai berikut.
650725 mod 90913 = 100 = x1
645685 mod 90913 = 531 = x2
458155 mod 90913 = 011= x3
444105 mod 90913 = 015 = x4
185975 mod 90913 = 248= x5
650725 mod 90913 = 100 = x6
632705 mod 90913 = 505 = x7
583015 mod 90913 = 553 = x8
862525 mod 90913 = 514 = x9
674325 mod 90913 = 950 = x10
111105 mod 90913 = 561 = x11
100495 mod 90913 = 004 = x12
396525 mod 90913 = 954 = x13
158305 mod 90913 = 535 = x14
272115 mod 90913 = 556 = x15
440115 mod 90913 = 519 = x16
246845 mod 90913 = 897 = x17
54095 mod 90913 = 525 = x18
624595 mod 90913 = 055 = x19
440115 mod 90913 = 519 = x20
183845 mod 90913 = 899 = x21
5409 5 mod 90913 = 525 = x22
1326 5 mod 90913 = 210 = x23
298905 mod 90913 = 2 = x24
Sehingga diperoleh kembali plaintext
X = “100 531 011 015 248 100 505 553 514 950 561 004 954 535 556 519
897 525 055 519 899 525 210 2”, yang dalam karakter ASCII adalah
X = d5ee40d2753128d165783ba4273bc44f.
Selanjutnya data tersangka diubah menjadi message digest dengan
menggunakan fungsi hash yang sama dengan fungsi hash yang digunakan
oleh operator. Data dari pengguna bernomor handphone 081802510001
tesebut setelah dibuat message digest dengan menggunakan fungsi hash MD5
diperoleh MD’ = d5ee40d2753128d165783ba4273bc44f. MD’ yang
dihasilkan tersebut ternyata sama dengan hasil dekripsi sidik dijitalnya.
Dengan demikian data tersebut asli dan dikirim oleh orang yang benar (sah),
sehingga pihak yang berwajib dapat melakukan tindakan lebih lanjut.
Apabila data tersebut sudah diubah, misalkan nomor handphone
diubah oleh seseorang dari 081802510001 menjadi 081802510002 dengan
menggunakan fungsi hash MD5, message digest yang dihasilkan adalah
”9a91d15b4e789989455277caa3a49ee0”. Message digest tersebut jauh
berbeda dengan ”d5ee40d2753128d165783ba4273bc44f” walaupun hanya
satu angka saja yang diubah, sehingga dapat ditebak pada tahap analisis
keabsahan data, hasil dari dekripsi sidik dijital tidak sama dengan message
digest dari data yang telah diubah tersebut.
4.4. Pembuatan dan Pengujian Aplikasi
Dalam penelitian ini, setelah mengetahui kinerja fungsi hash MD5 dan
algoritma RSA dalam membuat sidik dijital dan cara menguji keabsahan data
menggunakan sidik dijital, dapat diketahui terdapat dua buah aplikasi yang
harus dibuat. Pertama pembuatan sidik dijital oleh pengirim dan kedua
verifikasi sidik dijital (untuk menguji keabsahan data) oleh penerima. Pada
penelitian ini software tool yang digunakan dalam pembuatan aplikasi adalah
Delphi 7.
4.4.1. Pembuatan Aplikasi Untuk Pengirim
Kunci Enkripsi
Ya
Tidak
Pada aplikasi pembuatan sidik dijital, dibuat dengan empat tampilan
utama, yaitu petunjuk penggunaan aplikasi, proses pembuatan message digest,
proses menghasilkan kunci enkripsi dan dekripsi, dan proses enkripsi
(pembuatan sidik dijital). Alur proses yang berlangsung pada aplikasi
pembuatan sidik dijital ditunjukkan pada Gambar 4.5.
Gambar 4.5. Alur sistem pembuatan sidik dijital
Berikut diberikan pseudocode (algortima) beserta penjelasan pada
masing-masing proses yang berlangsung.
1. Proses pembuatan message digest//Mendefinisikan variabelvar r,k : int64;
Mulai
MembuatMessage Digest
Message Digest
Enkripsi
Bilangan Prima
Sidik Dijital
Memasukkan Data Memasukkan dua buah kunci bilangan prima
Kunci Enkripsi dan Dekripsi
Selesai
var h0,h1,h2,h3 : int; var a,b,c,d: int;r[ 0..15]:=(7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22);r[16..31]:=(5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20);r[32..47]:=(4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23);r[48..63]:=(6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21);//Menggunakan bagian fraksional biner dari integral sinus sebagai konstanta:for i:=0 to 63 do k[i] := round(abs(sin(i + 1)) × 2^32);//Inisialisasi variabel: h0 := 0x67452301; h1 := 0xEFCDAB89; h2 := 0x98BADCFE; h3 := 0x10325476;//Pemrosesan awal:append "1" bit to message;append "0" bits until message length in bits ≡ 448 (mod 512);append bit length of message as 64-bit little-endian integer to message;//Pengolahan pesan paada blok 512-bit:for each 512-bit chunk of message break chunk into sixteen 32-bit little-endian words; w(i), 0 ≤ i ≤ 15//Inisialisasi nilai hash pada blok ini: a := h0; b := h1; c := h2; d := h3;//Kalang utama: for i:=0 to 63 do if 0 ≤ i ≤ 15 then begin f := (b and c) or ((not b) and d); g := I; end else if 16 ≤ i ≤ 31 then
begin f := (d and b) or ((not d) and c); g := (5×i + 1) mod 16; end else if 32 ≤ i ≤ 47 then begin f := b xor c xor d; g := (3×i + 5) mod 16; end else if 48 ≤ i ≤ 63 begin f := c xor (b or (not d)); g := (7×i) mod 16; end; temp := d; d := c; c := b; b := ((a + f + k(i) + w(g)) leftrotate r(i)) + b; a := temp;//Tambahkan hash dari pengolahan blok 512 bit sebagai hasil h0 := h0 + a; h1 := h1 + b; h2 := h2 + c; h3 := h3 + d;
mesaggedigest := h0 append h1 append h2 append h3
2. Proses menghasilkan kunci enkripsi (d) dan kunci dekripsi (e)//Mendefinisikan variabelvar p,q,e,d,phi:int64;//Menguji bahwa input p dan q adalah bilangan primaif prime(p)=true and prime(q)=true thenphi:=(p-1)*(q-1);//Menguji nilai e yang diinputif GCD(e,phi)<>1 then e:=FALSE else
begin m:=1; while ((1+m*phi) mod e)<>0 do m:=m+1; end;//Menentukan nilai kunci enkripsi (d)d:=(1+m*phi) div e;
3. Proses enkripsi (pembuatan sidik dijital)// Mendefinisikan variabelvar n,d: int64; messagedigest,ascii,semua,sidikdijital:string;// Mencari deret nilai ascii message digestascii_md:='';for i:=1 to length(messagedigest) do begin hargaascii[i]:=ord(messagedigest [i]); ascii_md:=concat(ascii_md,inttostr(hargaascii[i])); end;//Menentukan panjang blok dan lebarbloklebarblok:= length(n)-1;If length(ascii_md) mod lebarblok<>0 then banyakblok:=(length(ascii_md)div lebarblok)+1 else banyakblok:=length(ascii_md)div lebarblok;//Tahap enkripsimulai:=1;sidikdijital:='';for i:=1 to banyakblok do begin x[i]:=copy(ascii_md,mulai,lebarblok); s[i]:=enkripsi(strtoint(x1[i]),d,n); chipertext[i]:=chr(strtoint(s[i])); mulai:=mulai+lebarblok; //Nilai sidik dijital sidikdijital:=concat(sidikdijital,chipertext[i]); end;
4.4.2. Pengujian Aplikasi Untuk Pengirim
Dalam subbab ini dilakukan pengujian terhadap aplikasi untuk
pengirim yang meliputi : proses pembuatan message digest, proses
menghasilkan kunci enkripsi dan dekripsi, dan proses enkripsi (pembuatan
sidik dijital). Ketika aplikasi dijalankan, terlebih dahulu muncul user guide
(petunjuk pemakaian aplikasi) seperti ditunjukkan pada Gambar 4.6.
Gambar 4.6. Form petunjuk pemakaian aplikasi
Berikut ini diberikan contoh pengujian terhadap masing-masing proses
yang dijalankan.
1. Proses pembuatan message digest
Apabila tombol ”PROSES” dibawah tulisan message digest ditekan
maka muncul tampilan seperti ditunjukkan Gambar 4.8.
Gambar 4.7. Form regristrasi
Misal dimasukkan file regristrasi.txt, kemudian tombol ”BUAT
MESSAGE DIGEST” ditekan maka dihasilkan message digest dari
data yang dimasukkan tersebut.
Gambar 4.8. Form pembuatan message digest
2. Proses menghasilkan kunci enkripsi dan dekripsi
Pada proses ini kunci yang dimasukkan kunci dua bilangan prima yang
berbeda. Pada aplikasi ini disediakan juga sejumlah bilangan prima
yang dapat dibangkitkan secara random berdasarkan ukuran kuncinya.
Jika kunci yang dimasukkan bukan bilangan prima maka muncul
peringatan agar mengganti bilangan yang tidak prima menjadi bilangan
prima. Apabila dua buah kunci yang dimasukkan merupakan bilangan
prima, maka proses dilanjutkan.
Gambar 4.9. Peringatan apabila kunci yang dimasukkan tidak prima
Setelah itu user diminta memasukkan sembarang bilangan yang prima
relatif dengan φ(r). Bilangan ini adalah kunci dekripsi (e). Pada
aplikasi ini juga disediakan pembangkit kunci dekripsi dengan
menekan tombol ”BANGKITKAN E” sehingga user tidak perlu
mencoba-coba memasukkan bilangan e yang akan memakan waktu.
Setelah e dimasukkan atau dibangkitkan, didapat nilai d (kunci
enkripsi) seperti ditunjukkan Gambar 4.10.
Gambar 4.10. Form pembuatan kunci
Setelah mendapatkan kunci enkripsi dan dekripsi, kunci publik
disimpan sebelum dikirimkan kepada penerima.
Gambar 4.11. Kunci publik yang dikirimkan kepada penerima
3. Proses enkripsi (pembuatan sidik dijital)
Dalam proses ini message digest yang diperoleh dari proses pertama
dienkripsi menggunakan kunci pribadi (d) yang diperoleh pada proses
kedua. User dapat juga memasukkan message digest yang diperoleh
dari software lain dengan menekan tombol ”MD LAIN”.
Gambar 4.12. Form enkripsi message digest
Apabila tombol ”LIHAT PROSES” ditekan, seluruh proses yang
dijalankan seperti kode ascii message digest, blok enkripsi, banyak
blok, lebar blok, dan huruf chipertext ditampilkan. Selanjutnya sidik
dijital disimpan sebelum dikirimkan kepada penerima.
Gambar 4.13. Sidik dijital hasil dari enkripsi message digest
Dari proses yang berlangsung dapat diketahui nilai dari message
digest, kunci dekripsi dan enkripsi, dan sidik dijital yang diperoleh dari
aplikasi sama dengan sidik dijital yang diperoleh secara teori.
Kunci Dekripsi
Ya Tidak
4.4.3. Pembuatan Aplikasi Untuk Penerima
Pada aplikasi verifikasi sidik dijital, terdapat tiga proses yang
berlangsung, yaitu proses pembuatan message digest, proses dekripsi sidik
dijital, dan proses verifikasi. Alur proses yang berlangsung pada aplikasi
verifikasi sidik dijital ditunjukkan pada Gambar 4.14.
Gambar 4.14. Alur sistem verifikasi sidik dijital
Mulai
MembuatMessage Digest
Message Digest
Dekripsi
Data Sah
Memasukkan Data Memasukkan Sidik Dijital
Plaintext
Selesai
Plaintext = Message Digest
Data Tidak Sah
Berikut diberikan pseudocode (algoritma) beserta penjelasan pada
masing-masing proses yang berlangsung.
1. Proses pembuatan message digest
Pseudocode pembuatan message digest pada aplikasi verifikasi sidik
dijital sama dengan pseudocode pembuatan message digest pada
aplikasi pembuatan sidik dijital.
2. Proses dekripsi sidik dijital//Mendefinisikan variabelvar ascii_md,sidikdijital,messagedigest,hasildekrip:string; n,e:int64;//Mencari deret nilai ascii message digestascii_md:='';for i:=1 to length(messagedigest) do begin hargaascii[i]:=ord(messagedigest[i]); ascii_md:=concat(ascii_md,inttostr(hargaascii[i])); end;//Tahap Dekripsihasildekripsi:=’’;for i:=1 to length(sidikdijital) dobeginplaintext[i]:=dekripsi(strtoint(sidikdijital[i]),e,n);hasildekrip:=concat(hasildekrip,inttostr(plaintext[i]));end;
3. Proses verifikasi sidik dijital//Mendefinisikan variabelvar ascii_md,hasildekrip,verifikasi:string;//Tahap verifikasiif ascii_md = hasildekrip then verifikasi:=TRUE else verifikasi:=FALSE;
4.4.4. Pengujian Aplikasi Untuk Penerima
Dalam subbab ini dilakukan pengujian terhadap aplikasi untuk
penerima yang meliputi : proses pembuatan message digest, proses dekripsi
sidik dijital, dan proses verifikasi sidik dijital. Ketika aplikasi dijalankan,
terlebih dahulu muncul user guide seperti ditunjukkan pada Gambar 4.15.
Gambar 4.15. Form petunjuk pemakaian aplikasi
Berikut ini diberikan contoh pengujian terhadap masing-masing proses.
1. Proses pembuatan message digest
Misal dimasukkan file regristrasi.txt, kemudian tombol ”DIGEST”
ditekan dihasilkan message digest dari data yang dimasukkan tersebut.
2. Proses dekripsi sidik dijital
Pada proses ini kunci dekripsi dan sidik dijital yang telah diterima
dimasukkan, kemudian tombol ”VERIFIKASI” ditekan untuk
mendapatkan plaintext dari sidik dijital.
3. Proses verifikasi sidik dijital
Pada proses ini message digest yang didapat pada proses 1 disamakan
dengan hasil dekripsi sidik dijital pada proses 2. Ternyata message
digest dari file regristrasi.txt sama dengan hasil dekripsi dari sidik
dijitalnya, muncul tampilan form seperti ditunjukkan pada Gambar
4.16. Tetapi ketika isi dari file regristrasi.txt diubah, muncul tampilan
form seperti ditunjukkan pada Gambar 4.17.
Gambar 4.16. Tampilan form verifikasi sidik dijital ketika data sah
Gambar 4.17. Tampilan form verifikasi sidik dijital ketika data tidak sah
Dari proses yang berlangsung dapat diketahui nilai dari message
digest, dan hasil dekripsi sidik dijital yang diperoleh dari aplikasi sama dengan
yang diperoleh secara teori.
4.5. Analisis Kelebihan dan Kelemahan Pembuatan Sidik Dijital Dengan
Menggunakan Fungsi Hash MD5 dan Algoritma RSA
Pada subbab ini dibahas mengenai kekuatan dan kelemahan pembuatan
sidik dijital dengan menggunakan fungsi hash MD5 dan algoritma RSA baik
secara teori maupun aplikasi yang telah dibuat.
Kelebihan sidik dijital yang dibuat oleh fungsi hash MD5 adalah
jaminan bahwa file yang diterima belum terdapat perubahan. Hal ini
dikarenakan untuk setiap message digest (h) yang dihasilkan, tidak mungkin
dikembalikan menjadi plaintext (x) sedemikian sehingga
H(x) = h.
Oleh karena itu, MD5 juga dapat memberikan perlindungan terhadap virus
komputer yang terdapat pada file yang diterima. Kemudian algoritma RSA
mempunyai kelebihan yang terletak pada sulitnya memfaktorkan bilangan
besar menjadi faktor-faktor prima (Munir, 2004). Menurut Stinson (1995),
agar algoritma RSA lebih aman kunci yang dimasukkan sebaiknya lebih dari
100 dijit atau sekitar 512 bit. Selain itu, dua buah kunci yang dibuat sebaiknya
tidak berpola (acak) untuk menyulitkan seorang Cryptanalyst dalam
memecahkan sandi.
Kelemahan dari pembuatan sidik dijital dengan fungsi hash MD5 dan
algoritma RSA adalah adanya kemungkinan diperoleh message digest yang
sama dari data yang berbeda. Hal ini dapat terjadi karena terdapat bilangan
yang terbatas pada keluaran MD5 (2128), tetapi terdapat bilangan yang tak
terbatas sebagai masukannya. Tetapi perlu diketahui menemukan hash yang
sama dari dua data yang berbeda adalah hal yang sulit. Sedangkan algoritma
RSA mempunyai masalah apabila metode faktorisasi yang cepat telah
dikembangkan. Meskipun banyak metode dari Cryptanalyst untuk
memecahkan sandi dari algoritma RSA, tetapi selama ini belum ditemukan
adanya metode yang lebih mudah selain dengan memfaktorkan kunci publik.
Oleh karena itu, untuk menjaga agar algoritma RSA tetap aman, cara yang
terbaik selain membuat kunci dengan bilangan yang sangat besar (karena
dengan kunci yang sangat besar menyebabkan proses enkripsi dan dekripsi
menjadi lebih lama) adalah menjaga distribusi kunci publik agar tidak jatuh
kepada orang-orang yang tidak berhak.
Dari aplikasi yang telah dibuat dapat diketahui bahwa aplikasi tersebut
mempunyai kelebihan sebagai berikut.
1. Hasil yang diperoleh aplikasi sama dengan hasil yang diperoleh secara
teori, sehingga aplikasi tersebut layak untuk digunakan sebagai
software pembuat sidik dijital dan verifikasinya.
2. Aplikasi tersebut dibuat dengan menggunakan Borland Delphi 7 yang
bersifat user friendly, sehingga mudah digunakan. Kemudian tampilan
form pada aplikasi tersebut didesain dengan Coreldraw 12, sehingga
terlihat menarik.
Sedangkan kelemahan dari aplikasi tersebut adalah kunci yang
dimasukkan dibatasi sebesar 32 bit. Hal ini disebabkan kemampuan dari
Delphi 7 yang hanya mempunyai kemampuan perhitungan maksimal sebesar
64 bit. Hal ini dijelaskan sebagai berikut. Diambil contoh pada proses
enkripsi. Pada proses ini dilakukan operasi matematika ba mod r, nilai
maksimal dari a adalah r-1 dan nilai minimal dari b adalah 2, sehingga ba mod
r dapat dituliskan sebagai berikut.
(r-1) 2 < r 2 < 2 64
(r-1) < 2 32
r < 2 32 +1
Oleh karena itu, apabila nilai kunci yang dimasukkan lebih dari 32 bit +1,
maka hasil perhitungan dari aplikasi tidak sesuai dengan yang diharapkan.
BAB V
PENUTUP
5.1. Kesimpulan
Berdasarkan pembahasan, diperoleh kesimpulan sebagai berikut.
1. Fungsi hash MD5 dan algoritma RSA membuat sidik dijital
dengan cara algoritma RSA mengenkripsikan message digest
yang dibuat oleh fungsi hash MD5.
2. Untuk membuktikan keabsahan data, sidik dijital dari pengirim
didekripsikan menggunakan kunci publik. Setelah itu data yang
diterima diubah menjadi message digest menggunakan fungsi
hash MD5. Apabila hasil dekripsi sidik dijitalnya sama dengan
message digest dari data yang diterima, data masih asli dan
dikirim oleh pengirim yang benar.
3. Setelah diadakan pengujian dan analisa, baik secara teori
maupun dari aplikasi, fungsi hash MD5 dan algoritma RSA
mampu membuat sidik dijital yang dapat digunakan untuk
menjaga keabsahan data.
5.2. Saran
Pada penelitian ini sidik dijital yang dihasilkan berformat .txt.
Selanjutnya dapat dikembangkan sidik dijital yang berformat .mp3, .dat, dan
sebagainya.
DAFTAR PUSTAKA
Budiyono, A. (2004). Enkripsi Data Kunci Simetri dengan Algoritma Kriptografi LOKI97. Program Magister Teknologi Informasi Departemen Elektro Institut Teknologi Bandung, Bandung.
Fichtner, M. (1997). The MD5 Message-Digest Algorithm. http://www.fichtner.net/delphi/md5.delphi.phtml
Munir, R. (2004). Bahan Kuliah Kriptografi : Pengantar Kriptografi. Departemen Teknik Informatika, Institut Teknologi Bandung, Bandung.
Nursanto, J. (2003). Tugas Akhir Kuliah Keamanan Jaringan Informasi : Tinjauan Mengenai Aplikasi Metode Montgomery Multiflication-Chinese Remainder Theorem (Crt) dalam Mempercepat Deskripsi RSA. Program Magister Teknologi Elektro Institut Teknologi Bandung, Bandung.
Rahayu, F. S. (2005). Suplemen Bahan Ajar Mata Kuliah Proteksi dan Teknik Keamanan Sistem Informasi. Magister Teknologi Informasi Universitas Indonesia, Jakarta.
Stinson, D. (1995). Cryptography. Computer Science and Engineering Departement, University of Nebraska, Lincoln.
Sukaridhoto, S. Dkk. (2005). Teknik Keamanan pada VoIP dengan Virtual Private Networking dan Kriptografi Serta Korelasi Terhadap Bandwidth dan Intelligibility Suara. Institut Teknologi Sepuluh Nopember (ITS), Surabaya.
Susanto, Budi. (2004). Keamanan Jaringan. http://lecturer.ukdw.ac.id/budsus/
Wibowo, A. (2004). Digital Security. Universitas Indonesia, Jakarta.
LAMPIRAN
• Fungsi dan prosedur yang digunakan dalam aplikasi
• Source code fungsi hash MD5
(dari www.fichtner.net/delphi/md5.delphi.phtml)
• Source code aplikasi pembuatan sidik dijital
• Source code aplikasi verifikasi sidik dijital
FUNGSI DAN PROSEDUR YANG DIGUNAKAN
DALAM APLIKASI
//FUNGSI UNTUK MENGECEK BILANGAN PRIMAFunction cekprime(bil:int64):boolean;var bil1:int64; i:longint; cek:boolean;begin if (bil<=1) then cek:=false else if (bil=2)or(bil=3) then cek:=true else begin for i:=2 to (bil div 2) do begin bil1:=bil mod i; if bil1=0 then cek:=false; end; end;if cek=false then cekprime:=false else cekprime:=true;end;
//FUNGSI UNTUK MENCARI FAKTOR PERSEKUTUAN TERBESARFunction fpb(ei,phei:int64):int64; var temp1,temp2,hasil:int64;begin if ei=phei then hasil:=0 else if(ei>phei)then begin while(ei mod phei <> 0) do begin temp1:=ei mod phei; ei:=phei; phei:=temp1; end; hasil:=phei; end else begin
while(phei mod ei <> 0)do begin temp2:=phei mod ei; phei:=ei; ei:=temp2; end; hasil:=ei; end;fpb:=hasil;end;
//FUNGSI UNTUK MENCARI NILAI E(KUNCI PUBLIK/DEKRIPSI)Function carie(phei:int64):int64;var hasil,ei:int64;beginhasil:=0;ei:=2; while (hasil<>1) do begin ei:=ei+1; hasil:=fpb(ei,phei); end;carie:=ei;end;
//FUNGSI UNTUK MENCARI NILAI ENKRIPSIFunction enkripsi(nilaix:integer;SK,en:int64):int64;var sum:int64; i:longint;beginsum:=1;for i:=1 to SK do begin if sum=0 then sum:=1; sum:=(nilaix*sum)mod en; end;enkripsi:=sum;end;
//FUNGSI UNTUK MENCARI MESSAGE DIGESTFunction LogEntry(Cmd, Msg: string; Dig: MD5Digest): string;begin
Result := Format('%s(''%s'') =' + #13#10 + ' %s', [Cmd, Msg, MD5Print(Dig)]);end;
//PROSEDUR UNTUK MENAMPILKAN MESSAGE DIGESTProcedure TForm1.Button6Click(Sender: TObject);
var mesdig:string;begin
Screen.Cursor := crHourGlass; display.Text:=''; with Display.Lines do begin
if Count > 0 then Add(''); Add(LogEntry('MD5File',pesan.Text,MD5File(pesan.Text)));
end;Screen.Cursor := crDefault;
mesdig:=display.text; edit3.text:=copy(mesdig,length(mesdig)-33,32);end;
//PROSEDUR MEMBANGKITKAN NILAI E (KUNCI DEKRIPSI/PUBLIK)Procedure TForm1.Button9Click(Sender: TObject);begine:=carie(phi);kuncie.Text:=inttostr(e);memo6.Lines.Add('E = '+inttostr(E));end;
//PROSEDUR UNTUK MEMBUAT KUNCI BILANGAN PRIMA ACAKProcedure TForm1.Button7Click(Sender: TObject);var acak81,acak82:array[0..1]of integer; acak161,acak162:array[0..3]of integer; acak241,acak242:array[0..5]of integer; acak321,acak322,acak322n:array[0..5]of integer; pilihan1,pilihan2:word;beginacak81[0]:=5;acak81[1]:=7;acak82[0]:=29;acak82[1]:=31;acak161[0]:=1453;acak161[1]:=1451;acak161[2]:=1459;acak161[3]:=1483;acak162[0]:=31;acak162[1]:=29;acak162[2]:=23;acak162[3]:=37;acak241[0]:=2137;acak241[1]:=2131;acak241[2]:=2129;acak241[3]:=2113;acak241[4]:=2111;acak241[5]:=2099;acak242[0]:=6997;acak242[1]:=6917;acak242[2]:=6947;acak242[3]:=6949;acak242[4]:=6907;acak242[5]:=6899;acak322n[0]:=15485863;acak322n[1]:=15485857;acak322n[2]:=13833997;acak322n[3]:=13012171;acak322n[4]:=11381507;acak322n[5]:=11868929;acak321[0]:=27449;acak321[1]:=27457;acak321[2]:=27479;acak321[3]:=27481;acak321[4]:=27509;acak321[5]:=22433;acak322[0]:=22447;acak322[1]:=22381;acak322[2]:=22391;acak322[3]:=22397;acak322[4]:=22433;acak322[5]:=22409; Case combobox1.itemindex of0:begin pilihan1:=random(2); if pilihan1=0 then begin
pilihan1:=random(2); p:=acak81[pilihan1]; pilihan2:=random(2); q:=acak82[pilihan2]; pe.text:=inttostr(p); qi.text:=inttostr(q); end else begin pilihan1:=random(2); p:=acak82[pilihan1]; pilihan2:=random(2); q:=acak81[pilihan2]; pe.text:=inttostr(p); qi.text:=inttostr(q); end; end;1:begin pilihan1:=random(2); if pilihan1=0 then begin pilihan1:=random(3); p:=acak161[pilihan1]; pe.text:=inttostr(p); pilihan2:=random(3); q:=acak162[pilihan2]; qi.Text:=inttostr(q); end else begin pilihan1:=random(3); p:=acak162[pilihan1]; pe.text:=inttostr(p); pilihan2:=random(3); q:=acak161[pilihan2]; qi.Text:=inttostr(q); end; end;2:begin pilihan1:=random(2); if pilihan1=0 then begin pilihan1:=random(6); p:=acak241[pilihan1]; pe.text:=inttostr(p); pilihan2:=random(6); q:=acak242[pilihan2]; qi.Text:=inttostr(q); end else begin
pilihan1:=random(6); p:=acak242[pilihan1]; pe.text:=inttostr(p); pilihan2:=random(6); q:=acak241[pilihan2]; qi.Text:=inttostr(q); end; end;3:begin pilihan1:=random(2); if pilihan1=0 then begin pilihan1:=random(6); p:=acak321[pilihan1]; pe.text:=inttostr(p); pilihan2:=random(6); q:=acak322[pilihan2]; qi.Text:=inttostr(q); end else begin pilihan1:=random(4); p:=acak162[pilihan1]; pe.text:=inttostr(p); pilihan2:=random(6); q:=acak322n[pilihan2]; qi.Text:=inttostr(q); end; end; end;end;
//FUNGSI UNTUK MENCARI NILAI DEKRIPSIFunction DEKRIP(nilaiS,PK,en:int64):int64;var sum:int64; i:longint;beginsum:=1;for i:=1 to PK do begin if sum=0 then sum:=1; sum:=(nilaiS*sum)mod en; end;DEKRIP:=sum;end;
SOURCE CODE FUNGSI HASH MD5//MD5 Message-Digest for Delphi 4//Delphi 4 Unit implementing the//RSA Data Security, Inc. MD5 Message-Digest Algorithm//Implementation of Ronald L. Rivest's RFC 1321//Copyright © 1997-1999 Medienagentur Fichtner & Meyer//Written by Matthias Fichtner//See RFC 1321 for RSA Data Security's copyright and license notice!//14-Jun-97 mf Implemented MD5 according to RFC 1321 RFC 1321//16-Jun-97 mf Initial release of the compiled unit (no source code) RFC 1321//28-Feb-99 mf Added MD5Match function for comparing two digests RFC 1321//13-Sep-99 mf Reworked the entire unit RFC 1321//17-Sep-99 mf Reworked the "Test Driver" project RFC 1321//19-Sep-99 mf Release of sources for MD5 unit and "Test Driver" project RFC 1321
unit md5;
usesWindows;
typeMD5Count = array[0..1] of DWORD;MD5State = array[0..3] of DWORD;MD5Block = array[0..15] of DWORD;MD5CBits = array[0..7] of byte;MD5Digest = array[0..15] of byte;MD5Buffer = array[0..63] of byte;MD5Context = record
State: MD5State;Count: MD5Count;Buffer: MD5Buffer;
end;
procedure MD5Init(var Context: MD5Context);procedure MD5Update(var Context: MD5Context; Input: pChar; Length: longword);procedure MD5Final(var Context: MD5Context; var Digest: MD5Digest);
function MD5String(M: string): MD5Digest;
function MD5File(N: string): MD5Digest;function MD5Print(D: MD5Digest): string;
function MD5Match(D1, D2: MD5Digest): boolean;
// -----------------------------------------------------------------------------------------------IMPLEMENTATION// -----------------------------------------------------------------------------------------------
varPADDING: MD5Buffer = (
$80, $00, $00, $00, $00, $00, $00, $00,$00, $00, $00, $00, $00, $00, $00, $00,$00, $00, $00, $00, $00, $00, $00, $00,$00, $00, $00, $00, $00, $00, $00, $00,$00, $00, $00, $00, $00, $00, $00, $00,$00, $00, $00, $00, $00, $00, $00, $00,$00, $00, $00, $00, $00, $00, $00, $00,$00, $00, $00, $00, $00, $00, $00, $00
);
function F(x, y, z: DWORD): DWORD;begin
Result := (x and y) or ((not x) and z);end;
function G(x, y, z: DWORD): DWORD;begin
Result := (x and z) or (y and (not z));end;
function H(x, y, z: DWORD): DWORD;begin
Result := x xor y xor z;end;
function I(x, y, z: DWORD): DWORD;begin
Result := y xor (x or (not z));end;
procedure rot(var x: DWORD; n: BYTE);begin
x := (x shl n) or (x shr (32 - n));end;
procedure FF(var a: DWORD; b, c, d, x: DWORD; s: BYTE; ac: DWORD);begin
inc(a, F(b, c, d) + x + ac);rot(a, s);inc(a, b);
end;
procedure GG(var a: DWORD; b, c, d, x: DWORD; s: BYTE; ac: DWORD);begin
inc(a, G(b, c, d) + x + ac);rot(a, s);inc(a, b);
end;
procedure HH(var a: DWORD; b, c, d, x: DWORD; s: BYTE; ac: DWORD);begin
inc(a, H(b, c, d) + x + ac);rot(a, s);inc(a, b);
end;
procedure II(var a: DWORD; b, c, d, x: DWORD; s: BYTE; ac: DWORD);begin
inc(a, I(b, c, d) + x + ac);rot(a, s);inc(a, b);
end;
// -----------------------------------------------------------------------------------------------
// Encode Count bytes at Source into (Count / 4) DWORDs at Targetprocedure Encode(Source, Target: pointer; Count: longword);var
S: PByte;T: PDWORD;I: longword;
beginS := Source;T := Target;for I := 1 to Count div 4 do begin
T^ := S^;inc(S);T^ := T^ or (S^ shl 8);inc(S);
T^ := T^ or (S^ shl 16);inc(S);T^ := T^ or (S^ shl 24);inc(S);inc(T);
end;end;
// Decode Count DWORDs at Source into (Count * 4) Bytes at Targetprocedure Decode(Source, Target: pointer; Count: longword);var
S: PDWORD;T: PByte;I: longword;
beginS := Source;T := Target;for I := 1 to Count do begin
T^ := S^ and $ff;inc(T);T^ := (S^ shr 8) and $ff;inc(T);T^ := (S^ shr 16) and $ff;inc(T);T^ := (S^ shr 24) and $ff;inc(T);inc(S);
end;end;
// Transform State according to first 64 bytes at Bufferprocedure Transform(Buffer: pointer; var State: MD5State);var
a, b, c, d: DWORD;Block: MD5Block;
beginEncode(Buffer, @Block, 64);a := State[0];b := State[1];c := State[2];d := State[3];FF (a, b, c, d, Block[ 0], 7, $d76aa478);FF (d, a, b, c, Block[ 1], 12, $e8c7b756);FF (c, d, a, b, Block[ 2], 17, $242070db);FF (b, c, d, a, Block[ 3], 22, $c1bdceee);FF (a, b, c, d, Block[ 4], 7, $f57c0faf);FF (d, a, b, c, Block[ 5], 12, $4787c62a);FF (c, d, a, b, Block[ 6], 17, $a8304613);FF (b, c, d, a, Block[ 7], 22, $fd469501);FF (a, b, c, d, Block[ 8], 7, $698098d8);
FF (d, a, b, c, Block[ 9], 12, $8b44f7af);FF (c, d, a, b, Block[10], 17, $ffff5bb1);FF (b, c, d, a, Block[11], 22, $895cd7be);FF (a, b, c, d, Block[12], 7, $6b901122);FF (d, a, b, c, Block[13], 12, $fd987193);FF (c, d, a, b, Block[14], 17, $a679438e);FF (b, c, d, a, Block[15], 22, $49b40821);GG (a, b, c, d, Block[ 1], 5, $f61e2562);GG (d, a, b, c, Block[ 6], 9, $c040b340);GG (c, d, a, b, Block[11], 14, $265e5a51);GG (b, c, d, a, Block[ 0], 20, $e9b6c7aa);GG (a, b, c, d, Block[ 5], 5, $d62f105d);GG (d, a, b, c, Block[10], 9, $2441453);GG (c, d, a, b, Block[15], 14, $d8a1e681);GG (b, c, d, a, Block[ 4], 20, $e7d3fbc8);GG (a, b, c, d, Block[ 9], 5, $21e1cde6);GG (d, a, b, c, Block[14], 9, $c33707d6);GG (c, d, a, b, Block[ 3], 14, $f4d50d87);GG (b, c, d, a, Block[ 8], 20, $455a14ed);GG (a, b, c, d, Block[13], 5, $a9e3e905);GG (d, a, b, c, Block[ 2], 9, $fcefa3f8);GG (c, d, a, b, Block[ 7], 14, $676f02d9);GG (b, c, d, a, Block[12], 20, $8d2a4c8a);HH (a, b, c, d, Block[ 5], 4, $fffa3942);HH (d, a, b, c, Block[ 8], 11, $8771f681);HH (c, d, a, b, Block[11], 16, $6d9d6122);HH (b, c, d, a, Block[14], 23, $fde5380c);HH (a, b, c, d, Block[ 1], 4, $a4beea44);HH (d, a, b, c, Block[ 4], 11, $4bdecfa9);HH (c, d, a, b, Block[ 7], 16, $f6bb4b60);HH (b, c, d, a, Block[10], 23, $bebfbc70);HH (a, b, c, d, Block[13], 4, $289b7ec6);HH (d, a, b, c, Block[ 0], 11, $eaa127fa);HH (c, d, a, b, Block[ 3], 16, $d4ef3085);HH (b, c, d, a, Block[ 6], 23, $4881d05);HH (a, b, c, d, Block[ 9], 4, $d9d4d039);HH (d, a, b, c, Block[12], 11, $e6db99e5);HH (c, d, a, b, Block[15], 16, $1fa27cf8);HH (b, c, d, a, Block[ 2], 23, $c4ac5665);II (a, b, c, d, Block[ 0], 6, $f4292244);II (d, a, b, c, Block[ 7], 10, $432aff97);II (c, d, a, b, Block[14], 15, $ab9423a7);II (b, c, d, a, Block[ 5], 21, $fc93a039);II (a, b, c, d, Block[12], 6, $655b59c3);II (d, a, b, c, Block[ 3], 10, $8f0ccc92);II (c, d, a, b, Block[10], 15, $ffeff47d);II (b, c, d, a, Block[ 1], 21, $85845dd1);II (a, b, c, d, Block[ 8], 6, $6fa87e4f);II (d, a, b, c, Block[15], 10, $fe2ce6e0);II (c, d, a, b, Block[ 6], 15, $a3014314);II (b, c, d, a, Block[13], 21, $4e0811a1);
II (a, b, c, d, Block[ 4], 6, $f7537e82);II (d, a, b, c, Block[11], 10, $bd3af235);II (c, d, a, b, Block[ 2], 15, $2ad7d2bb);II (b, c, d, a, Block[ 9], 21, $eb86d391);inc(State[0], a);inc(State[1], b);inc(State[2], c);inc(State[3], d);
end;
// -----------------------------------------------------------------------------------------------
// Initialize given Contextprocedure MD5Init(var Context: MD5Context);begin
with Context do beginState[0] := $67452301;State[1] := $efcdab89;State[2] := $98badcfe;State[3] := $10325476;Count[0] := 0;Count[1] := 0;ZeroMemory(@Buffer, SizeOf(MD5Buffer));
end;end;
// Update given Context to include Length bytes of Inputprocedure MD5Update(var Context: MD5Context; Input: pChar; Length: longword);var
Index: longword;PartLen: longword;I: longword;
beginwith Context do begin
Index := (Count[0] shr 3) and $3f;inc(Count[0], Length shl 3);if Count[0] < (Length shl 3) then inc(Count[1]);inc(Count[1], Length shr 29);
end;PartLen := 64 - Index;if Length >= PartLen then begin
CopyMemory(@Context.Buffer[Index], Input, PartLen);
Transform(@Context.Buffer, Context.State);I := PartLen;while I + 63 < Length do begin
Transform(@Input[I], Context.State);inc(I, 64);
end;Index := 0;
end else I := 0;CopyMemory(@Context.Buffer[Index], @Input[I], Length -
I);end;
// Finalize given Context, create Digest and zeroize Contextprocedure MD5Final(var Context: MD5Context; var Digest: MD5Digest);var
Bits: MD5CBits;Index: longword;PadLen: longword;
beginDecode(@Context.Count, @Bits, 2);Index := (Context.Count[0] shr 3) and $3f;if Index < 56 then PadLen := 56 - Index else PadLen :=
120 - Index;MD5Update(Context, @PADDING, PadLen);MD5Update(Context, @Bits, 8);Decode(@Context.State, @Digest, 4);ZeroMemory(@Context, SizeOf(MD5Context));
end;
// -----------------------------------------------------------------------------------------------
// Create digest of given Messagefunction MD5String(M: string): MD5Digest;var
Context: MD5Context;begin
MD5Init(Context);MD5Update(Context, pChar(M), length(M));MD5Final(Context, Result);
end;
// Create digest of file with given Namefunction MD5File(N: string): MD5Digest;var
FileHandle: THandle;MapHandle: THandle;ViewPointer: pointer;Context: MD5Context;
beginMD5Init(Context);FileHandle := CreateFile(pChar(N), GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_SEQUENTIAL_SCAN, 0);
if FileHandle <> INVALID_HANDLE_VALUE then tryMapHandle := CreateFileMapping(FileHandle, nil,
PAGE_READONLY, 0, 0, nil);if MapHandle <> 0 then try
ViewPointer := MapViewOfFile(MapHandle, FILE_MAP_READ, 0, 0, 0);
if ViewPointer <> nil then tryMD5Update(Context, ViewPointer,
GetFileSize(FileHandle, nil));finally
UnmapViewOfFile(ViewPointer);end;
finallyCloseHandle(MapHandle);
end;finally
CloseHandle(FileHandle);end;MD5Final(Context, Result);
end;
// Create hex representation of given Digestfunction MD5Print(D: MD5Digest): string;var
I: byte;const
Digits: array[0..15] of char =('0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'a', 'b', 'c', 'd', 'e', 'f');begin
Result := '';for I := 0 to 15 do Result := Result + Digits[(D[I]
shr 4) and $0f] + Digits[D[I] and $0f];end;
// -----------------------------------------------------------------------------------------------
// Compare two Digestsfunction MD5Match(D1, D2: MD5Digest): boolean;var
I: byte;begin
I := 0;Result := TRUE;while Result and (I < 16) do begin
Result := D1[I] = D2[I];inc(I);
end;end;
end.
SOURCE CODE APLIKASI PEMBUATAN
SIDIK DIJITAL
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Menus;type TForm1 = class(TForm) Image1: TImage; Label1: TLabel; Button1: TButton; Label2: TLabel; Button2: TButton; Button3: TButton; Label3: TLabel; Button4: TButton; Image2: TImage; PESAN: TEdit; DISPLAY: TMemo; Button5: TButton; Button6: TButton; Label4: TLabel; OpenDialog1: TOpenDialog; Label5: TLabel; ComboBox1: TComboBox; Button7: TButton; PE: TEdit; QI: TEdit; Button8: TButton; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label14: TLabel; Label11: TLabel;
Label12: TLabel; KUNCIE: TEdit; Button9: TButton; Label13: TLabel; Button10: TButton; Button11: TButton; Label15: TLabel; Label16: TLabel; Label17: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button12: TButton; Button13: TButton; Button14: TButton; Button15: TButton; Label18: TLabel; Label19: TLabel; Label20: TLabel; Memo1: TMemo; Memo2: TMemo; Memo3: TMemo; Memo4: TMemo; Label21: TLabel; Label22: TLabel; Label23: TLabel; Label24: TLabel; Label25: TLabel; Label26: TLabel; Memo5: TMemo; SaveDialog1: TSaveDialog; Memo6: TMemo; procedure Button4Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Button10Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button13Click(Sender: TObject); procedure Button12Click(Sender: TObject); procedure Button15Click(Sender: TObject); procedure Button14Click(Sender: TObject); procedure Button11Click(Sender: TObject); private { Private declarations } public
{ Public declarations } end;
var Form1: TForm1; p,q,phi,n,m,e,d:int64;implementation
{$R *.dfm}USES MD5;// MENGECEK BILANGAN PRIMA MASUKAN DARI USERProcedure TForm1.Button8Click(Sender: TObject);begin p:=strtoint64(pe.text); q:=strtoint64(qi.text); if (p*q)>=2147483649 then begin messagedlg('P dan Q yang dimasukkan terlalu besar!, ganti nilai P atau Q yang lebih kecil',mtinformation,[mbOK],0); pe.Text:=''; qi.Text:=''; end else if cekprime(p)=false then begin messagedlg('P bukan bilangan prima, masukkan P prima',mtinformation,[mbOK],0); pe.Text:=''; end else if cekprime(q)=false then begin messagedlg('Q bukan bilangan prima, masukkan Q prima',mtinformation,[mbOK],0); qi.Text:=''; end else if p=q then begin messagedlg('Anda disarankan untuk tidak memasukkan nilai P dan Q yang sama ',mtinformation,[mbOK],0); pe.Text:=''; qi.Text:=''; end else begin phi:=(p-1)*(q-1); n:=p*q; if n<=9 then
begin messagedlg('P dan Q yang dimasukkan terlalu kecil!',mtinformation,[mbOK],0); label10.caption:=''; label11.caption:=''; end else begin label10.caption:=inttostr(n); label11.caption:=inttostr(phi); memo6.Lines.Add('N = '+inttostr(N)); end; end;end;
// MEMBUKTIKAN PHI RELATIF PRIMA// DENGAN E MASUKAN DARI USER SEKALIGUS MENCARI// NILAI D-NYA (KUNCI ENKRIPSI/PRIBADI)Procedure TForm1.Button10Click(Sender: TObject);Procedure TForm1.Button10Click(Sender: TObject);begin e:=strtoint64(kuncie.Text); if e<=1 then messagedlg('e yang anda masukkan tidak tepat, cari e yang lain',mtinformation,[mbok],0) else if fpb(e,phi)=1 then begin m:=1; while ((1+m*phi)mod e)<>0 do m:=m+1; d:=(1+m*phi)div e; Label14.Caption:=inttostr(d); end else begin messagedlg('e yang anda masukkan tidak relatif prime dengan phi',mtinformation,[mbok],0); kuncie.text:=''; end;end;
//MEMASUKKAN MESSAGE DIGEST DARI SOFTWARE LAINProcedure TForm1.Button13Click(Sender: TObject);var md:string;beginif edit1.text='N' then n:=p*q else n:=strtoint64(edit1.text);if edit2.text='D' then D:=d else d:=strtoint64(edit2.text);
md:=edit3.text;end;
// PEMBUATAN SIDIK DIJITALProcedure TForm1.Button12Click(Sender: TObject);var md,ascii,semua,SIDIKDIJITAL:string;jumlahhuruf,panjangn,lebarmax,lebarblok,mulai,banyakblok,lebarbaru:integer; i,j,panjang,tambah,jumlahangka,awal:longint; hargaascii:array[1..32] of integer; x,s1:array[1..96]of string; kirim:array[1..96]of string; x1:array[1..96]of integer; s:array[1..96]of int64; huruf:array[1..96]of char; karakter:array[1..96]of byte;
begin//MENCARI DERET NILAI ASCII md:=edit3.Text; panjang:=Length(md); memo1.Clear; memo2.clear; memo3.clear; memo4.clear; memo5.clear; ascii:=''; for i:=1 to panjang do begin hargaascii[i]:=ord(md[i]); memo1.lines.add(inttostr(hargaascii[i])); ascii:=concat(ascii,inttostr(hargaascii[i])); end;
//MENENTUKAN PANJANG BLOK panjangn:=length(inttostr(n)); lebarmax:=panjangn-1; if lebarmax =1 then lebarblok:=lebarmax else if lebarmax=2 then lebarblok:=lebarmax else lebarblok:=3;
//MENENTUKAN BANYAK BLOK if length(ascii) mod lebarblok<>0 then banyakblok:=(length(ascii)div lebarblok)+1 else banyakblok:=length(ascii)div lebarblok; Label24.caption:='banyak blok= '+inttostr(banyakblok)+', lebarblok= '+inttostr(lebarblok);
// TAHAP ENKRIPSI mulai:=1; for i:=1 to banyakblok do begin x[i]:=copy(ascii,mulai,lebarblok); x1[i]:=strtoint(x[i]); s[i]:=enkripsi(x1[i],d,n); s1[i]:=inttostr(s[i]); if odd(panjangn)=true then lebarbaru:=panjangn+1 else lebarbaru:=panjangn; tambah:=lebarbaru-length(s1[i]); for j:=1 to tambah do s1[i]:='0'+s1[i]; memo2.lines.add(s1[i]); mulai:=mulai+lebarblok; end;
//hasil enkripsi semua:=''; for i:=1 to banyakblok do semua:=concat(semua,s1[i]);
jumlahangka:=banyakblok*lebarbaru; jumlahhuruf:=jumlahangka div 2; Label25.caption:='banyaknya angka='+inttostr(jumlahangka);
awal:=1; SIDIKDIJITAL:=''; for i:=1 to jumlahhuruf do begin kirim[i]:=copy(semua,awal,2); if kirim[i]='00' then huruf[i]:='d' else if kirim[i]='13' then huruf[i]:='e' else begin karakter[i]:=strtoint(kirim[i]); huruf[i]:=chr(karakter[i]); end; memo3.lines.add(kirim[i]); memo4.lines.Add(huruf[i]); SIDIKDIJITAL:=concat(SIDIKDIJITAL,huruf[i]); awal:=awal+2; end;MEMO5.LINES.ADD(SIDIKDIJITAL);end;
SOURCE CODE APLIKASI VERIFIKASI
SIDIK DIJITALunit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Button1: TButton; Edit4: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Button3: TButton; Memo1: TMemo; Button4: TButton; Edit5: TEdit; Label6: TLabel; Label7: TLabel; OpenDialog1: TOpenDialog; Memo2: TMemo; Edit6: TEdit; Edit7: TEdit; Label8: TLabel; Label9: TLabel; Label10: TLabel; Button5: TButton; Button6: TButton; Image1: TImage; Button7: TButton; Image2: TImage; Memo3: TMemo; Label11: TLabel; memo4: TMemo;
OpenDialog2: TOpenDialog; Button8: TButton; Edit3: TEdit; Label5: TLabel; procedure Button3Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button8Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; MD,SD:String; E,N:INT64;implementation{$R *.dfm}USES MD5;
// VERIFIKASI SIDIK DIJITALProcedure TForm1.Button3Click(Sender: TObject);VAR I,J,PANJANGBLOK,PANJANGN,PANJANGTEXT,BANYAKBLOK,AWAL,LEBARMAX,LEBARBLOK,SISA,NAMBAH:INTEGER; ASCIIMD,HASILDEKRIP,TAMBAH:STRING; BLOK1,HASIL,PLAINTEXT2:ARRAY[1..100]OF STRING; PLAINTEXT1:ARRAY[1..100]OF INT64; BLOK2:ARRAY[1..100,1..10]OF CHAR; ASCII:ARRAY[1..100,1..100]OF STRING; NILAI:ARRAY[1..100,1..10] OF STRING;
beginE:=STRTOINT64(EDIT1.TEXT);N:=STRTOINT64(EDIT2.TEXT);SD:=MEMO4.Text;MD:=EDIT5.TEXT;Label6.Caption:='';
PANJANGN:=LENGTH(INTTOSTR(N));IF ODD(PANJANGN)=TRUE THEN PANJANGN:=PANJANGN+1;PANJANGBLOK:=PANJANGN DIV 2;PANJANGTEXT:=LENGTH(SD);
BANYAKBLOK:=PANJANGTEXT DIV PANJANGBLOK;
//NILAI ASCII MESSAGE DIGESTLEBARMAX:=LENGTH(INTTOSTR(N))-1;IF LEBARMAX =1 THEN LEBARBLOK:=LEBARMAX ELSE IF LEBARMAX=2 THEN LEBARBLOK:=LEBARMAX ELSE LEBARBLOK:=3;ASCIIMD:='';FOR I:=1 TO LENGTH(MD) DO BEGIN ASCIIMD:=CONCAT(ASCIIMD,INTTOSTR(ORD(MD[I]))); END;SISA:=LENGTH(ASCIIMD) MOD LEBARBLOK;IF SISA<>0 THEN IF LEBARBLOK-SISA=1 THEN BEGIN TAMBAH:='0'+COPY(ASCIIMD,LENGTH(ASCIIMD)-SISA+1,LENGTH(ASCIIMD)); DELETE(ASCIIMD,LENGTH(ASCIIMD)-SISA+1,LENGTH(ASCIIMD)); ASCIIMD:=ASCIIMD+TAMBAH; END ELSE BEGIN TAMBAH:='00'+COPY(ASCIIMD,LENGTH(ASCIIMD)-SISA+1,LENGTH(ASCIIMD)); DELETE(ASCIIMD,LENGTH(ASCIIMD)-SISA+1,LENGTH(ASCIIMD)); ASCIIMD:=ASCIIMD+TAMBAH; END;EDIT6.TEXT:=ASCIIMD;
//DEKRIPSI SIDIK DIJITALAWAL:=1;HASILDEKRIP:='';FOR I:=1 TO BANYAKBLOK DO BEGIN BLOK1[I]:=COPY(SD,AWAL,PANJANGBLOK); HASIL[I]:=''; FOR J:=1 TO PANJANGBLOK DO BEGIN BLOK2[I,J]:=BLOK1[I][J]; IF BLOK2[I,J]='d' THEN ASCII[I,J]:='00' ELSE IF BLOK2[I,J]='e' THEN ASCII[I,J]:='13' ELSE ASCII[I,J]:=INTTOSTR(ORD(BLOK2[I,J])); IF LENGTH(ASCII[I,J])=1 THEN NILAI[I,J]:='0'+ASCII[I,J] ELSE NILAI[I,J]:=ASCII[I,J]; HASIL[I]:=CONCAT(HASIL[I],NILAI[I,J]); END; MEMO3.LINES.ADD(HASIL[I]); PLAINTEXT1[I]:=DEKRIP(STRTOINT64(HASIL[I]),E,N); PLAINTEXT2[I]:=INTTOSTR(PLAINTEXT1[I]);
IF LENGTH(PLAINTEXT2[I])<>LEBARBLOK THEN BEGIN NAMBAH:=LEBARBLOK-LENGTH(PLAINTEXT2[I]); IF NAMBAH=1 THEN PLAINTEXT2[I]:=CONCAT('0',PLAINTEXT2[I]) ELSE PLAINTEXT2[I]:=CONCAT('00',PLAINTEXT2[I]); END; MEMO2.LINES.ADD(PLAINTEXT2[I]); HASILDEKRIP:=CONCAT(HASILDEKRIP,PLAINTEXT2[I]); AWAL:=AWAL+PANJANGBLOK; END;EDIT7.Text:=HASILDEKRIP;IF HASILDEKRIP=ASCIIMD THENLaBEL6.CAPTION:='HASIL VERIFIKASI MENYATAKAN BAHWA DATA MASIH ASLI'ELSEmessagedlg('Hasil dekripsi sidik dijitalnya tidak sama dengan Messae Digest Pesan, Data tidak valid!',mtinformation,[mbOK],0);end;
top related