ForkMonitor: 미예측 인플레이션 감지 및 경고 시스템

요약: ForkMonitor는 이제 비트코인에 대한 미예측 인플레이션 감지 및 경고 시스템을 구현했습니다. 블록 보상은 현재 12.5 비트코인이며 이는 각 블록마다 12.5 비트코인 이하의 새로운 비트코인을 생성해야 한다는 것을 의미합니다. ForkMonitor 노드 중 일부는 이제gettxoutsetinfo RPC 요청을 이용하여 각 블록의 총 코인 공급량을 산출합니다. 만일 총 코인 공급량이 12.5 비트코인 이상 증가하는 경우 경고 시스템이 작동합니다. 본 서비스는 네트워크 참가자에게 언제든지 비트코인 공급량에 대해 추가로 보증할 수 있습니다.

(출처: ForkMonitor.info)

개요

ForkMonitor는 최근 미예측 인플레이션 감시라는 새로운 기능을 추가했습니다. 본 기능은 비트코인 및 테스트넷 비트코인에 추가되었습니다. 해당 시스템은 모든 UTXO (Unspent Transaction Output, 미사용 거래 산출값) 가치를 합산하여 주기적으로 총 코인 공급량을 확인합니다. 만일 합산된 가치가 예상 치와 다른 경우 경고가 활성화됩니다. 비트코인 노드는 이미 코인 공급량을 확인해야 하지만, 이는 각 개별 거래에서 허가되지 않은 코인이 생성되지 않고 반복적인 총 공급량 확인이 없다는 점만을 확인합니다. 따라서 ForkMonitor 서비스는 문제가 발견될 시에 사람들이 자신들의 노드에서 이와 같은 검사를 실행토록 장려할 수 있는 조기 경고 시스템뿐만 아니라, 비트코인 사용자를 위한 보안 및 보증의 추가 계층을 제공할 수 있습니다.

만일 인플레이션이 예상 치와 일치하는 경우 녹색 확인 표시가 나타납니다. 그러나 예상 치와 다른 경우 다른 경고와 함께 빨간색 X 자가 나타납니다.

Bitcoin Core 0.18.1에 의해 감지된 미예측 인플레이션 도표

(출처: ForkMonitor.info)

예기치 않은 비트코인 인플레이션이 발생하는 경우, 변경을 위해 피드에 참여해 주시기 바랍니다.

코인 공급량 확인 메커니즘

해당 시스템은 다음 방법을 이용하여 인플레이션을 확인할 예정입니다:

  • 이전 블록에서의 코인 공급량 변화 –각 비트코인이 생성된 후, 해당 시스템은 총 코인 공급량을 확인하고 이에 대한 수치를 데이터베이스에 저장합니다. 각 새로운 블록이 생성됨에 따라 합산이 반복되고, 총 코인 공급량이 이전 수치에서 차감됩니다. 만일 해당 변화가 허용된 블록 보상 (현재 12.5 비트코인, 2020년 5월 경의 6.25 비트코인 등)보다 높은 경우 경고가 활성화됩니다.
  • 여러 노드 버전에 걸친 일관성 – 또한 해당 시스템은 인플레이션 확인 작업에 참여하는 모든 노드 (ForkMonitor 웹사이트에 예시되어 있음)에 대해 전체 비트코인 공급량이 각 블록 높이 (block height)에서 일치하는 지에 대한 여부를 확인합니다.

Gettxoutsetinfo 문제 

본 인플레이션 확인 기능 구현 시, 저희가 직면한 주요 문제 중 하나는 비트코인 코어가 gettxoutsetinfo 요청을 실행하는 데에 있어 일반적으로 상당한 시간인 2분 정도가 소요되었다는 점입니다. 이는 예를 들어 2분 정도의 시간 동안 어떠한 부분을 표시할 것인지 혹은 산출이 진행되는 중 블록이 발견될 시에 발생할 수 있는 문제와 같이 ForkMonitor와 관련한 몇 가지 구현 문제를 야기했습니다. 예를 들어, 인플레이션 확인 작업이 진행될 수 있는 최대 속도는 2분 당 한 개의 블록입니다; 만일 2분 간격으로 연속해서 많은 블록이 발견되는 경우, 저희의 확인 작업은 한동안 비효율적일 수 있습니다.

Gettxoutsetinfo RPC (Remote Procedure Call, 원격 절차 호출) 요청 – 약 1,800만 개의 비트코인 공급량

(출처: 비트코인 코어 0.18.0 “Gettxoutsetinfo” 요청의 산출값)

비트코인 개발자인 Fabian Jahr이 최근 다음과 같이 언급한 것처럼 다른 사람들 또한 이러한 문제에 대해 인지하고 있습니다:

[The gettxoutsetinfo call]은 충분한 사용자 경험을 갖고 있지 않으며, 요청 실행 시에 실제로 응답 완료에는 몇 분이 걸리고 이에 대한 반응 또한 없습니다

(출처: Fabian Jahr (Youtube))

2017년 비트코인 개발자 Pieter Wuille는 비트코인 개발 메일링 목록에 향후 개선사항을 게시했으며, 그는 이를 통해 이러한 원격 절차 호출 요청 (RPC, Remote Procedure Call)을 더 빠르게 실행할 수 있다고 언급했습니다.

