저자: BitMEX 리서치
요약: 이 글에서는 검증을 어렵게 만들도록 특별히 설계된 블록인 "강화 블록(hardened blocks)"에 대해 논의합니다. 이러한 블록은 비트코인에 적대적인 누군가가 노드의 검증 시간을 매우 길게 만들도록 설계된 "강화 트랜잭션(hardened transactions)"을 생성할 때 만들어집니다. 이 개념은 2013년 1월, 약 1MB 크기의 강화 트랜잭션이 발견되면서 처음 논의되었는데, 당시 일반적인 컴퓨터에서 검증하는 데 약 3분이 소요되었습니다. 이러한 공격은 상황을 몇 배나 더 악화시킬 수 있는 다양한 변형이 있지만, 여기서는 자세히 다루지 않겠습니다. BIP-54 소프트 포크 제안에는 트랜잭션의 비분리형 증인(non-Segregated Witness) 입력에 사용할 수 있는 CHECKSIG 및 CHECKMULTISIG 오퍼코드의 총 개수를 제한하는 해결책이 포함되었습니다.
개요
이 글은 BIP-54에 따라 수정 또는 완화될 수 있는 잠재적인 비트코인 취약점에 대한 시리즈의 네 번째 기사입니다.
- Bitcoin's Duplicate Transactions - March 2025 (中文译本)
- 타임워프 공격 - 2025년 3월 ( 중국어 번역 )
- 64바이트 트랜잭션 - 2025년 12월 ( 중국어 번역 )
이 마지막 글에서는 가장 심각한 잠재적 취약점 중 하나인 악성 블록의 출현 가능성에 대해 살펴보겠습니다. 악성 블록이 생성되면 노드가 이를 검증하는 데 극도로 오랜 시간이 소요될 수 있습니다. 이 문제는 흔히 "최악의 경우 블록 검증 문제"라고 불립니다.
문제의 기원
2013년 1월, 비트코인 보안 연구원 세르지오 레르너는 비트코인토크 포럼에 비트코인 노드가 검증하는 데 최소 3분이 걸리는 유효한 비트코인 거래를 구성하는 것이 가능하다고 설명하는 글을 올렸습니다 . 이 방법은 (특히 Segregated Witness 스크립트 유형과 같은 과거 타임라인을 고려하여) 여러 입력값을 포함하는 거래를 생성하는 것을 전제로 합니다. 이러한 입력값들은 소위 "SIGHASH 연산의 2차 인플레이션" 문제에 취약했습니다.
세르히오는 약 1MB 크기의 비트코인 거래가 19GB 이상의 해시 가능 데이터를 생성할 수 있으며, 일반적인 컴퓨터에서 이를 검증하는 데 최소 3분이 소요된다고 설명했습니다. 1MB 블록 크기 제한은 이러한 문제의 심각성을 어느 정도 완화시켜 주지만, 이 제한이 없다면 공격의 심각성은 훨씬 더 커질 수 있습니다. 세르히오의 예시에서 거래는 무효이지만, 노드가 거래의 유효성을 판단하는 데 상당한 시간을 소모하게 만들기 때문에 이러한 공격은 여전히 치명적인 것으로 간주됩니다. 더욱이, 단일 거래를 검증하는 데 3분이나 소요되는 것은 분명 심각한 문제입니다. 아래 표에는 몇 가지 잠재적인 문제점을 정리했습니다.
복잡한 거래의 부정적인 결과
| 장면 | 설명하다 |
|---|---|
| DoS 공격 | 비트코인에 적대적인 개인이 이처럼 까다로운 거래를 만들어낼 수 있습니다. 이는 채굴자와 노드 운영자 모두에게 동시에 영향을 미칠 수 있는 심각한 DoS 공격 취약점입니다. 블록 검증 과정이 어려워지면 판매자와 거래소 수동으로 검증을 중단해야 할 수도 있습니다. 문제를 인지하지 못한 노드 운영자는 노드를 반복적으로 재시작해야 하는 상황에 놓이게 됩니다. 결국 노드 운영자는 포기하고 오프라인 상태가 될 가능성이 높습니다. |
| 광부들에 대한 단속 | 3분은 목표 블록 생성 시간의 30%에 해당합니다. 악의적인 채굴자는 이처럼 검증하기 어려운 블록을 생성한 후, 다른 채굴자들이 검증 작업을 하는 동안 즉시 다음 블록 채굴을 시작할 수 있습니다. 심지어 적대적인 채굴자는 검증하기 어려운 블록을 연속적으로 생성하여 다른 채굴자들을 방해하고 블록 생성을 독점할 수도 있습니다. |
| 增加初始化区块同步(IBD)时间 | 블록에 의해 거래가 확정된 후, 검증이 어려운 거래는 온체인 무기한으로 남아 있게 되어 노드가 초기 블록 동기화를 완료하는 데 걸리는 시간을 증가시킵니다. 이러한 복잡한 거래가 반복적으로 발생하면 IBD(Initial Block Data) 속도가 크게 저하되고 노드 운영 비용이 증가할 수 있습니다. |
区块体积战争
복잡한 블록 문제는 2015년부터 2017년까지 지속된 "블록 크기 전쟁"에서도 블록 크기 제한을 늘리지 말아야 할 이유로 제기되었으며, 최소한 이 문제의 영향을 제한하기 위해 새로운 제한을 추가해야 했습니다.
2015년 12월, 비트코인 보안 연구원인 조나스 닉은 홍콩에서 열린 "스케일링 II" 컨퍼런스에서 바로 이 주제에 대해 발표했습니다. 그는 비트코인 블록에 새로운 자원 사용량 제한을 추가하여 이러한 공격의 영향을 완화하지 않는 한 블록 크기 제한을 늘려서는 안 된다고 설명했습니다.

