Логика Берроуза–Абади–Нидхэма (также известная как логика BAN ) — это набор правил для определения и анализа протоколов обмена информацией. В частности, логика BAN помогает пользователям определить, является ли обмениваемая информация надежной, защищенной от подслушивания или и то, и другое. Логика BAN начинается с предположения, что весь обмен информацией происходит на носителях, уязвимых для несанкционированного доступа и публичного мониторинга. Это превратилось в популярную мантру безопасности: «Не доверяй сети».
Типичная логическая последовательность BAN включает три шага: [1]
Логика BAN использует постулаты и определения – как и все аксиоматические системы – для анализа протоколов аутентификации . Использование логики BAN часто сопровождает формулировку протокола безопасности и иногда приводится в статьях.
Логика BAN и логики в том же семействе разрешимы : существует алгоритм, принимающий гипотезы BAN и предполагаемое заключение, и который отвечает, выводится ли заключение из гипотез. Предлагаемые алгоритмы используют вариант магических множеств . [2]
Логика BAN вдохновила многие другие подобные формализмы, такие как логика GNY. Некоторые из них пытаются исправить одну слабость логики BAN: отсутствие хорошей семантики с ясным значением в терминах знаний и возможных вселенных. Однако, начиная с середины 1990-х годов, криптопротоколы анализировались в операционных моделях (предполагая идеальную криптографию) с использованием проверяющих моделей, и были обнаружены многочисленные ошибки в протоколах, которые были «проверены» с помощью логики BAN и связанных формализмов. [ необходима цитата ] В некоторых случаях протокол считался безопасным с помощью анализа BAN, но на самом деле был небезопасным. [3] Это привело к отказу от логик семейства BAN в пользу методов доказательства, основанных на стандартном инвариантном рассуждении. [ необходима цитата ]
Определения и их последствия приведены ниже ( P и Q — сетевые агенты, X — сообщение, а K — ключ шифрования ):
Смысл этих определений отражен в ряде постулатов:
P должен верить, что X здесь свежий. Если неизвестно, является ли X свежим, то это может быть устаревшим сообщением, воспроизведенным злоумышленником.
Используя эту нотацию, можно формализовать предположения, лежащие в основе протокола аутентификации. Используя постулаты, можно доказать, что определенные агенты считают, что они могут общаться, используя определенные ключи. Если доказательство не удается, точка отказа обычно предполагает атаку, которая компрометирует протокол.
Очень простой протокол — протокол Wide Mouth Frog — позволяет двум агентам, A и B , устанавливать защищенную связь, используя доверенный сервер аутентификации, S, и синхронизированные часы по всему периметру. Используя стандартную нотацию, протокол можно определить следующим образом:
Агенты A и B оснащены ключами K AS и K BS соответственно для безопасной связи с S. Итак, у нас есть предположения:
Агент A хочет начать безопасный разговор с B. Поэтому он изобретает ключ K AB , который он будет использовать для связи с B. A считает , что этот ключ безопасен, поскольку он сам его создал:
B готов принять этот ключ, если он уверен, что он пришел от A :
Более того, B готов доверять S в точной передаче ключей от A :
То есть, если B полагает, что S полагает, что A хочет использовать определенный ключ для связи с B , то B будет доверять S и также верить в это.
Цель состоит в том, чтобы иметь
A считывает показания часов, получает текущее время t и отправляет следующее сообщение:
То есть он отправляет выбранный им сеансовый ключ и текущее время на S , зашифрованные его закрытым ключом сервера аутентификации K AS .
Поскольку S полагает, что key( K AS , A ↔ S ) , и S видит { t , key( K AB , A ↔ B )} K AS , то S делает вывод, что A на самом деле сказал { t , key( K AB , A ↔ B )} . (В частности, S полагает, что сообщение не было полностью сфабриковано каким-то злоумышленником.)
Поскольку часы синхронизированы, мы можем предположить,
Поскольку S верит, что fresh( t ) и S верит, что A сказал { t , key( K AB , A ↔ B )} , S верит, что A на самом деле верит , что key( K AB , A ↔ B ) . (В частности, S верит, что сообщение не было воспроизведено каким-то злоумышленником, который перехватил его в какой-то момент в прошлом.)
Затем S пересылает ключ B :
Поскольку сообщение 2 зашифровано с помощью K BS , и B верит key( K BS , B ↔ S ) , B теперь верит, что S сказал { t , A , A верит key( K AB , A ↔ B )} . Поскольку часы синхронизированы, B верит fresh( t ), и поэтому fresh( A верит key( K AB , A ↔ B ) ). Поскольку B верит, что утверждение S является свежим, B верит, что S верит, что ( A верит key( K AB , A ↔ B ) ). Поскольку B верит, что S авторитетен в отношении того, во что верит A , B верит, что ( A верит key( K AB , A ↔ B ) ). Поскольку B верит, что A авторитетен в отношении ключей сеанса между A и B , B верит key( K AB , A ↔ B ) . Теперь B может связаться с A напрямую, используя K AB в качестве секретного сеансового ключа.
Теперь предположим, что мы отказываемся от предположения, что часы синхронизированы. В этом случае S получает сообщение 1 от A с помощью { t , key( K AB , A ↔ B )} , но он больше не может сделать вывод, что t является свежим. Он знает, что A отправил это сообщение в какой-то момент в прошлом (потому что оно зашифровано с помощью K AS ), но не знает, что это недавнее сообщение, поэтому S не верит, что A обязательно хочет продолжать использовать ключ K AB . Это напрямую указывает на атаку на протокол: злоумышленник, который может перехватывать сообщения, может угадать один из старых ключей сеанса K AB . (Это может занять много времени.) Затем злоумышленник воспроизводит старое сообщение { t , key( K AB , A ↔ B )} , отправляя его S . Если часы не синхронизированы (возможно, как часть той же атаки), S может поверить этому старому сообщению и попросить B снова использовать старый, скомпрометированный ключ.
Оригинальная статья «Логика аутентификации» (ссылка на которую приведена ниже) содержит этот пример и многие другие, включая анализ протокола рукопожатия Kerberos и две версии RPC-рукопожатия Andrew Project (одна из которых неисправна).