Analisis Perbandingan Digital Signature Algorithm dan Gost Digital Signature Algorithm Pada Tanda Tangan Digital File .Txt

6

BAB 2

LANDASAN TEORI

2.1 Kriptografi
Secara etimologi kata kriptografi (cryptography) berasal dari bahasa Yunani, yaitu
kryptos yang artinya tersembunyi dan graphein yang artinya tulisan. Definisi kriptografi

adalah ilmu yang mempelajari metode untuk mengirimkan pesan secara rahasia (dalam
bentuk dienkripsi atau disamarkan), sehingga hanya penerima pesan yang dapat
membaca dan memahami pesan tersebut (Mollin, 2007). Tujuan kriptografi meliputi
empat aspek sebagai berikut (Kurniawan, 2004):
1) Kerahasiaan (confidentiality)
Kerahasiaan merupakan tujuan kriptografi untuk menjaga agar informasi atau
pesan yang ada tidak dapat dibaca oleh pihak-pihak yang tidak berhak.
2) Integritas data (data integrity)
Integritas data merupakan tujuan kriptografi untuk menjamin bahwa pesan masih
asli atau belum pernah dimanipulasi oleh pihak yang tidak berhak selama proses
pengiriman.

3) Otentikasi (authentication)
Otentikasi merupakan tujuan kriptografi yang berhubungan dengan identifikasi.
Dalam hal ini akan diidentifikasi tentang kebenaran pihak-pihak yang
berkomunikasi. Hal ini berkaitan erat dengan keaslian sumber pesan.
4) Anti penyangkalan (non-repudiation)
Anti penyangkalan merupakan tujuan kriptografi untuk mencegah pihak yang
mengirim pesan melakukan penyangkalan terhadap pesan yang dikirimnya.
Tiga masalah yang terakhir dapat diselesaikan dengan teknik otentikasi pesan
(message authentication) atau disingkat otentikasi saja. Dua alternatif yang digunakan
untuk otentikasi dengan cara:

Universitas Sumatera Utara

7

1) Menandatangani pesan (message signature)
Pesan ditandangani oleh pengirim. Pemberian tanda tangan adalah secara digital.
Pesan yang sudah ditanda-tangani menunjukkan bahwa pesan tersebut otentik (baik
otentik isi maupun otentik pengirim).
2) Menggunakan MAC (Message Authentication Code)

MAC adalah kode yang ditambahkan (append) pada pesan. Kode tersebut

dibangkitkan oleh suatu algoritma, dan bergantung pada pesan dan kunci rahasia.

2.2 Tanda Tangan Digital (Digital Signature)
Tanda tangan digital (digital signature) adalah suatu mekanisme untuk menggantikan
tanda tangan secara manual pada dokumen kertas (Ahmaddul, 2013). Yang dimaksud
dengan tanda tanda digital bukanlah tanda tangan yang di-digitisasi 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) (Munir, 2004).
Kegunaan tanda tangan adalah menyatakan pengesahan (data integrity) atas apa
yang tercantum dalam dokumen tersebut dan menyatakan pertanggungjawaban
penandatanganan (data original) atas apa yang tertulis dalam dokumen tersebut serta
untuk mencegah suatu saat penandatangan mengingkari apa yang tertulis didokumen
bertanda tangan (non-repudiation). Adapun aspek keamanan dan kerahasiaan
(confidentiality) bukan disediakan dengan sistem tanda tangan digital, tetapi tanda
tangan yang telah dienkripsikan terlebih dahulu menghasilkan sebuah public key dengan
algoritma tertentu. Jika digital signature yang telah dienkripsi menggunakan kunci

publik y, maka pada proses mendekripsikan kembali dengan kunci pribadi y bukan
dengan kunci pribadi x (Ahmaddul, 2013).
Teknik yang digunakan untuk membentuk tanda tangan digital adalah dengan
fungsi hash dan melibatkan algoritma kriptografi kunci publik. Mula-mula pesan M
ditransformasikan oleh fungsi hash H menjadi pesan ringkas h. Pesan ringkas tersebut
dienkripsi dengan kunci privat (PK). Pengirim pesan: S = ESK(h). Hasil enkripsi (S)
inilah yang disebut tanda tangan digital. Tanda tangan digital dapat ditambahkan pada
pesan atau terpisah dari pesan dan dikirim secara bersamaan. Ditempat penerima, tanda

Universitas Sumatera Utara

8

tangan diverifikasi untuk dibuktikan keotentikannya dengan cara berikut (Ahmaddul,
2013):
1) Tanda tangan digital S didekripsi dengan menggunakan kunci publik (PK)
pengirim pesan, menghasilkan pesan-ringkas semula h, sebagai berikut: h =
DPK(S).
2) Pengirim kemudian mengubah pesan M menjadi pesan ringkas h’ dengan
menggunakan fungsi hash yang sama dengan fungsi hash yang digunakan oleh

pengirim.
3) Jika h’ = h, berarti tanda tangan yang diterima otentik berasal dari pengirim yang
benar.

2.2.1 Cara kerja tanda tangan digital
Berikut cara kerja tanda tangan digital:

Gambar 2.1. Sistem kerja tanda tangan digital
Tanda tangan digital dibuat dengan menggunakan teknik kriptografi, suatu
cabang dari matematika terapan yang menangani tentang pengubahan suatu informasi
menjadi bentuk lain yang tidak dapat dimengerti dan dikembalikan seperti semula.

Universitas Sumatera Utara

9

Tanda tangan digital menggunakan “public key cryptography” (kriptografi kunci
publik), dimana algoritmanya menggunakan dua buah kunci, yang pertama adalah kunci
untuk membentuk tanda tangan digital atau mengubah data ke bentuk lain yang tidak
dapat dimengerti, dan yang kedua digunakan untuk verifikasi tanda tangan digital

