Sampai akhir tahun 1970, hanya ada sistem kriptografi simetri. Karena sistem kriptografi simetri menggunakan kunci yang sama untuk enkripsi dan dekripsi, maka hal ini mengimplikasikan dua pihak yang berkomunikasi saling mempercayai. Konsep sistem kriptografi kunci-publik ditemukan oleh Diffie dan Hellman yang mempresentasikan konsep ini pada Tahun 1976. Ide dasar dari sistem kriptografi kunci-publik adalah bahwa kunci kriptografi dibuat sepasang, satu kunci untuk enkripsi dan satu kunci untuk dekripsi. Kunci untuk enkripsi bersifat publik (tidak rahasia) – sehingga dinamakan kunci publik (public-key) – sedangkan kunci dekripsi bersifat rahasia – sehingga dinamakan kunci rahasia (private key atau secret key). Kunci-kunci ini dipilih sedemikian sehingga – secara praktek – tidak mungkin menurunkan kunci rahasia dari kunci publik. Sistem kriptografi kunci-publik cocok untuk kelompok pengguna di lingkungan jaringan komputer. Setiap pengguna jaringan mempunyai kunci publik dan kunci rahasia yang bersuaian. Kunci publik, karena tidak rahasia, biasanya disimpan di dalam basisdata kunci yang dapat diakses oleh pengguna lain. Jika ada pengguna yang hendak berkirim pesan ke pengguna lainnya, maka ia ia perlu mengetahui kunci publik penerima pesan melalui basisdata kunci ini lalu menggunakannya untuk mengenkripsi pesan. Hanya penerima pesan yang berhak yang dapat mendekripsi pesan karena ia mempunyai kunci rahasia. Dengan sistem kriptografi kunci publik, tidak diperlukan pengiriman kunci rahasia melalui saluran komunikasi khusus sebagaimana pada sistem kriptografi simetri. Meskipun kunci publik diumumkan ke setiap orang di dalam kelompok, namun kunci publik perlu dilindungi agar otentikasinya terjamin (misalnya tidak diubah oleh orang lain).
Algoritma ElGamal
Algoritma Elgamal merupakan salah satu algoritma kriptografi kunci-publik yang dibuat oleh Taher ElGamal pada tahun 1984. Algoritma in pada umumnya digunakan untuk digital signature, namun kemudian dimodifikasi sehingga juga bisa digunakan untuk enkripsi dan deskripsi. ElGamal digunakan dalam perangkat lunak sekuriti yang dikembangkan oleh GNU, program PGP, dan pada sistem sekuriti lainnya. Kekuatan algoritma ini terletak pada sulitnya menghitung logaritma diskrit.
Algoritma Elgamal tidak dipatenkan. Tetapi, algoritma ini didasarkan pada algoritma Diffie – Hellman, sehingga hak paten algoritma Diffie – Hellman juga mencakup algoritma ElGamal. Karena hak paten algoritma Diffie – Hellman berakhir pada bulan April 1997, maka algoritma ElGamal dapat diimplementasikan untuk aplikasi komersil.
Besaran-besaran yang digunakan di dalam algoritma ElGamal:
1. Bilangan prima, p (tidak rahasia)
2. Bilangan acak, g ( g < p) (tidak rahasia)
3. Bilangan acak, x (x < p) (rahasia)
4. M (plainteks) (rahasia)
5. a dan b (cipherteks) (tidak rahasia)
Prosedur Membuat Pasangan Kunci
· Pilih sembarang bilangan prima p.
· Pilih dua buah bilangan acak, g dan x, dengan syarat g < p dan 1 ≤ x ≤ p – 2.
· Hitung y = gx mod p.
Kunci publik adalah y, kunci rahasia adalah x. Nilai g dan p tidak dirahasiakan dan dapat diumumkan kepada anggota kelompok.
Enkripsi
· Plainteks disusun menjadi blok-blok m1, m2, …, sedemikian sehingga setiap blok merepresentasikan nilai di dalam rentang 0 sampai p – 1.
· Pilih bilangan acak k, yang dalam hal ini 0 £ k £ p – 1, sedemikian sehingga k relatif prima dengan p – 1.
· Setiap blok m dienkripsi dengan rumus
a = gk mod p
b = ykm mod p
Pasangan a dan b adalah cipherteks untuk blok pesan m. Jadi, ukuran cipherteks dua kali ukuran plainteksnya.
Dekripsi
Untuk mendekripsi a dan b digunakan kunci rahasia, x, dan plainteks m diperoleh kembali dengan persamaan
m = b/ax mod p
Catatlah bahwa karena
ax º gkx (mod p)
maka
b/ax º ykm/ax
º gxkm/gxk
º m (mod p)
yang berarti bahwa plainteks dapat ditemukan kembali dari pasangan cipherteks a dan b.
Flowchart
Source Code
Silahkan download source codenya. elgamal source code
Contoh
Siti ingin membangkitkan pasangan kuncinya. Siti memilih p = 2357, g = 2, dan x = 1751. Kemudian menghitung :
y = gx mod p = 21751 mod 2357 = 1185
Jadi kunci publiknya ( y = 1185, g = 2, p = 2357 ) dan kunci privatnya ( x = 1751, p = 2357 ).
Enkripsi
Misalkan Ahmad ingin mengirim palinteks m = 2035 (nilai m masih berada di dalam selang [ 0, 2357 – 1 ] ). Ahmad memilih bilangan acak k = 1520 ( nilai k masih berada di dalam selang [ 0, 2357 – 1 ] ). Kemudian Ahmad menghitung
a = gk mod p = 21520 mod 2357 = 1430
b = ykm mod p = 11851520 × 2035 mod 2357 = 697
Jadi, cipherteks yang dihasilkan adalah (1430, 697). Ahmad mengirim cipherteks ini ke Siti.
Dekripsi
Siti mendeskripsi cipherteks dari Ahmad dengan melakukan perhitungan sebagai berikut :
1/ax = (ax)– 1 = a p – 1 – x mod p = 1430605 mod 2357 = 872
m = b/ax mod p = 697 × 872 mod 2357 = 2035
Plainteks yang didekripsi, 2035, sama dengan plainteks yang dikirim oleh Ahmad.
Coba ada source code algoritma ElGamal yang khusus untuk tanda tangan digital!!!
wah gw bakal download dan terima kasih bgt buat yang bikin programnya.
c, yaa.
hmm kalo contoh program yang untuk mengenkripsi suatu data (audio n text file) dengan ElGamal ato skema kriptografi kunci publik lain ada dak? kok ada tolong link nya yah,please
tolong bantuin donk program elgamal kriptosistem penerapannya pada program C++….please tak tunggu yah…makasih
tolong buatkan tuk delphi plz. keburu dkumpulkan tgl 16 juni 2008. trimz
Klo untuk source code dalam bahasa C udah sya upload. bisa di klik di linknya. tapi untuk delphi, saya belu belajar 🙂
Cepet mana tuh waktu enkripsi end dekripsi ElGamal ma algoritma RSA
bisa ga algoritmanya ni buat di JAVA ???
caranya gimana ???
PLEASE YA > > > > >
pernah ga waktu dekripsi pesan atau file, m nya menjadi kode ascii 1 n klo diterjemahkan jadi r….. coz aku mengalaminya. apa ya yang salah? padahal urutan2 algoritmanya mulai dari pembentukan kunci, enkripsi n dekripsi udah smuanya….. tau ga apa yang salah?
mas, flowchartnya untuk elgamal ECC gimana mas??? Baik untuk Enkripsi, deskripsi dan pembangkitan kunci ????? pa sama dengan ElGamal ini ???thanks…send ke email aja ya mas..
itu baru enc dec ya? kalau yg u/ dig sig ? atau yg subliminal channel gmn?
I think you hit a buyslele there fellas!
ass.salam kenal…..saya defina.mas,bisa minta tolong ga”????gini,saya lagi buat TA mengenai algoritma elgamal tapi masih bingung ……bisa ga” mas kirimin file mengenai algoritma. trus saya juga mw nanya,kriptografi emgnya berhubungan dengan matematika.kira2 penggunaan kriptografi selain untuk pembuatan kode ATM dan tanda tangan digital…bisa diaplikasikan kemana aja????dan memakai program apa???tolong jelasin mas ya….makasih….
contohnya persis seperti yang ada di buku rinaldi munir dengan judul ilmu kriptografi… hanya bedanya namanya bukan siti dan ahmad tapi alice dan bob….tapiii bagus isinya…
klo mau yang lebih lengkap baca ja bukunya Bruce Scheiner, Applied of Cryptography. Disitu dibahas berbagai macam algoritma kriptografi sama implementasinya, ada protokol kriptografi sama source codenya dalam bahasa C juga.
Contoh di atas itu berupa bilangan, lha kalo untuk alfabet dan karakter gimana, misal studi kasus sms. Mohon penjelasannya….
sama aja, klo untuk karakter kayak di aplikasi sms ya karakternya itu ntar diubah ke bilangan dulu abis tu dilakukan enkripsi/deksripsi
hasilnya dirubah lagi ke bentuk karakter
nak programme untuk el gamal digital signature yang dalam maple boleh tak?????
mas..slm knl,,,saya mau minta izin postinganya tntg algoritma elgamal,,saya masukin d blog saya..sebagai sumbernya…moga berkenan,slm knl…
Cara mengubah karakter sms,gmn? Mt dong algoritma elgamalnya … 😉
makasih atas penjelasannya :). sebagai rasa terimakasih, saya kasih kode elgamal dalam java.
//cut here—————————————————–>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
public class Elgamal {
public static String readLine() {
String s = “”;
try {
InputStreamReader converter = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(converter);
s = in.readLine();
} catch (Exception e) {
System.out.println(“Error! Exception: ” + e);
}
return s;
}
private BigInteger p = null;
private BigInteger g = null;
private BigInteger x = null;
private BigInteger y = null;
public Elgamal(BigInteger p,BigInteger g,BigInteger x){
this.p = p;
this.g = g;
this.x = x;
this.y = g.modPow(x, p);
System.out.println(“\nMembangkitkan pasangan kunci ….”);
System.out.println(“Kunci publik –> y = ” + y.toString() + “, g = ” + g.toString() + “, p = ” + p.toString());
System.out.println(“Kunci private –> x = ” + x.toString() + “, p = ” + p.toString());
}
public BigInteger[] Enc(BigInteger m,BigInteger k){
BigInteger[] cipher = new BigInteger[2];
BigInteger a = this.g.modPow(k, this.p);
BigInteger b = m.multiply(this.y.modPow(k, this.p)).mod(this.p);
cipher[0] = a;
cipher[1] = b;
return cipher;
}
public String Dec(BigInteger[] cipher){
BigInteger plain;
BigInteger a = cipher[0];
BigInteger b = cipher[1];
BigInteger crmodp = a.modPow(this.x, this.p);
BigInteger d = crmodp.modInverse(this.p);
plain = d.multiply(b).mod(this.p);
return plain.toString();
}
public static void main(String[] args) throws IOException {
String s;
System.out.print(“Enter p –> “);
s = readLine();
BigInteger p = new BigInteger(s);
System.out.print(“Enter g –> “);
s = readLine();
BigInteger g = new BigInteger(s);
System.out.print(“Enter x –> “);
s = readLine();
BigInteger x = new BigInteger(s);
// create object
Elgamal elgamal = new Elgamal(p, g, x);
System.out.print(“\nEnter m [0,” + p + ” – 1] –> “);
s = readLine();
BigInteger m = new BigInteger(s);
System.out.print(“Enter k [0,” + p + ” – 1] –> “);
s = readLine();
BigInteger k = new BigInteger(s);
BigInteger[] cipher = elgamal.Enc(m, k);
System.out.println(“\ncipherText –> (” + cipher[0] + “,” + cipher[1] + “)”);
String plaintext = elgamal.Dec(cipher);
System.out.println(“PlainText –> ” + plaintext);
}
}
//end cut ———————————————————————>
gak bs atuh neng source codemu ._.
BISA KAH SAYA MINTAK PROJECNYA DI JAVA NETBEANS NYA GAG
nice artikelny gan!! izin sedot buat bahan kuliah saya gan!!
thax…
kk , mau tanya cara menghitung 2^1751 mod 2357 gimana ya ?
tolong bantuan nya kk.
terima kasih..
bisa gak buat programnya pake delphi 07 untuk enkripsi citra menggunakan el gamal..
makasih… 🙂
secure elgamal untuk php bagi donk..
yang pake python ada gak?
yang pakek sisab ada kgk
permisi gan boleh minta link download program javanya…? soalnya punya saya gak jadi.
[…] https://agcrypt.wordpress.com/2008/02/25/elgamal-algorithm/ […]
[…] https://agcrypt.wordpress.com/2008/02/25/elgamal-algorithm/ […]
Contoh:
(a) Pembangkitan kunci (Oleh Alice) Misal p = 23, g = 2, dan x = 17.
Hitung:
(b) Enkripsi (Oleh Bob)
Misal pesan m = 17
Bob memilih bilangan acak k = 6
klo gini gimna masih blum paham???