용어집 / 주소와 키
P2PKH 주소
별칭은 P2PKH address, Pay-to-Public-Key-Hash입니다.
- P2PKH 주소란 무엇입니까?
- P2PKH는 공개 키의 20바이트 해시에 코인을 잠그는 출력 유형이므로, 공개 키 자체는 사용하는 순간까지 숨겨진 상태로 남습니다.
Pay to public key hash는 1로 시작하는 모든 주소 뒤에 있는 스크립트 패턴입니다. 잠금 스크립트는 정확히 25바이트이며, 코인이 이동할 때 다섯 개의 연산을 실행합니다. 출력이 공개 키가 아니라 지문에 커밋하기 때문에, 사용되지 않은 P2PKH 출력은 관찰자에게 그 뒤에 있는 공개 키에 대해 아무것도 알려주지 않습니다.
작동 방식
P2PKH 출력은 항상 같은 형태의 잠금 스크립트 하나를 담습니다. OP_DUP OP_HASH160 <20바이트 해시> OP_EQUALVERIFY OP_CHECKSIG입니다. 이 20바이트 해시가 HASH160이며, 이는 압축된 공개 키의 SHA-256에 RIPEMD-160을 적용한 것으로, 33바이트 키가 20바이트 커밋값이 되는 방식입니다.
사용할 때는 입력의 scriptSig에 두 항목을 제공합니다. 서명이 먼저 오고 그다음 공개 키가 옵니다. 실행은 순서대로 진행됩니다. OP_DUP는 키를 복사하고, OP_HASH160은 복사본을 20바이트로 줄이며, OP_EQUALVERIFY는 이를 커밋된 값과 비교해 다르면 중단하고, OP_CHECKSIG는 트랜잭션에 대해 서명을 검증합니다. 두 검사 모두 통과해야 하며, 어느 하나라도 실패하면 해당 입력만이 아니라 트랜잭션 전체가 무효가 됩니다.
크기는 구조에서 따라옵니다. P2PKH 출력은 온체인에서 34바이트를 차지하며, 8바이트 금액, 1바이트 길이, 25바이트 스크립트로 이루어집니다. 입력은 대략 148 vbytes를 차지합니다. DER로 인코딩된 ECDSA 서명이 71~72바이트이고, 압축된 키가 33바이트를 더하며, 이 모든 것이 위트니스 밖에 있고 그곳에서는 바이트마다 4배의 가중치가 적용되기 때문입니다.
확인할 수 있는 곳
1로 시작하는 모든 주소는 P2PKH 주소이며, 이는 2017년 8월에 블록 481,824에서 SegWit이 활성화되기 전에 이동한 대부분의 코인을 포함합니다. 블록 탐색기는 각 출력에 유형을 표시하므로, 아무것도 디코딩하지 않고도 무엇을 보고 있는지 확인할 수 있습니다.
기억해 둘 만한 점은 공개 키가 언제 공개되는가입니다. 사용하기 전까지 체인에는 해시만 저장됩니다. 첫 사용 시 scriptSig에 키가 영구적으로 공개됩니다. 그런 다음 그 주소를 재사용하면 이후의 잔액은 이미 모든 사람에게 보이는 키 뒤에 놓이게 되며, 이는 아무 비용도 들지 않았던 보호 계층을 없앱니다. 이는 즉시 프라이버시 문제이며, 타원 곡선 암호에 대한 미래의 공격을 둘러싼 오랜 논의가 새로운 주소가 아니라 재사용되었거나 이미 사용된 주소에 초점을 맞추는 이유입니다.
실제로는 지갑이 결제마다 새로운 수신 주소를 주도록 하고, 잔돈도 새로운 주소로 가게 하십시오. 현대적인 소프트웨어는 기본적으로 둘 다 수행합니다.
P2PKH 주소 vs P2WPKH
P2PKH와 P2WPKH는 같은 대상에 커밋하지만 비용은 크게 다릅니다. 둘 다 코인을 단일 압축 공개 키의 20바이트 HASH160에 잠그고, 둘 다 그 키로부터의 서명 하나로 잠금이 해제됩니다. 이 둘을 구분하는 것은 잠금 해제 데이터가 어디에 기록되는가입니다. P2PKH는 서명과 키를 scriptSig에 두며, 이는 바이트당 4개의 가중치 단위로 계산됩니다. P2WPKH는 이를 위트니스로 옮기며, 이는 1로 계산됩니다. 그래서 같은 비밀에서 전혀 닮지 않은 1 주소와 bc1q 주소가 나올 수 있고, 각각 독립적으로 코인을 보유하며, 비우는 비용에서 2배 이상 차이가 납니다.