﻿---
title: "Bitcoin 난이도 조정: 목표값, 리타기팅, 한계"
description: "Bitcoin은 2,016블록마다 작업증명 임계값을 다시 정해 장기 평균 블록 간격을 10분에 가깝게 유도합니다. 목표값, 압축 인코딩, 타임스탬프 구간, 제한, 네트워크 규칙, 확률적 결과를 구분해 분석합니다."
image: "https://wiki.fcontext.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.fcontext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Bitcoin 난이도 조정: 목표값, 리타기팅, 한계

> 프로토콜 분석을 위한 교육 자료일 뿐입니다. 표시된 난이도, 해시레이트 추정치 또는 조정 예측만으로 수익성, 확인 안전성, 탈중앙화 또는 향후 네트워크 상태가 입증되지는 않습니다.

<a id="answer"></a>

## 핵심 답변

Bitcoin 난이도 조정은 허용 가능한 작업증명 해시의 최댓값인 `target`을 주기적으로 바꾸어, 활성 해시레이트가 변해도 장기 평균 블록 간격을 10분에 가깝게 유도하는 결정론적 합의 규칙입니다. 메인넷에서는 보통 목표값이 2,016블록 동안 고정되고 다음 주기에 사용할 값이 다시 계산됩니다. 각 검증 노드는 이전 헤더로부터 동일한 필수 목표값을 도출합니다. 채굴자가 투표하거나 탐색기가 정하는 값이 아닙니다.

블록 헤더 해시를 정수로 해석한 값이 헤더의 32비트 `nBits` 필드에 인코딩된 목표값 이하일 때만 작업증명이 유효합니다. 목표값이 작을수록 조건을 충족하는 해시가 적어 예상 시도 횟수가 늘어납니다. 관례적으로 난이도는 목표값에 반비례하는 상대값입니다.

`D = T₁ / T`

여기서 `T`는 현재 목표값이고 `T₁`은 난이도 1의 기준 목표값입니다. 따라서 목표값과 난이도는 반대 방향으로 움직입니다. 어느 쪽도 장비 수, 에너지 사용량, 채굴자 신원 또는 관측 해시레이트를 직접 측정한 값이 아닙니다.

10분은 일정표가 아니라 기댓값입니다. 해시 시도와 블록 도착은 무작위이므로 해시레이트와 목표값이 안정적이어도 두 블록이 몇 초 간격으로 나오거나 한 시간 동안 나오지 않을 수 있습니다. 리타기팅은 한 주기에 걸친 지연 피드백입니다. 블록 빈도의 지속적 편차는 줄이지만 단기 변동을 없애거나 해시레이트 충격에 즉시 대응하지는 못합니다.

난이도 조정은 보조금 반감을 포함해 높이 기준 사건이 일어나는 시간적 속도에 영향을 주지만, 보조금 액수, 210,000블록 반감 간격 또는 최종 공급 규칙을 정하지 않습니다. 정규 체인을 직접 선택하지도 않습니다. Bitcoin의 포크 선택은 헤더와 블록을 검증한 뒤 누적 chainwork를 비교합니다. 한 블록의 난이도 표시는 누적 작업량이 아닙니다.

<a id="mechanism"></a>

## 리타기팅 분석 방법

1. **네트워크와 규칙 집합을 고정합니다.** 메인넷, 기존 테스트넷, Testnet4, signet, regtest는 모든 예외를 공유하지 않습니다. 체인, 소프트웨어 규칙, 후보 높이, 리타기팅 및 특별 최저 난이도 블록 활성 여부를 기록합니다.
2. **주장된 목표값을 디코딩합니다.** 후보 헤더의 압축 `nBits` 값을 목표값 `T`로 펼칩니다. 음수, 0, 오버플로 또는 `powLimit` 초과 목표값을 거부하고, 헤더 해시가 `≤ T`여야 합니다.
3. **조정 경계를 찾습니다.** 메인넷에서는 후보 높이가 2,016으로 나누어떨어질 때 새 목표값이 필요합니다. 다른 높이에서는 이전 블록의 `nBits`를 바꾸지 않고 이어야 합니다.
4. **타임스탬프 구간을 고릅니다.** 메인넷 경계에서 Bitcoin Core는 직전 2,016블록 주기의 마지막 블록 타임스탬프에서 첫 블록 타임스탬프를 뺍니다. 두 끝점은 2,016블록을 포함하지만 블록 사이 간격은 2,015개뿐입니다. 그럼에도 명목 목표 기간은 `2,016 × 600 = 1,209,600`초입니다.
5. **경과 시간을 제한합니다.** `t = clamp(t_actual, 302,400, 4,838,400)`초로 두어 명목 14일의 4분의 1부터 4배 사이로 제한합니다. 헤더 타임스탬프는 채굴자가 제공하고 다른 유효성 제약을 받는 합의 필드이며 노드의 정확한 수신 시간이 아닙니다.
6. **새 목표값을 계산하고 인코딩합니다.** 현재 메인넷 규칙에서는 정수 산술로 `T_new = min(powLimit, T_old × t / 1,209,600)`을 계산한 다음 결과를 `nBits`로 압축 인코딩합니다. 정수 나눗셈과 압축 형식 반올림 때문에 표시 비율이 이상적인 십진 계산과 조금 다를 수 있습니다.
7. **결과를 확률적으로 해석합니다.** 근사적으로 `D_new / D_old = T_old / T_new`입니다. 조정 결과를 블록 시간 분포 및 추정치임을 명시한 해시레이트와 비교하고, 수익, chainwork, 집중도, 확인 위험에 대한 결론과는 분리합니다.