ataupun mengembalikan pesan ke bentuk semula. Konsep ini juga dikenal sebagai
“assymmetric cryptosystem” (sistem kriptografi non simetris).
Sistem kriptografi ini menggunakan kunci privat, yang hanya diketahui oleh
penandatangan dan digunakan untuk membentuk tanda tangan digital, serta kunci
publik, yang digunakan untuk verifikasi tanda tangan digital. Jika beberapa orang ingin
memverifikasi suatu tanda tangan digital yang dikeluarkan oleh seseorang, maka kunci
publik tersebut harus disebarkan ke orang-orang tersebut. Kunci privat dan kunci publik
ini sesungguhnya secara matematis ‘berhubungan’ (memenuhi persamaan-persamaan
dan kaidah-kaidah tertentu). Walaupun demikian, kunci privat tidak dapat ditemukan
menggunakan informasi yang didapat dari kunci publik.
Proses lain yang tak kalah penting adalah “fungsi hash”, digunakan untuk
membentuk sekaligus memverifikasi tanda tangan digital. Fungsi hash adalah sebuah
algoritma yang membentuk representasi digital atau semacam “sidik jari” dalam bentuk
“nilai hash” (hash value) dan biasanya jauh lebih kecil dari dokumen aslinya dan unik
hanya berlaku untuk dokumen tersebut. Perubahan sekecil apapun pada suatu dokumen
akan mengakibatkan perubahan pada “nilai hash” yang berkorelasi dengan dokumen
tersebut. Fungsi hash yang demikian disebut juga “fungsi hash satu arah”, karena suatu
nilai hash tidak dapat digunakan untuk membentuk kembali dokumen aslinya.
Oleh karenanya, fungsi hash dapat digunakan untuk membentuk tanda tangan
digital. Fungsi hash ini akan menghasilkan “sidik jari” dari suatu dokumen (sehingga


unik hanya berlaku untuk dokumen tersebut) yang ukurannya jauh lebih kecil daripada
dokumen aslinya serta dapat mendeteksi apabila dokumen tersebut telah diubah dari
bentuk aslinya.
Penggunaan tanda tangan digital memerlukan dua proses, yaitu dari pihak
penandatangan serta dari pihak penerima. Secara rinci kedua proses tersebut dapat
dijelaskan sebagai berikut:
1) Pembentukan tanda tangan digital menggunakan nilai hash yang dihasilkan dari
dokumen serta kunci privat yang telah didefinisikan sebelumnya. Untuk menjamin

Universitas Sumatera Utara

10

keamanan nilai hash maka seharusnya terdapat kemungkinan yang sangat kecil
bahwa tanda tangan digital yang sama dapat dihasilkan dari dua dokumen serta
kunci privat yang berbeda.
2) Verifikasi tanda tangan digital adalah proses pengecekan tanda tangan digital
dengan mereferensikan ke dokumen asli dan kunci publik yang telah diberikan,
dengan cara demikian dapat ditentukan apakah tanda tangan digital dibuat untuk

dokumen yang sama menggunakan kunci privat yang berkorespondensi dengan
kunci publik.
Untuk menandatangani sebuah dokumen atau informasi lain, penandatangan
pertama-tama membatasi secara tepat bagian-bagian mana yang akan ditandatangani.
Informasi yang dibatasi tersebut dinamakan “message”. Kemudian aplikasi tanda
tangan digital akan membentuk nilai hash menjadi tanda tangan digital menggunakan
kunci privat. Tanda tangan digital yang terbentuk adalah unik baik untuk message dan
juga kunci privat.
Umumnya, sebuah tanda tangan digital disertakan pada dokumennya dan juga
disimpan dengan dokumen tersebut juga. Bagaimanapun, tanda tangan digital juga
dapat dikirim maupun disimpan sebagai dokumen terpisah, sepanjang masih dapat
diasosiasikan dengan dokumennya. Karena tanda tangan digital bersifat unik pada
dokumennya, maka pemisahan tanda tangan digital seperti itu merupakan hal yang tidak
perlu dilakukan.
Proses pembentukan dan verifikasi tanda tangan digital memenuhi unsur-unsur
paling penting yang diharapkan dalam suatu tujuan legal, yaitu:
1) Otentikasi penandatangan: Jika pasangan kunci publik dan kunci privat berasosiasi
dengan pemilik sah yang telah didefinisikan, maka tanda tangan digital akan dapat
menghubungkan/mengasosiasikan dokumen dengan penandatangan. Tanda tangan
digital tidak dapat dipalsukan, kecuali penandatangan kehilangan kontrol dari


kunci privat miliknya.
2) Otentikasi dokumen: Tanda tangan digital juga mengidentikkan dokumen yang
ditandatangani dengan tingkat kepastian dan ketepatan yang jauh lebih tinggi
daripada tanda tangan di atas kertas.

Universitas Sumatera Utara

11

3) Penegasan: Membuat tanda tangan digital memerlukan penggunaan kunci privat
dari penandatangan. Tindakan ini dapat menegaskan bahwa penandatangan setuju
dan bertanggung jawab terhadap isi dokumen.
4) Efisiensi: Proses pembentukan dan verifikasi tanda tangan digital menyediakan
tingkat kepastian yang tinggi bahwa tanda tangan yang ada merupakan tanda tangan
sah dan asli dari pemilik kunci privat. Dengan tanda tangan digital, tidak perlu ada
verifikasi dengan melihat secara teliti (membandingkan) antara tanda tangan yang
terdapat di dokumen dengan contoh tanda tangan aslinya seperti yang biasa
dilakukan dalam pengecekan tanda tangan secara manual.


2.3 Bilangan Prima
Bilangan prima adalah suatu bilangan bulat positif yang hanya habis dibagi bilangan 1
(satu) dan bilangan itu sendiri. Misalnya angka 7, karena 7 habis dibagi 1 tetapi 7 tidak
habis dibagi bilangan bulat positif yang lain, dapat disimpulkan bahwa 7 merupakan
bilangan prima. Semua bilangan prima merupakan bilangan ganjil kecuali angka 2. 2
adalah satu-satunya bilangan prima yang genap, karena bilangan genap selain 2 pasti
habis dibagi 2 yang menyebabkan bilangan tersebut tidak memenuhi syarat dari definisi
bilangan prima.
Semua bilangan bulat lebih besar dari satu yang bukan merupakan bilangan
prima disebut bilangan komposit. Dapat dikatakan, bilangan komposit merupakan
bilangan yang mempunyai lebih dari 2 faktor bilangan bulat positif. Misalnya angka 9.
Karena angka 9 habis dibagi 1, 3, dan 9, dapat disimpulkan bahwa 9 bukan merupakan
bilangan prima tetapi bilangan komposit.
Bilangan prima secara matematis jumlahnya tidak terhingga. Hal ini telah
dibuktikan oleh Euclid (300 SM) dalam buku IX Elements. Jadi, sebanyak apapun kita
menghitung, kita pasti akan menemukan bilangan prima walaupun makin besar
bilangan prima maka jarak suksesornya akan makin besar juga, sehingga bilangan prima
menjadi semakin jarang pada bilangan besar.