- 이미지 출처: https://youtu.be/vfIs_trEhao?si=oRu2x6CfWhFbxG2R&t=3692 -
2016년 1월, 비트코인 코어 프로젝트 웹사이트에 "세그윗(SegWit)"의 장점을 설명하는 블로그 게시물이 올라왔습니다. 세그윗의 핵심 장점 중 하나는 SIGHASH 연산에서 발생하는 비선형 확장 버그를 해결한다는 점이었습니다. 세그윗이 비트코인의 확장성 문제에 대한 강력한 해결책으로 여겨지는 이유는 바로 이 때문입니다. 세그윗은 기존의 (잠재적으로 문제가 있는) 거래 형식에 대해서는 1MB의 블록 크기 제한을 유지하면서, 이러한 치명적인 결함이 없는 거래 형식에 대해서는 블록 크기를 늘립니다.

본질적으로 거래 규모가 두 배로 늘어나면 서명 작업 횟수와 각 서명을 검증하기 위해 해시해야 하는 데이터 양이 모두 두 배로 늘어납니다. 이는 이미 비실험적 환경에서 관찰된 바 있습니다. 일반적인 단일 블록은 25초 만에 검증할 수 있는 반면, 악의적으로 조작된 거래는 검증하는 데 3분 이상이 소요될 수 있습니다.
2021년 3월, 저희는 블록 크기 전쟁에 관한 책을 출간했는데, 이 책에서는 최악의 경우 블록 검증 문제에 대해서도 논의했습니다. 당시 저희는 그러한 블록을 검증하는 데 "수 시간"이 걸릴 수 있다고 언급했는데, 이는 2013년에서 2016년 사이에 널리 알려졌던 "3분"이라는 수치와는 상당한 차이입니다. 이는 일부 비트코인 보안 연구원들이 이러한 공격을 최대한 악용할 수 있는 방법을 발견하여 상황을 악화시키고 검증에 수 시간을 더 소요하게 만들 수 있다고 저희에게 알려왔기 때문입니다. 하지만 한편으로는, 라즈베리 파이와 같은 상당히 저사양 기기를 사용하지 않는 한, 저희가 제시한 "수 시간"이라는 수치 또한 다소 비현실적일 수 있습니다.
SIGHASH 연산의 비선형적 인플레이션은 거래소 에 대한 입력 개수가 증가함에 따라 해당 거래소 횟수가 비선형적으로가 아니라 제곱으로 증가한다는 것을 의미합니다. 이러한 인플레이션 문제는 블록 크기 제한을 늘리는 데 걸림돌이 됩니다. 제한을 제거하면 공격자가 검증하는 데 매우 오랜 시간이 걸리는 트랜잭션을 생성하여 전체 네트워크를 마비시킬 수 있기 때문입니다. 공격자는 심지어 이러한 대규모 트랜잭션을 여러 개 포함하는 블록을 구성하여 일반 컴퓨터로 검증하는 데 몇 시간이 걸리도록 만들 수도 있습니다. 따라서 많은 소형 블록 옹호자들은 이 문제를 해결하는 것이 블록 크기 제한을 늘리는 데 필수적인 전제 조건이라고 생각합니다. 그들은 대형 블록 옹호자들이 이러한 약점을 인지하지 못하고 공격자에 대한 대비가 부족하여 안일하다고 비판합니다.
— 블록 크기 전쟁
악성 블록의 산술 연산
이 섹션에서는 이 공격에 대해 더 자세히 설명합니다. 공격자가 어려운 블록을 준비할 때 비트코인 합의 제약 조건 세 가지를 고려해야 합니다.
| 규칙 | 한계 | 규칙 활성화 시간 |
|---|---|---|
| 블록 크기 제한(비증인 데이터) | 1MB | 2010년 9월 |
| 스크립트 크기 제한 | 10KB | 2010년 8월 |
| 단일 스크립트 오퍼코드 개수 제한 | 201 | 2010년 8월 |
出于演算的目的,我们解释的是这种攻击的最基础形式,甚至比Sergio 在2013 年列举的还要简单,当然也是过度简化的。思路是,攻击者首先要构造出一些启动交易,可以假设是放在另一个区块中,以避免占用真正触发攻击的区块的1MB 空间。在这些启动交易中,攻击者创建许多输出,每个输出都包含200 个OP_CHECKSIG操作码。有了这些输出之后,攻击者就准备好制作真正的攻击交易了。这笔攻击交易将所有这些输出用作输入,(在我们的场景中)还可以留一个输出给自己。每个输入都包含一个有意义的CHECKSIG 和200 个无意义的CHECKSIG(填满10KB 的单脚本可用空间)。这就用尽了所有可用的空间,因此最大程度上释放了这种攻击的威力。
이러한 공격 거래가 주어졌을 때, 우리는 다음의 매우 기본적인 근사 공식을 사용하여 공격 거래를 검증할 때 해시해야 하는 총 데이터 양을 계산합니다. 아래 공식에는 입력 개수에 대한 제곱항이 포함되어 있는데, 이는 SIGHASH 연산의 제곱 증가 버그를 반영한 것입니다. 입력이 많을수록 해시해야 하는 데이터 양도 늘어나며, 이는 제곱에 비례합니다.
总共需要哈希的数据(KB) = 201 * N * (10KB + N)其中N 为交易输入的数量위의 공식을 사용하여 다음과 같은 그래프를 그렸습니다. 이 그래프는 해시해야 하는 데이터 양이 공격 트랜잭션의 입력 개수에 따라 어떻게 달라지는지를 보여줍니다. 그래프의 형태는 제곱 함수와 유사합니다. 위의 공식은 정확하지 않으며 해시해야 하는 데이터 양을 정확하게 계산하지 않습니다. 단지 이러한 인플레이션 문제와 관련된 수학적 관계를 대략적으로 설명하기 위한 것입니다.
해시할 데이터 항목 수와 트랜잭션 입력 수의 관계

