"P2PKH"의 두 판 사이의 차이
(→입력 스크립트) |
(→같이 보기) |
||
(사용자 2명의 중간 판 42개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | '''P2PKH'''(Pay-to-Public-Key-Hash)란 비트코인 내에서 가장 일반적인 스크립트 형식으로 비트코인 | + | '''P2PKH'''(Pay-to-Public-Key-Hash)란 [[비트코인]](Bitcoin) 내에서 가장 일반적인 [[스크립트]](Script) 형식으로 비트코인 [[프로토콜]]에 대한 지불 거래 유형이다. 주소는 1로 시작하는데, [[세그윗]](Segwit)을 지원하는 새로운 주소 3 또는 BC1로 시작하는 주소보다 훨씬 비싸다. [[공개키]]의 간단한 [[해시]](Hash)이며, 이 해시를 주소로 사용할 수 있다. |
==거래 방식== | ==거래 방식== | ||
− | 발신인이 (개인키에서) 유효한 서명 및 공개키를 | + | 발신인이 (개인키에서) 유효한 서명 및 공개키를 제공하도록 요구하는 경우, [[트랜잭션]] 출력 스크립트는 서명 및 공개키를 사용할 것이며, 일부 암호 기능을 통해 공개키 해시와 일치하는지 여부를 확인할 것이고, 그렇게 되면 자금이 사용 가능해질 것이다. 이 방법은 추가적인 보안을 위해 공개키를 해시 형태로 숨긴다. |
+ | |||
+ | ==P2PKH 거래== | ||
+ | 가장 일반적인 거래 유형은 P2PKH이다. P2PKH는 누군가(Alice)가 전형적인 비트코인 주소로 [[사토시]](Satoshi)를 보낼 수 있도록 한다. 그런 다음 수신자(Bob)는 간단한 암호화키 쌍을 사용하여 이러한 사토시를 추가로 사용할 수 있다. Bob이 먼저 공개/개인키 쌍을 작성하여 Alice가 일부 사토시를 보낼 수 있게 해야 한다. 비트코인은 이를 위해 [[ECDSA]]를 사용한다. 그런 다음 Bob은 공개키의 암호화 해시를 만든다. Bob은 공개키의 해시를 Alice에게 보낸다. 이 해시는 보통 비트코인 주소로 인코딩되며, Alice는 Bob의 주소를 가지므로 트랜잭션을 작성할 수 있다. P2PKH 트랜잭션 출력에는 Bob의 이전에 생성된 개인키를 제어하는 모든 사람에 대한 권한이 포함된다. 이러한 명령어를 Pubkey script 또는 scriptPubkey라고 한다. Alice는 블록체인에 추가할 트랜잭션을 [[브로드 캐스트]] 한다. 트랜잭션은 사용되지 않은 트랜잭션 출력(UTXO)으로 인식된다. Bob의 지갑에는 이 [[UTXO]]의 금액이 지출 가능한 금액으로 표시된다. 나중에 Bob은 이 금액 중 일부를 사용하기로 하면, 그는 Alice의 거래 해시와 해당 출력 번호를 만든다. 또한, 서명 스크립트를 작성해야 한다. | ||
+ | |||
+ | ==주소 형식== | ||
+ | 비트코인 주소가 1로 시작하면 P2PKH 주소를 사용하고 있는 것이다. 이것은 원래 비트코인 주소 형식이었으며 오늘까지도 충실히 작동한다. 레거시 주소는 세그윗과 호환되지 않지만, 여전히 문제없이 P2PKH 주소에서 세그윗 주소로 BTC를 보낼 수 있다. 그러나 레거시 주소 트랜잭션이 더 크기 때문에 P2PKH 주소에서 전송하는 평균 속도는 세그윗 주소에서 전송할 때보다 더 높은 요금이 발생할 수 있다.<ref> Juan Gutierrez, 〈[https://guiabitcoin.com/news/los-formatos-de-direccion-btc-usado-mas-comunmente#Formato-de-direccion-P2PKH Los formatos de dirección BTC usado más comúnmente]〉, 《guiabitcoin》, 2019-02 | ||
+ | </ref> | ||
==P2PKH 스크립트== | ==P2PKH 스크립트== | ||
− | 블록체인(Blockchain)에서 가장 일반적인 표준 스크립트는 P2PKH 주소의 이름을 따서 명명된다. 목적지 P2PKH 비트코인 | + | [[블록체인]](Blockchain)에서 가장 일반적인 표준 스크립트는 P2PKH 주소의 이름을 따서 명명된다. 목적지 P2PKH 비트코인 주소를 가지면 코인을 보낼 출력 스크립트를 작성할 수 있다. 목적지 주소가 생성된 개인키를 가지면, 나중에 그러한 코인을 쓸 입력 스크립트를 작성할 수 있다. |
+ | |||
===출력 스크립트=== | ===출력 스크립트=== | ||
− | #P2PKH 출력 스크립트에는 Base58Check 디코딩 대상 주소, 즉 ECDSA 공개키의 | + | #P2PKH 출력 스크립트에는 [[Base58Check]] 디코딩 대상 주소, 즉 [[ECDSA]] 공개키의 HASH 160이 포함된다.<br />OP_DUP<br />OP_HASH160<br />[hash160(public_key)]<br />OP_EQUALVERIFY<br />OP_CHECKSIG |
− | #샘플 압축 공개키를 | + | #샘플 압축 공개키를 사용한다.<br />02<br />82 00 6e 93 98 a6 98 6e<br />da 61 fe 91 67 4c 3a 10<br />8c 39 94 75 bf 1e 73 8f<br />19 df c2 db 11 db 1d 28 |
− | # | + | #HASH 160 다이제스트는<br />6b f1 9e 55 f9 4d 98 6b<br />46 40 c1 54 d8 64 69 93<br />41 91 95 11 |
− | #테스트넷(Testnet) 버전 관리 및 Base58Check 인코딩 후 다음과 같이 표시된다.<br />mqMi3XYqsPvBWtrJTk8euPWDVmFTZ5jHUK | + | #[[테스트넷]](Testnet) 버전 관리 및 Base58Check 인코딩 후 다음과 같이 표시된다.<br />mqMi3XYqsPvBWtrJTk8euPWDVmFTZ5jHUK |
− | #이 주소로 송금하는 출력 스크립트는 다음과 같다.<br />76 (OP_DUP)<br />a9 (OP_HASH160) <br /><br />14 6b f1 9e 55 f9 4d 98<br />6b 46 40 c1 54 d8 64 69<br />93 41 91 95 11<br /><br /> 88 (OP_EQUALVERIFY)<br />ac (OP_CHECKSIG) | + | #이 주소로 송금하는 출력 스크립트는 다음과 같다.<br />76 (OP_DUP)<br />a9 (OP_HASH160)<br /><br />14 6b f1 9e 55 f9 4d 98<br />6b 46 40 c1 54 d8 64 69<br />93 41 91 95 11<br /><br />88 (OP_EQUALVERIFY)<br />ac (OP_CHECKSIG) |
+ | |||
===입력 스크립트=== | ===입력 스크립트=== | ||
− | #P2PKH 입력 스크립트에는 | + | #P2PKH 입력 스크립트에는 [[DER]]로 인코딩된 ECDSA 서명과 압축되지 않거나 압축된 원시 공개키가 포함되어 있다. 이러한 입력 스크립트에는 푸시 외의 [[옵코드]](OPCode)가 없다.<br />[signature]<br />[public_key] |
#예를 들어 ECDSA 챕터(Chapter)에서 70바이트 서명을 가져오고 SIGHASH_ALL 상수(01)를 추가한다.<br />30 44<br />02 20<br />2b 2b 52 9b db dc 93 e7<br />8a f7 e0 02 28 b1 79 91<br />8b 03 2d 76 90 2f 74 ef<br />45 44 26 f7 d0 6c d0 f9<br />02 20<br />62 dd c7 64 51 cd 04 cb<br />56 7c a5 c5 e0 47 e8 ac<br />41 d3 d4 cf 7c b9 24 34<br />d5 5c b4 86 cc cf 6a f2<br />01<br /> SIGHASH 접미사는 계약과 관련된 고급 주제다. 이 시리즈에서는 모든 트랜잭션 입력에 서명하기 때문에 SIGHASH_ALL을 고수한다. | #예를 들어 ECDSA 챕터(Chapter)에서 70바이트 서명을 가져오고 SIGHASH_ALL 상수(01)를 추가한다.<br />30 44<br />02 20<br />2b 2b 52 9b db dc 93 e7<br />8a f7 e0 02 28 b1 79 91<br />8b 03 2d 76 90 2f 74 ef<br />45 44 26 f7 d0 6c d0 f9<br />02 20<br />62 dd c7 64 51 cd 04 cb<br />56 7c a5 c5 e0 47 e8 ac<br />41 d3 d4 cf 7c b9 24 34<br />d5 5c b4 86 cc cf 6a f2<br />01<br /> SIGHASH 접미사는 계약과 관련된 고급 주제다. 이 시리즈에서는 모든 트랜잭션 입력에 서명하기 때문에 SIGHASH_ALL을 고수한다. | ||
− | #이전 단락에서 공개키를 가져간 경우, 일반적인 입력 스크립트가 있다.<br />47 30 44 02 20 2b 2b 52<br />9b db dc 93 e7 8a f7 e0<br />02 28 b1 79 91 8b 03 2d<br />76 90 2f 74 ef 45 44 26<br />f7 d0 6c d0 f9 02 20 62<br />dd c7 64 51 cd 04 cb 56<br />7c a5 c5 e0 47 e8 ac 41<br />d3 d4 cf 7c b9 24 34 d5<br />5c b4 86 cc cf 6a f2 01<br /><br />21 02 82 00 6e 93 98 a6<br />98 6e da 61 fe 91 67 4c<br />3a 10 8c 39 94 75 bf 1e<br />73 8f 19 df c2 db 11 db<br />1d 28<br />여기서 47과 21은 각각 | + | #이전 단락에서 공개키를 가져간 경우, 일반적인 입력 스크립트가 있다.<br />47 30 44 02 20 2b 2b 52<br />9b db dc 93 e7 8a f7 e0<br />02 28 b1 79 91 8b 03 2d<br />76 90 2f 74 ef 45 44 26<br />f7 d0 6c d0 f9 02 20 62<br />dd c7 64 51 cd 04 cb 56<br />7c a5 c5 e0 47 e8 ac 41<br />d3 d4 cf 7c b9 24 34 d5<br />5c b4 86 cc cf 6a f2 01<br /><br />21 02 82 00 6e 93 98 a6<br />98 6e da 61 fe 91 67 4c<br />3a 10 8c 39 94 75 bf 1e<br />73 8f 19 df c2 db 11 db<br />1d 28<br />여기서 47과 21은 각각 푸시된 서명 및 공개키의 16진수 길이이다. |
==표준 전환== | ==표준 전환== | ||
− | 비트코인의 기존 주소 생성 표준은 "Pay-to-Public-Key-Hash"인 P2PKH이었다. 이름에서 알 수 있듯이, 이것은 공개키의 간단한 해시이며 이 해시를 주소로 사용할 수 있음을 의미한다. 소프트웨어 | + | 비트코인의 기존 주소 생성 표준은 "Pay-to-Public-Key-Hash"인 P2PKH이었다. 이름에서 알 수 있듯이, 이것은 공개키의 간단한 해시이며 이 해시를 주소로 사용할 수 있음을 의미한다. [[소프트웨어]] [[업그레이드]]와 같은 많은 [[소프트 포크]]와 더 나은 보안 및 새로운 기능을 제공하기 위해 비트코인 블록체인은 나중에 [[P2SH]](Pay-To-Script-Hash)라고 불리는 주소 생성을 위한 새로운 표준으로 전환했다. |
+ | |||
+ | ==다중서명 슈노르 트랜잭션== | ||
+ | 다중서명 [[슈노르]](Schnorr) 트랜잭션은 P2PKH 출력을 이용했다.<ref>Jamie Redman, 〈[https://news.bitcoin.com/bitcoin-cash-devs-publish-the-first-3-of-3-multi-sig-schnorr-transaction/ Bitcoin Cash Devs Publish the First 3 of 3 Multi-Sig Schnorr Transaction]〉, 《비트코인.COM》, 2019-05-09</ref> Schnorr 서명을 사용하면 여러 당사자 협업하여 하나의 집계된 공개키에서 하나의 집계된 서명을 생성하고 OP_CHECKSIG를 사용하여 P2PKH 주소에서와같이 OP_CHECKSIG로 검사하는 집계된 서명을 생성할 수 있다. | ||
{{각주}} | {{각주}} | ||
28번째 줄: | 40번째 줄: | ||
* Soneshwar Singh, 〈[https://hackernoon.com/basics-of-paper-wallets-a40639dec8b2 Basics ofPaper Wallets]〉, 《해커눈》, 2018-11-11 | * Soneshwar Singh, 〈[https://hackernoon.com/basics-of-paper-wallets-a40639dec8b2 Basics ofPaper Wallets]〉, 《해커눈》, 2018-11-11 | ||
* Monstrum, 〈[https://bitcoin.stackexchange.com/questions/64733/what-is-p2pk-p2pkh-p2sh-p2wpkh-eli5 What is P2PK, P2PKH, P2SH, P2WPKH - ELI5]〉, 《스택익스체인지》, 2017-12-19 | * Monstrum, 〈[https://bitcoin.stackexchange.com/questions/64733/what-is-p2pk-p2pkh-p2sh-p2wpkh-eli5 What is P2PK, P2PKH, P2SH, P2WPKH - ELI5]〉, 《스택익스체인지》, 2017-12-19 | ||
+ | * Davide De Rosa, 〈[https://davidederosa.com/basic-blockchain-programming/standard-scripts/ Standard scriptsin]〉, 《개인블로그》, 2015-05-29 | ||
+ | * markblundeberg, 〈[https://gist.github.com/markblundeberg/a3aba3c9d610e59c3c49199f697bc38b BIP62 and Schnorr: a new era in BCH privacy and smart contracting]〉, 《GitHub》, 2019-01-29 | ||
+ | * 〈[https://renenyffenegger.ch/notes/development/Crypto-Currencies/Bitcoin/transactions Bitcoin transactions]〉, 《renenyffenegger》 | ||
− | == | + | ==같이 보기== |
+ | * [[P2SH]] | ||
{{블록체인 기술|검토 필요}} | {{블록체인 기술|검토 필요}} |
2019년 8월 19일 (월) 09:19 기준 최신판
P2PKH(Pay-to-Public-Key-Hash)란 비트코인(Bitcoin) 내에서 가장 일반적인 스크립트(Script) 형식으로 비트코인 프로토콜에 대한 지불 거래 유형이다. 주소는 1로 시작하는데, 세그윗(Segwit)을 지원하는 새로운 주소 3 또는 BC1로 시작하는 주소보다 훨씬 비싸다. 공개키의 간단한 해시(Hash)이며, 이 해시를 주소로 사용할 수 있다.
목차
거래 방식[편집]
발신인이 (개인키에서) 유효한 서명 및 공개키를 제공하도록 요구하는 경우, 트랜잭션 출력 스크립트는 서명 및 공개키를 사용할 것이며, 일부 암호 기능을 통해 공개키 해시와 일치하는지 여부를 확인할 것이고, 그렇게 되면 자금이 사용 가능해질 것이다. 이 방법은 추가적인 보안을 위해 공개키를 해시 형태로 숨긴다.
P2PKH 거래[편집]
가장 일반적인 거래 유형은 P2PKH이다. P2PKH는 누군가(Alice)가 전형적인 비트코인 주소로 사토시(Satoshi)를 보낼 수 있도록 한다. 그런 다음 수신자(Bob)는 간단한 암호화키 쌍을 사용하여 이러한 사토시를 추가로 사용할 수 있다. Bob이 먼저 공개/개인키 쌍을 작성하여 Alice가 일부 사토시를 보낼 수 있게 해야 한다. 비트코인은 이를 위해 ECDSA를 사용한다. 그런 다음 Bob은 공개키의 암호화 해시를 만든다. Bob은 공개키의 해시를 Alice에게 보낸다. 이 해시는 보통 비트코인 주소로 인코딩되며, Alice는 Bob의 주소를 가지므로 트랜잭션을 작성할 수 있다. P2PKH 트랜잭션 출력에는 Bob의 이전에 생성된 개인키를 제어하는 모든 사람에 대한 권한이 포함된다. 이러한 명령어를 Pubkey script 또는 scriptPubkey라고 한다. Alice는 블록체인에 추가할 트랜잭션을 브로드 캐스트 한다. 트랜잭션은 사용되지 않은 트랜잭션 출력(UTXO)으로 인식된다. Bob의 지갑에는 이 UTXO의 금액이 지출 가능한 금액으로 표시된다. 나중에 Bob은 이 금액 중 일부를 사용하기로 하면, 그는 Alice의 거래 해시와 해당 출력 번호를 만든다. 또한, 서명 스크립트를 작성해야 한다.
주소 형식[편집]
비트코인 주소가 1로 시작하면 P2PKH 주소를 사용하고 있는 것이다. 이것은 원래 비트코인 주소 형식이었으며 오늘까지도 충실히 작동한다. 레거시 주소는 세그윗과 호환되지 않지만, 여전히 문제없이 P2PKH 주소에서 세그윗 주소로 BTC를 보낼 수 있다. 그러나 레거시 주소 트랜잭션이 더 크기 때문에 P2PKH 주소에서 전송하는 평균 속도는 세그윗 주소에서 전송할 때보다 더 높은 요금이 발생할 수 있다.[1]
P2PKH 스크립트[편집]
블록체인(Blockchain)에서 가장 일반적인 표준 스크립트는 P2PKH 주소의 이름을 따서 명명된다. 목적지 P2PKH 비트코인 주소를 가지면 코인을 보낼 출력 스크립트를 작성할 수 있다. 목적지 주소가 생성된 개인키를 가지면, 나중에 그러한 코인을 쓸 입력 스크립트를 작성할 수 있다.
출력 스크립트[편집]
- P2PKH 출력 스크립트에는 Base58Check 디코딩 대상 주소, 즉 ECDSA 공개키의 HASH 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 - HASH 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이었다. 이름에서 알 수 있듯이, 이것은 공개키의 간단한 해시이며 이 해시를 주소로 사용할 수 있음을 의미한다. 소프트웨어 업그레이드와 같은 많은 소프트 포크와 더 나은 보안 및 새로운 기능을 제공하기 위해 비트코인 블록체인은 나중에 P2SH(Pay-To-Script-Hash)라고 불리는 주소 생성을 위한 새로운 표준으로 전환했다.
다중서명 슈노르 트랜잭션[편집]
다중서명 슈노르(Schnorr) 트랜잭션은 P2PKH 출력을 이용했다.[2] Schnorr 서명을 사용하면 여러 당사자 협업하여 하나의 집계된 공개키에서 하나의 집계된 서명을 생성하고 OP_CHECKSIG를 사용하여 P2PKH 주소에서와같이 OP_CHECKSIG로 검사하는 집계된 서명을 생성할 수 있다.
각주[편집]
- ↑ Juan Gutierrez, 〈Los formatos de dirección BTC usado más comúnmente〉, 《guiabitcoin》, 2019-02
- ↑ 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
- 〈Bitcoin transactions〉, 《renenyffenegger》
같이 보기[편집]