P2PKH
P2PKH(Pay-to-Public-Key-Hash)란 비트코인 내에서 가장 일반적인 스크립트 형식으로 비트코인 프로토콜에 대한 지불 거래 유형이다. 주소는 1로 시작하는데, 세그윗(Segwit)을 지원하는 새로운 주소 3 또는 BC1로 시작하는 주소보다 훨씬 비싸다. 공개키의 간단한 해시이며, 이 해시를 주소로 사용할 수 있다.
목차
거래 방식
발신인이 (개인키에서) 유효한 서명 및 공개키를 제공하돌고 요구하는 경우, 트랜잭션 출력 스크립트는 서명 및 공개키를 사용할 것이며, 일부 암호 기능을 통해 공개키 해시와 일치하는지 여부를 확인할 것이며, 그렇게 되면 자금이 사용 가능해질 것이다. 이 방법은 추가적인 보안을 위해 공개키를 해시 형태로 숨긴다.
주소 형식
비트코인 주소가 1로 시작하면 P2PKH 주소를 사용하고 있는것이다. 이것은 원래 비트코인 주소 형식이었으며 오늘까지도 충실히 작동한다. 레거시 주소는 세그윗과 호환되지 않지만 여전히 문제없이 P2PKH 주소에서 세그윗 주소로 BTC를 보낼 수 있다. 그러나 레거시 주소 트랜잭션이 더 크기 때문에 P2PKH 주소에서 전송하는 평균 속도는 세그윗 주소에서 전송할 때보다 더 높은 요금이 발생할 수 있다.
P2PKH 스크립트
블록체인(Blockchain)에서 가장 일반적인 표준 스크립트는 P2PKH 주소의 이름을 따서 명명된다. 목적지 P2PKH 비트코인(BitCoin) 주소를 가지면 코인을 보낼 출력 스크립트를 작성할 수 있다. 목적지 주소가 생성된 개인키를 가지면, 나중에 그러한 코인을 쓸 입력 스크립트를 작성할 수 있다.
출력 스크립트
- P2PKH 출력 스크립트에는 Base58Check 디코딩 대상 주소, 즉 ECDSA 공개키의 해시160이 포함된다.
OP_DUP
OP_HASH160
[hash160(public_key)]
OP_EQUALVERIFY
OP_CHECKSIG - 샘플 압축 공개키를 사용한다.
02
82 00 6e 93 98 a6 98 6e
da 61 fe 91 67 4c 3a 10
8c 39 94 75 bf 1e 73 8f
19 df c2 db 11 db 1d 28 - 해시160 다이제스트는
6b f1 9e 55 f9 4d 98 6b
46 40 c1 54 d8 64 69 93
41 91 95 11 - 테스트넷(Testnet) 버전 관리 및 Base58Check 인코딩 후 다음과 같이 표시된다.
mqMi3XYqsPvBWtrJTk8euPWDVmFTZ5jHUK - 이 주소로 송금하는 출력 스크립트는 다음과 같다.
76 (OP_DUP)
a9 (OP_HASH160)
14 6b f1 9e 55 f9 4d 98
6b 46 40 c1 54 d8 64 69
93 41 91 95 11
88 (OP_EQUALVERIFY)
ac (OP_CHECKSIG)
입력 스크립트
- P2PKH 입력 스크립트에는 DER로 인코딩 된 ECDSA 서명과 압축되지 않거나 압축된 원시 공개키가 포함되어 있다. 이러한 입력 스크립트에는 푸시 외의 옵코드(OPCode)가 없다.
[signature]
[public_key] - 예를 들어 ECDSA 챕터(Chapter)에서 70바이트 서명을 가져오고 SIGHASH_ALL 상수(01)를 추가한다.
30 44
02 20
2b 2b 52 9b db dc 93 e7
8a f7 e0 02 28 b1 79 91
8b 03 2d 76 90 2f 74 ef
45 44 26 f7 d0 6c d0 f9
02 20
62 dd c7 64 51 cd 04 cb
56 7c a5 c5 e0 47 e8 ac
41 d3 d4 cf 7c b9 24 34
d5 5c b4 86 cc cf 6a f2
01
SIGHASH 접미사는 계약과 관련된 고급 주제다. 이 시리즈에서는 모든 트랜잭션 입력에 서명하기 때문에 SIGHASH_ALL을 고수한다. - 이전 단락에서 공개키를 가져간 경우, 일반적인 입력 스크립트가 있다.
47 30 44 02 20 2b 2b 52
9b db dc 93 e7 8a f7 e0
02 28 b1 79 91 8b 03 2d
76 90 2f 74 ef 45 44 26
f7 d0 6c d0 f9 02 20 62
dd c7 64 51 cd 04 cb 56
7c a5 c5 e0 47 e8 ac 41
d3 d4 cf 7c b9 24 34 d5
5c b4 86 cc cf 6a f2 01
21 02 82 00 6e 93 98 a6
98 6e da 61 fe 91 67 4c
3a 10 8c 39 94 75 bf 1e
73 8f 19 df c2 db 11 db
1d 28
여기서 47과 21은 각각 퓌시된 서명 및 공개키의 16진수 길이이다.
표준 전환
비트코인의 기존 주소 생성 표준은 "Pay-to-Public-Key-Hash"인 P2PKH이었다. 이름에서 알 수 있듯이, 이것은 공개키의 간단한 해시이며 이 해시를 주소로 사용할 수 있음을 의미한다. 소프트웨어 업그레이드와 같은 많은 소프트 포크와 더 나은 보안 및 새로운 기능을 제공하기 위해 비트코인(BitCoin) 블록체인은 나중에 P2SH(Pay-To-Script-Hash)라고 불리는 주소 생성을 위한 새로운 표준으로 전환했다.
다중 서명 Schnorr 트랜잭션
다중 서명 Schnorr 트랜잭션은 P2PKH 출력을 이용했다.[1] Schnorr 서명을 사용하면 여러 당샂가ㅏ 협업하여 하나의 집계된 Pubkey에서 하나의 집계된 서명을 생성하고 OP_CHECKSIG를 사용하여 P2PKH 주소에서와 같이 OP_CHECKSIG로 검사하는 집계된 서명을 생성할 수 있다.
각주
- ↑ Jamie Redman, 〈Bitcoin Cash Devs Publish the First 3 of 3 Multi-Sig Schnorr Transaction〉, 《비트코인.COM》, 2019-05-09
참고자료
- AulaBitcoin, 〈DIRECCIONES DE BITCOIN〉, 《AulaBitcoin》, 2019-06-06
- 〈Pay-To-Public-Key-Hash〉, 《LDAP위키》
- Josh, 〈(Bitcoin) Script Kiddies – Understanding Basic Transaction Scripts〉, 《Chaintuts》, 2019-02-16
- Soneshwar Singh, 〈Basics ofPaper Wallets〉, 《해커눈》, 2018-11-11
- Monstrum, 〈What is P2PK, P2PKH, P2SH, P2WPKH - ELI5〉, 《스택익스체인지》, 2017-12-19
- Davide De Rosa, 〈Standard scriptsin〉, 《개인블로그》, 2015-05-29
- markblundeberg, 〈BIP62 and Schnorr: a new era in BCH privacy and smart contracting〉, 《GitHub》, 2019-01-29