이 표의 가로축은 8,000개 이상의 입력값에서 멈추는데, 이는 거래 크기가 이제 1MB에 가까워졌기 때문입니다. 1MB는 Segregated Witness 도입 이전의 거래에서 사용할 수 있는 최대 공간입니다. 이 거래를 검증하려면 노드는 30GB가 넘는 데이터를 해싱해야 합니다. 이는 공격 거래이며, 매우 기본적인 (그리고 잠재적으로 부정확한) 시나리오에서 발생할 수 있는 최악의 상황을 가정한 것입니다. 저희는 해싱해야 하는 데이터 양(ECDSA 서명 검증 횟수가 아닌)이 이러한 복잡한 거래의 위험성을 나타내는 핵심 지표라고 판단하여 이 지표에만 집중했습니다.
해시값 1KB당 0.005밀리초(ms)가 소요됩니다. 이는 요나스 닉이 2015년 발표에서 2014년형 노트북(듀얼 코어 3GHz i7 CPU 사용)으로 계산한 수치입니다. 아래 그래프는 이러한 공격을 받은 트랜잭션을 검증하는 데 걸리는 시간을 보여줍니다. 최악의 경우, 단일 트랜잭션을 검증하는 데 150초 이상, 즉 2분 30초 이상이 소요될 수 있습니다. 이는 명백히 치명적인 결함입니다. 최근 노드 성능 관련 보고서 ( 중국어 번역본 )에 따르면, 저희 노드는 일반적으로 초당 15개의 블록을 검증합니다. 따라서 이러한 까다로운 블록은 일반 블록에 비해 검증 속도를 약 2300배 정도 크게 저하시킵니다.
거래소 공격에 소요된 시간과 공격 거래소에 대한 입력 횟수를 비교하여 검증하십시오.

