# 공개 키 스크립트 (Pubkey Script, scriptPubKey)

공개 키 스크립트(Pubkey Script, scriptPubKey)는 비트코인 트랜잭션의 출력에 포함되어 해당 금액의 사용 조건을 설정하는 스크립트입니다. 조건을 충족하기 위한 데이터는 서명 스크립트(scriptSig) 또는 세그윗 증인(witness) 데이터에 제공될 수 있습니다. 코드에서는 scriptPubKey로 표기되며, “잠금 스크립트”라고도 합니다.

## 공개 키 스크립트 이해하기

비트코인과 같은 UTXO 방식의 블록체인에서는 각 트랜잭션 출력이 일정 금액과 그 금액을 쓰기 위한 조건을 함께 담고 있습니다. 이 조건이 바로 공개 키 스크립트입니다. 사용하려는 비트코인을 잠긴 금고에 비유하면, scriptPubKey는 금고의 자물쇠 설정과 같아서 금고를 열기 위한 조건을 명시합니다.

1. **scriptPubKey**는 트랜잭션 출력 내부에 존재하며, 다음에 해당 코인을 사용할 권리가 있는 사람을 지정합니다.
2. 일반적인 조건은 특정 공개 키(또는 그 해시)에 해당하는 개인 키의 소유권을 증명하는 유효한 디지털 서명을 제공하는 것입니다.
3. 자금을 사용하려면 새 트랜잭션의 입력에 **서명 스크립트**(또는 증인 데이터)를 제시해야 합니다. 노드는 이 데이터와 이전 출력의 scriptPubKey를 함께 실행해 결과가 참일 때만 지출을 유효한 것으로 인정합니다.

그래서 올바른 서명 데이터를 제공하여 scriptPubKey 조건을 충족할 수 있는 사람, 즉 해당 개인 키를 보유한 적법한 소유자만이 비트코인을 사용할 수 있습니다.

## 표준 스크립트 유형

- **P2PKH (Pay to Public Key Hash):** 공개 키의 해시에 자금을 잠급니다. 사용하려면 그 해시와 일치하는 공개 키와 이에 대응하는 서명을 제시해야 합니다. “1”로 시작하는 기존 주소 형식입니다.
- **P2SH (Pay to Script Hash):** 다른 스크립트(예: 다중 서명 조건)의 해시에 자금을 잠급니다. 사용할 때 원래 스크립트와 그 조건을 만족하는 데이터를 함께 제시합니다. “3”으로 시작하는 주소입니다.
- **P2WPKH (Pay to Witness Public Key Hash):** P2PKH의 세그윗 버전으로, 서명 데이터를 증인 영역에 두어 수수료 부담을 줄입니다. “bc1q”로 시작하는 주소입니다.
- **P2TR (Pay to Taproot):** 탭루트 업그레이드로 도입된 유형으로, 슈노르 서명 하나로 지출하거나 미리 정해 둔 여러 조건 중 하나를 공개해 지출할 수 있습니다. “bc1p”로 시작하는 주소입니다.

## 실제 예시

- **시나리오 1: 친구에게 비트코인 전송.** 공개 키 스크립트는 “이 자금은 친구의 비트코인 주소에 해당하는 개인 키로 서명할 수 있는 사람만 사용할 수 있습니다.”와 같은 지침입니다. 친구는 소유권을 증명하고 비트코인을 사용하기 위해 개인 키로 만든 서명을 제시합니다.
- **시나리오 2: 다중 서명 지갑 설정.** 다중 서명 지갑의 공개 키 스크립트는 “이 자금은 세 명의 승인된 사람들 중 두 명이 서명을 제공하는 경우에만 사용할 수 있습니다.”와 같은 조건을 담을 수 있습니다. 이는 자금 보호에 추가적인 보안 계층을 더합니다.

## 공개 키 스크립트 사용의 장점

- **유연성:** 단순 결제 외에도 다중 서명, 타임락 등 다양한 지출 조건을 표현할 수 있습니다. 비트코인 스크립트는 의도적으로 기능이 제한된 언어여서 범용 스마트 계약보다는 단순한 조건부 지출에 쓰입니다.
- **보안:** 자금은 스크립트에 명시된 특정 조건에 의해 보호되어 무단 사용이 어렵습니다.
- **프로그래밍 가능성:** 사용자 정의 지출 조건을 만들어 에스크로, 상속 대비 지갑 같은 사용 사례를 구현할 수 있습니다.

## 공개 키 스크립트 사용의 단점

- **복잡성:** 기술적이지 않은 사용자는 스크립트를 이해하고 구성하는 데 어려움을 겪을 수 있습니다.
- **오류 가능성:** 스크립트 생성의 실수는 자금의 돌이킬 수 없는 손실로 이어질 수 있습니다.
- **트랜잭션 크기:** 복잡한 스크립트는 트랜잭션 크기와 검증 부담을 늘려 수수료를 높일 수 있습니다.

## 공개 키 스크립트가 사용되는 분야

1. **비트코인 및 UTXO 기반 암호화폐:** 모든 트랜잭션 출력에서 지출 조건을 정의합니다.
2. **다중 서명 지갑:** 여러 당사자가 트랜잭션을 승인해야 하므로 자금의 공유 제어가 가능합니다.

---
출처: https://achivx.kr/glossary/pubkey-script-scriptpubkey-pubkey-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-scriptpubkey/ · ACHIVX 용어 사전 · 수정일 2026-10-20
