피드로 돌아가기
Dev.toSecurity
원문 읽기
Witness 패턴을 통한 ZK Circuit의 연산 제약 해소 및 오프체인 데이터 통합
Witnesses in Depth: Patterns, Types, and Real Use Cases in Compact
AI 요약
Context
ZK Circuit의 Finite Field 기반 산술 연산 제약으로 인한 Division, 조건문, 외부 데이터 접근의 불가능함 분석. 모든 계산 과정을 증명해야 하는 특성으로 인한 높은 증명 생성 비용과 유연성 부족 문제 직면.
Technical Solution
- TypeScript 기반의 Witness 함수를 도입하여 임의의 오프체인 연산과 ZK Circuit의 검증 로직을 분리한 하이브리드 아키텍처 설계
- WitnessContext를 통한 Ledger 및 PrivateState 접근 권한 부여로 Circuit 외부에서 로컬 데이터 및 온체인 상태 읽기 구현
- 'Witness-Compute, Circuit-Verify' 패턴을 적용하여 복잡한 계산은 오프체인에서 수행하고 결과값의 정당성만 Circuit 내 Assertions로 검증
- Private State Threading 구조를 통해 Circuit 실행 중 Private State의 읽기 및 수정 권한을 Witness에 한정하여 데이터 무결성 확보
- Secret Key-Hash 패턴 및 Merkle Path 검증을 Witness로 처리하여 온체인 데이터 노출 없이 신원 및 소속 증명 구현
실천 포인트
- Witness 반환값은 위조 가능하므로 Circuit 내에서 엄격한 Assertions 검증 로직을 구축했는지 확인 - Access Control 구현 시 Witness의 Public Key 반환값에 의존하지 않고 Secret Key-Hash 패턴을 적용했는지 검토 - 데이터 유출 방지를 위해 disclose() 함수를 Ledger 입력 직전의 최종 단계에서 호출하도록 설계 - State 변경이 필요한 경우 Witness가 아닌 Circuit 로직 내에서 수행하도록 구현