상세 컨텐츠

본문 제목

비트코인 시스템의 이해 - 전자서명을 통한 비트코인 송금

비트코인

by 초익향 2021. 5. 5. 01:04

본문

비트코인을 정말 화폐처럼 믿고 사용할 수 있는가에 대한 질문에 대답하기 위해서는 우리가 비트코인에 대해 어느 정도 이해할 필요가 있습니다. 개발자나 전문가와 같이 깊게 들어갈 필요는 없지만, 적어도 비트코인 시스템이 'P2P 네트워크상에서 작업 증명을 통해 블록체인을 운영하는 시스템'이라는 것을 이해해야 합니다. 많은 사람이 이 문장을 알고 있지 못하며, 심지어 다르게 알고 있는 사람들도 있습니다. 비트코인의 시스템을 이해하기 위해 우리가 알아야 할 것은, 전자서명을 통한 송금, 블록체인을 통한 거래 내역 기록, 작업 증명을 통한 블록체인 보호 세 가지입니다. 이번 글은 우선 전자서명을 통한 비트코인의 송금에 관해 설명하겠습니다.

 

설명하기 전에, 전자서명 이론을 알지 못하시는 분은 이전 글의 암호학 용어 설명 편을 읽고 와주시기 바랍니다. 비트코인은 암호 이론을 바탕으로 설계되어 있기 때문에 암호 이론을 이해하고 읽는 것이 편합니다.

 

https://choikhyang.tistory.com/9

 

비트코인 시스템의 이해 - 암호학 용어 설명(공개키, 해시, 전자서명)

우리가 비트코인을 전문가 수준으로 이해할 필요는 없습니다. 비트코인의 기본은 암호학으로 구성되어있지만 그렇다고 모든 암호학 이론을 배울 필요는 없습니다. 그래도 비트코인 시스템을

choikhyang.tistory.com


I. 전자서명을 통한 송금

비트코인을 개발한 사토시 나카모토의 비트코인에 관한 논문, <Bitcoin: A Peer to Peer Electronic Cash System>에는 비트코인을 전자서명의 체인이라고 정의했습니다("We define an electronic coin as a chain of digital signatures."). 비트코인이 송금될 때는 전자서명이 사용됩니다. 우리는 전자서명을 사용함으로써 신원 조작, 거래 내역 조작, 거래 사실 부인 문제를 해결할 수 있습니다. 이는 암호학의 인증, 무결성, 부인방지 특성을 그대로 가져온 것입니다.

 

A가 B에게 비트코인을 송금한다고 가정하겠습니다. A는 이전의 거래 내용(A도 누군가에게 비트코인을 받아 거래되었을 테니까)과 자신의 공개키를 해시에 넣어 해시값을 만듭니다. 이렇게 만든 해시값을 개인키로 암호화합니다. 이는 A의 서명이 되었고, 이를 B에게 보냅니다. 서명을 받은 B는 A의 공개키로 복호화하여 비트코인의 송금자가 A임을 확인합니다.


II. 지갑

지갑(Wallet)은 비트코인을 보관하는 장소입니다. 위의 예시에서, A와 B는 사실 서로의 지갑을 이용해서 거래합니다. 지갑의 생성을 위해 공개키와 개인키가 필요합니다. 개인키를 남들에게 보여줘서는 비트코인을 도둑맞을 수 있고, 개인키를 잃어버리면 비트코인을 영원히 잃을 수 있기 때문에, 개인키는 소중히 보관해두어야 합니다. 공개키와 개인키를 해싱하여 지갑 주소(Address)를 생성합니다. 지갑 주소는 통장의 계좌 번호라고 생각하시면 됩니다. 공개키와 개인키, 주소는 자신이 직접 만들 수 있으나, 간단하게 거래소나 지갑 생성 사이트에서 만들 수 있습니다. 주소는 개인키와 공개키의 해시값이기 때문에, 새로운 주소를 언제든지 생성할 수 있고, 작은 크기이기 때문에 많이 만들어도 됩니다. 보통 안전을 위해서 주소를 자주 바꾸어 주는 것이 좋습니다.

 

비트코인 지갑

 

주소는 공개키의 해시값이기 때문에 주소를 보고 공개키의 소유자를 알아낼 수 없습니다. 해커는 이 주소를 가진 주인들이 거래한다는 것은 알 수 있지만, 주소의 주인이 누구인지는 모른다는 것입니다. 익명성이 보장되는 것이죠. 서명으로 거래가 정상인지는 확인하면서 익명성은 보장되기 때문에 해커의 공격으로부터 안전합니다. 하지만 이러한 점 때문에 불법적인 거래나 탈세에 이용될 수 있습니다. 그러나 이는 다른 거래에서도 마찬가지이기 때문에 비트코인만의 문제점은 아닙니다. 오히려 비트코인의 거래는 블록체인으로 인해 다른 거래보다 투명하다는 점을 알아야 할 것입니다(블록체인은 다음 편에서 설명합니다).


III. 총정리

지갑의 개념을 알았으니, A와 B가 서로 지갑을 가지고 있다고 가정하고 파트 I에서 사용한 예시를 더 자세하게 설명하겠습니다. A 지갑은 B 지갑에 비트코인을 송금하기 위해 B 지갑의 주소, 이전 거래 내역의 해시값, 그리고 자신의 공개키를 한 곳에 모아 해시값을 계산합니다. 이 해시값은 이제 '거래 내역'이 됩니다. 나중에 B가 다른사람에게 비트코인을 송금할 때, 이전 거래 내역을 이 해시값으로 사용하면 됩니다. A 지갑은 해시값을 자신의 개인키로 암호화하여 자신의 서명을 만듭니다.

 

사토시 나카모토의 비트코인 논문에 나온 비트코인 송금 과정. 체인처럼 연결되어 있다.

 

이제 데이터에 서명을 붙여 B 지갑이 아닌 블록체인에 보냅니다(블록체인에 대한 자세한 내용은 다음 편에서 설명합니다). B 지갑은 블록체인에 접속해 데이터를 가져와 A 지갑의 서명을 A의 공개키로 복호화하여 송금한 사람이 A임을 확인할 수 있습니다. 이러한 지갑과 전자서명 시스템 때문에, 해커는 이 과정에 개입할 수 없습니다. 따라서 우리는 안전하게 비트코인을 거래할 수 있는 것입니다.


참고자료 : 노구치 유키오, <The Virtual Currency Revolution>

관련글 더보기