Pertukaran kunci Diffie–Hellman

**Pertukaran kunci Diffie–Hellman** adalah metode untuk bertukar kunci kriptografis secara aman melalui saluran publik dan menjadi salah satu protokol kunci publik pertama yang disusun oleh Ralph Merkle dan dinamai dari Whitfield Diffie and Martin Hellman. Diffie–Hellman (DH) adalah salah satu contoh penggunaan awal pertukaran kunci publik yang diimplementasikan dalam bidang kriptografi. Metode ini dipublikasikan pada tahun 1976 oleh Diffie dan Hellman dan menjadi karya publik pertama yang mengusulkan ide tentang pasangan kunci pribadi dan kunci publik.

Sebelumnya, sambungan aman terenkripsi antara dua pihak membutuhkan pertukaran kunci secara fisik, misal daftar kunci yang ditulis di kertas lalu diantar oleh kurir. Metode pertukaran kunci Diffie–Hellman dapat dipakai oleh kedua pihak yang tidak tahu apa pun sebelumnya untuk membuat kunci rahasia bersama melalui saluran tak aman. Kunci ini kemudian dapat dipakai untuk berkomunikasi dengan penyandian kunci simetris.

dipakai untuk mengamankan berbagai macam layanan internet. Namun, riset yang dipublikasikan pada Oktober 2015 menyebutkan bahwa parameter yang dipakai untuk banyak aplikasi internet yang memakai DH tidak cukup kuat untuk mencegah serangan yang didanai dengan cukup, seperti layanan keamanan di beberapa negara.

Metode ini dipublikasikan oleh Whitfield Diffie dan Martin Hellman pada tahun 1976. Namun, pada tahun 1997, terungkap bahwa James H. Ellis, Clifford Cocks, dan Malcolm J. Williamson dari GCHQ, badan intelijen sinyal Britania Raya telah menunjukkan pada tahun 1969 tentang cara mencapai kriptografi kunci publik.

Meski tidak memiliki fungsi autentikasi, kesepakatan kunci Diffie–Hellman menjadi dasar untuk berbagai protokol berautentikasi dan memberikan kerahasiaan ke depan dalam mode kunci tak kekal TLS (disebut sebagai EDH atau DHE).

Metode ini diikuti segera oleh RSA, yaitu implementasi kriptografi kunci publik dengan algoritme asimetris.

 tahun 1977 (telah kedaluwarsa) menjelaskan algoritma ini yang sekarang berada dalam domain publik. Ia menyebut Hellman, Diffie, dan Merkle sebagai penemu.

## Penamaan
Pada tahun 2002, Hellman mengusulkan agar algoritma ini disebut **pertukaran kunci Diffie–Hellman–Merkle** untuk menghormati sumbangsih Ralph Merkle dalam penemuan kriptografi kunci publik (Hellman, 2002) dengan menulis,

## Penjelasan
### Gambaran umum

Pertukaran kunci Diffie–Hellman membuat kunci rahasia bersama antara dua pihak yang dapat dipakai untuk komunikasi rahasia atau pertukaran data melalui jaringan publik. Analoginya adalah menggunakan warna sebagai pengganti bilangan besar.

Proses ini dimulai dari kedua pihak, Ani dan Budi, menyepakati warna awal secara publik yang tidak perlu dirahasiakan, tetapi harus berbeda tiap saat. Dalam contoh ini, warnanya adalah kuning. Tiap pihak juga memiliki warna rahasia—dalam kasus ini, jingga dan biru telur. Langkah pentingnya adalah tiap orang mencampurkan warna bersama yang telah disepakati bersama dengan warna rahasia masing-masing sehingga menghasilkan warna cokelat kulit dan biru langit. Selanjutnya, mereka saling berkirim warna hasil pencampuran secara publik. Terakhir, tiap pihak mencampurkan warna rahasia masing-masing ke warna yang diterima masing-masing. Hasilnya adalah warna cokelat tua yang keduanya identik dan rahasia sehingga menjadi warna rahasia bersama.

Jika ada pihak ketiga yang mengamati jalur publik, ia hanya mengetahui warna awal (kuning) dan warna hasil pencampuran awal (cokelat kulit dan biru langit). Namun, hanya dari itu saja, ia akan sulit mengetahui warna yang telah menjadi warna rahasia bersama antara Ani dan Budi. Di dunia nyata, yang ditukarkan adalah bilangan besar alih-alih warna. Hampir tidak mungkin untuk menghitungnya dalam waktu praktis, bahkan oleh superkomputer.

### Penjelasan kriptografis
Implementasi protokol yang sederhana dan asli menggunakan grup perkalian bilangan bulat modulus *p* dengan *p* adalah bilangan prima serta bilangan bulat *g* dengan *g* adalah akar primitif modulus *p*. Dua bilangan tersebut dipilih sedemikian rupa agar hasilnya dapat menerima bilangan dari 1 hingga . Berikut adalah contoh pelaksanaan protokol dengan nilai yang tidak rahasia berwarna biru dan nilai yang rahasia berwarna merah.

# Ani dan Budi menyepakati secara publik untuk memilih bilangan pembagi  dan bilangan dasar  yang menjadi akar primitif modulus 23.
# Ani memilih bilangan bulat rahasia , lalu mengirimi Budi bilangan .
#* *A* = 54 mod 23 = 4
# Budi memilih bilangan bulat rahasia , lalu mengirimi Ani bilangan .
#* *B* = 53 mod 23 = 10
# Ani lalu menghitung nilai .
#* *s* = 104 mod 23 = 18
# Budi lalu menghitung nilai .
#* *s* = 43 mod 23 = 18
# Sekarang, Ani dan Budi sama-sama memiliki bilangan rahasia yang sama (bilangan 18).

