**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.

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

Penamaan
--------

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

> Sistem ini ... telah dikenal sebagai pertukaran kunci Diffie–Hellman. Walau sistem ini dijelaskan pertama kali dalam makalah oleh Diffie dan saya, ini tetaplah sistem penyaluran kunci publik, konsep yang dikembangkan oleh Merkle, sehingga seharusnya disebut "pertukaran kunci Diffie–Hellman–Merkle" bila menggunakan nama orang. Saya harap tulisan kecil ini bisa membantu dalam ikhtiar untuk memperkenalkan sumbangsih Merkle ke penemuan kriptografi kunci publik.
> 
>

Penjelasan
----------

### Gambaran umum

Ilustrasi konsep pertukaran kunci Diffie–Hellman
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 *p* - 1. Berikut adalah contoh pelaksanaan protokol dengan nilai yang tidak rahasia berwarna biru dan nilai yang rahasia berwarna merah.

1. Ani dan Budi menyepakati secara publik untuk memilih bilangan pembagi *p* = 23 dan bilangan dasar *g* = 5 yang menjadi akar primitif modulus 23.
2. Ani memilih bilangan bulat rahasia *a* = 4, lalu mengirimi Budi bilangan *A* = *g**a* mod *p*.
	* *A* = 54 mod 23 = 4
3. Budi memilih bilangan bulat rahasia *b* = 3, lalu mengirimi Ani bilangan *B* = *g**b* mod *p*.
	* *B* = 53 mod 23 = 10
4. Ani lalu menghitung nilai *s* = *B**a* mod *p*.
	* *s* = 104 mod 23 = 18
5. Budi lalu menghitung nilai *s* = *A**b* mod *p*.
	* *s* = 43 mod 23 = 18
6. 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*,

{\displaystyle {\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

{\displaystyle ({\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 *g**ab* mod *p* = *g**ba* mod *p* butuh waktu sangat lama untuk dihitung hanya dari *p*, *g*, *g**a* mod *p*, dan *g**b* mod *p*. 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 *g**a* mod *p*. Masalah ini disebut dengan masalah logaritme diskret. Perhitungan *g**a* mod *p* 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. *A* = *g**a* mod *p* = 8
* *B* = kunci publik Budi yang diketahui oleh Ani, Budi, dan Eka. *B* = *g**b* mod *p* = 19

* Ani| Tahu | Tidak tahu |
| --- | --- |
| *p* = 23 |  |
| *g* = 5 |  |
| *a* = *6* | *b* |
| *A* = 5*a* mod 23 |  |
| *A* = 5*6* mod 23 = 8 |  |
| *B* = *19* |  |
| *s* = B*a* mod 23 |  |
| *s* = 19*6* mod 23 = *2* |  |
* Budi| Tahu | Tidak tahu |
| --- | --- |
| *p* = 23 |  |
| *g* = 5 |  |
| *b* = *15* | *a* |
| *B* = 5*b* mod 23 |  |
| *B* = 5*15* mod 23 = 19 |  |
| *A* = *8* |  |
| *s* = A*b* mod 23 |  |
| *s* = 8*15* mod 23 = *2* |  |
* Eka| Tahu | Tidak tahu |
| --- | --- |
| *p* = 23 |  |
| *g* = 5 |  |
|  | *a*, *b* |
|   |  |
|   |  |
| *A* = 8, *B* = 19 |  |
|   |  |
|  | *s* |

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 (*ga* mod *p*, *g*, *p*). Untuk mengiriminya pesan, Budi memilih bilangan acak *b*, lalu mengirimi Ani *gb* mod *p* (tidak dienkripsi) beserta pesan yang dienkripsi dengan kunci simetris (*ga*)*b* mod *p*. Hanya Ani yang dapat mendekripsi kunci simetris karena memiliki *a* sehingga dapat mendekripsi pesan yang dikirim oleh Budi.

Lihat pula
----------


Wikimedia Commons memiliki media mengenai ***Pertukaran kunci Diffie–Hellman***.

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

Catatan kaki
------------

1. ↑  Sinonim pertukaran kunci Diffie–Hellman antara lain

	* pertukaran kunci Diffie–Hellman–Merkle,
	* kesepakatan kunci Diffie–Hellman,
	* pembentukan kunci Diffie–Hellman,
	* pertukaran kunci eksponensial,
	* protokol Diffie–Hellman, dan
	* jabat tangan Diffie–Hellman.

Referensi
---------

1. ↑  Merkle, Ralph C. (April 1978). "Secure Communications Over Insecure Channels". *Communications of the ACM*. **21** (4): 294–299. CiteSeerX 10.1.1.364.5157 alt=Dapat diakses gratis. doi:10.1145/359460.359473. Received August, 1975; revised September 1977  Parameter `|s2cid=` yang tidak diketahui akan diabaikan (bantuan)
2. 1 2 3  Diffie, Whitfield; Hellman, Martin E. (November 1976). "New Directions in Cryptography" (PDF). *IEEE Transactions on Information Theory*. **22** (6): 644–654. CiteSeerX 10.1.1.37.9720 alt=Dapat diakses gratis. doi:10.1109/TIT.1976.1055638. Diarsipkan dari versi asli (PDF) tanggal 29 November 2014.  Parameter `|url-status=` yang tidak diketahui akan diabaikan (bantuan)
3. 1 2 3  Adrian, David; Bhargavan, Karthikeyan; Durumeric, Zakir; Gaudry, Pierrick; Green, Matthew; Halderman, J. Alex; Heninger, Nadia; Springall, Drew; Thomé, Emmanuel; Valenta, Luke; VanderSloot, Benjamin; Wustrow, Eric; Zanella-Béguelin, Santiago; Zimmermann, Paul (October 2015). "Imperfect Forward Secrecy: How Diffie–Hellman Fails in Practice" (PDF).
4. ↑  Ellis, J. H. (Januari 1970). "The possibility of Non-Secret digital encryption" (PDF). *CESG Research Report*. Diarsipkan dari versi asli (PDF) tanggal 30 Oktober 2014. Diakses tanggal 28 Agustus 2015.  Parameter `|url-status=` yang tidak diketahui akan diabaikan (bantuan)
5. ↑  "The Possibility of Secure Non-Secret Digital Encryption" (PDF). Diarsipkan dari versi asli (PDF) tanggal 16 Februari 2017. Diakses tanggal 8 Juli 2017.  Parameter `|url-status=` yang tidak diketahui akan diabaikan (bantuan)
6. ↑  "GCHQ trio recognised for key to secure shopping online". *BBC News*. 5 Oktober 2010. Diarsipkan dari versi asli tanggal 10 Agustus 2014. Diakses tanggal 5 Agustus 2014.  Parameter `|url-status=` yang tidak diketahui akan diabaikan (bantuan)
7. ↑  Hellman, Martin E. (Mei 2002). "An overview of public key cryptography" (PDF). *IEEE Communications Magazine*. **40** (5): 42–49. CiteSeerX 10.1.1.127.2652 alt=Dapat diakses gratis. doi:10.1109/MCOM.2002.1006971. Diarsipkan dari versi asli (PDF) tanggal 2 April 2016.  Parameter `|s2cid=` yang tidak diketahui akan diabaikan (bantuan); Parameter `|url-status=` yang tidak diketahui akan diabaikan (bantuan)