하지만 현재 기기들은 2015년 당시 기기들보다 훨씬 빠르고, 입력값 검증도 병렬로 진행할 수 있습니다. 따라서 위의 검증 일정은 오늘날의 기기들을 고려했을 때 다소 보수적인 예측일 수 있습니다.
(역자 주: 비트코인 네트워크의 모든 노드가 최신 장비를 사용하는 것은 아닙니다. 일부 노드는 2015년형 i7 듀얼 코어 CPU 수준의 연산 능력을 갖고 있을 수 있습니다.)
BIP-54 시정 조치
BIP-54에서 제안된 해결책은 비교적 간단합니다. 개별 트랜잭션에 새로운 합의 제약 조건을 추가하여 다음 요소의 개수를 제한하는 것입니다.
- 격리되지 않은 모든 증인 입력에 있는 CHECKSIG 및 CHECKMULTISIG 오퍼코드
- 이전 단계에서 출력된 스크립트의 공개 키
거래에서 위에 언급된 두 항목의 합이 2500을 초과하면 해당 거래는 무효로 간주됩니다.
이러한 수정 사항을 적용하면 위에서 설명한 시나리오에서 공격 트랜잭션은 12개의 입력값만 포함하게 되고, 블록 생성에 필요한 해시 가능 데이터는 24MB에 불과하며, 검증 시간은 0.1초로 단축됩니다. 적어도 가장 기본적인 시나리오에서는 문제가 잘 해결된 것으로 보입니다.
결론적으로
다시 한번 강조하지만, 저희의 계산과 예시는 극히 기본적인 수준이며 지나치게 단순화된 것입니다. 실제 공격은 훨씬 더 심각한 수준(수십 배 이상)으로 악화될 수 있는 정교한 기법들이 존재합니다. 예를 들어, 긴 스크립트를 사용하여 출력을 추가하면 해시해야 하는 데이터 양이 더욱 증가할 수 있습니다. 이러한 극단적인 경우, 어려운 블록 하나가 비트코인 네트워크에 심각한 위기를 초래할 수 있습니다. 단 하나의 블록을 검증하는 데 한 시간 이상이 소요될 수 있으며, 이로 인해 수많은 노드가 오프라인 상태가 되거나 영영 복구되지 않을 가능성이 있습니다.
다행히 이러한 유형의 공격은 실행하기가 매우 복잡합니다. 첫째, 비표준 트랜잭션을 전송해야 하므로 채굴자만이 이러한 공격을 시작할 수 있을 가능성이 높습니다. Matathon의 Slipstream과 같이 트랜잭션을 채굴자에게 직접 제출하는 서비스를 사용하더라도 채굴자는 내장된 보안 로직을 가지고 있어 제출된 트랜잭션을 검증하는 데 몇 시간씩 가만히 있지 않을 것입니다. 둘째, 최악의 시나리오에서는 어려운 블록이 생성되기 전에 상당한 블록 공간을 차지하는 여러 개의 복잡한 시작 트랜잭션이 필요합니다. 공격자가 주의하지 않으면 비트코인 네트워크를 관찰하는 누군가가 이러한 시작 트랜잭션을 감지하고 긴급 소프트 포크 사용자에게 알림으로써 공격을 방지할 수도 있고, 그렇지 않을 수도 있습니다. 따라서 이러한 관점에서 이 취약점은 "시간 왜곡 공격"과 유사합니다.
하지만 공격의 복잡성에도 불구하고, 이는 비트코인에 매우 심각한 문제이며 반드시 해결해야 한다고 생각합니다. 이는 BIP-54가 해결하고자 했던 네 가지 문제 중 가장 심각한 문제일 가능성이 높습니다. 우리는 이 네 가지 문제를 심각도 순으로 다음과 같이 정리했습니다.
- 繁难区块
- 时间扭曲攻击
- 64건의 거래
- 중복 거래
(위에)

