릴리스 핀
ZooBC 릴리스는 릴리스 핀(스파인 핀이라고도 합니다)을 함께 담을 수 있습니다. 스파인 체인의 블록 하나를 높이와 해시로 지정하는 작은 공개 파일입니다. 노드는 시작할 때 자기 스파인을 핀과 비교하고, 핀과 모순되는 스파인 위에서는 실행을 거부합니다. 핀은 설치에 소프트웨어 자체와 함께 오는 신뢰할 수 있는 닻 하나를 주므로, 위조된 스파인 이력은 노드가 그 위에 무엇이든 쌓기 전에 거부됩니다.
핀이 도움이 되는 이유
스파인은 노드가 두 가지에 대해 신뢰하는 닻입니다. 체인 상태의 어느 스냅샷을 불러올지, 그리고 어떤 노드 키가 레지스트리에 속하는지입니다(스냅샷과 빠른 동기화 참조). 몇 달 동안 체인을 따라온 실행 중인 노드에게는 스파인을 판단할 자기 이력이 있습니다. 갓 설치한 노드에게는 그런 것이 없습니다. 어딘가에서 시작해야 하며, 예를 들어 오래전에 레지스트리를 떠난 노드들의 옛 키로 만든 위조 스파인 전체를 그 노드에 먹일 수 있는 공격자는 그 노드를 위조된 상태로 이끌 수 있을 것입니다.
핀은 그 빈틈을 막습니다. 핀은 운영자가 설치하는 릴리스의 일부이므로, 새 노드는 어떤 피어와 통신하기도 전에 진짜 스파인 블록을 최소 하나 압니다. 바로 그 블록을 포함하지 않는 스파인 이력은 모두 거부됩니다.
핀이란 무엇인가
파일 이름은 spine-pin.txt이며 노드의 데이터베이스 옆에 있습니다. 파일은 한 줄을 담습니다. 스파인 높이와, 그 높이에 있는 스파인 블록의 64자 16진수 해시입니다.
여기에는 비밀이 없습니다. 누구나 자기 노드의 스파인과 비교할 수 있는 공개 해시입니다. 파일이 없으면 핀도 없으며, 스파인의 다른 방어 수단이 평소처럼 적용됩니다.
노드가 핀으로 하는 일
- 시작할 때 노드는 고정된 높이에 저장된 자기 스파인 블록을 핀과 비교합니다. 해시가 다르면 노드는 포크되었거나 변조된 스파인 이력 위에 있는 것이므로 그 위에서 실행하지 않습니다. 버전 0.5.8에 대해 결정된 규칙에 따르면, 이때 노드는 네트워크로부터 스스로를 재구축합니다.
- 실행 중에는 핀과 모순되는 스파인 블록이 도착하면 거부합니다.
- 스파인끼리 경쟁할 때 노드는 결코 자기 스파인을 핀 아래로 롤백하지 않습니다.
릴리스가 핀을 쓰는 방식
두 가지 규칙이 릴리스가 핀을 담는 방식을 다스립니다.
- 릴리스에 핀이 명시되어 있는데 이를 가져올 수 없으면 설치 프로그램은 멈춥니다.
- 이후의 각 릴리스는 최근 스파인 블록을 고정하므로, 닻은 체인과 함께 앞으로 나아갑니다.
릴리스 자체는 따로 보호됩니다. 릴리스 권한자가 각 릴리스를 매니페스트 해시와 함께 체인에 등록하고, 설치 프로그램은 릴리스의 서명과 매니페스트 해시를 체인과 대조하며, 좌석의 3분의 2는 릴리스에 거부권을 행사할 수 있습니다(릴리스와 업데이트와 다운로드한 파일 확인 참조).
핀이 아닌 것
- 노드를 고정된 피어에 묶지 않습니다. 노드는 평소처럼 피어들로부터 동기화합니다.
- 노드의 소프트웨어를 고정하지 않습니다. 업데이트는 운영자가 선택한 대로 계속됩니다.
- 개인 키든 공개 키든 어떤 키도 담지 않습니다. 블록 높이와 블록 해시만 담습니다.
방어 수단 가운데의 자리
핀은 먼 과거부터 이력을 다시 쓰려는 시도인 장거리 공격에 대한 여러 방어 수단 중 하나입니다. 실행 중인 노드는 720블록 롤백 한도와 스파인 체크포인트 하한이 보호하고(최종성과 롤백 참조), 새 노드는 스파인의 3분의 2 공동 서명, 어떤 키가 합류하고 떠났는지에 대한 스파인 자체의 기록, 그리고 핀이 보호합니다. 참여 증명이 방어하는 위협을 참조하십시오.