zkFuzz: Foundation and Framework for Effective Fuzzing of Zero-Knowledge Circuits
본 논문은 기존 정적 및 형식 분석 도구의 한계를 극복하여 영지식 회로에서 과소 및 과다 제약 취약점을 효과적으로 탐지하는 이론적 Trace-Constraint 일관성 테스트 (TCCT) 에 기반한 새로운 변형 기반 퍼징 프레임워크인 zkFuzz 를 소개한다.
원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
당신이 비밀 비밀번호를 절대 직접 보여주지 않고도 그 비밀번호를 알고 있음을 증명하는 마법 금고를 구축한다고 상상해 보세요. 이것이 디지털 세계에서 "영지식 (Zero-Knowledge, ZK) 회로"가 수행하는 역할입니다. 이들은 익명 암호화폐와 안전한 투표 시스템과 같은 프라이버시 보호 기술의 보안 요원 역할을 합니다.
그러나 이러한 금고들을 구축하는 것은 매우 까다롭습니다. 설계도에서 아주 작은 실수가 발생하면 금고는 다음과 같은 두 가지 상황 중 하나에 처할 수 있습니다:
- 누구나 들어오게 허용 (비밀번호를 모르는 사람조차도).
- 정당한 소유자를 차단 (올바른 비밀번호를 가진 사람조차도).
이 논문은 악의적인 행위자들이 이러한 실들을 발견하기 전에 찾아내기 위한 새로운 도구인 ZKFUZZ를 소개합니다. 그 작동 원리를 간단히 설명하면 다음과 같습니다:
문제: "설계도" 대 "현실"
이러한 시스템에서 개발자는 한 번에 두 가지 일을 수행하는 프로그램을 작성합니다:
- 계산 (Computation): 비밀을 파악하기 위한 실제 수학 연산 (예: 지도에서 경로를 계산하는 것).
- 제약 조건 (Constraints): 수학 연산이 올바르게 수행되었음을 증명하는 규칙 (예: 경로가 존재하는지 확인하는 체크리스트).
문제는 이 두 부분이 종종 서로 동기화가 맞지 않는다는 것입니다.
- 제약 부족 (Under-constrained): 규칙이 너무 느슨합니다. 해커가 가짜 경로를 시스템이 받아들이도록 속일 수 있습니다.
- 과도한 제약 (Over-constrained): 규칙이 너무 엄격합니다. 시스템이 사소한 불필요한 규칙 때문에 완전히 유효한 경로를 거부합니다.
이러한 오류를 찾는 기존 도구들은 부실한 맞춤법 검사기와 같습니다. 패턴을 기반으로 추측하여 실제로는 정상인 것들에 대해 "오류!"라고 소리치는 (거짓 경보) 경우가 있거나, 깊고 복잡한 오류를 완전히 놓쳐버립니다.
해결책: ZKFUZZ (돌연변이 퍼저)
저자들은 ZKFUZZ라는 새로운 프레임워크를 개발했습니다. 단순히 코드를 읽는 대신, ZKFUZZ는 고의로 시스템을 파괴해 보려는 장난기 많은 테스트 엔지니어처럼 행동합니다.
다음은 비유입니다:
당신에게 레시피 (계산) 와 맛보기 테스트 (제약 조건) 가 있다고 상상해 보세요.
- 기존 도구: 레시피를 보고 "소금을 사용했으니 의심스럽다"고 말합니다 (규칙에 기반한 추측).
- ZKFUZZ: 실제로 요리를 하지만, 그 후 레시피를 돌연변이시킵니다. "설탕"을 "소금"으로 바꾸거나 조리 시간을 변경합니다. 그런 다음 이 돌연변이 요리를 맛보기 테스트에 제공합니다.
- 맛보기 테스트가 (레시피가 변경되어) 맛있지 않아야 할 요리에 대해 "맛있다!"라고 말하면, ZKFUZZ는 규칙이 너무 느슨함 (제약 부족) 을 알게 됩니다.
- 맛보기 테스트가 (원래 레시피가 정확했음에도) 맛있어야 할 요리에 대해 "맛없다!"라고 말하면, ZKFUZZ는 규칙이 너무 엄격함 (과도한 제약) 을 알게 됩니다.
비밀 소스: "적합도 (Fitness)"와 "타겟팅"
ZK 회로에서 버그를 찾는 것은 행성 크기의 건초더미에서 바늘을 찾는 것과 같습니다. 관련된 숫자가 너무 커서 컴퓨터가 모든 가능성을 시도해 볼 수 없습니다.
ZKFUZZ는 유전 알고리즘 (진화와 유사) 을 사용합니다:
- 돌연변이: 프로그램의 약간 깨진 수천 가지 버전을 생성합니다.
- 적합도 점수: 이러한 깨진 버전들을 평가합니다. 깨진 버전이 테스트를 통과하는 데 가까이 했다면 (비록 실패했더라도) "좋은 점수"를 받습니다. 이는 시스템에 "점점 가까워지고 있다!"라고 알려줍니다.
- 타겟팅: 단순히 무작위로 추측하지 않습니다. 버그는 종종 "엣지 케이스" (예: 숫자가 0 이거나 극도로 큰 경우) 에서 발생한다는 것을 알고 있습니다. 시스템이 깨질지 확인하기 위해 이러한 까다로운 숫자들을 구체적으로 시스템에 입력합니다.
결과: 보이지 않는 것들을 포착
팀은 실제 프로젝트에서 사용된 452 개의 실제 세계 회로에 ZKFUZZ 를 테스트했습니다.
- 점수: 85 개의 버그를 발견했습니다.
- 제로데이 (Zero-Days): 이 중 59 개는 아무도 존재를 알지 못했던 새롭고 알려지지 않은 버그 (제로데이) 였습니다.
- 영향: 이 중 39 개는 개발자들에 의해 확인되었으며, 14 개는 이미 수정되었습니다. 여기에는 zkSync(암호 플랫폼) 와 passport-zk-circuits(디지털 신원 시스템) 와 같은 주요 프로젝트의 버그가 포함됩니다.
- 거짓 경보 없음: 다른 도구들과 달리 ZKFUZZ 는 실제로 버그가 아닌 것을 버그로 표시하지 않았습니다.
왜 이것이 중요한가
이 논문은 이전 도구들이 문제의 큰 부분을 놓치고 있었다고 주장합니다. 그들은 규칙의 "무작위성"만 찾았습니다. ZKFUZZ 는 컴퓨터가 취하는 실제 경로가 따라야 하는 규칙과 일치하는지 확인하는 TCCT(Trace-Constraint Consistency Test, 추적 - 제약 일관성 테스트) 라는 새로운 이론을 도입했습니다.
이 새로운 이론은 컴퓨터가 "충돌"하거나 예기치 않게 중단될 때 발생하는 버그를 포착했는데, 이전 도구들은 이를 완전히 무시했습니다.
요약하자면
ZKFUZZ는 코드를 돌연변이시키고 까다로운 입력을 제공함으로써 영지식 회로를 파괴하는 똑똑한 자동화된 "버그 사냥꾼"입니다. 이는 다른 도구들이 놓친 수십 개의 치명적인 보안 구멍을 발견하여, 복잡한 프라이버시 수학 세계에서도 통제된 약간의 혼란이 진실을 찾는 가장 좋은 방법임을 증명했습니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.