2.3.1 Algoritma sieve of eratosthenes

Pencarian bilangan prima hingga suatu batas maksimum tertentu bisa dilakukan
menggunakan algoritma Sieve of Eratosthenes. Algoritma yang ditemukan oleh seorang

Universitas Sumatera Utara

12

matematikawan bernama Eratosthenes ini, sesuai dengan namanya, melakukan
penyaringan terhadap suatu kumpulan bilangan menjadi kumpulan bilangan prima
dengan mengeliminasi bilangan yang bukan bilangan prima. Lebih jelasnya, metode
Sieve of Eratosthenes digambarkan pada langkah-langkah berikut:

1) Terdapat sebuah larik bilangan dari 2 sampai N.
2) Bilangan terkecil yang tidak dicoret adalah bilangan prima.
3) Coret bilangan ini dan semua kelipatan bilangan ini dalam larik.
4) Ulangi langkah 2 dan 3 sampai semua bilangan dalam larik telah dicoret.
Kita dapat menerapkan teorema tentang bilangan komposit yang telah disebutkan
sebelumnya ke dalam metode ini untuk membuatnya lebih mangkus, sehingga langkahlangkahnya menjadi:
1) Terdapat sebuah larik bilangan dari 2 sampai N.
2) Bilangan terkecil yang tidak dicoret adalah bilangan prima.

3) Coret semua kelipatan bilangan ini dalam larik.
4) Ulangi langkah 2 dan 3 sampai mencapai √� (pembulatan).

5) Semua bilangan yang belum dicoret adalah bilangan prima.

2.4 Greatest Common Divisor (GCD)
Faktor persekutuan terbesar (Greatest Common Divisor ) dari dua bilangan bulat a dan
b, dimana keduanya tidak sama dengan nol, adalah bilangan bulat terbesar yang

membagi habis a dan b dinotasikan dengan GCD (a , b). Dua buah bilangan a dan b
disebut relatif prima apabila GCD (a , b) = 1 (Kaspar, 2006).

2.5 Logaritma Diskrit
Logaritma diskrit adalah fungsi kebalikan dari persamaan eksponensial pada aritmatika
modular yang dinyatakan pada persamaan:
u = gx mod n ………………………………..(1)
Bilangan bulat x dikatakan sebagai logaritma diskrit dari u dengan basis g mod n atau
lebih lengkapnya dapat dinyatakan:
x = logg (u) mod n……………………………(2)

Universitas Sumatera Utara

13

Banyak skema kriptografi yang meletakkan dasar keamanannya pada kesulitan
alami di dalam komputasi logaritma diskrit, diantaranya adalah skema kriptografi kunci
publik ElGamal, Digital Signature Algorithm (DSA) dan skema kriptografi Cramer Shoup (Stallings. 2003).

2.6 Fungsi Hash
Fungsi hash merupakan fungsi yang menerima masukan string yang panjangnya
sembarang kemudian mentransformasikannya menjadi string

keluaran yang

panjangnya tetap (fixed). Umumnya berukuran jauh lebih kecil daripada ukuran string
semula. Fungsi hash (dilambangkan dengan h(k)) bertugas untuk mengubah k (key)
menjadi suatu nilai dalam interval [0....X], dimana "X" adalah jumlah maksimum dari
record-record yang dapat ditampung dalam tabel. Jumlah maksimum ini bergantung

pada ruang memori yang tersedia. Fungsi hash yang ideal adalah mudah dihitung dan
bersifat acak, agar dapat menyebarkan semua key. Dengan key yang tersebar, berarti
data dapat terdistribusi secara seragam tabrakan dapat dicegah. Sehingga kompleksitas
waktu model hash dapat mencapai Θ(1), dimana kompleksitas tersebut tidak ditemukan
pada struktur model lain.
Ada dua macam fungsi hash. Pertama adalah fungsi hash tanpa kunci, fungsi
hash semacam ini dapat dihitung oleh siapa saja. Kedua adalah fungsi hash dengan

kunci, hanya orang yang memiliki kunci saja yang dapat menghitung message digest
yang dihasilkan (Menezes et al. 1996).

2.6.1 Fungsi hash SHA-1
SHA-1 merupakan algoritma hash standar yang digunakan pada DSA. Algoritma ini
dirancang oleh NIST pada tahun 1993. Algoritma SHA-1 mampu menerima input pesan
maksimal 264 bit dan menghasilkan message digest dengan panjang 160 bit. SHA-1
aman karena didesain untuk tidak memungkinkan mendapatkan pesan yang
berhubungan dengan message digest, atau untuk menemukan dua pesan yang berbeda
yang menghasilkan message digest yang sama (Menezes et. al 1996).
Proses pembentukan message digest dengan menggunakan algoritma SHA-1
terdiri dari lima langkah (Stallings 2003):
1. Message padding

Universitas Sumatera Utara

14

Input pesan pada algoritma SHA-1 dibagi menjadi blok-blok yang masing-

masing panjangnya adalah 512 bit. Akibat pembagian ini maka jumlah bit pada
blok terakhir akan lebih kecil atau sama dengan 512 bit. Selanjutnya blok
terakhir ini akan mengalami message padding. Proses pembentukan message
padding:

1) Input pesan yang masuk dalam bentuk American Standard Code for
Information Interchange (ASCII) diubah kedalam rangkaian bit, dan

kemudian dihitung panjang rangkaian bit (K).
2) Selanjutnya rangkaian bit ini dibagi menjadi blok-blok dengan panjang
masing-masing 512 bit. Blok terakhir panjangnya akan lebih kecil atau
sama dengan 512 bit.
3) Pada blok terakhir pesan, dilakukan penambahan bit-bit isian (padding).
Bit yang digunakan sebagai bit isian adalah bit “1” diikuti sejumlah bit
“0” sehingga:
-

Jika panjang blok terakhir pesan lebih kecil dari 448 bit, maka
tambahkan bit “1” pada posisi bit paling akhir, diikuti dengan
beberapa bit “0” sehingga total panjang bit setelah proses tersebut
adalah 448 bit.

