Pertama, titik terminologi: apa yang Anda gambarkan adalah enkripsi simetris , dan kunci yang dibagikan di antara para peserta biasanya dikenal sebagai kunci rahasia; "Kunci pribadi" biasanya berarti bagian dari kunci dalam kriptografi kunci publik yang hanya diketahui oleh satu peserta.
Ada dua cara penyebaran kunci rahasia: itu dapat diangkut dengan cara yang aman secara fisik, atau dapat diangkut menggunakan beberapa bentuk enkripsi lain, umumnya kriptografi kunci publik.
Ada cara untuk bertukar kunci rahasia yang tidak memerlukan saluran komunikasi rahasia. Yang paling populer adalah protokol pertukaran kunci Diffie-Hellman. Prinsip Diffie-Hellman adalah bahwa setiap peserta menghasilkan pasangan kunci sendiri, dan ada operasi matematika yang membangun sejumlah besar dari satu kunci publik dan satu kunci pribadi. Operasi matematika ini memiliki sifat yang sangat menarik: angka besar dapat dibangun dari kunci pribadi Alice dan kunci publik Bob, atau dari kunci pribadi Bob dan kunci publik Alice; Anda mendapatkan nomor yang sama juga. Jadi Alice dan Bob bertukar kunci publik mereka, dan kedua belah pihak mengetahui jumlah besar, yang kemudian dapat digunakan sebagai kunci rahasia. Eavesdropper dapat mengetahui kedua kunci publik, tetapi tidak mungkin find untuk menemukan angka besar hanya dari kunci publik.
Pertukaran kunci Diffie-Hellman memungkinkan dua pihak untuk bertukar rahasia, tidak peduli siapa yang mendengarkan. Namun, itu tidak mengotentikasi Alice ke Bob atau sebaliknya. Oleh karena itu dapat menerima serangan pria-di-tengah : Mallory melakukan pertukaran kunci dengan Alice (yang percaya dia berbicara dengan Bob) dan secara terpisah dengan Bob (yang percaya dia berbicara dengan Alice), dan dengan demikian dapat memutuskan atau paling tidak tahu rahasianya.
Ketika penyerang dapat mencegat dan menyuntikkan pesan, lebih banyak kriptografi diperlukan bagi para peserta untuk saling mengotentikasi. (Seorang penyerang pasif secara efektif berarti bahwa protokol transport yang mendasarinya menyediakan otentikasi.) Cara yang mudah adalah agar setiap peserta sudah mengetahui kunci publik masing-masing. Jika Alice mengetahui kunci publik Bob:
- Alice dapat mengotentikasi Bob dengan mengirimkannya tantangan: nilai acak ( nonce ) dienkripsi dengan kunci publik Bob. Jika Bob dapat mendekripsi nilai itu dan mengirimkannya kembali, Alice tahu dia benar-benar berbicara dengan Bob.
- Bob dapat mengautentikasi dengan Alice dengan mengiriminya pesan yang ditandatangani dengan kunci publiknya. Alice memverifikasi tanda tangan untuk memastikan dia benar-benar berbicara dengan Bob.
Ada banyak varian yang menggunakan salah satu metode ini (atau varian lain) dalam satu arah dan metode yang sama atau berbeda di arah lain, atau yang mengautentikasi dalam satu arah saja. Sebagai contoh, SSL / TLS (lapisan kriptografi untuk banyak protokol -s seperti HTTPS, SMTPS, IMAPS, dll.) Dapat menggunakan beberapa kombinasi sandi yang berbeda, dan biasanya mengautentikasi server ke klien tetapi secara opsional dapat mengotentikasi klien juga. Diffie-Hellman lambat dan rumit untuk aplikasi ini; algoritma yang paling luas dengan distribusi kunci publik adalah RSA .
Tentu saja, Alice dan Bob mungkin tidak tahu kunci publik satu sama lain sebelumnya. Jadi mereka malah mengandalkan rantai kepercayaan: Bob mengirimkan Alice kunci publiknya, di samping pernyataan yang ditandatangani dari pihak ketiga yang menegaskan bahwa kunci ini benar-benar kunci publik Bob. Pernyataan yang ditandatangani ini disebut sertifikat dan pihak ketiga adalah otoritas sertifikat . Pihak ketiga dapat diketahui oleh Bob, atau identitasnya dapat dikonfirmasi oleh pihak keempat, dan seterusnya. Akhirnya rantai kepercayaan ini (... vouches untuk Dominique vouches untuk Charlie yang vouches untuk Bob) harus menjangkau beberapa pihak Ron yang sudah dipercayai Bob, artinya Bob memiliki kunci publik Ron dan mempercayai Ron untuk hanya menandatangani sertifikat yang valid.
Ada protokol yang tidak bergantung pada kriptografi kunci publik. Secara khusus, protokol Kerberos digunakan di jaringan berbasis unix dan berbasis Windows untuk membangun koneksi antara klien dan server. Kerberos menggunakan server otentikasi pusat yang disebut pusat distribusi kunci (KDC). KDC harus memiliki kata sandi pengguna yang disimpan dalam database, dan klien biasanya meminta kata sandi pengguna. Untuk menghindari pemaparan kata sandi, protokol tidak menggunakan kata sandi secara langsung, tetapi hash kriptografi atau lebih umum fungsi derivasi kunci diterapkan pada kata sandi.
Dengan rahasia bersama ini, klien dan KDC membuat saluran yang aman dan KDC mengirimkan "tiket" kepada klien. Tiket berisi kunci sesi (yaitu kunci rahasia yang baru dibuat), serta salinan kunci yang dienkripsi dengan kunci simetris lain yang dibagikan antara KDC dan server yang ingin dihubungi klien. Klien kemudian meneruskan salinan terenkripsi ini ke server. Server mendekripsi pesan ini untuk mendapatkan kunci sesi, dan menghasilkan nonce yang dienkripsi dengan kunci sesi dan mengirim kembali ke klien. Klien kemudian memulai saluran aman dengan server, dienkripsi dengan kunci sesi, dan mulai dengan menunjukkan bahwa itu dapat mendekripsi data: ini mengautentikasi klien ke server. Pembentukan sesi Kerberos adalah varian dari protokol Needham-Schroeder .
¹ Dalam arti bahwa kriptografer telah berusaha sangat keras, tetapi cara terbaik yang mereka temukan untuk melakukannya membutuhkan jumlah daya komputasi yang tidak dapat diraih.