비트코인 코어의 gettxoutsetinfo RPC 해시 연산에 대한 대체. 이는 전체 UTXO 집합을 직렬화하고 해시하기 때문에 현재 몇 분 정도의 I/O와 CPU가 필요합니다. 규칙적인 단계로 이루어진 해시 사용은 전체 RPC가 즉시 온전성 검사에 훨씬 더 유용토록 합니다

 (출처: Pieter Wuille의 2017년도 Rolling UTXO set hash 이메일)

앞서 언급한 생각을 바탕으로 Fabian은 최근 본 RPC 요청을 개선하기 위해 이와 같은 잠재적 수정사항 구현 작업을 수행할 수도 있음을 시사했습니다. 본 개선사항이 구현되는 경우, ForkMonitor에 분명히 큰 도움이 될 것입니다.

비트코인의 2018년 인플레이션 취약점 (CVE-2018-17144)

ForkMonitor는 비트코인 코어가 마이너들에게 정상적인 블록 보상 이외에 갑자기 코인을 생성 가능케 한 취약점을 포함했던 2018년 9월의 사건에서 크게 영감을 받았습니다. 본 버그는 수정사항이 공개되기 전에 0.14.0부터 0.16.2까지의 비트코인 코어 버전에 영향을 미쳤습니다 (0.14.X 노드는 추후 예기치 않은 인플레이션으로 블록을 수용했을 때 오류를 유발했을 뿐입니다).

본 취약점을 성공적으로 악용하는 경우 네트워크에 치명적인 결과를 초래할 수 있었습니다. 예를 들어, 비트코인의 공급량이 2,100만 이상을 초과하거나 대규모의 실행취소가 발생하여 많은 사용자와 기업을 좌지우지하는 보안을 약화시킬 수 있었습니다.

ForkMonitor는 이러한 위험 요소들을 완화하기 위해 출시되었습니다. 오늘 날 이러한 취약점이 존재하는 경우 저희의 시스템은 세 가지 방법으로 이를 감지할 수 있어야 합니다:

  • ForkMonitor는 여러 해 동안 개발된 비트코인 코어의 여러 버전을 운용 중에 있습니다. 만일 새로 발생한 버그가 예기치 않은 인플레이션 혹은 허가되지 않은 지출을 초래하는 경우, 이전 노드는 이를 감지하고 블록을 무효로 표시하여 경고 시스템을 활성화해야 합니다.
  • 본 웹 사이트는 또한 bcoin, btcd 및 Libbtcoin과 같은 비트코인의 독자적인 구현체를 시행 중에 있습니다. 만일 비트코인 코어에 예기치 않은 인플레이션 혹은 허가되지 않은 지출이 존재하는 경우, 동일한 버그가 독자적으로 구현되지 않는 한 해당 버그를 무효로 표시하여 경고 시스템을 활성화해야 합니다.
  • 2019년 10월 현재 ForkMonitor는 각 블록의 총 코인 공급량을 직접 확인합니다. 예기치 않은 인플레이션이 발생할 경우, 심지어 모든 노드가 블록을 유효하다고 표시하는 가능성이 희박한 경우에도 경고 시스템은 여전히 활성화됩니다. 인플레이션 확인 시스템은 노드가 블록을 무효로 표시하더라도 사용자가 적시에 이와 같은 경우가 왜 발생하는 지에 대한 판단을 내릴 수 있기에 유용합니다.

독립적인 구현체

저희의 2018년 10월 보고서인 “비트코인 코어와의 경쟁”에서 설명한 바와 같이, 경쟁적 구현체와 특히 독자적 구현체에는 장단점이 존재합니다. 저희가 언급한 독자적 구현체의 한 가지 주요 이점은 비트코인 코어에 버그가 존재하거나 독자적 구현체에 존재하지 않는 참조 구현체가 존재할 수 있다는 것입니다.

이러한 이유로 인해 저희는 가능한 한 빨리 총 코인 공급량 인플레이션 확인 시스템에 세 가지 독자적 구현체 (bcoin, btcd 및 Libbitcoin) 중 하나를 추가하기를 희망하고 있습니다. 이러한 구현체에 의해 사용되는 총 코인 공급량 계산법은 비트코인 코어에 의해 사용되는 계산법으로부터 독립적일 수 있으며, 이는 해당 수치의 정확성 여부에 대해 추가적인 확신을 제공해야 합니다.

결론

이와 같은 새로운 서비스는 예기치 않은 인플레이션을 감지하는 것과 관련하여 모든 잠재적 문제를 해결하지 못할 수 있습니다. 예를 들어, gettxoutsetinfo 확인 작업에 취약점이 존재할 수 있습니다. 이와 더불어 예기치 않은 인플레이션과 블록 유효성을 확인하기 위한 다양한 메커니즘이 서로 진정으로 독립적이지 않을 수 있습니다. 독자적인 비트코인 구현 조차도 비트코인 코어의 버그 또는 잘못된 개념을 무심코 복제했을 수도 있습니다. 그러나 저희는 이러한 반복적인 인플레이션 확인 서비스가 잠재적으로 네트워크 보안에 유용한 추가사항이라고 생각합니다.

ForkMonitor 웹 사이트는 오픈 소스이므로 이에 자유롭게 기여 혹은 프로젝트를 진행할 수 있으며, 본 웹사이트 또한 복사 가능하다는 점 재차 안내드립니다.