-

Jika panjang blok terakhir pesan lebih besar atau sama dengan 448
bit, maka tambahkan bit “1” pada posisi bit paling akhir diikuti
dengan beberapa bit “0” sehingga total panjang bit setelah proses
tersebut adalah 512 bit. Kemudian buat 448 bit baru yang isinya bit
“0”.

-

Jika panjang blok terakhir pesan sama dengan 512 bit, maka buat
blok baru untuk menampung proses message padding. Bit pertama
dari blok baru diisi bit “1”, sedangkan bit-bit berikutnya diisi dengan
bit “0” sampai dengan panjang bit 448.

Sebagai contoh misalkan isi pesan adalah “abc”, maka ubah pesan tersebut ke
dalam kode ASCII-nya, yaitu: a=97, b=98, c=99. Kemudian ubah representasi
desimal dari kode ASCII tersebut ke dalam representasi binernya, yaitu:
01100001 | 01100010 | 01100011, panjang pesan asli ini (K) adalah 24 bit.
Karena panjang bit pesan asli kurang dari 448 bit, maka dilakukan proses

Universitas Sumatera Utara

15

padding dengan menambahkan “1” pada posisi bit paling akhir, dan tambahkan

“0” sehingga panjang total bit setelah proses padding ini adalah 448 bit.
2. Penambahan panjang bit
Setelah proses message padding, jumlah bit blok terakhir adalah 448 bit.
Representasikan K ke dalam bilangan biner untuk memperoleh 64 bit terakhir,
agar total panjang blok terakhir 512 bit. Urutan bit paling kanan dijadikan low
order . Jika K > 264 maka hanya low order dari 64 bit saja yang akan digunakan.

Misalkan panjang pesan asli (K) = 24 bit dan direpresentasikan ke dalam
bilangan biner 16 bit adalah 00000000 | 00011000. Nilai ini dijadikan 64 bit
sehingga: 00000000 | 00000000 | 00000000 | 00000000 | 00000000 | 00000000
| 00000000 | 00011000
Nilai di atas ditambahkan pada langkah (1), sehingga total panjang bit adalah
512 bit. Berdasarkan contoh pada langkah 1 dan 2, didapatkan banyaknya blok
pada pesan adalah satu.
3. Inisialisasi buffer
Untuk menyimpan nilai inisialisasi awal digunakan buffer H0, H1, H2, H3, H4,
sedangkan untuk menyimpan nilai proses sementara digunakan buffer A, B, C,
D, E. Nilai H0, H1, H2, H3, H4 sebagai inisialisasi awal adalah:
H0 = 67 45 23 01
H1 = EF CD AB 89
H2 = 98 BA DC FE
H3 = 10 32 54 76
H4 = C3 D2 E1 F0
Nilai inisialisasi awal untuk H0, H1, H2, H3, H4 ini merupakan standar untuk
implementasi algoritma SHA-1.
4. Memproses tiap blok (512) bit dari pesan
Langkah ini terdiri dari empat round, masing-masing round terdiri dari 20
operasi sehingga untuk setiap satu blok akan dilakukan operasi sebanyak 80 kali.
Berdasarkan contoh sebelumnya (pesan terdiri dari 1 blok), maka operasi
dibawah ini akan dilakukan sebanyak 80 kali.

Universitas Sumatera Utara

16

-

Blok pesan ditransformasi dari 16 subblok 32 bit (M0 sampai M15)
menjadi 80 subblok 32 bit (W0 sampai W79) menggunakan langkah
berikut:
Wt = Mt untuk t = 0-15
Wt = ROTL1 (Wt-3 XOR Wt-8 XOR Wt-14 XOR Wt-16) untuk t=16
sampai t=79, dengan ROTLn (x) adalah operasi geser kiri putar
melingkar dari x sebanyak n posisi.

-

Variable kerja untuk menyimpan nilai hash ke i-l:
A = H0(i-l), B = H1(i-l), C = H2(i-l), D = H3(i-l), E = H4 E = H4(i-l)

-

Untuk setiap round didefenisikan fungsi ft:
ft(B,C,D) = (B AND C) XOR ((NOT B) AND D), untuk operasi
t=0-19
ft(B,C,D) = B XOR C XOR D, untuk operasi t=20-39
ft(B,C,D) = (B AND C) XOR (B AND D) XOR (C AND D), untuk
operasi t=40-59
ft(B,C,D) = B XOR C XOR D, untuk operasi t=60-79

-

Diperlukan deret konstanta K(0), K(1),…K(79)
Kt = 5A827999, untuk operasi t = 0-19
Kt = 6ED9EBA1, untuk operasi t = 20-39
Kt = 8F1BBCDC, untuk operasi t = 40-59
Kt = CA62C1D6, untuk operasi t = 60-79
Nilai konstanta untuk K(0), K(1),…,K(79) merupakan standar untuk
implementasi algoritma SHA-1

-

Untuk setiap satu langkah operasi pada SHA-1, t=0 sampai t=79
dilakukan:
TEMP = ROTL5 (A) + ft (A, B, C) + E + Wt + Kt
E=D; D=C; C=ROTL30(B); B=A; A=TEMP;

-

Hasil akhir adalah: H0 = A + H0(i-l), H1 = B + H1(i-l), H2 = C + H2(i-l),
H3 = C + H3(i-l), H4 = D + H4(i-l)

5. Output
Setelah semua blok 512 bit dari pesan selesai diproses maka akan dihasilkan
output. Blok terakhir menghasilkan message digest dari pesan yang dimasukkan

Universitas Sumatera Utara

17

yaitu buffer H0, H1, H2, H3, H4. Panjang message digest yang dihasilkan adalah
160 bit dan masing-masing buffer terdiri dari delapan digit heksadesimal.

2.6.2 Fungsi hash SHA-2
Algoritma SHA-2 merupakan pengembangan dari algoritma SHA-1 yang memuat
banyak perubahan. Algoritma ini didesain oleh National Security Agency (NSA) of
United States dan dipublikasikan pada tahun 2001 oleh NIST sebagai standar bagi

pemrosesan informasi federal bagi Amerika Serikat atau yang biasa disebut Federal
Information Processing Standard (FIPS).

