ProVerif: 자동화된 프로토콜 검증
ProVerif로 TLS 핸드셰이크 속성을 명세화하고 검증합니다.
ProVerif: 자동화된 프로토콜 검증은(는) CoddyKit의 무료 Cryptology Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cryptology Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cryptology Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
ProVerif란 무엇입니까
ProVerif(Bruno Blanchet, 2001)는 암호 프로토콜을 자동으로 검증하는 도구입니다. 적용된 파이 계산법으로 기술된 프로토콜을 입력받아 기밀성과 인증 속성을 자동으로 판정합니다.
ProVerif의 작동 방식
ProVerif는 프로토콜을 혼 절로 변환하고, 해상도 기반 알고리즘을 적용해 공격자가 무엇을 학습할 수 있는지 도출합니다. 기밀성 사실을 도출할 수 있으면 프로토콜이 깨진 것이고, 그렇지 않으면 보안이 증명됩니다.
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 ... is true"(보안이 증명됨) 또는 "RESULT ... is false"를 출력하고, 공격자의 메시지를 보여 주는 반례 공격 실행 추적을 출력합니다. 이 추적은 공격이 정확히 어떻게 작동하는지 보여 줍니다.
ProVerif로 TLS 1.3 검증
Bhargavan 등(2016)은 ProVerif를 사용해 TLS 1.3 모델을 분석했습니다. 이들은 0-RTT 재개 메커니즘에 대한 공격을 발견하고 보고했으며, 이 문제는 RFC가 최종 확정되기 전에 수정되었습니다.
한계: 근사와 반복
ProVerif는 과대 근사합니다. 즉, 실제로는 안전한 프로토콜에 대해 잘못된 공격을 보고할 수 있지만 실제 공격을 놓치지는 않습니다. 프로토콜 세션 수가 제한되지 않으면 실행이 종료되지 않을 수 있습니다. ProVerif는 휴리스틱하게 반복을 펼칩니다.
ProVerif가 "CANNOT BE PROVED"라고 말할 때
ProVerif가 근사 범위 내에서 결과를 판정할 수 없으면 "CANNOT BE PROVED."를 출력합니다. 이는 안전하지 않다는 증명이 아닙니다. 도구의 휴리스틱 능력이 소진되었다는 뜻입니다. 이러한 경우에는 Tamarin이 성공할 수도 있습니다.
이해도 확인
기밀성 질의에서 ProVerif가 "RESULT ... is false"를 출력한다는 것은 무엇을 의미합니까?
단원 요약
ProVerif는 혼 절 해상도를 사용해 프로토콜 검증을 자동화합니다. 프로토콜은 암호학적 방정식과 함께 적용된 파이 계산법으로 작성합니다. 질의는 기밀성과 인증에 대해 묻습니다. false는 보안이 증명되었음을, true는 프로토콜이 깨졌음을 의미하며 공격 실행 추적이 함께 제공됩니다. 한계: 근사로 인해 "cannot be proved"가 출력될 수 있습니다.
자주 묻는 질문
“ProVerif: 자동화된 프로토콜 검증” 강의는 무료인가요?
네 — “ProVerif: 자동화된 프로토콜 검증” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cryptology Academy 강의 전체를 잠금 해제할 수 있습니다. Cryptology Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“ProVerif: 자동화된 프로토콜 검증”에서 뭘 배우나요?
ProVerif로 TLS 핸드셰이크 속성을 명세화하고 검증합니다. 브라우저에서 직접 실행하는 실습 코드로 Cryptology Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Cryptology Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Cryptology Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“ProVerif: 자동화된 프로토콜 검증” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Cryptology Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Cryptology Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 비공식 증명만으로는 충분하지 않은 이유
- Dolev-Yao 공격자 모델과 기호 암호학
- ProVerif: 자동화된 프로토콜 검증
- Tamarin과 계산적 증명