2.3 Algoritma ElGamal
Algoritma ElGamal awalnya digunakan untuk tanda tangan digital, namun kemudian dimodifikasi untuk digunakan dalam proses enkripsi dan dekripsi. Algoritma ini merupakan salah satu algoritma
asimetris, dimana untuk enkripsi menggunakan kunci public dan untuk dekripsi menggunakan kunci private. Kelebihan dari enkripsi ini adalah untuk plaintext yang sama, setiap kali dienkripsi akan
menghasilkan ciphertext yang berbeda, karena session key yang dihasilkan berbeda untuk setiap kali proses enkripsi [7]. Kelemahannya adalah panjang ciphertext-nya akan dua kali dari panjang
plaintext-nya.
Berikut merupakan proses enkripsi dan dekripsi algoritma ElGamal, dimana diasumsikan Alice ingin mengirim pesan m kepada Bob, dan m € {0,1, ......., p-1} [7] .
a. Proses pembangkit kunci ElGamal. 1. Bob memilih sebuah bilangan prima p
secara acak dan α adalah akar primitive root modulo p.
2. Bob kemudian memilih sebuah bilangan integer a dimana 2 ≤ a ≤ p-1 dan menghitung
�
�
��� � 3. Bob memiliki kunci public
�, �, �
�
dan kunci private-nya adalah a. b. Proses enkripsi pada algoritma ElGamal.
1. Alice memperoleh kunci public dari Bob �, �, �
�
. 2. Dia memilih bilangan acak b p-1 .
3. Dia menghitung �
�
��� � dan ��
��
��� � . 4. Alice selanjutnya mengirim ciphertext
� = �
�
, ��
��
. c. Proses dekripsi pada algoritma ElGamal.
1. Bob menggunakan kunci private untuk menghitung �
� −�
≡ �
� �−1−�
��� � . 2. Selanjutnya dia mendekripsi m dengan menghitung
�
� −�
�� ��� � .
Keterangan : 1. m merupakan nilai desimal masing-masing karakter dari plaintext.
2. α adalah sebuah bilangan acak yang nilainya merupakan akar primitive root dari modulo p.
3. a merupakan kunci privat yang nilainya merupakan bilangan prima. 4. b merupakan bilangan ganjil yang dirandom.
5. p merupakan bilangan prima yang dirandom. 8
Universitas Sumatera Utara
2. 3.1 Pembangkit Bilangan Prima Lehmann
Untuk membangkitkan bilangan acak prima dapat menggunakan metode Lehmann. Adapun langkah-langkah untuk mengetahui sebuah bilangan p prima atau tidak [10] adalah sebagai berikut:
1. Pilih sebuah bilangan acak a yang lebih kecil dari p. 2. Hitunga nilai
�
�−12
��� � . 3. Jika
�
�−12
≢ 1 ��� � dan �
�−12
≢ −1 ��� �, maka p dipastikan bukan bilangan prima.
4. Jika �
�−12
≡ 1 �� − 1��� �,kemungkinan p bukan bilangan prima tidak lebih dari 50 . Keterangan :
p merupakan bilangan yang ingin dicek apakah merupakan bilangan prima atau tidak a adalah bilangan acak yang nilainya lebih kecil dari p
2. 3.2 Contoh Perhitungan ElGamal
Berikut adalah contoh proses perhitungan enkripsi dan dekripsi menggunakan algoritma ElGamal: Andi ingin mengirim sebuah pesan Hermanda kepada ani. ani memilih sebuah
kunci privat 223, nilai bilangan primanya 21787, sedangkan nilai yang primitive root terhadapat bilangan primanya adalah 150. Berikut adalah proses yang dilakukan dalam
pengiriman pesan : 1. Proses Generate Kunci
Hitung: �
�
��� �= 7279 Hasil : Kunci publik
→ p = 21787, � = 150, �
�
= 7279, Kunci privat → p =21787,
a=223. 2. Proses Enkripsi Pesan :
Pertama, ubah karakter ke decimal menggunakan tabel ascii, kemudian bangkitkan nilai b, dimana syaratnya b p-1.
H=72 = b = 9832 e=101= b= 9583
r=114 = b = 1939 9
Universitas Sumatera Utara
m= 109 = b = 13902 a= 97 = b = 18045
n=110 = b = 12817 d=100= b =15641
a=97= b =1317 Kedua, Lakukan perhitungan ciphertext dengan rumus {
�
�
��� � , ��
��
��� � .} �
�
��� � = 150
9832
��� 21787 = 21715 150
9583
��� 21787 = 3416 150
1939
��� 21787 = 19092 150
13902
��� 21787 = 3372 150
18045
��� 21787 = 21337 150
12817
��� 21787 = 6487 150
15641
��� 21787 = 14118 150
1317
��� 21787 = 19426 ��
��
��� � = 72�7279
9832
��� 21787 = 8248 101
�7279
9583
��� 21787 = 9552 114
�7279
1939
��� 21787 = 4812 109
�7279
13902
��� 21787 = 7553 97
�7279
18045
��� 21787 = 8394 110
�7279
12817
��� 21787 = 8740 100
�7279
15641
��� 21787 = 7234 97
�7279
1317
��� 21787 = 10154 10
Universitas Sumatera Utara
Dari Proses diatas, dihasilkan ciphertext { 21715, 8248, 3416, 9552, 19092, 4812, 3372, 7553, 21337, 8394, 6487, 8740, 14118, 7234, 19426, 10154 }
3. Proses Dekripsi Pesan. Langkah Pertama yaitu menghitung
�
� −�
≡ �
� �−1−�
��� � menggunakan kunci privat. Selanjutnya mendekripsi m dengan menghitung
�
� −�
�� ��� � . �
� �−1−�
��� � = 21715
21563
��� 21787 = 1120 3416
21563
��� 21787 = 4929 19092
21563
��� 21787 = 6221 3372
21563
��� 21787 = 19064 21337
21563
��� 21787 = 3735 6487
21563
��� 21787 = 8650 14118
21563
��� 21787 = 7686 19426
21563
��� 21787 = 10503 �
� −�
�� ��� � = 1120�8248 ��� 2903 = 72 4929x9552 mod 2903 = 101
6221x4812 mod 2903 = 114 19064x7553 mod 2903 = 109
3735x8394 mod 2093 = 97 8650x8740 mod 2903 = 110
7686x7234 mod 2093 = 100 10503x10154 mod 2093 = 97
Dari perhitungan diatas maka nilai plaintextnya {72,101,114,109,97,110,100,97}, setelah nilai tersebut diubah ke karakter menggunakan tabel ascii sehingga menghasilkan plaintext Hermanda.
Universitas Sumatera Utara
2.4 Landasan Matematika Kriptografi