3
1. Pendahuluan
Dalam era masyarakat berbasis informasi, sebuah data digital merupakan komponen yang sangat vital, sehingga memerlukan pengamanan yang baik saat
didistribusikan ataupun saat disimpan. Akhirnya dikembangkan berbagai carametode untuk mengatasi persoalan keamanan data yang pada intinya adalah
cara untuk mengantisipasi agar pihak-pihak yang tidak berhak, tidak mungkin dapat membaca atau bahkan merusak data yang bukan ditujukan kepadanya. Salah
satu
cara pengamanan
data tersebut
adalah dengan
menerapkan kriptografipenyandian.
Dalam prakteknya kriptografi digunakan untuk melindungi kerahasiaan data dan menjamin integritas data. Kriptografi biasanya hanya diterapkan pada data-
data yang dinilai penting dan sensitif, yang perlu dilindungi dari akses pihak- pihak yang tidak diinginkan dan dari potensi ancaman pencurian oleh pihak-pihak
yang memperoleh akses terhadapnya. Secara prinsip, keamanan data yang disandi sangat tergantung dari terjaganya kerahasiaan kunci dan algoritma sandinya.
Kriptografi tidak menjamin keamanan 100, sebab tidak ada pengamanan yang sempurna [1].
Ketika suatu algoritma kripografi sudah dapat dipecahkan, maka diperlukan algoritma-algoritma baru yang lebih handal agar keamanan data tetap terjaga. Hal
ini menyebabkan kriptografi tidak akan pernah berhenti berkembang, salah satu contoh dari perkembangan algoritma kriptografi tersebut adalah digital signature.
Digital signature atau tanda tangan digital bukanlah tanda tangan dari seseorang yang di-scan atau dimasukkan ke komputer menggunakan scanner atau
sejenisnya, tapi merupakan kumpulan dari kalkulasi-kalkulasi matematis untuk menyandikan data, yakni dengan kriptografi.
Digital signature dilakukan dengan menggunakan algoritma kunci-publik. Salah satunya adalah algoritma RSA dan dengan menggunakan fungsi hash
Secure Hash Algorithm SHA, sehingga proses pembentukan tanda-tangan dari pesan yang dikirim dapat diperiksa keabsahannya. Sehubungan dengan latar
belakang tersebut, maka penulis akan merancang dan membangun suatu aplikasi kriptosistem menggunakan digital signature berbasis algoritma SHA-512 dan
RSA dengan tujuan untuk memenuhi aspek-aspek keamanan dari kriptografi yaitu kerahasiaan, integritas data, otentikasi dan nirpenyangkalan.
2. Tinjauan Pustaka
Pada penelitian yang berjudul “Implementasi Tanda Tangan Digital
Menggunakan Fungsi Hash Algoritma SHA-256 dan RSA dalam Proses Otentikasi Data” menghasilkan aplikasi tanda tangan digital menggunakan fungsi
hash algoritma SHA-256 dan RSA dalam proses otentikasi data. Pengujian program telah dilakukan dan dapat disimpulkan bahwa aplikasi ini dapat
digunakan untuk proses otentikasi data [2].
Pada penelitian yang berjudul “Studi dan Implementasi Tanda Tangan
Digital dengan Menggunakan Algoritma Elgamal ” menghasilkan ElGamal
merupakan algoritma yang cocok untuk skema tandatangan digital karena termasuk algoritma yang cepat dalam komputasinya dan aman digunakan selama
tidak terjadi kesalahan penggunaan dan pembocoran informasi rahasia sistem ElGamal [3].
4 Pada penelitian yang
berjudul “Aplikasi Kriptografi Untuk Pengamanan E- dokumen dengan Metode Hybrid : Biometrik Tandatangan dan DSA Digital
Signature Algorithm ”, menghasilkan aplikasi untuk keamanan e-dokumen
dengan metode hybrid : Biometrik tandatangan dan DSA Digital Signature Algorithm sebagai solusi dalam hal manajemen kunci dengan pembangkitan
sepasang kunci secara dinamis walaupun dengan masukan yang sama dan memenuhi kebutuhan ketidaktunggalan signer [4].
Pada penelitian yang berjudu l “Penerapan Metode Enkripsi Rijndael,
Enkripsi RSA, dan Hash SHA-512 untuk Keamanan Transfer File Elektronik”
menghasilkan aplikasi enkripsi dan dekripsi berbasis web yang digunakan untuk transfer file elektronik [5].
Dalam penelitian ini, akan dibangun sebuah aplikasi kriptosistem menggunakan digital signature berbasis algoritma SHA-512 dan RSA.
Penggunaan algoritma RSA bertujuan untuk melakukan proses enkripsi dan dekripsi. Selain itu, didasarkan juga pada tingkat keamanan yang tinggi sehingga
sulit untuk dibobol apabila menggunakan ukuran panjang kunci yang besar. Sedangkan untuk algoritma SHA-512 digunakan untuk menghasilkan nilai hash
pesan ringkas dari suatu data yang dienkripsi sebagai validasi untuk dilakukan proses dekripsi.
Perbedaan penelitian ini dengan penelitian-penelitian sebelumnya terdapat pada aplikasi yang berbasis desktop dengan penambahan fungsi generate panjang
kunci yang dibangkitkan diperkenankan hingga mencapai ≥ 1024 bit jika dibandingkan dengan penelitian sejenis yang hanya mencapai 512 bit, penggunaan
algoritma SHA-512 sebagai otentikasi dalam melakukan proses dekripsi dan untuk file data yang digunakan adalah semua jenis file dengan sembarang ukuran.
Keamanan Data
Keamanan merupakan komponen yang vital dalam komunikasi data elektronis. Masih banyak yang belum menyadari bahwa keamanan security
merupakan sebuah komponen penting yang tidak murah. Teknologi kriptografi sangat berperan juga dalam proses komunikasi, yang digunakan untuk melakukan
enkripsi pengacakan data yang ditransaksikan selama perjalanan dari sumber ke tujuan dan juga melakukan dekripsi menyusun kembali data yang telah teracak
tersebut. Berbagai sistem yang telah dikembangkan adalah seperti sistem private key dan public key. Penguasaan algoritma-algoritma populer digunakan untuk
mengamankan data juga sangat penting. Contoh-contoh algoritma ini antara lain : DES, IDEA, RC5, RSA, dan ECC Elliptic Curve Cryptography. Penelitian
dalam bidang ini di perguruan tinggi merupakan suatu hal yang penting [6].
Kriptografi Cryptography
Kriptografi cryptography merupakan ilmu dan seni penyimpanan pesan, data, atau informasi secara aman. Kriptografi Cryptography berasal dari bahasa
Yunani yaitu dari kata Crypto dan Graphia yang berarti penulisan rahasia. Kriptografi adalah suatu ilmu yang mempelajari penulisan secara rahasia.
Proses tranformasi dari plaintext menjadi ciphertext disebut proses Encipherment atau enkripsi encryption, sedangkan proses mentransformasikan
5 kembali ciphertext menjadi plaintext disebut proses dekripsi decryption. Suatu
pesan yang tidak disandikan disebut sebagai plaintext ataupun cleartext. Untuk mengenkripsi dan mendekripsi data, kriptografi menggunakan suatu
algoritma cipher dan kunci key. Cipher adalah fungsi matematika yang digunakan untuk mengenkripsi dan mendekripsi. Sedangkan kunci merupakan
sederetan bit yang diperlukan untuk mengenkripsi dan mendekripsi data [1]. Secara sederhana, proses-proses tersebut dapat digambarkan pada Gambar 1.
Enkripsi Dekripsi
Plaintext Ciphertext
Plaintext Kunci
Kunci
Gambar 1 Proses EnkripsiDekripsi Sederhana [1]
Kriptografi bertujuan untuk memberikan layanan pada aspek-aspek keamanan antara lain:
1. Kerahasiaan confidentiality, yaitu menjaga supaya pesan tidak dapat dibaca oleh pihak-pihak yang tidak berhak,
2. Integritas data data integrity, yaitu memberikan jaminan bahwa untuk tiap bagian pesan tidak akan mengalami perubahan dari saat data dibuatdikirim
oleh pengirim sampai dengan saat data tersebut dibuka oleh penerima data, 3. Otentikasi authentication, yaitu berhubungan dengan identifikasi, baik
mengidentifikasi kebenaran pihak-pihak yang berkomunikasi maupun mengidentifikasi kebenaran sumber pesan,
4. Nirpenyangkalan non repudiation, yaitu memberikan cara untuk membuktikan bahwa suatu dokumen datang dari seseorang tertentu sehingga
apabila ada seseorang yang mencoba mengakui memiliki dokumen tersebut, dapat dibuktikan kebenarannya dari pengakuan orang tersebut [1].
Kriptografi Simetrik Symetric Cryptography
Pada sistem kriptografi simetrik, kunci untuk proses enkripsi sama dengan kunci untuk proses dekripsi. Keamanan sistem kriptografi simetrik terletak pada
kerahasiaan kunci. Istilah lain untuk kriptografi simetrik adalah kriptografi kunci pribadi private key cryptography atau kriptografi konvensional conventional
cryptography [7].
Algoritma kriptografi simetrik dapat dikelompokkan menjadi dua kategori antara lain:
- Cipher aliran stream cipher
Algoritma kriptografi beroperasi pada plaintextciphertext dalam bentuk bit tunggal yang dalam hal ini rangkaian bit dienkripsikandidekripsikan bit per bit.
Cipher aliran mengenkripsi satu bit setiap kali. Contoh algoritma stream cipher: RC4, Panama dan Pike.
-
Cipher blok block cipher Algoritma kriptografi beroperasi pada plaintextciphertext dalam bentuk blok
bit, yang dalam hal ini rangkaian bit dibagi menjadi blok-blok bit yang panjangnya sudah ditentukan sebelumnya. Cipher blok mengenkripsi satu blok bit
setiap kali. Contoh algoritma block cipher: Rinjdael, DES dan IDEA.
6
Enkripsi E
k
P = C Dekripsi
D
k
C = P Plaintext, P
Ciphertext, C Plaintext, P
Kunci Pribadi, K Kunci Pribadi, K
Gambar 2 Kriptografi Simetrik [7]
Kriptografi Asimetrik Asymetric Cryptography
Pada sistem kriptografi asimetrik, kunci untuk proses enkripsi tidak sama dengan kunci untuk proses dekripsi. Istilah lain untuk kriptografi asimetrik adalah
kriptografi kunci publik public key cryptography, sebab kunci untuk enkripsi tidak rahasia dan dapat diketahui oleh siapapun, sementara kunci untuk dekripsi
hanya diketahui oleh penerima pesan. Contoh algoritma asimetrik: RSA, Knapsack, ECC dan Diffie-Hellman [7].
Enkripsi E
PK
P = C Dekripsi
D
SK
C = P Plaintext, P
Ciphertext, C Plaintext, P
Kunci Publik, PK Kunci Pribadi, SK
Gambar 3 Kriptografi Asimetrik [7]
Fungsi Hash
Fungsi hash adalah fungsi yang menerima masukan string yang panjangnya sembarang dan mengkonversinya menjadi string keluaran yang panjangnya tetap
fixed umumnya berukuran jauh lebih kecil daripada ukuran string semula. Jika string menyatakan pesan message, maka sembarang pesan M berukuran
sembarang dikompresi oleh fungsi hash H melalui persamaan: h = H M 1
Keluaran fungsi hash disebut juga nilai hash hash value atau pesan- ringkas message digest. Pada Persamaan 1, h adalah nilai hash atau message
digest dari fungsi H untuk pesan M. Fungsi hash satu arah adalah fungsi hash yang bekerja dalam satu arah: pesan yang sudah diubah menjadi pesan-ringkas
tidak dapat dikembalikan lagi menjadi pesan semula. Contoh fungsi hash satu- arah adalah MD5 dan SHA. MD5 menghasilkan pesan ringkas yang berukuran
128 bit, sedangkan SHA menghasilkan pesan ringkas yang berukuran 160 bit [8].
Tanda Tangan Digital Digital Signature
Tanda tangan pada data digital disebut tanda tangan digital digital
signature. Pengertian tanda-tangan digital di sini bukanlah tanda tangan yang di- dijitasi 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.
Teknik yang umum digunakan untuk membentuk tanda-tangan digital adalah dengan fungsi hash dan melibatkan algoritma kriptografi kunci-publik.
Mula-mula pesan M ditransformasi oleh fungsi hash H menjadi pesan ringkas h. Pesan ringkas tersebut dienkripsi dengan kunci pribadi PK pengirim pesan:
S = ESKh 2
Hasil enkripsi S inilah yang disebut tanda tangan digital. Tanda-tangan digital dapat ditambahkan append pada pesan atau terpisah dari pesan dan
dikirim secara bersamaan.
7 Di tempat penerima, tanda-tangan diverifikasi untuk dibuktikan
keotentikannya dengan cara berikut: a. Tanda-tangan digital S didekripsi dengan menggunakan kunci publik PK
pengirim pesan, menghasilkan pesan-ringkas semula, h, sebagai berikut: h = DPKS
3 b. Pengirim kemudian mengubah pesan M menjadi pesan ringkas
h’ dengan menggunakan fungsi hash satu-arah yang sama dengan fungsi hash yang
digunakan oleh pengirim. c. Jika
h’ = h, berarti tanda-tangan yang diterima otentik dan berasal dari pengirim yang benar.
Gambar 4 memperlihatkan proses pembangkitan tanda tangan digital signing dan verifikasi tanda tangan digital verifying [9].
Message Hash Function
Message Digest Encrypt
Signature Message
------------------------- Signature
Signer
-------------------------------------------------------------------------------------------------------------- | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
Private Key Message
------------------------- Signature
Signature
Decrypt Message Digest’
Message
Public Key
Verifier
--------------------------------------------------------------------------------------------------------------
Hash Function
Message Digest =
?
Gambar 4 Proses Penandatanganan dan Verifikasi [9]
Keotentikan dapat dijelaskan sebagai berikut: a. Apabila pesan M yang diterima sudah berubah, maka
h’ yang dihasilkan dari fungsi hash berbeda dengan h semula. Ini berarti pesan tidak asli lagi.
b. Apabila pesan M tidak berasal dari orang yang sebenarnya, maka h yang dihasilkan dari Persamaan 3 berbeda dengan
h’ yang dihasilkan pada proses verifikasi hal ini karena kunci publik yang digunakan oleh penerima pesan
tidak berkoresponden dengan kunci pribadi pengirim. c. Bila h =
h’, ini berarti pesan yang diterima adalah pesan yang asli dan orang yang mengirim adalah orang yang sebenarnya [10].
Secure Hash Algorithm SHA
SHA adalah fungsi hash satu arah yang didesain oleh National Security Agency NSA dan dipublikasikan oleh National Institute of Standards and
Technology NIST sebagai Federal Information Processing Standard FIPS pada tahun 1993 dan disebut sebagai SHA-0, dua tahun kemudian dipublikasikan
SHA-1 generasi selanjutnya yang merupakan perbaikan dari algoritma SHA-0. Pada tahun 2002 dipublikasikan empat variasi lainnya, yaitu: SHA-224, SHA-256,
SHA-384, dan SHA-512, keempatnya disebut sebagai SHA-2.
8 SHA dinyatakan aman karena secara komputasi tidak dapat ditemukan isi
pesan dari message digest yang dihasilkan, dan tidak dapat dihasilkan dua pesan yang berbeda menghasilkan message digest yang sama. Setiap perubahan yang
terjadi pada pesan akan menghasilkan message digest yang berbeda [11].
Algoritma SHA memiliki perbedaan pada ukuran tiap blok, word dari data yang digunakan pada saat proses hashing, panjang pesan yang dapat diproses,
dan ukuran dari message digest yang dihasilkan berbeda-beda sesuai dengan algoritma yang dipakai ditunjukkan pada Tabel 1.
Tabel 1 Perbedaan Tiap Variasi Algoritma SHA [11] Algoritma
Panjang Pesan bit
Ukuran Blok dalam bit
Ukuran Word dalam
bit Ukuran
Message Digest bit
Security bit
SHA-1 2
64
512 32
160 80
SHA-256 2
64
512 32
256 128
SHA-384 2
128
1024 64
384 192
SHA-512 2
128
1024 64
512 256
SHA-384 dan SHA-512 memakai 80 konstanta 64 bit yang sama, yang ditampung pada variabel K
{512}
, K
1 {512}
, ..., K
79 {512}
. Konstanta dihasilkan dari proses fractional parts dari cube roots pada 80 bilangan prima pertama. Dalam
hexadesimal nilai konstanta tersebut dapat dilihat pada Tabel 2 [11].
Tabel 2 Nilai Konstanta pada Algoritma SHA-384 dan SHA-512 [11] 428a2f98d728ae22
7137449123ef65cd b5c0fbcfec4d3b2f
e9b5dba58189dbbc 3956c25bf348b538
59f111f1b605d019 923f82a4af194f9b
ab1c5ed5da6d8118 d807aa98a3030242
12835b0145706fbe 243185be4ee4b28c
550c7dc3d5ffb4e2 72be5d74f27b896f
80deb1fe3b1696b1 9bdc06a725c71235
c19bf174cf692694 e49b69c19ef14ad2
efbe4786384f25e3 0fc19dc68b8cd5b5
240ca1cc77ac9c65 2de92c6f592b0275
4a7484aa6ea6e483 5cb0a9dcbd41fbd4
76f988da831153b5 983e5152ee66dfab
a831c66d2db43210 b00327c898fb213f
bf597fc7beef0ee4 c6e00bf33da88fc2
d5a79147930aa725 06ca6351e003826f
142929670a0e6e70 27b70a8546d22ffc
2e1b21385c26c926 4d2c6dfc5ac42aed
53380d139d95b3df 650a73548baf63de
766a0abb3c77b2a8 81c2c92e47edaee6
92722c851482353b a2bfe8a14cf10364
a81a664bbc423001 c24b8b70d0f89791
c76c51a30654be30 d192e819d6ef5218
d69906245565a910 f40e35855771202a
106aa07032bbd1b8 19a4c116b8d2d0c8
1e376c085141ab53 2748774cdf8eeb99
34b0bcb5e19b48a8 391c0cb3c5c95a63
4ed8aa4ae3418acb 5b9cca4f7763e373
682e6ff3d6b2b8a3 748f82ee5defb2fc
78a5636f43172f60 84c87814a1f0ab72
8cc702081a6439ec 90befffa23631e28
a4506cebde82bde9 bef9a3f7b2c67915
c67178f2e372532b ca273eceea26619c
d186b8c721c0c207 eada7dd6cde0eb1e
f57d4f7fee6ed178 06f067aa72176fba
0a637dc5a2c898a6 113f9804bef90dae
1b710b35131c471b 28db77f523047d84
32caab7b40c72493 3c9ebe0a15c9bebc
431d67c49c100d4c 4cc5d4becb3e42b6
597f299cfc657e2a 5fcb6fab3ad6faec
6c44198c4a475817
Algoritma SHA terdiri dari dua tahap yaitu: preprocessing dan proses hash. Preprocessing terdiri dari padding pesan, membagi pesan ke dalam m-bit blok
dan menginisialisasi nilai awal dari message digest sebelum dilakukan hash. Proses hash menghasilkan message schedule dari message yang telah di-padding
dan menggunakan jadwal tersebut bersama fungsi, konstanta dan operasi secara
9 berulang untuk menghasilkan nilai hash. Nilai hash yang terakhir yang dihasilkan
dari komputasi akan menjadi message digest [12].
Algoritma RSA
RSA adalah algoritma public key encryption yang pertama kali dipublikasikan tahun 1977 oleh Ron Rivest, Adi Shamir, dan Leonard Adleman di
MIT Massachusetts Institute of Technology. Algoritma RSA melibatkan dua buah kunci dalam melakukan enkripsi yaitu public key dan private key. Public
key dapat disebarluaskan ke berbagai pihak untuk melakukan enkripsi ataupun dekripsi. Pesan yang sudah terenkripsi dengan public key hanya dapat didekripsi
dengan menggunakan private key [1].
Pembangkitan Kunci Pada Algoritma RSA
Langkah-langkah pembangkitan kunci pada RSA [13] adalah: 1. Pilih dua buah bilangan prima sembarang, p dan q. Untuk memperoleh
tingkat keamanan yang tinggi pilih p dan q yang berukuran besar, misalnya 1024 bit.
2. Hitung n = p.q sebaiknya p ≠ q, sebab jika p = q maka n = p
2
sehingga p dapat diperoleh dengan menarik akar pangkat dua dari n dimana n akan
digunakan sebagai nilai untuk melakukan modulus pada public dan private key.
3. Hitung: φn = p-1q-1
4 4. Pilih bilangan integer e sehi
ngga 1 e φ n, dan e adalah bilangan prima, dimana e akan digunakan sebagai private key exponent.
5. Cari nilai d sehingga memenuhi: d ≡ e
-1
mod φ n, atau 5
ed ≡ 1 mod φ n, atau 6
ed mod φ n = 1 7
Private Key terdiri dari n sebagai modulus dan e sebagai eksponen, sedangkan public key terdiri dari n sebagai modulus dan d sebagai eksponen
yang harus dirahasiakan. Nilai eksponen kunci public untuk RSA 1024 minimal 65537 untuk menjaga keamanannya. Hubungan antara pesan dapat
dituliskan:
M
ed
= M mod n 8
Jadi kebutuhan dari algoritma RSA sebelum proses adalah: - p, q, dua bilangan prima yang berbeda
- n = pq -
e, dimana FPB φ n ,e = 1; 1 e φ n -
d ≡ e
-1
mod φ n
Contoh Proses
Jika seorang user A ingin mengirimkan pesan kepada user B, maka pertama kali yang harus dilakukan user A adalah mengirimkan public key
miliknya kepada user B. Setelah itu user B akan melakukan enkripsi pesan yang akan dikirimkan dengan menggunakan public key user B. Lalu user B melakukan
enkripsi dengan cara C = M
e
mod n, C adalah ciphertext yang dikirimkan dan M adalah message atau pesan. Setelah itu user A akan menerima pesan C dan
10 melakukan dekripsi dengan cara M = C
d
mod n. Perlu diperhatikan bahwa panjang pesan M harus lebih kecil dari n.
Contoh: - Pilih dua bilangan prima yang berlainan
p = 61 dan q = 53 - Hitung n = pq
N = 61 53 = 3233 - Hitung totient
φ n = p-1q-1 φ n = 61 – 1 53 – 1 = 3120
- Tentukan e 1 yang coprime dengan 3120 e = 17
- Pilih d sehingga memenuhi ed ≡ 1 mod φ n
d = 2753 17 2753 = 46801 = 1 + 15 3120
- Jika m = 123, maka proses enkripsi adalah : C = 123
17
mod 3233 = 855 - Untuk proses dekripsi adalah :
M = 855
2753
mod 3233 = 123 Misalkan pesan plaintext yang akan dikirim adalah: m = HARI INI atau
dalam sistem desimal pengkodean ASCII adalah 7265827332737873. Cara penyandiannya adalah:
- Pecah m menjadi blok yang lebih kecil, misalnya m dipecah menjadi enam blok yang berukuran 3 digit :
m
1
= 726 m
4
= 273 m
2
= 582 m
5
= 787 m
3
= 733 m
6
= 003 Nilai-nilai m
ini masih terletak di dalam selang [0, 3337 – 1] agar
transformasi menjadi satu kesatu. - Jika kunci publik adalah e = 79 dan n = 3337, maka blok-blok plaintext
dapat dienkripsikan menjadi: c
1
= 726
79
mod 3337 = 215; c
2
= 582
79
mod 3337 = 776; c
3
= 733
79
mod 3337 = 1743; c
4
= 273
79
mod 3337 = 933; c
5
= 787
79
mod 3337 = 1731; c
6
= 003
79
mod 3337 = 158 Jadi ciphertext yang dihasilkan adalah:
c = 215 776 1743 933 1731 158 - Dekripsi dilakukan dengan menggunakan kunci pribadi d = 1019
Blok-blok ciphertext didekripsikan menjadi: m
1
= 215
1019
mod 3337 = 726 m
2
= 776
1019
mod 3337 = 582 m
3
= 1743
1019
mod 3337 = 733 m
4
= 933
1019
mod 3337 = 273 m
5
= 1731
1019
mod 3337 = 787 m
6
= 158
1019
mod 3337 = 003 - Akhirnya diperoleh kembali plaintext semula
m = 7265827332737873, yang dalam sistem pengkodean ASCII adalah m = HARI INI
11
3. Metodologi Penelitian