Принцип Керкхоффса (также называемый желательным условием , предположением , аксиомой , доктриной или законом Керкхоффса ) криптографии был сформулирован голландским криптографом Огюстом Керкхоффсом в XIX веке. Принцип гласит, что криптосистема должна быть безопасной, даже если все о системе, за исключением ключа , является общедоступным знанием. Эта концепция широко принята криптографами, в отличие от безопасности через неизвестность , которая таковой не является.
Принцип Керкхоффса был сформулирован американским математиком Клодом Шенноном как « враг знает систему», [1] т. е. «следует проектировать системы, предполагая, что противник немедленно получит полное представление о них». В такой форме он называется максимой Шеннона .
Другая формулировка американского исследователя и профессора Стивена М. Белловина звучит так:
Другими словами — проектируйте свою систему, предполагая, что ваши оппоненты знают ее в деталях. (Бывший сотрудник Национального центра компьютерной безопасности АНБ сказал мне, что стандартным предположением там было то, что серийный номер 1 любого нового устройства был доставлен в Кремль.) [2]
Изобретение телеграфа радикально изменило военную связь и значительно увеличило количество сообщений, которые необходимо было защищать от противника, что привело к разработке полевых шифров, которые должны были быть простыми в использовании без больших конфиденциальных кодовых книг, которые могли быть перехвачены на поле боя. [3] Именно эта среда привела к разработке требований Керкгоффса.
Огюст Керкхоффс был профессором немецкого языка в Высшей коммерческой школе (HEC) в Париже. [4] В начале 1883 года статья Керкхоффса « La Cryptographie Militaire » [5] была опубликована в двух частях в « Журнале военной науки» , в которой он изложил шесть правил проектирования военных шифров . [6] В переводе с французского они таковы: [7] [8]
Некоторые из них больше не актуальны, учитывая способность компьютеров выполнять сложное шифрование. Второе правило, теперь известное как принцип Керкхоффса , по-прежнему имеет решающее значение. [9]
Керкхоффс рассматривал криптографию как конкурента и лучшую альтернативу стеганографическому кодированию, которое было распространено в девятнадцатом веке для сокрытия смысла военных сообщений. Одна из проблем со схемами кодирования заключается в том, что они опираются на секреты, хранимые людьми, такие как «словари», которые раскрывают, например, секретное значение слов. Словари, подобные стеганографии, будучи однажды раскрытыми, навсегда ставят под угрозу соответствующую систему кодирования. Другая проблема заключается в том, что риск разоблачения увеличивается по мере увеличения числа пользователей, хранящих секреты.
Криптография девятнадцатого века, напротив, использовала простые таблицы, которые обеспечивали транспозицию буквенно-цифровых символов, как правило, с заданными пересечениями строк и столбцов, которые можно было изменять с помощью ключей, которые обычно были короткими, числовыми и могли быть зафиксированы в человеческой памяти. Система считалась «нерасшифровываемой», поскольку таблицы и ключи сами по себе не передают смысла. Секретные сообщения могут быть скомпрометированы, только если соответствующий набор таблицы, ключа и сообщения попадет в руки противника в соответствующий временной интервал. Керкхоффс рассматривал тактические сообщения как имеющие только несколько часов актуальности. Системы не обязательно скомпрометированы, поскольку их компоненты (т. е. таблицы буквенно-цифровых символов и ключи) можно легко изменить.
Использование безопасной криптографии должно заменить сложную проблему сохранения сообщений в безопасности на гораздо более управляемую, сохраняя относительно небольшие ключи в безопасности. Система, которая требует долговременной секретности для чего-то столь большого и сложного, как вся конструкция криптографической системы, очевидно, не может достичь этой цели. Она только заменяет одну сложную проблему другой. Однако, если система безопасна, даже когда противник знает все, кроме ключа, то все, что нужно, — это управлять сохранением ключей в секрете. [10]
Существует множество способов, с помощью которых можно раскрыть внутренние детали широко используемой системы. Наиболее очевидным является подкуп, шантаж или иные угрозы, которые могут заставить персонал или клиентов объяснить систему. Например, во время войны одна сторона, вероятно, захватит некоторое оборудование и людей у другой стороны. Каждая сторона также будет использовать шпионов для сбора информации.
Если метод включает программное обеспечение, кто-то может делать дампы памяти или запускать программное обеспечение под контролем отладчика, чтобы понять метод. Если используется оборудование, кто-то может купить или украсть часть оборудования и создать любые программы или гаджеты, необходимые для его тестирования. Оборудование также может быть разобрано, чтобы детали чипа можно было изучить под микроскопом.
Некоторые делают обобщение из принципа Керкхоффса: «Чем меньше и проще секреты, которые необходимо хранить для обеспечения безопасности системы, тем легче поддерживать безопасность системы». Брюс Шнайер связывает это с убеждением, что все системы безопасности должны быть спроектированы так, чтобы выходить из строя как можно более изящно :
принцип применим не только к кодам и шифрам, но и к системам безопасности в целом: каждый секрет создает потенциальную точку отказа . Другими словами, секретность является основной причиной хрупкости — и, следовательно, чем-то, что может сделать систему склонной к катастрофическому краху. И наоборот, открытость обеспечивает пластичность. [11]
Любая система безопасности в решающей степени зависит от сохранения некоторых вещей в тайне. Однако принцип Керкхоффса указывает на то, что вещи, которые хранятся в тайне, должны быть наименее затратными для изменения в случае непреднамеренного раскрытия. [9]
Например, криптографический алгоритм может быть реализован аппаратным и программным обеспечением, которое широко распространено среди пользователей. Если безопасность зависит от сохранения этого секрета, то раскрытие приводит к серьезным логистическим трудностям при разработке, тестировании и распространении реализаций нового алгоритма – он «хрупок». С другой стороны, если сохранение алгоритма в секрете не важно, а только ключи, используемые с алгоритмом, должны быть секретными, то раскрытие ключей просто требует более простого и менее затратного процесса генерации и распространения новых ключей. [12]
В соответствии с принципом Керкхоффса, большинство гражданских криптографий используют общедоступные алгоритмы. Напротив, шифры, используемые для защиты секретной правительственной или военной информации, часто держатся в секрете (см. Шифрование типа 1 ). Однако не следует полагать, что правительственные/военные шифры должны храниться в секрете для поддержания безопасности. Возможно, они предназначены для того, чтобы быть такими же криптографически надежными, как общедоступные алгоритмы, и решение держать их в секрете соответствует многоуровневой позиции безопасности.
Довольно распространено среди компаний, а иногда даже среди органов стандартизации, как в случае с CSS-шифрованием на DVD , держать внутренние механизмы системы в секрете. Некоторые [ кто? ] утверждают, что эта «безопасность через неизвестность» делает продукт более безопасным и менее уязвимым для атак. Контраргумент заключается в том, что сохранение внутренних механизмов в секрете может улучшить безопасность в краткосрочной перспективе, но в долгосрочной перспективе доверять следует только тем системам, которые были опубликованы и проанализированы.
Стивен Белловин и Рэнди Буш прокомментировали: [13]
Безопасность через неизвестность считается опасной
Сокрытие уязвимостей безопасности в алгоритмах, программном обеспечении и/или оборудовании снижает вероятность того, что они будут исправлены, и увеличивает вероятность того, что они могут быть и будут использованы. Препятствование или запрет обсуждения слабостей и уязвимостей чрезвычайно опасны и пагубны для безопасности компьютерных систем, сети и ее граждан.
Открытое обсуждение способствует повышению безопасности
Долгая история криптографии и криптоанализа раз за разом показывала, что открытое обсуждение и анализ алгоритмов выявляют слабости, о которых не думали первоначальные авторы, и тем самым приводят к лучшим и более безопасным алгоритмам. Как заметил Керкхоффс о системах шифрования в 1883 году [Kerc83], "Il faut qu'il n'exige pas le secret, et qu'il puisse sans inconvénient tomber entre les mains de l'ennemi". (Грубо говоря, "система не должна требовать секретности и должна быть способна быть украдена противником без причинения беспокойства".)