Algoritma SHA-2 ini terdiri dari beberapa algoritma berdasarkan panjang bit
yang digunakan/dihasilkan sebagai nilainya yaitu SHA-224, SHA-256, SHA-384,
SHA-512. Algoritma SHA-2 ini menggunakan beberapa operasi dasar dalam teknik
kriptografi, yaitu operasi AND, OR, XOR, SHIFT (right), dan ROTATE (right). SHA-2
ini mengacu pada SHA-256.
SHA-256 adalah salah satu algoritma fungsi hash yang relatif masih baru.
Algoritma ini dirancang oleh The National Institute of Standards and Technology
(NIST) pada tahun 2002. SHA-256 menghasilkan message digest dengan panjang 256
bit.

2.7 Kompleksitas Algoritma
Satu jenis masalah dapat mempunyai banyak algoritma penyelesaian. Algoritma yang
digunakan tidak saja harus benar, namun juga harus efisien. Efisiensi suatu algoritma
dapat diukur dari kebutuhan ruang memori dan waktu eksekusi algoritma. Algoritma
yang efisien adalah algoritma yang meminimumkan kebutuhan ruang dan waktu.
Dengan menganalisis beberapa algoritma untuk satu jenis masalah, dapat diidentifikasi
satu algoritma yang paling efisien. Besaran yang digunakan untuk menjelaskan model
pengukuran ruang dan waktu ini adalah kompleksitas algoritma.
Algoritma memiliki kompleksitas, dimana ukuran kompleksitas merupakan
acuan utama, untuk mengetahui kecepatan dari algoritma tersebut. Kompleksitas dari
suatu algoritma merupakan ukuran seberapa banyak komputasi yang dibutuhkan
algoritma tersebut untuk menyelesaikan masalah. Secara informal, algoritma yang
dapat menyelesaikan satu jenis permasalahan dalam waktu singkat memiliki

Universitas Sumatera Utara

18

kompleksitas yang rendah, sementara algoritma yang membutuhkan waktu lama untuk
menyelesaikan masalahnya mempunyai kompleksitas yang tinggi. Kompleksitas
algoritma terdiri dari dua macam yaitu kompleksitas ruang dan kompleksitas waktu.
Dalam penelitian ini yang dibahas hanya kompleksitas waktu.
Kompleksitas waktu dinyatakan oleh T(n), diukur dari jumlah tahapan
komputasi yang dibutuhkan untuk menjalankan algoritma sebagai fungsi dari ukuran
masukan n, dimana ukuran masukan n merupakan jumlah data yang diproses oleh
sebuah algoritma. Dengan menggunakan kompleksitas waktu dapat ditentukan laju
peningkatan waktu yang diperlukan algoritma, seiring dengan meningkatnya ukuran
masukan n. Karena kompleksitas waktu menjadi hal yang sangat penting, maka analisis
kompleksitas algoritma tanda tangan digital akan dilakukan terhadap running time
algoritma tersebut.

2.7.1 Kompleksitas waktu algoritma
Untuk menentukan kompleksitas waktu suatu algoritma, diperlukan ukuran masukan n
serta running time algoritma tersebut. Pada umumnya, running time algoritma
meningkat seiring dengan bertambahnya ukuran n. Sehingga, running time suatu
algoritma dapat dinyatakan sebagai fungsi dari n. Ukuran masukan n untuk suatu
algoritma bergantung pada masalah yang diselesaikan oleh algoritma tersebut.
Running time algoritma pada masukan n tertentu merupakan jumlah operasi atau

langkah yang dieksekusi. Selanjutnya, jumlah waktu yang konstan diperlukan untuk
mengeksekusi setiap baris pseudocode (kode semu). Satu baris dapat memiliki jumlah
waktu yang berbeda dari baris lain. Namun asumsikan bahwa setiap pelaksanaan baris
ke-i membutuhkan waktu sebesar ci, dimana ci adalah konstanta.
Dalam menentukan running time suatu baris pada pseudocode (kode semu),
kalikan konstanta ci dengan jumlah waktu yang diperlukan untuk mengeksekusi baris
tersebut. Untuk kasus dimana terdapat perintah loop, while atau for dengan panjang n,
maka perintah tersebut dieksekusi dengan waktu n + 1. Sedangkan untuk baris berisi
komentar, dinyatakan sebagai baris yang tidak dieksekusi, sehingga jumlah waktu untuk
baris tersebut adalah nol.
Selanjutnya, running time dari algoritma adalah jumlah dari running time setiap
perintah yang dieksekusi. Sebuah perintah yang membutuhkan ci langkah n waktu untuk

Universitas Sumatera Utara

19

dieksekusi akan memiliki pengaruh besar ci n pada running time total (T(n)). Setelah
diperoleh bentuk fungsi T(n), dapat ditentukan bentuk dari algoritma tersebut dengan
menggunakan notasi asimptotik Ο. Dengan ditentukannya bentuk algoritma, maka
dapat diramalkan berapa besar peningkatan running time jika ukuran masukan n
ditingkatkan.
Berdasarkan waktu eksekusi program, T(n) dapat menentukan growth rate-nya,
yaitu laju pertumbuhan waktu terhadap variasi ukuran input. Sebagai contoh, analisis
suatu algoritma menghasilkan T(n) = an2 + bn + c, dengan a, b, c adalah suatu konstanta,
maka dapat dikatakan grow rate algoritma tersebut adalah n2 yang merupakan bagian
paling signifikan pada polinomial an2 + bn + c. Nilai-nilai konstanta a, b, c tergantung
pada jenis komputer dan platform bahasa pemrograman yang hanya dapat ditentukan
melalui percobaan eksekusi program (Kaspar, 2006).
Kompleksitas komputasi dari suatu algoritma memberikan gambaran umum
bagaimana perubahan T(n) terhadap n. Kompleksitas waktu ini tidak dipengaruhi oleh
faktor-faktor nonteknis implementasi seperti bahasa pemrograman ataupun sarana
perangkat lunak tertentu. Dalam platform uji yang seragam suatu algoritma dengan
growth rate yang rendah, misalkan log n, atau n log n, lebih cepat jika dibandingkan

dengan algoritma yang memiliki growth rate lebih besar, misalnya n2, n3, n! dan nn.

