Проблема присутня безпосередньо у специфікації TLS і зачіпає лише з'єднання, що використовують шифри на основі протоколу обміну ключами DH (Diffie-Hellman, TLS_DH_*»). Із шифрами ECDH проблема не проявляється, і вони залишаються безпечними. Вразливі лише протоколи TLS до версії 1.2 включно, протокол TLS 1.3 проблемі не схильний. Вразливість проявляється у реалізаціях TLS, які повторно використовують секретний ключ DH у різних TLS-з'єднаннях (подібна поведінка спостерігається приблизно на 4.4% серверів з рейтингу Alexa Top 1M).
В OpenSSL 1.0.2e і попередніх випусках первинний ключ DH повторно використовується у всіх серверних з'єднаннях, якщо явно не виставлена опція SSL_OP_SINGLE_DH_USE. Починаючи з OpenSSL 1.0.2f, первинний ключ DH повторно використовується тільки при використанні статичних DH-шифрів («DH-*», наприклад «DH-RSA-AES256-SHA»). В OpenSSL 1.1.1 вразливість не виявляється, оскільки в цій гілці не використовується первинний ключ DH і не використовуються статичні DH-шифри.
При використанні методу обміну ключами DH обидві сторони з'єднання генерують випадкові закриті ключі (далі ключ «a» та ключ «b»), на основі яких обчислюються та відправляються відкриті ключі (ga mod p та gb mod p). Після отримання відкритих ключів кожною стороною обчислюється загальний первинний ключ (gab mod p), який застосовується формування сесійних ключів. Атака Raccoon дозволяє визначити первинний ключ через аналіз інформації по стороннім каналам, відштовхуючись від того, що в специфікаціях TLS аж до версії 1.2 пропонується відкидати всі початкові нульові байти первинного ключа перед обчисленнями за його участю.
У тому числі урізаний первинний ключ передається у функцію генерації сесійного ключа, засновану на хеш-функціях з відмінними затримками при обробці різних даних. Точне вимірювання часу виконуваних сервером операцій із ключем дозволяє атакуючому визначити підказки (oracle), які дозволяють судити у тому, починається первинний ключ із нуля чи ні. Наприклад, атакуючий може перехопити відправлений клієнтом відкритий ключ (ga), перенаправити його на сервер і визначити
чи починається з нуля результуючий первинний ключ.
Саме по собі визначення одного байта ключа нічого не дає, але перехопивши передане при узгодженні з'єднання клієнтом значення ga атакуючий може сформувати набір інших значень, пов'язаних з ga і відправити їх на сервер в окремих сеансах узгодження з'єднання. Формуючи та відправляючи значення «gri*ga», атакуючий може через аналіз зміни затримок у відповіді сервера визначити значення, що призводять до отримання первинних ключів, що починаються з нуля. Визначивши подібні значення атакуючий, може скласти набір рівнянь для
В OpenSSL вразливості
Окремо зазначаються додаткові проблеми (
Джерело: opennet.ru