it-swarm-id.com

Mekanisme pertukaran kunci apa yang harus digunakan dalam TLS?

Ada banyak mekanisme pertukaran kunci yang dapat digunakan dalam TLS. Diantaranya adalah RSA, ECDH_ECDSA, ECDHE_ECDSA, ECDH_RSA, ECDHE_RSA dan lainnya. Manakah di antara ini yang lebih aman secara kriptografis dan dapat digunakan untuk mengamankan koneksi dengan situs web?

31
Andrei Botalov

Anda dapat menggunakan pertukaran kunci (sebagai bagian dari paket sandi) hanya jika jenis kunci server dan sertifikat cocok. Untuk melihat ini secara detail, mari kita lihat cipher suites yang didefinisikan dalam spesifikasi TLS 1.2 . Setiap paket sandi mendefinisikan algoritma pertukaran kunci, serta enkripsi simetris dan algoritma pemeriksaan integritas yang selanjutnya digunakan; kami berkonsentrasi di sini pada bagian pertukaran kunci.

  • RSA: pertukaran kunci bekerja dengan mengenkripsi nilai acak (dipilih oleh klien) dengan kunci publik server. Ini mensyaratkan bahwa kunci publik server adalah kunci RSA, dan bahwa sertifikat server tidak melarang enkripsi (terutama melalui ekstensi sertifikat "Penggunaan Kunci": jika ekstensi itu ada, itu harus menyertakan bendera "keyAgreement").

  • DH_RSA: pertukaran kunci adalah statis Diffie-Hellman : kunci publik server harus berupa kunci Diffie-Hellman; selain itu, sertifikat itu harus dikeluarkan oleh Otoritas Sertifikasi yang dengan sendirinya menggunakan kunci RSA (kunci CA adalah kunci yang digunakan untuk menandatangani sertifikat server).

  • DH_DSS: seperti DH_RSA, kecuali bahwa CA menggunakan kunci DSA.

  • DHE_RSA: pertukaran kunci adalah singkat Diffie-Hellman : server secara dinamis menghasilkan kunci publik DH dan mengirimkannya ke klien; server juga menandatangani apa yang dikirimkannya. Untuk DHE_RSA, kunci publik server harus bertipe RSA, dan sertifikatnya harus sesuai untuk tanda tangan (ekstensi Penggunaan Kunci, jika ada, harus menyertakan bendera tanda tangan digital).

  • DHE_DSS: seperti DHE_RSA, kecuali bahwa kunci server memiliki tipe DSA.

  • DH_anon: tidak ada sertifikat server. Server menggunakan kunci Diffie-Hellman yang mungkin dihasilkan secara dinamis. Suite sandi "anon" rentan terhadap serangan penyamaran (termasuk, tetapi tidak terbatas pada "Manusia di Tengah" ) karena tidak memiliki otentikasi server apa pun. Secara umum, Anda tidak akan menggunakan paket sandi "anon".

Algoritma pertukaran kunci yang menggunakan kriptografi kurva eliptik ditentukan dalam RFC lain dan mengusulkan yang berikut:

  • ECDH_ECDSA: seperti DH_DSA, tetapi dengan kurva eliptik: kunci publik server harus berupa kunci ECDH, dalam sertifikat yang dikeluarkan oleh CA yang menggunakan kunci publik ECDSA sendiri.

  • ECDH_RSA: seperti ECDH_ECDSA, tetapi CA yang menerbitkan memiliki kunci RSA.

  • ECDHE_ECDSA: server mengirim kunci EC Diffie-Hellman yang dihasilkan secara dinamis, dan menandatanganinya dengan kunci sendiri, yang harus memiliki tipe ECDSA. Ini setara dengan DHE_DSS, tetapi dengan kurva elips untuk bagian Diffie-Hellman dan bagian tanda tangan.

  • ECDHE_RSA: seperti ECDHE_ECDSA, tetapi kunci publik server adalah kunci RSA, digunakan untuk menandatangani kunci elliptic-curve Diffie-Hellman ephemeral.

  • ECDH_anon: suite sandi "anon", dengan kurva elips Diffie-Hellman dinamis.