2.8 Notasi Asimptotik
Untuk nilai n cukup besar, bahkan tidak terbatas, dilakukan analisis efisiensi asimptotik
dari suatu algoritma untuk menentukan kompleksitas waktu yang sesuai atau disebut
juga kompleksitas waktu asimptotik. Notasi yang digunakan untuk menetukan
kompleksitas waktu asimptotik dengan melihat waktu tempuh (running time) algoritma
adalah notasi asimptotik (asymptotic notation). Notasi asimptotik didefenisikan sebagai
fungsi dengan domain himpunan bilangan asli N = {0, 1, 2, …} (Cormen et al, 2009 :
43).
Kompleksitas waktu asimptotik terdiri dari tiga macam. Pertama, keadaan
terbaik (best case) dinotasikan dengan Ω(g(n)) (Big-Omega), keadaan rata-rata
(average case) dilambangkan dengan notasi Θ(g(n)) (Big-Theta ) dan keadaaan terburuk
(worst case) dilambangkan dengan Ο(g(n)) (Big- Οh).

Universitas Sumatera Utara

20

2.8.1

Big-oh (Ο)

Notasi big-oh pertama kali diperkenalkan oleh seorang teoritis bilangan bernama Paul
Bachmann pada tahun 1894, didalam buku keduanya yang berjudul Analytische
Zahlentheorie (“analytic number teory”). Dalam teori kompleksitas komputasi, notasi

big-oh sering digunakan untuk menjelaskan bagaimana ukuran data masukan
mempengaruhi sebuah kegunaan algoritma dari sumber daya komputasi (biasanya
running time atau memori). Definisi pertama dalam pengukuran kompleksitas suatu

masalah adalah big-oh (Weiss dan Mark Allen, 1996: 161).

Gambar 2.2. Grafik fungsi big-oh
Untuk fungsi g(n), kita definisikan O(g(n)) sebagai big-oh dari n, sebagai himpunan:
O(g(n)) = {f(n) : ada konstanta positif c dan n0, sedemikian rupa untuk semua n ≥ n0,
sehingga 0 ≤ f(n) ≤ cg(n)}.
f(n) secara intuitif merupakan himpunan seluruh fungsi yang rate of growth-nya adalah
sama atau lebih kecil dari g(n).
g(n) adalah asymptotic upper bound untuk f(n).

2.8.2

Big-omega (Ω)

Defenisi kedua dalam pengukuran kompleksitas suatu masalah adalah big omega.
(Weiss dan Mark Allen, 1996 :161).

Universitas Sumatera Utara

21

Gambar 2.3. Grafik fungsi big-omega
Untuk fungsi g(n), kita definisikan Ω(g(n)) sebagai big-omega dari n, sebagai
himpunan:
Ω(g(n)) = {f(n) : ada konstanta positif c dan n0, sedemikian rupa untuk semua n ≥ n0,
sehingga 0 ≤ cg(n) ≤ f(n) }.
f(n) secara intuitif merupakan himpunan seluruh fungsi yang rate of growth-nya adalah
sama atau lebih tinggi dari g(n).
g(n) adalah asymptotic lower bound untuk f(n).

2.8.3

Big theta (Θ)

Definisi ketiga dalam pengukuran kompleksitas suatu masalah adalah big theta . (Weiss
dan Mark Allen, 1996 :161).

Universitas Sumatera Utara

22

Gambar 2.4. Grafik fungsi big-theta
Untuk fungsi g(n), kita definisikan Θ(g(n)) sebagai big-theta dari n, sebagai himpunan:
Θ(g(n)) = {f(n) : ada konstanta positif c1, c2 dan n0, sedemikian rupa untuk semua n ≥
n0, sehingga 0 ≤ c1g(n) ≤ f(n) ≤ c1g(n)}.

f(n) merupakan Θ(g(n)) pada nilai antara c1 sampe c2.
g(n) adalah asymptotically tight bound untuk f(n).
Secara intuitif merupakan himpunan seluruh fungsi yang rate of growth-nya adalah
sama dengan g(n).

2.9 Algoritma
Istilah algoritma pertama kali diperkenalkan oleh Abu Ja’far Muhammad ibn Musa AlKhuwarizmi dalam buku aljabarnya. Dalam buku tersebut algoritma disebut sebagai
suatu metode khusus yang digunakan untuk menyelesaikan suatu masalah. Dalam buku
Introduction to Algorithms, Cormen (2009) menyatakan bahwa algoritma merupakan

deretan langkah-langkah komputasi yang mentransformasikan data masukan (input)
menjadi data keluaran (output).
Pertimbangan dalam pemilihan algoritma yang harus diperhatikan adalah sebagai
berikut:
1) Algoritma harus benar. Artinya algoritma akan memberikan keluaran yang
dikehendaki dari sejumlah masukan yang diberikan. Tidak peduli sebagus

Universitas Sumatera Utara

23

apapun algoritma, apabila memberikan keluaran yang salah maka algoritma
tersebut tidak benar.
2) Kita harus mengetahui seberapa baik hasil yang dicapai oleh algoritma tersebut.
Hal ini penting terutama pada algoritma untuk menyelesaikan suatu masalah
yang memerlukan aproksimasi hasil (hasil yang hanya berupa pendekatan).
Algoritma yang baik harus mampu memberikan hasil yang sedekat mungkin
dengan nilai yang sebenarnya.
3) Efisiensi waktu. Algoritma memberikan keluaran yang benar (paling
mendekati),

tetapi

harus

menunggu

berjam-jam

untuk

mendapatkan

keluarannya, maka algoritma tersebut dinilai buruk dan tidak akan digunakan.
Setiap orang menginginkan keluaran yang cepat.

2.9.1 Digital Signature Algorithm (DSA)
Digital Signature Algorithm (DSA) merupakan algoritma kriptografi yang didesain

untuk otentikasi pesan dengan menggunakan teknologi kunci publik dan fungsi hash
SHA-1. Keamanan algoritma ini terletak pada kesulitan komputasi logaritma diskrit
pada field prime GF(p).
Menurut Stallings (2003), algoritma ini didedikasikan hanya untuk tanda tangan
digital bukan enkripsi. Secara singkat, DSA digunakan untuk oleh pengirim (signatory)

untuk membuat tanda tangan pada pesan, kemudian diverifikasi oleh penerima (verifier )
untuk memeriksa keaslian tanda tangan tersebut. Dengan asumsi masing-masing
signatory memiliki kunci privat dan publik. Kunci privat digunakan pada proses

