피드로 돌아가기
Dev.toSecurity
원문 읽기
Midnight dApp 部署前安全检查清单:开发者完整指南
Zero-Knowledge 기반 Midnight dApp의 프라이버시 누수 방지 및 보안 설계 전략
AI 요약
Context
Midnight Network의 Compact 언어는 기본적으로 모든 데이터를 Private으로 처리하나, 개발자의 실수로 인한 데이터 노출 위험이 상존함. 특히 Witness 함수의 클라이언트 측 조작 가능성과 잘못된 disclose() 호출로 인한 민감 정보 유출이 주요 보안 병목으로 작용함.
Technical Solution
- disclose() 호출 시점을 계산 체인의 최후단으로 배치하여 데이터 노출 윈도우를 최소화하는 Late Disclosure 전략 적용
- ownPublicKey()의 Witness 기반 조작 가능성을 차단하기 위해 persistentHash 기반의 Hash-based Authentication 구조로 대체
- Double Spending 방지를 위해 도메인 구분자(Domain Separator)를 포함한 Nullifier 패턴을 도입하여 해시 충돌 및 재사용 공격 차단
- ZK Circuit 외부에서 실행되는 Witness 함수의 데이터 신뢰성을 확보하기 위해 Circuit 내부에서 모든 출력값에 대해 assert 검증 강제
- Ledger 필드의 공개 범위를 최소화하고 privateState와 ReturnValue의 튜플 구조를 통해 상태 일관성 유지
실천 포인트
1. 모든 disclose() 호출 위치가 계산 로직의 최하단에 있는지 전수 조사
2. 인증 로직에서 ownPublicKey() 단독 사용 여부를 확인하고 Hash-based 패턴으로 변경
3. Nullifier 및 Commitment 생성 시 서로 다른 고유 도메인 구분자(Prefix) 적용 여부 검토
4. Witness 함수 반환값이 Circuit 내 assert 문을 통해 검증되는지 확인