Атаки на поиск ключа

Ата́ки на по́иск ключа́ (англ. key finding attacks) — это атаки на компьютерные системы, использующие криптографию, при которых оперативная память или энергонезависимое хранилище просматриваются с целью обнаружения частных криптографических ключей, которые могут быть использованы для расшифровки или подписания данных.

Термин обычно применяется в контексте атак, осуществляющих поиск по памяти гораздо эффективнее, чем простая последовательная проверка байтов на предмет совпадения искомых данных. Часто такие атаки применяются вместе с атаками холодной перезагрузки для извлечения материалов ключей из компьютеров.

Подходы

В своей фундаментальной работе[1] о атаках на поиск ключа Шамир и ван Сомерен предложили два различных метода поиска ключей: статистический (энтропийный) и аналитический. Первый основан на выявлении отличий в статистических свойствах данных, составляющих криптографические ключи, тогда как второй опирается на определение специфических последовательностей байтов, которые обязательно должны присутствовать в искомом материале ключа, и поиск таких паттернов.

Статистический поиск ключа

В целом для большинства криптографических систем ключи должны быть максимально случайными. В большинстве симметричных шифров ключи могут и должны быть действительно случайным набором битов. Для большинства систем асимметричной криптографии секретные ключи — это либо случайные числа с определёнными ограничениями (например, простота или роль генератора в группе), либо результат вычислений на основе случайных данных с определёнными условиями. В обоих случаях материал ключа обладает высокой энтропией. В отличие от этого, большая часть несжатых данных в памяти компьютера имеет относительно низкую энтропию. В результате, если известно, что ключ присутствует в памяти в исходном виде, он, скорее всего, будет выделяться на фоне остальных данных за счёт высокой энтропии, и атакующему достаточно проверять подозрительные участки памяти или хранилища с высокой энтропией.

undefined

Контраст между низкой энтропией обычных данных и высокой энтропией ключевого материала настолько силён, что его можно заметить даже визуально. Пример этого показан на изображении справа.

Аналитический поиск ключа

Хотя статистический поиск ключа может эффективно сузить объём памяти для анализа, всё равно требуется проверять области высокой энтропии на наличие искомого материала. В некоторых случаях, особенно для систем открытых ключей, можно определить паттерны, обязательно встречающиеся в материалах ключа, и ограничить поиск лишь областями, где эти паттерны обнаруживаются.

Шамир и ван Сомерен[1] показали пример такого аналитического подхода для поиска частных ключей RSA, если известен открытый ключ с малым публичным показателем. В системе RSA открытый ключ представляет собой пару , где , p и q — два больших простых числа. Соответствующий приватный ключ записывается как (или иногда либо их вариант), где ; то есть, e, умноженное на d, сравнимо с 1 по модулю , где φ — функция Эйлера и равна размеру мультипликативной группы по модулю n. В случае с RSA:

.

Нахождение значения по n позволяет факторизовать n, и безопасность RSA основана на сложности этой задачи. Таким образом, зная только e и n, нельзя точно вычислить d. Однако атакующий может получить представление о том, как выглядит d, учитывая, что p и q обычно равны по длине (в битах) и оба примерно равны корню из n. Тогда можно приблизительно оценить:

.

И обычно в более значащей части битового представления это приближение будет верно. Связь между e и d выражается как:

,

где точное значение k неизвестно, но Используя это равенство и приближение , атакующий может перебрать возможные значения верхней половины битов d для каждого k. Эту битовую маску можно искать на порядки быстрее, чем выполнять тестовую расшифровку. Более того, в частом случае оказывается, что что позволяет определить и напрямую искать старшие биты d.

Применение

Атаки на поиск ключа применялись вместе с атаками холодной перезагрузки для извлечения ключей из машин после их выключения[2]. Генингер и Ховав Шахам показали, что ключи можно извлекать даже в случае искажения данных в оперативной памяти после отключения питания[3].

Статистический поиск ключа применялся Нико ван Сомереном для поиска ключей проверки подписи, используемых корпорацией Microsoft для валидации подписей MS-CAPI-плагинов. Один из таких ключей получил обозначение NSAKEY от самой Microsoft, что вызвало определённые споры[4].

Методы противодействия

Атакам на поиск ключа можно противостоять несколькими способами. Для защиты от аналитических атак используется рандомизированное слепление ключей, препятствующее появлению ожидаемых паттернов в памяти; этот же подход защищает и от некоторых других побочных атак. Для затруднения статистического поиска ключей в оперативной памяти можно размещать другие данные с высокой энтропией или хранить материал ключа в виде распределённого по большому блоку памяти массива вне использования, чтобы уменьшить концентрацию энтропии в одном месте.

Примечания

  1. 1 2 Шамир, Ади. Playing Hide and Seek With Stored Keys : [англ.] / Ади Шамир, Нико ван Сомерен. — 1998-01-01. — P. 118–124.
  2. Halderman, J. Alex; Schoen, Seth D.; Heninger, Nadia; Clarkson, William; Paul, William; Cal, Joseph A.; Feldman, Ariel J.; Felten, Edward W. (2008-01-01). “Least we remember: Cold boot attacks on encryption keys”. In USENIX Security Symposium [англ.].
  3. Heninger, Nadia. Reconstructing rsa private keys from random key bits // Proceedings of Crypto 2009 : [англ.] / Nadia Heninger, Hovav Shacham. — 2009-01-01. — P. 1–17.
  4. Microsoft/NSA Info (англ.) (17 июня 2000). Дата обращения: 12 октября 2016. Архивировано 17 июня 2000 года.

Категории