ProVerif: автоматическая проверка протоколов
Задайте и проверьте свойства рукопожатия TLS с помощью ProVerif
«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 — локальная установка не требуется.
Все уроки этого курса
- Почему неформальных доказательств недостаточно
- Модель атакующего Долева—Яо и символьная криптография
- ProVerif: автоматическая проверка протоколов
- Tamarin и вычислительные доказательства