비트코인/비트코인 구조

[비트코인 구조] 탭스크립트와 P2TR

라이튼 2023. 1. 17. 17:43

미리 알아야 할 내용들


 

[비트코인 구조] 탭루트(Taproot)

미리 알아야 할 내용들 [비트코인 구조] 스크립트(Script)와 Opcode, P2PK 미리 알아야 할 내용들 [비트코인 구조] 잠금 스크립트(scriptPubkey)와 해제 스크립트(scriptSig) 기초 미리 알아야 할 내용들 [비트

kwjdnjs.tistory.com

 

[비트코인 암호학] 5. 슈노르 서명(Schnorr signature)

[비트코인 암호학] 3.2 공개키와 개인키 [비트코인 암호학] 3.1 공개키 암호화 [비트코인 암호학] 2.3 타원곡선의 스칼라 곱셈 [비트코인 암호학] 2.2 유한체에서의 타원곡선 [비트코인 암호학] 2.1 유

kwjdnjs.tistory.com

 

[비트코인 구조] 세그윗(Segwit), Bech32 주소

미리 알아야 할 내용들 [비트코인 구조] DER 형식 서명(Signature) 생성 미리 알아야 할 내용들 '비트코인/암호학' 카테고리의 글 목록 평범한 대학생의 블록체인 기술 관련 블로그 입니다. kwjdnjs.tisto

kwjdnjs.tistory.com


탭스크립트와 P2TR

 

 이번 글에서는 탭스크립트와 이를 이용한 표준 스크립트인 P2TR에 대해 알아보겠습니다.

 

탭스크립트

 탭스크립트는 탭루트 소프트포크를 통해 도입된 새로운 비트코인 스크립트입니다. 기존에는 존재하지 않았던 슈노르 서명 관련 opcode를 포함하고 있습니다.

 

 대표적으로 추가된 opcode에는 OP_CHECKSIGADD가 있습니다. 해당 명령어는 기존에 ECDSA를 사용하던 다중서명 명령어인 OP_CHECKMULTISIG와 OP_CHECKMULTISIGVERIFY를 대체하기 위해 추가된 명령어입니다.

 

 OP_CHECKSIGADD 이외에도 opcode의 확장성을 위한 명령어인 OP_SUCCESS 등이 추가되었습니다.

 

P2TR

 다음으로 탭스크립트를 이용한 새로운 표준 스크립트인 P2TR(Pay-to-Taproot)에 대해 알아보겠습니다.

 

 P2TR 잠금 스크립트는 다음과 같습니다.

 

잠금 스크립트: [OP_1] <공개키(32바이트)>

 

 위 스크립트는 OP_1로 시작하고 이어서 32바이트 값이 등장하므로 네이티브 세그윗 방식의 잠금 스크립트라는 것을 알 수 있습니다. 다만 기존과는 다르게 OP_0가 아닌 OP_1을 사용합니다. 이는 P2TR에서 사용하는 세그윗 버전이 버전 1 임을 알려주기 위함입니다. 또한 공개키의 해시값이 아닌 공개키 값 자체를 포함시킵니다.

 

 해제 스크립트는 다음과 같습니다.

 

해제 스크립트:

 

 세그윗을 기반으로 사용하므로 해제 스크립트가 비어있는 것을 알 수 있습니다.

 

 마지막으로 실제 서명 검증에 사용되는 증인 필드 데이터를 알아보겠습니다. 만약 한개의 공개키에 대한 서명을 검증하려고 한다면 다음과 같이 증인 필드에 공개키에 해당하는 서명을 넣으면 됩니다.

 

증인 필드 데이터: <서명>

 

 기존 세그윗의 경우 증인 필드에 공개키를 함께 포함시켜야 했지만, P2TR의 경우 잠금 스크립트에 포함된 값이 해시값이 아닌 공개키값이므로 서명만 있으면 됩니다.

 

 만약 잠금 스크립트에 포함된 공개키값이 여러 공개키를 합친 공개키(P=P1+P2+...)라면, 증인 필드에는 다중 서명을 위한 전체 서명(s=s1+s2+...)을 포함시키면 됩니다.

 

 지금까지의 내용들을 응용하면 다중 서명 스크립트를 만들고 이에대한 공개키를 구하여 P2WSH처럼 사용할 수 있습니다. 뿐만 아니라 여러 스크립트를 하나의 머클 트리 형태로 만들어 다양한 방식의 다중 서명을 제작할 수 있습니다.

 

 지금까지 탭스크립트와 P2TR에 대해 알아봤습니다. 감사합니다.