Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #58, СЕНТЯБРЬ 2005 г.

Инструктаж перед боем

Крис Касперски

Спецвыпуск: Хакер, номер #058, стр. 058-018-3


Криптография сейчас в моде и насилуется даже там, где еще вчера была совершенно не нужна. Известное правило гласит: "Защищенность системы определяется ее самой слабой частью". Просто прикрутить к программе какой-нибудь криптографический протокол (например MD5) еще недостаточно. Это все равно что навесить на дачный домик железную дверь. Тут нужен целый комплекс защитных мер. Решетки на окнах. Бетонные стены, полы и потолок. Сигнализация. Камера видеонаблюдения, наконец!

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

Например, хэш Lan Manager'а, используемый для аутентификации в IBM OS/2 и Microsoft Windows NT, генерируется на основе двух "половинок" 14-символьной строки, в результате чего его криптостойкость ослабляется в сотни миллиардов раз! В грубом приближении, для взлома 14-символьного пароля требуется перебрать порядка N14 вариантов, а для взлома двух половинок - 2*N7, где N – количество символов в "алфавите" пароля (для Windows NT - 68).

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

С потоковыми шифрами все гораздо сложнее. Одна и та же часть гаммы ключа многократно накладывается на различные шифроданные, среди которых может присутствовать некоторое количество предсказуемой информации (например тип протокола в заголовке сетевого пакета). Это позволяет восстанавливать по несколько байт гаммы за раз, но, поскольку в различных пакетах на одни и те же поля накладываются различные части гаммы, через некоторое время вся гамма восстанавливается целиком и хакер получает возможность полностью расшифровать любой пакет.

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

Некоторые криптоалгоритмы (RC4, DES и др.) при шифровании с определенными ключами взламываются намного быстрее, чем ожидалось, так как малая часть битов ключа воздействует на значительное количество бит шифротекста. Такие ключи называются "слабыми" (weak). Программа, которая заботится о своей безопасности, обязательно должна проверять ключи на слабость, но, как показывает практика, многие из них об этом забывают. К их числу принадлежит и протокол WEP, использующийся в устройствах беспроводной связи. Поскольку эффективный ключ шифрования генерируется на основе секретного ключа и случайной привязки, "концентрация" слабых ключей становится просто угрожающей, и даже 128-битные ключи взламываются без особой натуги.

Назад на стр. 058-018-2  Содержание  Вперед на стр. 058-018-4