비트코인의 분산형 네트워크는 거래에 타임스탬프를 기록하고 이를 해싱을 기반으로 한 작업 증명 체인으로 연결합니다. 이런 방식으로 생성된 레코드는 전체 계산을 다시 수행하지 않고는 변경할 수 없습니다. 가장 긴 버전의 체인은 사건의 순서를 확인할 뿐만 아니라, 네트워크의 가장 큰 컴퓨팅 세그먼트가 그 작업을 수행했다는 것을 증명합니다. 정직한 참여자들이 악의적인 행위자들이 함께 행동하는 것보다 더 많은 컴퓨팅 파워를 전체적으로 통제하는 한 시스템은 안전합니다. 그렇지 않으면 “51% 공격”이라고 불리는 시나리오가 발생합니다.
저자: Alexander Podobnykh , St. Petersburg RO ARSIB 책임자, 디지털 자산 보안 및 사기 방지 위원회 책임자, 법의학 전문가
컴퓨팅 파워의 대부분이 네트워크를 공격하기 위해 통합되지 않은 노드에 의해 제어되는 한, 그들은 모든 공격자보다 앞서 가장 긴 체인을 생성할 것입니다. 네트워크 자체는 매우 간단합니다. 메시지는 최선의 노력을 기준으로 전송되고, 노드는 언제든지 네트워크를 떠나 다시 가입할 수 있으며, 누락된 거래 내역을 재구성하기 위해 가장 긴 버전의 체인을 수락합니다.
비트코인의 기술적 안정성은 기존 금융에서처럼 제3자를 신뢰하는 것이 아니라 암호화에 기반을 두고 있습니다. 계산상의 복잡성과 이로 인한 거래 취소 비용은 판매자를 사기로부터 보호합니다.