메인넷 공식은 마지막 블록의 목표값을 `T_old`로 사용합니다. Testnet4는 의도적으로 다릅니다. BIP 94는 타임스탬프가 충분히 지연된 뒤 특별 최저 난이도 블록을 허용하지만 주기 첫 블록에는 그 예외를 금지하고, 일시적 예외가 다음 주기에 섞이지 않도록 첫 블록의 실제 난이도를 리타기팅 기준으로 사용합니다. Regtest는 보통 리타기팅을 비활성화합니다. 네트워크가 명시되지 않은 규칙 설명은 불완전합니다.

<a id="example"></a>

## 계산 예시

### 1. 변화가 없는 명목 주기

임의의 목표 단위로 `T_old = 10`이고 측정 기간이 정확히 `1,209,600`초라고 가정합니다. 제한은 값을 바꾸지 않습니다.

`T_new = 10 × 1,209,600 / 1,209,600 = 10`

난이도 비율은 `10 / 10 = 1`이므로 이상화된 난이도는 그대로입니다. 모든 블록이 10분 걸렸다는 뜻은 아닙니다. 구간 안의 빠르고 느린 무작위 간격이 서로 상쇄될 수 있습니다.

### 2. 12일의 빠른 주기

양 끝 타임스탬프가 12일 차이라고 가정합니다. 12일은 제한 안에 있으므로 목표값 비율은 `12 / 14 = 6/7`입니다. 새 목표값은 이전 값의 약 85.7143%이고:

`D_new / D_old ≈ 14 / 12 = 1.166667`

따라서 이상화된 난이도는 14.29%가 아니라 약 16.67% 상승합니다. 목표값 감소율과 난이도 증가율이 같지 않은 이유는 서로 역수이기 때문입니다.

### 3. 4배 제한

끝점이 1.75일밖에 차이나지 않으면 계산에는 최솟값 3.5일을 씁니다. 목표값은 이전 값의 약 4분의 1까지 낮아질 수 있어 한 번의 메인넷 조정으로 난이도가 약 4배까지 오를 수 있습니다.

타임스탬프가 70일에 걸치면 최댓값 56일을 씁니다. 목표값은 약 4배까지 커지고 난이도는 약 4분의 1까지 낮아질 수 있지만 `powLimit`가 더 일찍 목표값을 제한할 수 있습니다. “4배 제한”은 목표값과 난이도 중 무엇이며 어느 방향인지 밝혀야 합니다.

### 4. 주기 중간의 해시레이트 충격

단순화된 기댓값으로 첫 1,008블록이 10분 간격에 맞는 속도로 채굴되어 약 7일 걸렸다고 합시다. 이어서 목표값이 고정된 상태에서 해시레이트의 30%가 사라집니다. 남은 70%의 예상 간격은 `10 / 0.70 ≈ 14.286`분이므로 뒤의 1,008블록은 약 10일, 전체 주기는 약 17일이 걸립니다.

끝점, 무작위성, 압축 반올림 효과를 무시하면 목표값 배수는 `17/14 ≈ 1.214286`, 난이도 배수는 `14/17 ≈ 0.823529`로 약 17.65% 하락합니다. 충격이 주기의 절반에만 영향을 주었으므로 30% 전부 하락하지 않습니다. 이후에도 해시레이트가 70%로 유지되면 이 부분 조정 뒤에도 블록은 10분보다 느릴 것으로 예상되고 다음 주기가 추가 피드백을 제공합니다.

<a id="risks"></a>

## 위험과 검토 실패

### 규칙 및 산술 오류

- 난이도를 임계값 자체라고 하여 목표값과 그 역비례 상대 지표를 구분하지 않는 것.
- 공식을 뒤집어 빠른 주기에 목표값을 올리거나 느린 주기에 난이도를 올리는 것.
- 2,016블록을 측정된 타임스탬프 간격 2,016개로 보는 것. 현재 메인넷 끝점 계산은 2,015개 간격에 걸칩니다.
- 3.5일과 56일 제한, `powLimit`, 정수 나눗셈 또는 압축 `nBits` 반올림을 빠뜨리는 것.
- 메인넷 설명을 Testnet4, 기존 테스트넷, signet, regtest 또는 다른 작업증명 체인에 적용하는 것.
- 경계 블록이 존재하기 전 탐색기 예측을 추정이 아닌 합의 입력으로 여기는 것.
- 합의 계산이 사용하는 헤더 타임스탬프 대신 로컬 수신 시간을 쓰는 것.
- 현재 블록 난이도, 블록별 작업량, 누적 chainwork, 포크 선택 결과를 혼동하는 것.

