Cryptology Academy · Урок

ProVerif: автоматическая проверка протоколов

Задайте и проверьте свойства рукопожатия TLS с помощью ProVerif

Урок 3 из 412 шагов

«ProVerif: автоматическая проверка протоколов» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.

Что такое ProVerif

ProVerif (Bruno Blanchet, 2001) — это автоматический проверяющий инструмент для криптографических протоколов. Он принимает протокол, описанный в прикладном π-исчислении, и автоматически проверяет свойства секретности и аутентификации.

Как работает ProVerif

ProVerif переводит протокол в хорновские дизъюнкты и применяет алгоритм на основе резолюции, чтобы вывести, что может узнать злоумышленник. Если факт о секретности выводим, протокол взломан; в противном случае его безопасность PROVED.

Входной язык ProVerif

Протоколы описываются декларативно: объявляются каналы, типы, функции (enc, dec, sign, verify), уравнения (dec(enc(m,k),k)=m) и процессы, обменивающиеся данными по каналам.

Объявление криптографических примитивов

Пример объявлений ProVerif:

(* Symmetric encryption *)
fun senc(bitstring, key): bitstring.
fun sdec(bitstring, key): bitstring.
equation forall m: bitstring, k: key; sdec(senc(m, k), k) = m.

(* Asymmetric encryption *)
fun pk(skey): pkey.
fun aenc(bitstring, pkey): bitstring.
fun adec(bitstring, skey): bitstring.
equation forall m: bitstring, sk: skey; adec(aenc(m, pk(sk)), sk) = m.

Написание простого процесса протокола

Представим Alice и Bob как параллельные процессы:

(* Alice sends nonce to Bob, encrypted *)
let Alice(skA: skey, pkB: pkey) =
  new na: nonce;
  out(c, aenc((na, pk(skA)), pkB));
  in(c, m: bitstring);
  let nb = adec(m, skA) in
  out(c, aenc(nb, pkB)).

(* Main process: run attacker with full channel control *)
process
  new skA: skey; new skB: skey;
  out(c, pk(skA)); out(c, pk(skB));  (* publish public keys *)
  (Alice(skA, pk(skB)) | Bob(skB, pk(skA)))

Формулировка запросов безопасности

ProVerif проверяет запросы, например:

(* Secrecy: attacker cannot learn na *)
query attacker(na).

(* Authentication: if Bob completes, Alice started *)
query event(BobFinished(nb)) ==> event(AliceStarted(nb)).

Интерпретация вывода ProVerif

ProVerif выводит «RESULT ... истинно» (безопасность доказана) или «RESULT ... ложно» и печатает контрпример — трассу атаки, показывающую сообщения злоумышленника. Трасса точно показывает, как работает атака.

Проверка TLS 1.3 с помощью ProVerif

Bhargavan и др. (2016) использовали ProVerif для анализа модели TLS 1.3. Они обнаружили и описали атаку на механизм возобновления 0-RTT, которую устранили до окончательной публикации RFC.

Ограничения: аппроксимация и циклы

ProVerif использует верхнюю аппроксимацию: он может сообщать о ложных атаках (говорить «ложь», когда протокол на самом деле безопасен), но никогда не пропускает реальные атаки. Сеансы протокола без ограничения числа повторений могут не завершиться — ProVerif разворачивает циклы эвристически.

Когда ProVerif сообщает «CANNOT BE PROVED»

Если ProVerif не может определить результат в рамках своей аппроксимации, он выводит «CANNOT BE PROVED». Это не доказательство небезопасности — это означает, что инструмент исчерпал возможности своих эвристик. В таких случаях может помочь Tamarin.

Проверка знаний

Что означает вывод ProVerif «RESULT ... ложно» для запроса о секретности?

Итоги урока

ProVerif автоматизирует проверку протоколов с помощью резолюции хорновских дизъюнктов. Протоколы записываются в прикладном π-исчислении с криптографическими уравнениями. Запросы проверяют секретность и аутентификацию. Ложь означает, что безопасность доказана; истина означает, что протокол взломан (с трассой атаки). Ограничения: аппроксимации могут привести к результату «доказательство невозможно».

Можно начать бесплатно

Изучай Cryptology Academy с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
67
Уроки
261

Часто задаваемые вопросы

Урок «ProVerif: автоматическая проверка протоколов» бесплатный?

Да — полный текст урока «ProVerif: автоматическая проверка протоколов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.

Чему я научусь в уроке «ProVerif: автоматическая проверка протоколов»?

Задайте и проверьте свойства рукопожатия TLS с помощью ProVerif Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cryptology Academy?

Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «ProVerif: автоматическая проверка протоколов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cryptology Academy?

Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Почему неформальных доказательств недостаточно
  2. Модель атакующего Долева—Яо и символьная криптография
  3. ProVerif: автоматическая проверка протоколов
  4. Tamarin и вычислительные доказательства
← Назад к Cryptology Academy