작업 증명
분산형 P2P 타임스탬프 서버를 구현하기 위해 개발자는 Hashcash 시스템과 유사한 작업 증명 방식을 사용했습니다. 이 함수의 본질은 해시(예: SHA-256)가 특정 개수의 0비트로 시작하는 값을 검색하는 것입니다. 필요한 작업량은 0의 개수에 따라 기하급수적으로 늘어나지만, 발견된 값을 확인하려면 해시를 한 번만 계산하면 됩니다. 타임스탬프 서버에서 필요한 해시값을 가진 값을 검색하는 작업은 데이터 블록의 반복 가능한 nonce 필드의 값을 반복하여 수행되었습니다. 조건을 만족하는 블록이 발견되면 모든 작업을 다시 하지 않고는 해당 블록의 내용을 변경할 수 없습니다. 그리고 해당 블록이 체인의 마지막 블록이 아니면, 이 작업에는 그 뒤에 오는 모든 블록을 다시 계산하는 작업이 포함됩니다.
해싱을 통한 작업 증명은 또한 대다수가 지지하는 버전을 결정하는 문제를 해결합니다. 투표가 단일 IP 주소로 계산되는 경우 광범위한 주소가 제어되면 이러한 방식이 손상될 수 있습니다. 비트코인 방식은 “1개의 프로세서 – 1개의 투표”라는 원칙을 기반으로 합니다. 가장 긴 해시 체인은 가장 많은 리소스를 투자한 다수의 의견을 나타냅니다.
컴퓨팅 파워의 절반 이상이 정직한 노드에 속한다면, 정직한 거래 체인은 더 빠르게 성장하여 경쟁 체인보다 앞서 나갈 것입니다. 이전 블록을 변경하려면 공격자는 해당 블록과 그 이후의 모든 블록에서 작업을 다시 해야 하고, 그런 다음 새로운 블록에서 정직한 참여자를 따라잡고 추월해야 합니다. 리소스가 적은 공격자가 성공할 확률은 블록 수가 늘어날수록 기하급수적으로 감소합니다.
프로세서의 증가하는 컴퓨팅 파워와 네트워크에서 실행되는 노드 수의 변동을 보상하기 위해 해싱 난이도가 변경되어(약 2주에 한 번) 균일한 블록 생성 속도(약 10분)를 보장합니다. 너무 자주 나타나면 난이도가 증가하고 그 반대의 경우도 마찬가지입니다.
참가자들은 항상 사슬의 가장 긴 버전을 사실로 여기고 그것을 늘리기 위해 노력합니다. 두 노드가 동시에 다음 블록의 다른 버전을 게시하는 경우, 다른 피어 중 하나가 먼저 한 버전을 받고, 또 다른 피어가 다른 버전을 받게 됩니다. 이 경우, 각자가 자신의 버전의 체인 작업을 시작하고, 다른 버전이 더 일찍 계속될 경우를 대비해 저장합니다. 두 가지 분기 중 하나를 계속하는 새 블록이 수신되면 이중성은 사라지고, 경쟁 버전에서 작업하던 노드는 해당 버전으로 전환합니다.
디스크 공간 절약
체인의 마지막 거래가 충분히 오래된 블록에 들어가면, 체인에서 그보다 앞선 모든 거래를 삭제하여 디스크 공간을 비울 수 있습니다. 블록 해시가 변경되지 않도록 하기 위해 블록의 모든 거래는 머클 해시 트리로 저장되고 해당 루트만 블록 해시에 포함됩니다. 이 트리의 불필요한 가지를 제거하면 오래된 블록의 크기를 줄일 수 있으며, 중간 해시를 저장할 필요가 없습니다.
빈 블록 헤더는 약 80바이트입니다. 10분에 한 번씩 블록이 생성되는 속도를 기준으로 합니다. 우리는 1년에 80*6*24*365 = 4.2MB를 얻습니다. 무어의 법칙에 따라 연간 1.2GB씩 RAM이 증가한다는 것을 감안하면, 2GB RAM이 장착된 2008년 평균 컴퓨터의 경우 모든 블록 헤더가 메모리에 있더라도 저장 공간은 문제가 되지 않습니다.
간소화된 결제 확인
완전한 기능을 갖춘 노드를 실행하지 않고도 거래 검증이 가능합니다. 사용자가 해야 하는 일은 다른 노드에서 받은 가장 긴 체인의 블록 헤더를 저장하고, 원하는 거래에 대한 해시 서브 트리를 요청하는 것뿐입니다. 그는 거래의 정확성을 직접 확인할 수는 없지만, 해당 거래가 위치한 블록에 대한 참조를 받음으로써 해당 블록과 그 이후의 모든 블록이 네트워크에서 승인되고 확인되었음을 확인할 수 있습니다.
이러한 검증 방법은 네트워크가 최소한 정직한 참여자에 의해 절반 이상 제어되는 한, 즉 공격자가 많은 리소스를 확보할 때까지 신뢰할 수 있습니다. 일반 노드는 스스로 거래를 검증할 수 있지만, 공격자가 가장 긴 블록 체인을 생성하면 조작된 거래로 단순화된 체계를 손상시킬 수 있습니다. 이를 방지하기 위한 한 가지 전략은 “가짜” 블록을 수신한 일반 피어에게 알림을 보내는 것입니다. 이러한 신호가 발생하면 클라이언트 프로그램은 데이터가 부정확하다는 것을 독립적으로 확인하기 위해 전체 블록을 다운로드해야 합니다.
기술의 비밀성
전통적인 은행 모델은 정보에 대한 접근을 관련 당사자와 신뢰할 수 있는 제3자에게만 제한하여 필요한 수준의 기밀성을 유지합니다. 거래 내용을 공개적으로 게시해야 하기 때문에 이 방법은 불가능하지만, 공개 키가 익명이면 개인 정보를 여전히 보호할 수 있습니다. 누군가가 다른 사람에게 일정 금액의 돈을 보냈다는 정보는 공개되지만, 특정 개인에 대한 언급은 없습니다. 증권 거래소에서도 동일한 양의 데이터가 공개되는데, 거래 시간과 거래량만 공개되고 누가 거래를 수행했는지는 정확히 표시되지 않습니다.
추가 보호 방법으로는 각 거래에 대해 새로운 공개/개인 키 쌍을 생성하는 것이 있습니다. 이를 통해 서로 다른 지불이 공통된 발신자 또는 수신자에게 연결되는 것을 방지할 수 있습니다. 일부 공개적 연결은 여전히 불가피합니다. 여러 입력이 있는 거래는 이러한 금액이 같은 사람에게 속한다는 것을 증명합니다. 키 소유자의 신원이 공개되면 그에게 속한 모든 거래가 공개될 수 있는 위험이 있습니다.
“51% 공격”의 확률 추정
공격자가 정직한 참여자보다 더 긴 블록 체인을 생성하려는 시나리오를 생각해 보겠습니다. 그가 성공하더라도, 그것은 허공에서 돈을 창출하거나, 다른 사람의 코인을 횡령하거나, 다른 임의의 변화를 일으키는 능력으로 이어지지는 않을 것입니다. 노드는 결코 유효하지 않은 거래나 그러한 거래가 포함된 블록을 허용하지 않습니다. 공격자는 보낸 돈을 돌려받기 위해 거래 중 하나만 변경하려고 시도할 수 있습니다.
정직한 참가자와 공격자 간의 경쟁은 이항 무작위 산책으로 표현될 수 있습니다. “좋은” 체인이 블록 하나 확장되는 성공적인 이벤트는 갭을 한 단위 늘리는 결과를 가져오고, 공격자가 다음 블록을 생성하는 실패한 이벤트는 갭을 줄이는 결과를 가져옵니다. 공격자가 몇 블록 차이를 만들어낼 확률은 “플레이어를 파괴하는” 문제와 동일합니다. 플레이어가 무제한의 크레딧을 가지고 있고, 약간의 적자를 안고 시작해서 무한한 횟수의 시도를 통해 되찾을 수 있다고 가정해 보겠습니다. 공격자가 성공할 확률과 정직한 참여자들을 따라잡을 확률은 다음과 같이 계산합니다.
p = 정직한 체인에 블록이 나타날 확률,
q = 공격자가 블록을 생성할 확률,
qz = 공격자가 z 블록 차이를 따라잡을 확률.

