Windows NT menggunakan protokol point-to-point di mana klien dapat berkomunikasi "aman" dengan server dengan menggunakan stream cipher untuk mengenkripsi array pesan dengan beberapa kunci . Server juga mengenkripsi responsnya dengan kunci yang sama k . Tapi bagaimana cara mengetahui kunci ini?
Lebih umum: jika Alice dan Bob menggunakan beberapa algoritma enkripsi / dekripsi yang beroperasi pada kunci privat yang sama , apa cara aman bertukar kunci ini? (tanpa menggunakan ofcourse kunci yang berbeda)
Ini adalah sesuatu yang selalu saya tanyakan pada diri sendiri ketika mempelajari kriptografi kunci pribadi.
cryptography
encryption
codd
sumber
sumber
Jawaban:
Sebagian besar algoritma kunci privat bergantung pada ketidakmungkinan perhitungan tertentu seperti faktorisasi nomor menjadi faktor utama mengingat infrastruktur komputasi saat ini.
Pada saat yang sama, sebagian besar dari mereka juga intensif secara komputasi ketika digunakan untuk enkripsi dan dekripsi dan oleh karena itu seluruh aliran pesan tidak dienkripsi menggunakan kunci pribadi. Sebaliknya, pesan dienkripsi menggunakan beberapa algoritma lain (kurang intensif) dan kunci yang digunakan untuk enkripsi itu dienkripsi menggunakan Kunci Pribadi.
Tentu saja, seperti yang Anda tunjukkan, pertukaran kunci yang aman tetap menjadi masalah yang pada tingkat tertentu dapat ditangani oleh:
sumber
Setiap kali Alice dan Bob ingin menyetujui kunci privat yang sama, metode yang paling populer adalah menggunakan Diffie-Hellman . Ia bekerja sebagai berikut:
Dua nilai publik yang pertama dipilih katakanlah dan g = 17 . (Ini biasanya bilangan prima yang sangat besar dan diketahui semua orang menggunakan protokol itu).n = 13 g= 17
Masalah dalam kriptografi kunci pribadi adalah serangan man-in-the-middle dan itu adalah salah satu alasan utama untuk memilih kriptografi kunci publik daripada kriptografi kunci pribadi.
sumber
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:
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.
sumber
Cara yang mungkin adalah dengan terlebih dahulu menggunakan Public-Key Cryptography untuk bertukar kunci pribadi. Namun, ketika itu tidak mungkin, ada beberapa protokol pertukaran kunci tertentu, mungkin yang paling terkenal adalah protokol Diffie-Hellman .
sumber
Selalu ada solusi sepele: pengguna bertemu dan bertukar kunci. Ini tidak terlalu praktis untuk banyak kasus, tetapi mungkin.
Selain protokol pertukaran kunci Diffie-Hellman (DH), ada juga protokol distribusi kunci kuantum . Salah satu protokol QKD yang paling dikenal adalah protokol Bennett-Brassard, BB84 .
Di sisi lain, serangan MITM juga merupakan masalah bagi BB84, dan orang harus mengasumsikan pengguna menggunakan saluran terautentikasi untuk mengatasi masalah ini (tetapi ini biasanya mengharuskan mereka untuk membuat kunci otentikasi terlebih dahulu, dan kami kembali ke titik awal).
sumber