Back to IF4020 Kriptografi
Algoritma ElGamal
Questions/Cues
- Siapa pembuat ElGamal dan berbasis persoalan sulit apa?
- Apa itu akar primitif dan logaritma diskrit?
- Bagaimana membangkitkan kunci, mengenkripsi, dan mendekripsi ElGamal?
- Mengapa cipherteks berukuran dua kali plainteks?
- Bagaimana bukti korektness dekripsi?
Reference Points
- IF4020 Kriptografi — Algoritma ElGamal (Slides 2-20)
Pendahuluan
Dibuat Taher Elgamal (1985) dalam makalah “A public key cryptosystem and a signature scheme based on discrete logarithms” (IEEE Trans. Information Theory 31(4)). Keamanannya terletak pada sulitnya menghitung logaritma diskrit: diberi prima dan bilangan bulat , cari dengan . Contoh: , Jawab: sebab .
Akar Primitif
Bilangan adalah akar primitif dari prima bila pangkat menghasilkan nilai-nilai berbeda (semua bilangan muncul tepat sekali), yaitu siklus berpanjang (mengingat ).
- , akar primitif: (semua berbeda).
- , bukan: (berulang, panjang siklus 3).
Untuk mencari semua akar primitif, coba .
Logaritma Diskrit
Bila akar primitif dari , untuk setiap bilangan bulat ada () dengan ; disebut logaritma diskrit dari berbasis . Perpangkatan modular mudah, logaritma diskrit sulit untuk bilangan besar. Contoh: 7 akar primitif dari 41, .
Properti dan Pembangkitan Kunci
Parameter Keterangan Status prima (boleh dipakai bersama kelompok) tidak rahasia akar primitif dari , tidak rahasia acak, rahasia (privat) tidak rahasia (publik) plainteks rahasia cipherteks tidak rahasia Kunci publik: tripel . Kunci privat: pasangan .
Enkripsi dan Dekripsi
Enkripsi: pecah plainteks menjadi blok dengan . Pilih bilangan acak , (baru untuk tiap blok):
Cipherteks blok = pasangan , sehingga ukuran cipherteks dua kali plainteks.
Dekripsi: hitung (Teorema Kecil Fermat), lalu
Bukti: ; dan , maka .
flowchart TD M["m"] --> ENC["a = g^k mod p<br/>b = y^k * m mod p"] K["k acak"] --> ENC PUB["y, g, p"] --> ENC ENC --> CT["Cipherteks (a, b)"] CT --> DEC["(a^x)^-1 = a^(p-1-x)<br/>m = b * (a^x)^-1 mod p"] PRIV["x (privat)"] --> DEC DEC --> M2["m"]Contoh 1: Bob Membangkitkan Kunci
, (akar primitif), ; . Kunci publik , privat .
Alice mengenkripsi dengan : , . Cipherteks .
Bob: ; . ✓
Contoh 2: Pesan
HALOAlice: , , , . Bob mengodekan
HALO= , dipecah blok , (semua ):
Blok Dekripsi 0700 1463 1439 74 1791 700 1114 2001 1220 1682 1125 1114 Cipherteks: dan ; Alice memperoleh kembali
HALO.
ElGamal (Taher Elgamal, 1985) berbasis logaritma diskrit: diberi , mencari sulit sementara pemangkatan mudah. Ia memakai akar primitif dari prima (pangkatnya menelusuri semua ). Kunci: privat (), publik . Enkripsi blok dengan acak: , , cipherteks dua kali ukuran plainteks. Dekripsi: ; benar karena . Contoh : . Persoalan logaritma diskrit yang sama menopang Hybrid Cryptography dan Diffie-Hellman.
Additional Information
Harus Acak dan Tidak Dipakai Ulang
Bila sama dipakai dua blok, sehingga bila satu plainteks diketahui yang lain terbongkar. juga harus dibangkitkan acak sejati per pesan; pada ElGamal signature dan DSA, kebocoran atau bias langsung membocorkan kunci privat (kasus PS3 dan Bitcoin nyata).
Sifat Randomized
Karena acak, plainteks sama menghasilkan cipherteks berbeda (probabilistik), berbeda dengan textbook RSA yang deterministik. Ini keuntungan keamanan semantik (IND-CPA di bawah asumsi DDH). Namun ElGamal murni malleable (mengalikan dengan mengalikan plainteks dengan ).
Penerapan
ElGamal dipakai pada GnuPG/PGP, dan bentuk kurva eliptiknya (ECEG, ECIES) pada TLS dan enkripsi modern. Tanda tangan ElGamal adalah dasar DSA dan ECDSA.
Proyek Eksplorasi Mandiri
- Implementasikan ElGamal (cari akar primitif,
pow(a, p-1-x, p)) dan verifikasi angka(1430, 697)dan(1439, 74), (1220, 1682).- Demonstrasikan bahaya pemakaian ulang : enkripsi dua pesan dengan sama, lalu pulihkan pesan kedua dari yang pertama.
Bacaan Lanjutan
- T. ElGamal, “A public key cryptosystem and a signature scheme based on discrete logarithms”, IEEE TIT, 1985.
- Demo:
debjitbiswas.com/elgamal/.