### 측정 및 추론

- 추정 해시레이트를 작업량과 무작위 도착으로부터의 추론이 아니라 온라인 장비의 직접 목록으로 보는 것.
- 보통의 블록 시간 변동이 지배할 수 있는 주기 초반 일부만으로 조정값을 외삽하는 것.
- 난이도 상승을 가격, 채굴자 수익, 에너지 사용량 또는 탈중앙화 상승의 증거로 보는 것.
- 절대 작업량, 집중도, 지속 기간을 살피지 않고 난이도 하락을 네트워크 실패의 증거로 보는 것.
- 해시 함수, 기준 목표값, 조정 규칙을 정규화하지 않고 서로 다른 체인의 난이도 수치를 비교하는 것.
- 10분을 마감 시각, 서비스 수준 보장 또는 고정 확인 시간으로 설명하는 것.
- 블록 보상, 수수료, 가동률, 풀 조건, 헤지, 전력, 금융, 장비 효율 없이 채굴자 수익성을 추론하는 것.

### 보안 및 운영

- 현재 주기 중 갑작스러운 해시레이트 이탈이나 유입에 대한 즉각적 보호로 리타기팅을 보는 것.
- 난이도 하락이 블록 용량을 늘리거나 거래 적체를 즉시 없앤다고 가정하는 것.
- 누적 작업량, 재구성 능력, 거래 가치를 무시하고 난이도만으로 확인 정책을 정하는 것.
- 조정 설계를 평가할 때 타임스탬프 조작 유인과 프로토콜별 완화책을 무시하는 것.
- 구현 간 테스트 벡터와 활성화 계획 없이 합의 산술, 경계 인덱싱 또는 압축 인코딩을 바꾸는 것.

<a id="misconceptions"></a>

## 흔한 오해

- **모든 Bitcoin 블록은 10분이 걸립니다.** 10분은 해시레이트가 맞을 때의 목표 평균이며 개별 도착 시간은 무작위입니다.
- **채굴자가 다음 난이도에 투표합니다.** 검증 노드가 허용 `nBits`를 독립적으로 계산하며 다른 값을 주장하는 블록은 무효입니다.
- **목표값이 20% 작아지면 난이도도 20% 높아집니다.** 난이도는 반비례하므로 목표값 배수 0.8은 난이도 배수 1/0.8 = 1.25, 즉 25% 상승을 뜻합니다.
- **리타기팅은 해시레이트를 직접 측정합니다.** 타임스탬프가 붙은 블록 생산에 반응할 뿐이며 해시레이트 수치는 표본과 타임스탬프 가정을 포함한 추정치입니다.
- **난이도가 Bitcoin의 통화정책입니다.** 리타기팅은 높이 기준 발행의 시간적 속도를 안정시키지만 보조금 값과 반감은 별도 합의 규칙이 정합니다.

<a id="related"></a>

## 관련 주제

- [블록 시간](/ko/crypto/block-time/)
- [포크 선택 규칙](/ko/crypto/fork-choice-rule/)
- [해시레이트](/ko/crypto/hashrate/)
- [채굴](/ko/crypto/mining/)
- [작업증명](/ko/crypto/proof-of-work/)

<a id="sources"></a>

## 출처

- [Bitcoin: A Peer-to-Peer Electronic Cash System](https://bitcoin.org/bitcoin.pdf) - Bitcoin.org (접근일: 2026-08-19)
- [Bitcoin Core: Proof-of-Work Calculations](https://github.com/bitcoin/bitcoin/blob/master/src/pow.cpp) - Bitcoin Core (접근일: 2026-08-19)
- [Bitcoin Core: Network Consensus Parameters](https://github.com/bitcoin/bitcoin/blob/master/src/kernel/chainparams.cpp) - Bitcoin Core (접근일: 2026-08-19)
- [Bitcoin Core: Consensus Parameter Definitions](https://github.com/bitcoin/bitcoin/blob/master/src/consensus/params.h) - Bitcoin Core (접근일: 2026-08-19)
- [Bitcoin Developer Guide: Block Chain](https://developer.bitcoin.org/devguide/block_chain.html) - Bitcoin Project (접근일: 2026-08-19)
- [Bitcoin Developer Reference: Block Headers](https://developer.bitcoin.org/reference/block_chain.html) - Bitcoin Project (접근일: 2026-08-19)
- [BIP 94: Testnet 4](https://bips.dev/94/) - Bitcoin Improvement Proposals (접근일: 2026-08-19)
- [Bitcoin Core RPC: getblockheader](https://developer.bitcoin.org/reference/rpc/getblockheader.html) - Bitcoin Project (접근일: 2026-08-19)

Source: https://wiki.fcontext.com/ko/crypto/difficulty-adjustment/index.mdx