Ani dan Budi sama-sama memiliki bilangan yang sama karena, dalam modulus *p*,

: {\color{blue}A}^{\color{red}b} \bmod {\color{blue}p} = {\color{blue}g}^{\color{red}ab} \bmod {\color{blue}p} = {\color{blue}g}^{\color{red}ba} \bmod {\color{blue}p} = {\color{blue}B}^{\color{red}a} \bmod {\color{blue}p}.

Lebih spesifiknya adalah

: ({\color{blue}g}^{\color{red}a} \bmod {\color{blue}p})^{\color{red}b} \bmod {\color{blue}p} = ({\color{blue}g}^{\color{red}b} \bmod {\color{blue}p})^{\color{red}a} \bmod {\color{blue}p}.

Hanya *a* dan *b* yang dirahasiakan. Nilai-nilai yang lain dikirim secara terang. Kekuatan metode ini berasal dari fakta bahwa  butuh waktu sangat lama untuk dihitung hanya dari *p*, *g*, , dan . Setelah Ani dan Budi menghitung nilai rahasia mereka, nilai tersebut dapat dipakai sebagai kunci enkripsi untuk bertukar pesan melalui saluran terbuka/publik.

Tentunya, nilai *a*, *b*, dan *p* harus besar agar aman. Jika *p* paling tidak 600 angka, komputer modern tercepat pun tidak dapat mencari *a* dari *p*, *g*, dan . Masalah ini disebut dengan masalah logaritme diskret. Perhitungan  dikenal sebagai perpangkatan modulus dan dapat dilakukan dengan efisien, bahkan untuk bilangan besar. Perhatikan bahwa nilai *g* tidak harus besar. Pada praktiknya, nilai *g* adalah bilangan bulat kecil, seperti 2, 3, dst.

### Tabel kerahasiaan
Tabel berikut menampilkan yang diketahui dan yang tidak diketahui oleh tiap pihak. Sama dengan sebelumnya, warna biru berarti nilai yang tidak rahasia dan warna merah berarti nilai yang rahasia. Di sini, Eka menjadi penyadap yang mengamati komunikasi antara Ani dan Budi tanpa mengubah isi pesannya.

* *g* = bilangan dasar (prima, publik) yang diketahui oleh Ani, Budi, dan Eka. *g* = 5
* *p* = bilangan pembagi (prima, publik) yang diketahui oleh Ani, Budi, dan Eka. *p* = 23
* *a* = kunci pribadi Ani yang hanya diketahui oleh Ani. *a* = 6
* *b* = kunci pribadi Budi yang hanya diketahui oleh Budi. *b* = 15
* *A* = kunci publik Ani yang diketahui oleh Ani, Budi, dan Eka. 
* *B* = kunci publik Budi yang diketahui oleh Ani, Budi, dan Eka. 










Sekarang, *s* adalah kunci rahasia bersama yang diketahui oleh Ani dan Budi, tetapi tidak diketahui oleh Eka. Perhatikan bahwa sia-sia Eka menghitung *AB* yang bernilai sama dengan *g**a* + *b* mod *p*.

### Generalisasi ke grup siklis berhingga
 

## Operasi dengan lebih dari dua pihak

Kesepakatan kunci Diffie–Hellman dapat tidak terbatas untuk dua pihak saja. Metode ini dapat diiterasi berapa pun jumlah pihak yang terlibat.

## Keamanan

Protokol ini dianggap tahan dari penyadap bila *G* dan *g* dipilih dengan tepat.

## Kegunaan lain
### Enkripsi
Skema enkripsi kunci publik yang menggunakan pertukaran kunci Diffie–Hellman telah diusulkan. Salah satunya adalah enkripsi Elgamal.

### Kerahasiaan ke depan
Protokol yang menerapkan kerahasiaan ke depan menghasilkan pasangan kunci baru untuk tiap sesi dan membuangnya pada akhir sesi. Pertukaran kunci Diffie–Hellman sering dipakai untuk membuat kunci baru karena pembuatan kuncinya yang cepat.

### Kesepakatan kunci terautentikasi
Ketika Ani dan Budi berbagi kata sandi, mereka mungkin bisa memakai Diffie–Hellman dalam kesepakatan kunci terautentikasi kata sandi (PK) untuk menghindari serangan orang di tengah. Salah satu caranya adalah dengan membandingkan *hash* dari *s* yang dibuat beserta kata sandi secara mandiri. Pendekatan ini dijelaskan dalam Rekomendasi ITU-T X.1035.

### Kunci publik
Diffie–Hellman dapat dipakai dalam infrastruktur kunci publik sehingga Budi dapat mengenkripsi pesan yang hanya bisa didekripsi oleh Ani tanpa komunikasi sebelumnya. Misalkan kunci publik Ani adalah . Untuk mengiriminya pesan, Budi memilih bilangan acak *b*, lalu mengirimi Ani  (tidak dienkripsi) beserta pesan yang dienkripsi dengan kunci simetris . Hanya Ani yang dapat mendekripsi kunci simetris karena memiliki *a* sehingga dapat mendekripsi pesan yang dikirim oleh Budi.

## Lihat pula

* Pertukaran kunci Diffie–Hellman kurva eliptis
* Kerahasiaan ke depan

## Catatan kaki


## Referensi