Jadi, apa yang akan Anda pilih, untuk situs web? Kendala utama Anda adalah:

  • Anda menginginkan paket sandi yang didukung oleh sebagian besar klien; dalam praktiknya, ini mengesampingkan kriptografi kurva eliptik (kurva eliptik sangat keren, tetapi belum didukung dengan baik di lapangan - pertimbangkan bahwa menurut gs.statcounter , pada September 2011, 40% klien sistem masih menggunakan Windows XP, dan hampir 5% menggunakan IE 7.0).

  • Anda menginginkan suite sandi yang kompatibel dengan jenis dan sertifikat kunci server Anda. Ini, pada gilirannya, tergantung pada apa yang diterima CA (CA yang menjual sertifikat kepada Anda). 99,9% dari waktu, ini berarti RSA. Semua orang melakukan RSA. Kunci Diffie-Hellman dalam sertifikat, dan tanda tangan DSA, dulu dipromosikan oleh NIST (badan federal AS yang menangani masalah-masalah semacam itu) karena ada paten pada RSA; tetapi paten itu kedaluwarsa pada tahun 2000. Diffie-Hellman (sebagai bagian dari sertifikat) ditentukan oleh ANSI X9.42 , standar yang tidak gratis (sehingga pengembang waktu bebas opensource enggan mengimplementasikannya) dan tidak terlalu jelas. Jadi tidak ada yang benar-benar menggunakan Diffie-Hellman dalam sertifikat. DSA lebih banyak didukung (itu mendefinisikan standar gratis dan cukup mudah dibaca) tetapi tidak sampai menjadi non-anekdotik bila dibandingkan dengan RSA.

  • Anda tidak ingin menggunakan suite "anon" karena itu tidak aman terhadap penyerang aktif, dan sebagian besar browser klien memiliki suite "anon" dinonaktifkan secara default.

Jadi pilihan Anda pada dasarnya adalah antara "RSA" dan "DHE_RSA". Yang terakhir mungkin memiliki biaya komputasi yang sedikit lebih tinggi, meskipun Anda harus memiliki setidaknya beberapa ratus koneksi baru per detik untuk benar-benar melihat perbedaan (saya bersikeras "baru": karena TLS mencakup jabat tangan singkat yang dapat dibangun di atas pertukaran kunci dari koneksi sebelumnya, pertukaran kunci aktual dengan kriptografi asimetris hanya terjadi sekali per browser klien baru di menit terakhir). Jadi, dalam praktiknya, tidak ada perbedaan terukur pada beban CPU antara RSA dan DHE_RSA.

DHE_RSA menawarkan sesuatu yang dikenal sebagai Perfect Forward Secrecy , nama sombong untuk properti berikut: jika server Anda diretas secara menyeluruh, hingga penyerang mendapatkan salinan kunci privat server, maka ia juga akan dapat mendekripsi lalu sesi TLS (yang dia rekam) jika sesi ini menggunakan RSA, sementara dia tidak akan dapat melakukannya jika sesi ini menggunakan DHE_RSA. Dalam praktiknya, jika penyerang bisa mencuri kunci pribadi Anda, maka ia mungkin bisa membaca 10.000 nomor kartu kredit di basis data situs Anda, jadi ada sedikit alasan mengapa ia harus repot-repot merekam dan mendekripsi sesi sebelumnya karena ini hanya akan menghasilkan selusin tambahan angka atau lebih. PFS secara matematis elegan, tetapi overhyped. Jika itu masih merupakan akronim yang bagus dan dapat membuat kesan besar pada orang yang berpikiran lemah, sebagai bagian dari kampanye hubungan masyarakat yang dipikirkan dengan baik.


Ringkasan: gunakan DHE_RSA.

62
Thomas Pornin