공개 키 스크립트 (Pubkey Script, scriptPubKey)
공개 키 스크립트(Pubkey Script, scriptPubKey)는 비트코인 트랜잭션의 출력에 포함되어 해당 금액의 사용 조건을 설정하는 스크립트입니다. 조건을 충족하기 위한 데이터는 서명 스크립트(scriptSig) 또는 세그윗 증인(witness) 데이터에 제공될 수 있습니다. 코드에서는 scriptPubKey로 표기되며, “잠금 스크립트”라고도 합니다.
공개 키 스크립트 이해하기
비트코인과 같은 UTXO 방식의 블록체인에서는 각 트랜잭션 출력이 일정 금액과 그 금액을 쓰기 위한 조건을 함께 담고 있습니다. 이 조건이 바로 공개 키 스크립트입니다. 사용하려는 비트코인을 잠긴 금고에 비유하면, scriptPubKey는 금고의 자물쇠 설정과 같아서 금고를 열기 위한 조건을 명시합니다.
- scriptPubKey는 트랜잭션 출력 내부에 존재하며, 다음에 해당 코인을 사용할 권리가 있는 사람을 지정합니다.
- 일반적인 조건은 특정 공개 키(또는 그 해시)에 해당하는 개인 키의 소유권을 증명하는 유효한 디지털 서명을 제공하는 것입니다.
- 자금을 사용하려면 새 트랜잭션의 입력에 서명 스크립트(또는 증인 데이터)를 제시해야 합니다. 노드는 이 데이터와 이전 출력의 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: 다중 서명 지갑 설정. 다중 서명 지갑의 공개 키 스크립트는 “이 자금은 세 명의 승인된 사람들 중 두 명이 서명을 제공하는 경우에만 사용할 수 있습니다.”와 같은 조건을 담을 수 있습니다. 이는 자금 보호에 추가적인 보안 계층을 더합니다.
공개 키 스크립트 사용의 장점
- 유연성: 단순 결제 외에도 다중 서명, 타임락 등 다양한 지출 조건을 표현할 수 있습니다. 비트코인 스크립트는 의도적으로 기능이 제한된 언어여서 범용 스마트 계약보다는 단순한 조건부 지출에 쓰입니다.
- 보안: 자금은 스크립트에 명시된 특정 조건에 의해 보호되어 무단 사용이 어렵습니다.
- 프로그래밍 가능성: 사용자 정의 지출 조건을 만들어 에스크로, 상속 대비 지갑 같은 사용 사례를 구현할 수 있습니다.
공개 키 스크립트 사용의 단점
- 복잡성: 기술적이지 않은 사용자는 스크립트를 이해하고 구성하는 데 어려움을 겪을 수 있습니다.
- 오류 가능성: 스크립트 생성의 실수는 자금의 돌이킬 수 없는 손실로 이어질 수 있습니다.
- 트랜잭션 크기: 복잡한 스크립트는 트랜잭션 크기와 검증 부담을 늘려 수수료를 높일 수 있습니다.
공개 키 스크립트가 사용되는 분야
- 비트코인 및 UTXO 기반 암호화폐: 모든 트랜잭션 출력에서 지출 조건을 정의합니다.
- 다중 서명 지갑: 여러 당사자가 트랜잭션을 승인해야 하므로 자금의 공유 제어가 가능합니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.