pembentukan tanda tangan digital (signature generation) dan kunci publik digunakan
pada proses verifikasi tanda tangan digital (signature verification).
DSA beroperasi pada panjang kunci yang bervariasi dari 512 bit sampai dengan 1024
bit. Khusus untuk penelitian ini, penggunaan akan dibatasi hanya pada panjang 80 bit.
Tiga proses utama algoritma DSA, terdiri atas pembentukan sepasang kunci,
pembentukan tanda tangan digital, dan proses verifikasi tanda tangan digital. (Menezes
et al. 1996).

Universitas Sumatera Utara

24

2.9.1.1 Pembentukan sepasang kunci
Terdapat tiga parameter publik yang diketahui oleh sekelompok grup atau organisasi
pada algoritma ini, yaitu p, q, dan g. Parameter p adalah bilangan prima dengan panjang
80 bit, q adalah bilangan sub prima yang merupakan faktor dari p - 1, dan g diperoleh
dari persamaan h(p-1)/q dengan h adalah bilangan bulat antara 1 sampai p - 1 dengan
batasan g harus lebih besar dari 1. Selanjutnya, kunci privat x dibentuk dari bilangan
bulat antara 1 sampai q - 1 yang dipilih secara acak.
Adapun proses pembentukan kunci privat dengan publik selengkapnya adalah
sebagai berikut:
1) Pilih sebuah bilangan prima p, dengan batasan 80 bit. Parameter p bersifat
publik.
2) Pilih sebuah bilangan sub prima q dan merupakan faktor dari p - 1. Parameter q
bersifat publik.
3) Hitung kunci publik g, dengan rumus:
g = h(p-1)/q mod p ……………………………. (3)
Dimana h adalah bilangan bulat dengan 1 < h < p - 1, dan (h(p-1)/q mod p) > 1.
4) Pilih secara acak bilangan bulat x, dimana x < q. Parameter x bersifat privat.
5) Kemudian hitung nilai y dengan rumus:
y = gx mod p ………………………………… (4)
6) Kunci privat (p, q, g, x) dan kunci publik (p, q, g, y). Kunci privat x digunakan
untuk pembentukan tanda tangan digital, sedangkan kunci publik y diberikan
kepada siapa saja yang ingin memverifikasi tanda tangan pengirim.
Berikut contoh perhitungan untuk pembentukan sepasang kunci DSA:
1) Pilih bilangan prima p dan q, yang dalam hal ini (p -1) mod q = 0.
p = 59419
q = 3301 (memenuhi 3301 * 18 = 59419 – 1)

2) Misal h = 100 maka:
g = 100(59419-1)/3301 mod 59419
g = 18870

3) Tentukan kunci rahasia x, yang dalam hal ini x < q.
x = 3223

4) Hitung kunci publik y:

Universitas Sumatera Utara

25

y = 188703223 mod 59419
y = 29245

5) Maka:
Kunci privat = {59419, 3301, 18870, 3223}
Kunci publik = {59419, 3301, 18870, 29245}

2.9.1.2 Pembentukan tanda tangan digital
Proses pembentukan tanda tangan digital (signature generation) pada DSA dimulai dari
transformasi pesan M menjadi message digest yang dilakukan oleh fungsi hash SHA1. Pada algoritma ini pesan dengan panjang sembarang ditransformasikan kedalam
ukuran yang tetap, kemudian proses dilanjutkan dengan menggunakan message digest,
kunci privat pengirim bersama dengan parameter k (identifier ) sebagai input. Untuk
penjelasannya sebagai berikut:
1) Ubah pesan m menjadi message digest dengan fungsi hash SHA-1.
2) Pilih sebuah bilangan acak prima. Parameter k digunakan sebagai identifier
(penanda unik) yang membedakan tiap kali penanda-tangan pesan dilakukan.
3) Kemudian hitung:
r = (gk mod p) mod q …………………........... (5)
dan
s = (k-1(H(m) + xr)) mod q …………………… (6)
4) Kirim pesan m beserta tanda-tangan r dan s.
Berikut contoh perhitungan untuk pembentukan tanda tangan DSA:
1) Hitung nilai hash dari pesan, misal H(m) = 4321.
2) Tentukan bilangan acak k < q.
k = 997.
k-1 = 99759419-2 mod 59419
k-1 = 2907 mod 59419

3) Hitung r dan s sebagai berikut:
r = (18870997 mod 59419) mod 3301
r = 848
s = (2907 (4321 + 3223 * 848)) mod 3301
s = (2907 (2737425) mod 3301

Universitas Sumatera Utara

26

s = 183

4) Kirim pesan m dan tanda tangan r dan s.
Output dari persamaan diatas adalah r dan s, yang merupakan tanda tangan digital dari

pesan m. sebelum ditransmisikan, pengirim harus memeriksa, jika r = 0 atau s = 0, maka
nilai k harus dibangkitkan ulang dan tanda tangan digital dihitung kembali. Jika r dan s
tidak sama dengan nol, maka tanda tangan digital dapat ditransmisikan bersama dengan
pesan m.

2.9.1.3 Proses verifikasi tanda tangan digital
Sebelum melakukan proses verifikasi pada pesan yang ditanda-tangani, parameter p, q
dan g beserta dengan kunci publik dikirim. Untuk memverifikasi tanda tangan digital,
verifier pertama memeriksa apakah 0 < r ’ < q dan 0 < s’ < q. jika kedua kondisi tersebut

tidak dipenuhi maka tanda tangan digital harus ditolak. Sebaliknya, jika kedua kondisi
terpenuhi, verifier melakukan:
1) Hitung nilai w dengan rumus:
w = s-1 mod q …………………………………. (7)
2) Hitung nilai u1 dengan rumus:
u1 = (H(m) * w) mod q…………………………….. (8)
3) Hitung nilai u2 dengan rumus:
u2 = (r*w) mod q ……………………………….. (9)
4) Hitung nilai v dengan rumus:
v = ((gu1 * yu2) mod p) mod q ………………………. (10)
Apabila nilai v = r , maka tanda tangan sah belum ada diubah. Sebaliknya apabila nila v
tidak sama dengan r maka telah ada pihak yang merubah tanda tangan tersebut.
Berikut contoh perhitungan untuk verifikasi tanda tangan DSA:
1) Hitung nilai w:
w = 183-1 mod 3301
w = 1833301-2 mod 3301
w = 469

