호패DOCS
데모 열기
문서 목차신뢰 모델과 보안
Concepts

신뢰 모델과 보안

호패를 쓴다는 것은 무엇을 믿는다는 뜻인지, 그리고 무엇은 믿지 않아도 되는지를 정리했습니다.

누구를 믿어야 하나

주체믿어야 하는 것믿지 않아도 되는 것
발급자 (호패)심사 결과를 정직하게 어테스테이션으로 옮긴다는 것판정 조회 — 누구나 온체인에서 직접 읽습니다. 발급자 서버가 죽어도 검증은 됩니다.
검증 벤더신원 검증 결과의 정확성 (연동 이후)데이터 보관 — 개인정보는 벤더에 남고 호패는 참조와 해시만 받습니다.
GIWA · EAS체인의 가용성과 프리디플로이 EAS의 무결성호패의 코드 — 네 컨트랙트 모두 소스가 Verified 상태입니다.
사용자 브라우저크리덴셜(값과 salt) 보관 — 잃으면 선택공개·증명을 다시 만들 수 없습니다커밋먼트 계산 — 제3자가 우리 코드 없이 재계산해 검증할 수 있습니다.
dApp자기 게이트 정책판정 자체 — 같은 레지스트리를 읽으므로 서비스마다 답이 갈리지 않습니다.

핵심은 발급자를 믿되 검증은 믿지 않아도 되는 구조입니다. 발급자가 거짓 사실을 커밋하면 거짓 어테스테이션이 나오지만, 그 사실은 온체인과 증적에 남아 사후 추적이 됩니다. ZK도 이 성질을 바꾸지는 못합니다.

권한 구조

역할할 수 있는 것현재
owner발급 키 등록·해제, 소유권 이전 (2단계)단일 키 — 멀티시그 전환은 메인넷 전 과제
issuer발급, 폐기, UID 직접 폐기서버 환경변수로만 존재. 브라우저에 노출되지 않습니다
revoker폐기 전용 — 발급 키가 유출돼도 폐기는 살아 있어야 합니다로드맵
사용자자기 지갑의 발급 요청과 철회 요청소유권 서명으로 증명. 공개 데모의 폐기 체험도 본인 지갑에만 허용됩니다

레지스트리 자체가 EAS 어테스터입니다. 발급 키를 교체해도 어테스테이션의 계보와 폐기 권한이 유지되는 이유입니다.

공격 시나리오와 대응

시나리오대응상태
남의 주소로 발급받기발급 전 EIP-191 소유권 서명을 서버가 검증합니다. 원문에 주소·등급·claimsRoot·시각이 묶여 있고 10분간만 유효합니다.라이브
재발급으로 구 어테스테이션 남기기재발급 시 살아있는 구 UID를 EAS에서 먼저 폐기합니다. EAS를 직접 읽는 검증자에게도 스테일 어테스테이션이 남지 않습니다.라이브
폐기된 지갑이 예전 증명 재사용게이트가 증명 검증과 별도로 레지스트리 상태를 다시 확인합니다. 폐기 후 유효한 증명은 revert됩니다.라이브
온체인 커밋먼트에서 값 역산필드마다 128비트 난수 salt를 붙입니다. 루트만으로는 생년월일을 되돌릴 수 없습니다.라이브
발급 키 유출키는 서버에만 두고 issuers 매핑으로 즉시 회수합니다. 온체인 발급 한도와 서킷브레이커, 폐기 키 분리는 아직 없습니다.개발 중
제재 대상이 발급 후 명단에 오름일일 재대사로 잡아 폐기하는 것이 설계이지만, 자동화 전이라 현재는 사람이 실행합니다.로드맵
한 사람이 지갑 수백 개로 발급동일인 인덱스로 지갑 수를 제한하고 폐기를 연동합니다. 벤더 CI가 있어야 성립하므로 연동 이후입니다.로드맵
오탐으로 정상 사용자 차단SUSPENDED 상태와 케이스·이의제기 절차로 폐기와 방치 사이 단계를 만듭니다.로드맵

알려진 한계

지금 시점에서 성립하지 않는 것들입니다. 로드맵에 각각 대응 항목이 있습니다.

  • ·신원 검증이 없습니다. 발급되는 L1은 본인 선언이며, 입력한 생년월일이 사실인지 확인하지 않습니다. 확인하는 것은 지갑 소유권뿐입니다.
  • ·이름 축 상시 모니터링이 없습니다. 발급 시점의 명단 대사는 실데이터로 하지만, 이름을 저장하지 않으므로 매일 도는 재대사는 지갑 주소·온체인 접촉 두 축뿐입니다. 이름 축 상시 감시는 검증 벤더의 웹훅을 받아야 합니다.
  • ·증적 저장이 영속적이지 않습니다. 증적 체인은 서버 인스턴스 메모리에 있어 재시작하면 색인이 사라집니다. 사본은 발급 응답으로 대상자에게 전달되므로 검증 자체는 저장소 없이도 가능합니다. WORM 저장소는 다음 단계입니다.
  • ·증적 원본을 영구 보존하지 않습니다. 온체인 해시는 있지만 운영용 해시체인 저장소가 아직 없어, 시연분만 저장소에 남아 있습니다.
  • ·외부 감사를 받지 않았습니다. 컨트랙트와 ZK 회로 모두 자체 테스트까지 입니다.
  • ·“이 지갑은 검증됨”은 공개 정보입니다. 등급과 만료 외에는 아무것도 드러나지 않지만, 검증 사실 자체는 지갑과 연결됩니다. 비연결형 증명이 그 답이고 아직 로드맵입니다.

검증 상태

지금 확인 가능한 것

항목내용
컨트랙트 테스트37종 — 유닛 + fuzz + invariant 2종 + 실제 증명 in-EVM 검증
소스 공개GIWA Sepolia 배포 4개 컨트랙트 모두 Blockscout Verified
해시 패리티TypeScript 구현과 Noir 회로의 커밋먼트 다이제스트를 고정 벡터로 대조
독립 재현SDK를 쓰지 않는 검증 스크립트와 cast 절차를 공개했습니다 — 프라이버시와 ZK 문서 참고

받지 않은 것

컨트랙트 외부 감사, ZK 회로 외부 리뷰, 침투 테스트. 셋 다 메인넷 이전 필수 항목으로 로드맵에 있습니다.

현재 배포는 테스트넷입니다. 실제 자산이 걸린 게이트에 쓰기 전에는 위 한계 목록과 감사 상태를 그대로 반영해 판단하세요.

취약점 신고

컨트랙트·API·회로에서 문제를 발견하면 science@stabled.ai로 보내주세요. 공개 이슈보다 이메일을 먼저 부탁드립니다.