Masalahnya hadir langsung dalam spesifikasi TLS dan hanya mempengaruhi koneksi menggunakan cipher berdasarkan protokol pertukaran kunci DH (Diffie-Hellman, TLS_DH_*"). Dengan cipher ECDH, masalah tidak terjadi dan tetap aman. Hanya protokol TLS hingga versi 1.2 yang rentan; TLS 1.3 tidak terpengaruh oleh masalah ini. Kerentanan terjadi pada implementasi TLS yang menggunakan kembali kunci rahasia DH di koneksi TLS yang berbeda (perilaku ini terjadi pada sekitar 4.4% server Alexa Top 1M).
Di OpenSSL 1.0.2e dan rilis sebelumnya, kunci utama DH digunakan kembali di semua koneksi server kecuali opsi SSL_OP_SINGLE_DH_USE disetel secara eksplisit. Sejak OpenSSL 1.0.2f, kunci utama DH hanya digunakan kembali saat menggunakan sandi DH statis ("DH-*", misalnya "DH-RSA-AES256-SHA"). Kerentanan tidak muncul di OpenSSL 1.1.1, karena cabang ini tidak menggunakan kunci utama DH dan tidak menggunakan sandi DH statis.
Saat menggunakan metode pertukaran kunci DH, kedua sisi koneksi menghasilkan kunci pribadi acak (selanjutnya disebut kunci βaβ dan kunci βbβ), berdasarkan kunci publik mana (ga mod p dan gb mod p) dihitung dan dikirim. Setelah masing-masing pihak menerima kunci publik, kunci utama umum (gab mod p) dihitung, yang digunakan untuk menghasilkan kunci sesi. Serangan Raccoon memungkinkan Anda menentukan kunci utama melalui analisis saluran samping, berdasarkan fakta bahwa spesifikasi TLS hingga versi 1.2 mengharuskan semua byte nol terkemuka dari kunci utama dibuang sebelum perhitungan yang melibatkannya.
Termasuk kunci utama terpotong diteruskan ke fungsi pembuatan kunci sesi, yang didasarkan pada fungsi hash dengan penundaan berbeda saat memproses data berbeda. Mengukur waktu operasi kunci yang dilakukan oleh server secara akurat memungkinkan penyerang menentukan petunjuk (oracle) yang memungkinkan untuk menilai apakah kunci utama dimulai dari awal atau tidak. Misalnya, penyerang dapat mencegat kunci publik (ga) yang dikirim oleh klien, mengirimkannya kembali ke server dan menentukan
apakah kunci utama yang dihasilkan dimulai dari nol.
Dengan sendirinya, mendefinisikan satu byte kunci tidak menghasilkan apa-apa, tetapi dengan mencegat nilai "ga" yang dikirimkan oleh klien selama negosiasi koneksi, penyerang dapat menghasilkan sekumpulan nilai lain yang terkait dengan "ga" dan mengirimkannya ke server dalam sesi negosiasi koneksi terpisah. Dengan menghasilkan dan mengirimkan nilai βgri*gaβ, penyerang dapat, melalui analisis perubahan penundaan respons server, menentukan nilai yang mengarah pada penerimaan kunci utama mulai dari nol. Setelah menentukan nilai tersebut, penyerang dapat membuat serangkaian persamaan
Kerentanan OpenSSL
Masalah tambahan dicatat secara terpisah (
Sumber: opennet.ru