p > q인 경우, 확률은 공격자가 뒤에 있는 블록 수에 따라 기하급수적으로 감소합니다. 그에게 불리한 모든 상황을 고려했을 때, 초기에 행운이 없다면 성공 가능성은 거의 없습니다.
이제 지급 수령인이 이전 소유자가 거래를 취소할 수 없을 것이라고 확신할 때까지 얼마나 기다려야 하는지 고려해 보겠습니다. 악의적인 보낸 사람이 받는 사람이 지불이 이루어졌다고 잠시 믿게 한 후, 돈을 자신에게 돌려준다고 가정해 보자. 수신자는 그 사실을 알게 되지만 사기꾼은 이미 너무 늦었기를 바랍니다.
수신자는 새로운 키 쌍을 생성하고 거래에 서명하기 직전에 자신의 공개 키를 발신자와 공유합니다. 이렇게 하면 보내는 사람이 미리 체인 작업을 시작해서 운이 좋아서 빠르게 작업을 진행할 수 있는 순간에 거래를 보내는 것을 방지할 수 있습니다. 사기꾼은 결제를 보낸 후 대체 거래를 포함하는 체인의 병렬 버전을 비밀리에 작업하기 시작합니다.
수신자는 거래가 블록에 추가될 때까지 기다리고, 그 블록이 z개의 블록 더 이어질 때까지 기다립니다. 그는 공격자의 진행 상황을 모르지만 정직한 블록의 평균 생성 속도가 알려진 값이라면 공격자의 블록 수는 수학적 기대값과 함께 포아송 분포를 따릅니다.

공격자가 정직한 참가자를 따라잡을 확률을 얻으려면 난수 변수의 값(공격자가 생성한 블록 수)에 공격자가 남은 차이를 메울 수 있는 확률을 곱해야 합니다.

항을 다시 정리하고 무한급수를 제거하면 다음 식을 얻습니다.

