Атака на связанных ключах


Ата́ка на свя́занных ключа́х (англ. Related-key attack)[1] — вид криптографической атаки, в которой криптоаналитик выбирает связь между парой ключей, но сами ключи остаются ему неизвестны. Данные шифруются обоими ключами. В варианте с известным открытым текстом криптоаналитику известны открытый текст и шифротекст данных, шифрованных двумя ключами. Цель злоумышленника состоит в том, чтобы найти фактические секретные ключи. Предполагается, что атакующий знает или выбирает некоторое математическое отношение, связывающее между собой ключи. Соотношение имеет вид () [2], где  — функция, выбранная атакующим, и  — связанные ключи. К каждому шифрованию соотношение между ключами подбирается индивидуально. Существует много способов найти это соотношение правильно[3]. По сравнению с другими атаками, в которых атакующий может манипулировать только открытым текстом и/или зашифрованным текстом, выбор соотношения между секретными ключами даёт дополнительную степень свободы для злоумышленника. Недостатком этой свободы является то, что такие нападения могут быть более трудными на практике. Тем не менее, проектировщики обычно пытаются создать «идеальные» примитивы, которые могут быть автоматически использованы без дальнейшего анализа в максимально широком наборе протоколов или режимов работы. Таким образом, сопротивление таким атакам является важной целью проектирования блочных шифров, и фактически это была одна из заявленных целей проектирования алгоритма Rijndael.

Большинство алгоритмов шифрования выполняют модификацию исходного ключа для его последующего использования. Такая модификация называется расширением ключа. Существуют примеры алгоритмов, в которых процедура расширения ключа является исключительно сложной по сравнению с собственно шифрованием, среди них стоит упомянуть алгоритмы HPC и FROG. Название процедуры определяется тем фактом, что исходный ключ шифрования обычно имеет размер существенно меньший совокупности подключей, используемых в раундах алгоритма то есть расширенного ключа.


Получается, что алгоритм шифрования можно логически разделить на два субалгоритма: собственно шифрующие преобразования и процедура расширения ключа. К процедуре расширения ключа предъявляется ряд требований[4]: