보안과 아키텍처
ZooBC의 보안은 소비한 에너지가 아니라 서명과 해시에 기댑니다. 모든 블록, 트랜잭션, 영수증, 시드 증명은 서명되며, 모든 노드가 받아들이는 모든 것을 검사하므로, 어떤 노드도 다른 노드의 말을 그대로 믿을 필요가 없습니다. 이 핵심 둘레에 아키텍처는 몇 가지 확고한 한계를 더합니다. 확정된 이력은 다시 쓸 수 없고, 새 노드는 스스로 진짜 체인을 찾을 수 있으며, 서명은 하나의 체인에서만 유효합니다.
ZooBC가 대비하는 공격자
설계는 원하는 만큼 노드와 계정을 운영할 수 있고, 모든 메시지를 보며, 어떤 논리적 결함이든 악용하고, 부유하지만, 서명을 위조하거나 해시 충돌을 찾거나 모든 토큰을 사들일 수는 없는 공격자를 가정합니다. 그 목표는 훔치기, 검열하기, 이력 다시 쓰기, 체인 방해하기일 것입니다. 참여 증명이 방어하는 위협에서 각 공격과 그 대응을 하나씩 살펴봅니다.
모든 노드에 있는 두 체인
모든 노드는 두 체인을 보관합니다. 메인 체인은 15초마다 블록을 만들고 트랜잭션을 담습니다. 그 블록은 추첨으로 뽑힌 등록 노드들이 만듭니다(참여 증명 (PoP) 참조). 스파인 체인은 mainnet에서 하루에 블록 하나를 만들며 트랜잭션을 담지 않습니다. 각 블록은 메인 체인의 체크포인트, 합류하거나 떠난 노드 키의 기록, 최신 상태 스냅샷의 매니페스트이며, 좌석의 3분의 2가 공동 서명합니다.
방어의 층
| 층 | 보장하는 것 | 문서 |
|---|---|---|
| 모든 노드의 검증 | 추첨된 생산자가 서명하고 시드 증명, 트랜잭션, 영수증이 검사를 통과해야만 블록이 인정됨 | 참여 증명 (PoP) |
| 동등하고 속도가 정해진 좌석 | 권한을 빠르게 살 수 없음: 좌석마다 같은 기회 하나, 주기마다 입회 하나 | 참여 증명이 방어하는 위협 |
| 한계가 있는 롤백 | 어떤 노드도 720블록(3시간)보다 많이 롤백하지 않음 | 최종성과 롤백 |
| 스파인 체크포인트 | 어떤 노드도 좌석의 3분의 2가 공동 서명한 체크포인트 아래로 재구성하지 않음 | 스파인 체인 |
| 검사되는 빠른 동기화 | 새 노드는 스파인이 지정한 상태를 불러오고, 모든 해시를 검사하며, 피어들을 표본 조사함 | 스냅샷과 빠른 동기화 |
| 릴리스 핀 | 새 설치는 자기 릴리스와 모순되는 스파인 이력을 거부함 | 릴리스 핀 |
| 체인 결속 서명 | 한 체인을 위해 서명한 트랜잭션은 다른 모든 체인에서 거부됨 | 체인 결속 서명 |
| 3분의 2 결정 | 체크포인트, 브리지 전송, 오라클 사실, 릴리스 거부에는 좌석의 3분의 2가 필요함 | 3분의 2 규칙 |
| 예측할 수 없는 시드 | 어떤 생산자도 다음 생산자를 고르는 무작위성을 선택할 수 없음 | 블록 시드 (VRF) |
| 이중 서명 보고 | 한 부모 위에 두 블록에 서명한 생산자는 증명되어 불이익을 받음 | 이중 서명 (equivocation) |
층들은 서로 겹칩니다. 예를 들어 1년 전부터 이력을 다시 쓰려는 시도는 롤백 한도, 체크포인트 하한, 스파인의 공동 서명, 릴리스 핀이라는 여러 층 각각에서 따로 실패합니다.
과반이 할 수 있는 것과 없는 것
좌석의 절반 넘게 가진 공격자라도 트랜잭션을 지연시키거나 검열하고, 3시간 한도 안의 최근 블록을 바꿔치기할 수 있을 뿐입니다. 서명을 위조하거나, 다른 사람의 코인을 쓰거나, 코인베이스 일정보다 많이 발행하거나, 스파인 체크포인트 아래로 내려갈 수는 없습니다. 모든 노드가 모든 블록을 직접 검사하기 때문입니다.
ZooBC의 보안이 기대지 않는 것
- 비밀 유지. 피어 트래픽은 평문 gRPC입니다. 보호는 서명과 검증에서 나옵니다.
- 에너지나 하드웨어. 푸는 퍼즐도 없고, 어떤 컴퓨터도 유리하지 않습니다.
- 신뢰하는 제3자. 블록에 부서명하는 재단도, 스냅샷을 보증하는 웹사이트도 없으며, 가장 무거운 체인을 알아내는 데는 정직한 피어 하나면 충분합니다.
같이 보기
이 주제의 문서
- 3분의 2 규칙
어떤 ZooBC 결정에 등록 좌석의 3분의 2가 필요한지(스파인 블록, 브리지 전송, 오라클 사실, 릴리스 거부권, 규칙 업그레이드), 정지된 좌석이 어떻게 집계되는지, 그리고 투표가 필요 없는 것을 설명합니다. - 릴리스 핀
ZooBC 릴리스가 함께 담을 수 있는 핀을 설명합니다. 스파인 블록을 높이와 해시로 지정하는 공개된 한 줄이며, 노드는 시작할 때 이를 검사하여 위조된 스파인 이력 위에서 결코 실행되지 않습니다. - 스냅샷과 빠른 동기화
새 ZooBC 노드가 모든 블록을 재생하지 않고 현재에 도달하는 방법을 설명합니다. 스파인에 지정된 월간 상태 스냅샷을 청크별로, 그리고 피어들과 대조해 검사합니다. - 스파인 체인
모든 ZooBC 노드가 보관하는 느린 두 번째 체인을 설명합니다. 하루에 블록 하나이며, 좌석의 3분의 2가 공동 서명하고, 메인 체인 체크포인트, 노드 키 변경, 스냅샷 매니페스트를 담습니다. - 참여 증명이 방어하는 위협
ZooBC가 견디도록 설계된 공격자와, 참여 증명이 각 공격에 대응하는 방식을 설명합니다. 권한 매수, 시빌 좌석, 과반, 시드 조작, 장거리 재작성, 이클립스입니다. - 체인 결속 서명
한 ZooBC 체인을 위해 서명한 트랜잭션을 다른 체인에서 재전송할 수 없는 이유를 설명합니다. 모든 서명은 ZooBC 체인의 유일한 신원인 체인의 제네시스 해시를 포함합니다. - 최종성과 롤백
ZooBC 노드가 더 무거운 분기를 따르기 위해 얼마나 롤백하는지(720블록, 3시간), 왜 스파인 체크포인트 아래로는 결코 내려가지 않는지, 그리고 고립된 노드가 스스로를 재구축하는 방식을 설명합니다.