따라서 개발자들은 z가 증가함에 따라 확률이 기하급수적으로 감소한다는 결론에 도달했습니다. 비트코인 지갑에서는 거래 확인의 형태로 구현되었습니다.
유명 블록체인에 대한 “51% 공격”의 역사
여러 블록체인이 “51% 공격”을 경험했습니다. 2018년 5월 Bitcoin Gold(BTG), 2018년 4월 Verge(XVG), 2019년 1월 Ethereum Classic(ETC), 2013년 7월 Feathercoin(FTC)이 그 예입니다.
비트코인 블록체인에서 성공적인 “51% 공격”은 발생한 적이 없지만, 과거에 그러한 공격을 시도한 적은 있습니다.
2014년에 채굴 풀인 Ghash.io가 일시적으로 비트코인 네트워크의 전체 컴퓨팅 파워의 50% 이상을 통제하여 커뮤니티에 우려를 안겨주었습니다. 그러나 Ghash.io는 신속히 조치를 취하고 컴퓨팅 파워를 여러 풀로 나누어 “51% 공격”을 방지하는 데 도움을 주었습니다.
2017년 12월, NiceHash 채굴 풀은 사이버 공격을 받아 당시 약 8,000만 달러 상당의 4,700개 이상의 비트코인이 도난당했습니다. 51% 공격과 직접 관련이 없지만, 이 공격은 사이버 공격이 블록체인 네트워크에 미치는 위협을 강조합니다.
2018년 1월, 비트메인의 앤트풀 채굴 풀은 일시적으로 비트코인 네트워크의 전체 컴퓨팅 파워의 50% 이상을 통제했습니다. 하지만 커뮤니티는 신속히 대응하여 “51% 공격”을 방지하기 위한 조치를 취했습니다.
블록체인에 대한 51% 공격이 성공한 후, 복구는 매우 어려울 수 있습니다. 특히 대부분의 네트워크 노드가 손상된 경우 더욱 그렇습니다.
복구 방법 중 하나는 블록체인을 하드 포크하는 것입니다. 즉, 수정된 프로토콜을 사용하여 미래에 공격이 다시 발생하지 않도록 하는 새로운 버전의 블록체인을 만드는 것입니다. 그러나 하드 포크로 인해 커뮤니티가 분열되고 두 개의 별도 블록체인 체인이 생성될 수도 있습니다.
또 다른 방법은 손상된 시스템을 대체할 수 있는 새로운 합의 시스템을 구축하는 것입니다. 예를 들어, 이러한 유형의 공격에 취약하지 않은 지분 증명(Proof-of-Stake)과 같은 새로운 합의 알고리즘을 사용하는 것이 포함될 수 있습니다.
개발자가 어떤 접근 방식을 선택하든, 성공적인 공격으로부터 복구하려면 커뮤니티와 개발자의 협력이 필요하며, 이를 통해 블록체인을 보호하고 향후 보안을 보장해야 합니다.
어떤 경우든 “51% 공격”은 블록체인에 심각한 문제이며, 사용자와 생태계에 심각한 결과를 초래할 수 있습니다.
결론
51% 공격이 성공하고 풀 간의 공모나 양자 컴퓨터 사용이 발생하면 공격자는 수익을 얻을 수 없게 됩니다. 네트워크에 대한 신뢰가 떨어지고 비트코인 가격이 폭락하게 되기 때문입니다.
정상적인 네트워크 운영을 유지하려면 적절한 분산 용량을 갖춘 정직한 채굴자의 참여가 필요합니다. 그러나 자주 결제를 수락하는 회사들은 블록 검증의 독립성, 보안성 및 속도를 높이기 위해 단순화된 방식이 아닌 일반 모드로 네트워크에 연결해야 합니다.
비트코인의 가성 익명성 덕분에 거래를 분석하고, 지갑 주소를 클러스터링하고, 이를 통해 사고 발생 시 침입자의 신원을 식별할 수 있다는 점도 별도로 주목할 만합니다.
소스
- https://bitcoin.org/files/bitcoin-paper/bitcoin_ru.pdf – 비트코인 백서(공식 커뮤니티 번역).
- 사이페딘 아무스. 돈의 간략한 역사, 또는 비트코인에 대해 알아야 할 모든 것. 러시아어 번역, 러시아어 출판, 디자인. OOO Mann, Ivanov 및 Ferber, 2019.