비트코인/비트코인 구조

[비트코인 구조] P2PKH

라이튼 2022. 9. 12. 16:49

미리 알아야 할 내용들


 

[비트코인 구조] 개인키(Private key), 공개키(Public key), 주소(Address) 생성

미리 알아야 할 내용들 '비트코인/암호학' 카테고리의 글 목록 평범한 대학생의 블록체인 기술 관련 블로그 입니다. kwjdnjs.tistory.com [비트코인 암호학] 3.1 공개키 암호화  타원곡선을 이용해 디

kwjdnjs.tistory.com

 

[비트코인 구조] 스크립트(Script)와 Opcode, P2PK

미리 알아야 할 내용들 [비트코인 구조] 잠금 스크립트(scriptPubkey)와 해제 스크립트(scriptSig) 기초 미리 알아야 할 내용들 [비트코인 구조] 비트코인 트랜잭션(Transaction) 기초 미리 알면 좋은 내용

kwjdnjs.tistory.com


P2PKH

 

 P2PKH는 Pay-to-Public-Key-Hash의 약자로 P2PK와는 다르게 비트코인의 주소를 사용하는 스크립트 표준입니다.

 

잠금 스크립트 구성

 이전 글에서 공개키를 이용해 비트코인 주소를 생성하는 방법은 다음과 같았습니다.

 

  1. 압축 또는 비압축 방식의 공개키를 생성 (비압축 방식 이용)
  2. hash160을 이용해 공개키의 해시값 구하기
  3. 주소 구분
  4. 체크섬
  5. Base58Check 인코딩

 

 각 단계별 값은 다음과 같았습니다.

 

  1. 02eb6033f9e7446731e50e75b099ed5439698f3d5a59e89b1f64c2445c2a245bf0 (비압축 방식 이용)
  2. 4d2f18c566944ff7ce000b657d237e8a2fecbf87
  3. 004d2f18c566944ff7ce000b657d237e8a2fecbf87
  4. 004d2f18c566944ff7ce000b657d237e8a2fecbf87f03c65b1
  5. 1837T7TYua4iekZQ8d6jYMoMVpCqQ6AoMS

 

 이렇게 생성된 주소를 이용하여 P2PKH의 잠금 스크립트를 구성합니다.

 

 먼저 다른 사용자가 위 주소로 비트코인을 전송하기 위해 비트코인 지갑 소프트웨어를 이용한다고 가정해보겠습니다. 사용자는 비트코인 지갑 소프트웨어에 다음과 같이 비트코인을 받을 사람의 주소 값을 입력하게 될 것입니다.

 

전송할 주소: 1837T7TYua4iekZQ8d6jYMoMVpCqQ6AoMS

 

 지갑 소프트웨어는 받은 주소를 디코딩하여 잠금 스크립트에 사용합니다. 해시 함수는 역연산이 불가능하기 때문에 hash160이 이뤄진 값까지만 디코딩합니다.

 

1. Base58Check 디코딩

004d2f18c566944ff7ce000b657d237e8a2fecbf87f03c65b1

 

2. 체크섬과 주소 구분 제거

4d2f18c566944ff7ce000b657d237e8a2fecbf87

 

 지갑 소프트웨어는 위 값을 이용하여 잠금 스크립트를 제작합니다. P2PKH 잠금 스크립트의 구성은 다음과 같습니다.

 

[OP_DUP] [OP_HASH160] <4d2f18c566944ff7ce000b657d237e8a2fecbf87 (hash160 공개키)> [OP_EQUALVERIFY] [OP_CHECKSIG]

 

해제 스크립트 구성

 P2PK의 경우 해제 스크립트에 서명만이 포함되어 있었습니다. P2PKH에서는 서명에 더해 공개키가 함께 포함되어 있습니다. 포함될 공개키는 주소를 생성한 방식이 압축 방식이면 압축 방식의 공개키를, 비압축 방식이면 비압축 방식의 공개키를 사용해야 합니다.

 

 다음은 P2PKH 해제 스크립트입니다.

 

<서명> <02eb6033f9e7446731e50e75b099ed5439698f3d5a59e89b1f64c2445c2a245bf0 (공개키, 압축)>

 

서명 검증

 서명 검증을 위해서는 이전과 마찬가지로 스택을 이용해야 합니다. P2PK에서와 같이 가장 먼저 해제 스크립트를 스택에 넣습니다.

 

 

 그다음 잠금 스크립트의 명령어를 차례로 사용합니다. 가장 먼저 사용될 명령어는 OP_DUP입니다. 해당 opcode는 스택에서 가장 위에 위치한 아이템을 복제하는 opcode입니다.

 

 

 이어서 OP_HASH160을 사용합니다. OP_HASH160은 스택에서 가장 위에 위치한 아이템의 hash160 값을 계산하여 스택에 반환합니다.

 

 

 그다음 잠금 스크립트에 포함되어 있는 공개키의 hash160 해시값을 스택에 넣습니다.

 

 

 이제 OP_EQUALVERIFY를 실행합니다. 해당 명령어는 스택 가장 위에 있는 두 값이 같은지를 비교하고 검증하는 명령어입니다.

 

 

 마지막으로 서명과 공개키를 OP_CHECKSIG로 검증합니다. 검증에 성공하면 스택에는 1만 남게 됩니다.

 

 

 지금까지 P2PKH에 대해 알아봤습니다. 감사합니다.

 

 

이어지는 글들


 

[비트코인 구조] P2SH

미리 알아야 할 내용들 [비트코인 구조] P2PKH 미리 알아야 할 내용들 [비트코인 구조] 개인키(Private key), 공개키(Public key), 주소(Address) 생성 미리 알아야 할 내용들 '비트코인/암호학' 카테고리의

kwjdnjs.tistory.com

 

[비트코인 구조] 트랜잭션 기본 규칙

미리 알아야 할 내용들 [비트코인 구조] 비트코인 트랜잭션(Transaction) 기초 미리 알면 좋은 내용들 [블록체인 용어] 블록체인(Block Chain)  블록체인이란 발생한 거래들을 블록에 담고 블록들을 연

kwjdnjs.tistory.com