KEEP!T Column 비트코인 뽀개기(7편)
KEEP!T Column
안녕하세요! KEEP!T입니다. 최초의 암호화폐인 비트코인을 누구나 쉽게 이해할 수 있도록 '비트코인 뽀개기'라는 주제로 콘텐츠를 연재하고 있습니다. 지난 비트코인 뽀개기 6편에서는 공개 키 암호 방식에 대해 학습하였으며, 이번 7편에서는 비트코인에서 공개 키 암호 방식을 어떻게 활용하였는지에 대하여 자세히 알아보는 시간을 갖도록 하겠습니다. 혹시 앞선 비트코인 뽀개기 시리즈를 읽지 않으셨던 분들은 아래의 링크를 통해 읽어보시면 좋을 것 같습니다.
기존의 중앙 집중형 금융 시스템에서 금융 거래를 진행하기 위해서는 거래 정보를 작성하고 소유권을 인증받은 후 거래를 진행할 수 있었습니다. 마찬가지로 비트코인 네트워크에서도 거래를 진행하기 위하여 거래 정보를 작성하고, 소유권을 인증받을 수 있는 방법이 필요합니다.
트랜잭션
비트코인 프로토콜에서는 거래를 진행하기 위해 작성된 거래 정보를 트랜잭션
이라고 표현하며, 트랜잭션은 비트코인에 대한 소유권을 다른 사람에게 이전하기 위한 목적으로 서명된 정보라고 할 수 있습니다. 트랜잭션은 크게 input(입력) 정보와 output(출력) 정보로 구성되며, 트랜잭션에는 미사용 비트코인, 송금 정보, 송금액, 수령자의 공개 주소 정보 등이 포함되어 있습니다.
비트코인 거래를 위해 작성된 트랜잭션은 비트코인 네트워크에 연결된 노드들에게 전파되며, 각 노드는 전달 받은 트랜잭션의 유효성을 검증하고 검증 받은 트랜잭션들은 Mempool이라는 공간에 추가됩니다. 그렇다면 전달 받은 트랜잭션의 유효성은 어떻게 검증할 수 있을까요? 지금부터 자세히 살펴보도록 하겠습니다.
트랜잭션 검증
비트코인 프로토콜은 비트코인의 소유권을 입증하기 위한 방법으로 공개 키 암호화 방식을 활용하고 있으며, 트랜잭션에는 원본 데이터와 함께 개인 키로 암호화된 전자 서명 데이터를 포함하여 전송함으로써 소유권에 대한 유효성을 검증 받게 됩니다.
예를 들어 A, B, C 사용자가 있고 A가 B에게 1 BTC를 보내고 싶다고 가정했을 경우 A는 B에게 1 BTC를 전송하기 위한 거래 정보를 작성하고, 작성한 원본 데이터와 함께 자신의 개인 키
정보를 통해 원본 데이터를 암호화한 전자 서명 데이터를 포함하여 비트코인 네트워크에 연결된 노드들에게 전파합니다.
트랜잭션을 전달받은 노드들은 원본 데이터에 작성된 입력 정보가 정상적인지 검증하고, 트랜잭션에 입력된 정보가 정상적일 경우 소유권을 입증하기 위하여 전자 서명된 데이터를 소유자의 공개 키로 복호화합니다.
공개 키 암호화 방식에서 개인 키는 오직 소유자인 A만이 알 수 있으며, A의 개인 키로 암호화된 데이터는 오직 A의 공개 키로만 복호화할 수 있습니다. 즉, 전자 서명된 데이터를 A의 공개 키로 복호화하고 A의 공개 키로 복호화한 데이터가 원본 데이터와 같다면 A가 보낸 트랜잭션이라는 것이 입증되는 것입니다.
만약 사용자 B가 악의적인 목적으로 A가 B에게 1 BTC를 보낸다는 트랜잭션을 생성하여 전파한다고 가정해보겠습니다. B는 A의 개인 키를 알고 있지 못하기 때문에 올바른 전자 서명 데이터를 생성할 수 없습니다.
A의 개인 키를 알지 못하기 때문에 B의 개인 키로 원본 데이터를 암호화하고 트랜잭션을 전파할 경우 각 노드들은 전자 서명된 데이터를 A의 공개 키를 통해 복호화하게되며, B의 개인 키로 암호화된 데이터를 A의 공개 키로 복호화 하였을 경우 원본 데이터와 전혀 다른 결과 값이 출력됨으로 유효성에 실패하게 됩니다.
대다수의 암호화폐에서는 공개 키 암호 방식을 사용하고 있습니다. 만약 개인 키를 분실 하였을 경우 자신이 소유하고 있는 지갑 주소일지라도 전자 서명을 할 수 없게 되어 해당 주소에 보유 중인 암호화폐를 영원히 되찾을 수 없게됩니다. 또한, 만약 해킹범에 의하여 개인 키 정보가 유출되었을 경우 해킹범은 얼마든지 해당 주소의 암호 화폐를 다른 곳으로 전송할 수 있기 때문에 암호 화폐에서 개인 키 관리는 매우 중요한 요소입니다.
Mempool
비트코인 거래를 위해 트랜잭션을 생성하고, 생성된 트랜잭션은 비트코인 네트워크에 연결된 노드들에게 전파됩니다. 각 노드들은 해당 트랜잭션의 유효성을 검증하고 검증된 트랜잭션들은 Mempool이라는 공간에 업데이트됩니다. 즉, Mempool은 아직 거래가 성립되지 않은 0 컨펌 상태의 트랜잭션들이 저장되는 공간입니다.
채굴자(마이너)는 새로운 블록을 생성한 댓가로 새롭게 발행되는 비트코인뿐만 아니라 블록에 포함된 모든 거래 수수료를 인센티브로 얻게 됩니다. 그렇기 때문에 Mempool에 대기 중인 0 컨펌 상태의 트랜잭션 중 거래 수수료가 높은 트랜잭션들을 우선적으로 선별하여 블록에 추가하게됩니다.
0 컨펌 상태의 트랜잭션이 채굴자(마이너)에 의해 블록에 담기어 블록 체인에 연결되는 순간 1 컨펌으로 변경되고, Mempool에서 삭제됩니다. Mempool의 데이터 크기가 클 경우 대기중인 트랜잭션들이 많다는 의미이며, 수수료가 낮은 트랜잭션들은 거래가 이루어지기까지 많은 시간이 소요될 수 있습니다.
Mempool 정보를 쉽게 확인할 수 있는 다양한 서드 파트 서비스
이번 비트코인 뽀개기 7편에서는 트랜잭션 검증 원리 및 Mempool에 대한 학습을 진행하였습니다. 다음 비트코인 뽀개기 8편에서는 비트코인 거래 원리를 이해하기 위하여 UTXO라는 개념에 대하여 자세히 알아보는 시간을 갖도록 하겠습니다.
yahweh87
참고자료
이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 국제 라이선스에 따라 이용할 수 있습니다.
upvote for me please? https://steemit.com/news/@bible.com/2sysip
블록체인 저널을 잘 정리해주셨네요. 감사합니다.
글 너무 감사드립니다!
궁금한 점이 생겨 여쭤봅니다
만약 A가 B에게 100원을 보냈다는 TX가 생성되었을 때, 이의 거래를 당사자 간에 확인하는 절차를 위해서는 A와 B의 서명이 모두 들어가고 또 A와 B의 개인키로 암호화한 전자 서명이 필요한 것이 아닌지(예를 들어, A의 개인키로 먼저 암호화하고 그 다음에 B의 개인키로 암호화) 생각됩니다.
A와 B간의 거래인데 단순히 A만의 서명과 A 개인키로만 암호화한 거래 내역은 충분히 A가 자신의 개인키로 암호화하기 전에 거래 내역을 예를 들어 100원을 101원으로 살짝 바꿀 수 있지 않나 싶습니다