2) Hitung nilai u1 :
u1 = (4321 * 469) mod 3301.
u1 = 2026549 mod 3301

Universitas Sumatera Utara

27

u1 = 3036

3) Hitung nilai u2:
u2 = (848 * 469) mod 3301
u2 = 397712 mod 3301
u2 = 1592

4) Hitung nilai v:
v = ((188703036 * 292451592) mod 59419) mod 3301
v = 848 mod 3301
v = 848

Karena v = r, maka tanda tangan sah.

2.9.2 GOST digital signature algorithm
GOST atau Gosudarstvenny Standard yang artinya standard pemerintah, adalah
algoritma kriptografi dari negara Uni Soviet dahulu (sekarang sudah terpecah menjadi
sejumlah negara dengan Rusia sebagai negara terbesar) (Munir, 2004). Algoritma ini
dikembangkan pada tahun 1970 yang merupakan sebuah algoritma block chiper dengan
panjang 64 bit, sedangkan panjang kuncinya 256 bit. GOST dibuat oleh Soviet sebagai
alternatif terhadap algoritma enkripsi standard Amerika Serikat, DES. GOST secara
struktural mirip dengan DSA. GOST digital signature algorithm menggunakan fungsi
hash SHA-256.

Masyarakat perbankan Prancis telah menstadardisasi RSA. National Institute of
Standardization Technology (NIST) mengusulkan suatu modifikasi ElGamal dan
Schnorr sebagai standar tanda tangan digital (Digital Signature Standard [DSS])

mereka dan skema tanda tangan didasarkan pada kurva elips yang sampai saat ini
menjadi standar IEEE. Pada tahun 1999 federasi Rusia mengeluarkan standar tanda
tangan digital GOST digital signature algorithm atau sering disebut GOST 34,10-94.
Algoritma ini sangat mirip dengan Digital Signature Algorithm (DSA).

2.9.2.1 Pembentukan sepasang kunci
Proses pembentukan kunci pada GOST Digital Signature Algorithm adalah sebagai
berikut (Schneier, 1996):
1) Pilih bilangan prima p dan q dimana (p – 1) mod q = 0.

Universitas Sumatera Utara

28

2) Hitung a dimana
aq mod p = 1 …………………………….. (11)
dan a < p - 1.
3) Tentukan kunci privat x dimana x < q.
4) Hitung kunci publik y, dengan rumus:
y = ax mod p …………………………….. (12)
5) Kunci publik (p, q, a, y) dan kunci privat (p, q, a, x).
Berikut contoh perhitungan untuk pembentukan sepasang kunci GOST DSA:
1) Pilih bilangan prima p dan q, yang dalam hal ini (p -1) mod q = 0.
p = 59419
q = 3301 (memenuhi 3301 * 18 = 59419 – 1)

2) Hitung a :
188703301 mod 59419 = 1
a = 18870

Lemma: Misalkan p dan q adalah bilangan prima, dimana q habis dibagi oleh p -1, h
adalah bilangan bulat positif < p, dan g = h(p-1)/q mod p. Maka gq mod p = 1.
Bukti: gq mod p

= (h(p-1)/q mod p)q mod p
= h(p-1) mod p
=1

3) Tentukan kunci rahasia x, yang dalam hal ini x < q.
x = 3223

4) Hitung kunci publik y:
y = 188703223 mod 59419
y = 29245

5) Maka:
Kunci privat = {59419, 3301, 18870, 3223}
Kunci publik = {59419, 3301, 18870, 29245}

2.9.2.2 Pembentukan tanda tangan digital
Diketahui kunci publik (p, q, a, y) dan kunci privat (p, q, a, x) (Schneier, 1996):
1) Ubah pesan m menjadi message digest dengan fungsi hash SHA-256
menghasilkan SHA (M).

Universitas Sumatera Utara

29

2) Tentukan bilangan acak k dimana k < q.
3) Hitung tanda tangan r , dengan rumus:
r = (ak mod p) mod q ………………………..... (13)
4) Hitung tanda tangan s, dengan rumus:
s = (xr + k(H(m))) mod q ………………………. (14)
5) Kirim pesan beserta tanda tangan r dan s.
Berikut contoh perhitungan untuk pembentukan tanda tangan GOST DSA:
1) Hitung nilai hash dari pesan, misal H(m) = 4321.
2) Tentukan bilangan acak k < q.
k = 997.

3) Hitung r :
r = (18870997 mod 59419) mod 3301
r = 848

4) Hitung s :
s = (3223 * 848 + 997 * 4321) mod 3301
s = (2733104 + 4308037) mod 3301
s = 108

5) Kirim pesan m dan tanda tangan r dan s.

2.9.2.3 Proses verifikasi tanda tangan digital
Sebelum diverifikasi, harus dipastikan tersedia kunci publik pengirim (y), nilai p, q dan
a beserta pesan yang bertandatangan r dan s. Penerima memeriksa terlebih dahulu

apakah 0 < r < q dan 0 < s < q, kemudian hitung:
1) Hitung nilai v, dengan rumus:
v = H(m)q-2 mod q …...……………………….… (15)
2) Hitung nilai z1, dengan rumus:
z1 = (s*v) mod q ……………………………..... (16)
3) Hitung nilai z2, dengan rumus:
z2 = ((q – r) * v) mod q …………………….…… (17)
4) Hitung nilai u, dengan rumus:
u = ((az1 * y z2) mod p) mod q ……………………(18)
Jika u = r, maka proses verifikasi berhasil.

Universitas Sumatera Utara

30

Berikut contoh perhitungan untuk verifikasi tanda tangan GOST DSA:
1) Hitung nilai v:
v = 43213301-2 mod 3301
v = 1356

2) Hitung nilai z1 :
z1 = (108 * 469) mod 3301.
z1 = 146448 mod 3301
z1 = 1204

3) Hitung nilai z2:
z2 = ((3301-848) * 1356) mod 3301
z2 = 3326268 mod 3301
z2 = 2161

4) Hitung nilai u:
u = ((188701204 * 292452161) mod 59419) mod 3301
u = 848 mod 3301
u = 848

Karena u = r, maka tanda tangan sah.

Universitas Sumatera Utara