BIP143은 버전 0 witness 프로그램에서 서명할 대상을 열 항목을 이어 이중 SHA256한 값으로 다시 정의합니다. 원문이 꼽은 목적은 반복 해싱을 줄이는 것과 입력 금액을 서명에 포함시키는 것입니다. 이 글은 2026-10-27에 연 BIP143 원문(상태 Deployed)으로 확인한 범위만 다룹니다.
확인 기준일 2026-10-27 · 다음 확인 예정 2026-11-26
기존 서명 해시에는 어떤 약점이 있었을까?
원문은 두 가지를 듭니다. 서명 하나마다 거래 크기에 비례해 해싱하므로 sigops가 늘면 O(n²)가 되고, 2015년 평균 컴퓨터에서 1MB 블록 검증이 약 2초인데 sigops 5569개인 1MB 거래는 25초가 걸릴 수 있다고 적습니다. 또 금액이 해시에 없어서 오프라인 서명 기기는 수수료를 정확히 알 수 없었습니다.
| 순서 | 항목 | 크기 |
|---|---|---|
| 1 | nVersion | 4바이트 |
| 2 | hashPrevouts | 32바이트 |
| 3 | hashSequence | 32바이트 |
| 4 | outpoint | 32+4바이트 |
| 5 | scriptCode | 가변 |
| 6 | 이 입력이 쓰는 출력의 금액 | 8바이트 |
| 7 | nSequence | 4바이트 |
| 8 | hashOutputs | 32바이트 |
| 9 | nLocktime | 4바이트 |
| 10 | sighash 유형 | 4바이트 |
0으로 채워지는 해시는 언제일까?
hashPrevouts는 ANYONECANPAY가 없을 때 모든 outpoint의 이중 SHA256이고 있으면 32바이트 0입니다. hashSequence는 ANYONECANPAY, SINGLE, NONE이 모두 아닐 때만 계산합니다. hashOutputs는 SINGLE도 NONE도 아니면 모든 출력, SINGLE이고 입력 번호가 출력 수보다 작으면 같은 번호의 출력, 그 외에는 0입니다. 앞선 계산을 다른 입력에서 재사용해 전체가 O(n)이 됩니다. 유형별 의미는 SIGHASH 유형 글에 있습니다.
scriptCode는 무엇이 될까?
P2WPKH에서는 0x1976a914{20바이트 공개키 해시}88ac입니다. P2WSH에서는 witnessScript이며, OP_CODESEPARATOR가 있으면 마지막으로 실행된 것까지를 잘라낸 나머지입니다. P2WSH에서 OP_CODESEPARATOR가 없으면 witnessScript 전체가 scriptCode입니다. 원문은 FindAndDelete를 적용하지 않는다고도 적고, BIP141은 이 체계에서 압축 공개키만 허용된다고 BIP143의 제한을 가리킵니다.
금액이 들어가면 무엇이 달라질까?
원문은 입력 금액을 서명에 넣으면 오프라인 장치가 이전 거래 전체 없이도 금액을 알고 서명할 수 있다고 설명합니다. 작성과 서명을 나누는 형식은 PSBT 글에서 이어 볼 수 있습니다.
자주 묻는 질문
이 서명 해시는 모든 비트코인 입력에 쓰이나요?
원문은 새 알고리즘이 버전 0 witness 프로그램의 sigops에만 적용된다고 적습니다.
SINGLE과 ANYONECANPAY를 함께 쓰면 무엇이 달라지나요?
SINGLE은 입력 번호를 커밋하지 않으므로, 이 조합에서는 같은 번호에 놓인 입력과 출력 쌍끼리 순서를 바꿀 수 있다고 원문이 적습니다.
hashOutputs가 0이 되면 의미가 바뀌나요?
원문은 기존 알고리즘이 쓰던 0x00…01 대신 0x00…00을 커밋하며 의미는 바뀌지 않는다고 각주에 적습니다.



