궁금한 주제를 찾아보세요

비트코인, 스테이블코인, 온체인 데이터처럼 주제로 검색하세요.

다시 읽을 이야기

저장한 글은 이 브라우저에만 보관됩니다.

기초지식코인 기초

BIP143 서명 해시: 입력 금액이 서명에 들어가고 해싱이 O(n)이 된 이유

BIP143 원문으로 버전 0 witness 프로그램의 서명 대상 열 항목, hashPrevouts·hashSequence·hashOutputs가 0으로 채워지는 조건, scriptCode 규칙을 나눠 읽습니다.

난이도 입문기초 카테고리와 설명 방식 기준
BIP143 서명 해시: 입력 금액이 서명에 들어가고 해싱이 O(n)이 된 이유 개념을 표현한 편집 일러스트
먼저 읽는 핵심

BIP143은 버전 0 witness 프로그램의 서명 대상을 열 항목의 이중 SHA256으로 새로 정의합니다.
모든 sighash 유형이 서명하는 입력의 금액(8바이트)을 포함하고, 반복 계산을 재사용해 해싱을 O(n²)에서 O(n)으로 줄입니다.
ANYONECANPAY, SINGLE, NONE 여부에 따라 hashPrevouts·hashSequence·hashOutputs가 0으로 채워질 수 있습니다.

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초가 걸릴 수 있다고 적습니다. 또 금액이 해시에 없어서 오프라인 서명 기기는 수수료를 정확히 알 수 없었습니다.

BIP143 서명 대상 열 항목
순서 항목 크기
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을 커밋하며 의미는 바뀌지 않는다고 각주에 적습니다.

참고한 원문 자료

자료 확인 기준일 2026.10.27
  1. BIP143 Transaction Signature Verification for Version 0 Witness Program — github.com/bitcoin/bipsgithub.com
작성 방식과 확인 범위
출처 수집
원문 링크 1개 제공
작성·확인
공식 기관 자료를 근거로 AI 도구를 활용해 작성했고, 운영자가 발행 전에 읽어 확인합니다.
전문가 검토
세무·법률 전문가 검토는 거치지 않았습니다.

투자·세무 판단은 전문가와 상의하세요. 제도와 거래소 안내는 바뀔 수 있으니 원문의 적용 대상과 최신 안내를 함께 확인해 주세요.

이해를 위한 정보 콘텐츠

이 글은 특정 자산의 매수·매도 또는 수익을 권유하지 않습니다. 자료의 발표 시점과 이후 변경 사항을 함께 확인해 주세요.

편집 원칙 보기 →이 기사 정정 제보 →