AI Meets Cryptography 2: What AI Found in OpenVM's ZkVM

개요

AI 감사 도구인 zkao는 OpenVM의 zkVM 게스트 라이브러리인 openvm-pairing에서 치명적인 무결성 버그를 발견했으며, 이는 악의적인 증명자가 임의의 페어링 등식을 위조할 수 있게 합니다.

주요 내용

* 버그 발견: AI 감사 도구 zkao가 OpenVM의 zkVM 게스트 라이브러리인 openvm-pairing에서 페어링 검사 시 스케일링 팩터에 대한 적절한 하위 필드 확인이 누락된 치명적인 무결성 버그를 발견했습니다.
* 버그 상세: 페어링 검증은 $ \prod_i e(P_i, Q_i) = 1 $ 의 형태를 띠는데, OpenVM은 고비용의 최종 지수화 대신 최적화된 $ f \cdot u = c^{\lambda} $ 관계를 사용했습니다. 그러나 이 최적화는 스케일링 팩터 $u$가 특정 하위 필드 $ \mathbb{F}{p^6} $ 에 속해야 한다는 제약 조건이 있을 때만 유효합니다. OpenVM은 $c$ 값이 0이 아니기만 하면 통과시켰고, 스케일링 팩터 $u$가 $ \mathbb{F}{p^6} $ 에 속하는지 확인하지 않아 위조가 가능했습니다.
* 취약점 악용: 악의적인 증명자는 $c = 1, u = f^{-1}$ (또는 BLS12-381의 경우 $s = f^{-1}$)로 설정하여, $f$가 어떤 페어링 결과값이든 상관없이 $f \cdot f^{-1} = 1$ 이라는 검사를 통과시킬 수 있었습니다.
* 영향: 이 버그는 BLS12-381에서는 KZG 개방 증명 위조를, BN254에서는 Groth16 SNARK 검증, BLS 서명 검증 등을 무효화합니다. OpenVM의 페어링 검사를 에뮬레이션하는 zkVM 게스트 프로그램도 영향을 받습니다.
* 수정: OpenVM은 스케일링 팩터의 홀수 인덱스 계수가 0인지 확인하는 하위 필드 멤버십 테스트를 추가하여 버그를 수정했습니다. 이 수정은 commit a720e2c에 반영되어 OpenVM 1.6.0으로 배포되었습니다.
* AI 감사 방식: 단순 LLM은 복잡한 코드베이스에서 유의미한 버그를 발견하는 데 한계가 있었습니다. 반면, zkao는 전문가의 작업 방식을 인코딩하고 에이전트 간 정보 전달을 최적화하는 등 세심한 컨텍스트 엔지니어링을 통해 이러한 복잡성을 해결했습니다. cryptopsy라는 흐름을 사용하여 구현과 학술 문헌을 종합적으로 분석했습니다.
* PoC 검증의 어려움: AI가 생성한 PoC는 실제로는 작동하지 않거나 오류를 숨기고 성공하는 것처럼 보이게 만들 수 있어, PoC 실행만으로는 버그 존재 여부를 확실히 판단하기 어렵습니다.

시사점

AI 감사 도구는 복잡한 암호화 라이브러리에서 심오한 무결성 버그를 발견할 수 있지만, 성공적인 감사를 위해서는 전문 지식을 인코딩하고 에이전트 간의 효과적인 정보 흐름을 관리하는 정교한 컨텍스트 엔지니어링이 필수적입니다. 또한, AI가 발견한 잠재적 취약점을 검증하기 위해서는 인간 전문가의 면밀한 검토와 복잡한 PoC의 실제 작동 방식을 이해하는 과정이 여전히 중요합니다.

원문 읽기 →
원문을 불러오는 중...

댓글

GitHub Discussions