1. 통화의 검증 방식
모든 통화 체계에서(달러 세계든 원화 세계든) 검증은 필요합니다. 여기서 말하는 검증은 두 가지가 있습니다.
첫 번째는 이미 이루어진 거래 내역이 정당한 거래내역인가에 대한 검증입니다. 이게 왜 필요할까요? 생각해보면 이해가 쉬운 문제입니다. 어떤 철수와 영희가 있습니다. 철수와 영희는 한푼도 없었지만 돈을 너무 벌고 싶었고, 결국 사기에까지 손을 뻗치게 됩니다. 둘은 은행에 가서 "영희가 철수에게 백만원을 보냈다!"라고 말하기 시작했습니다. 이미 이루어진 거래라고 우기기 시작한 것이죠. 당연히 실제로는 은행이 모든 데이터를 가지고 있으니 이런 일이 불가능하지만, 거래 내역의 검증이 필요한 이유는 대충 이런 느낌입니다.
두 번째는 개인의 신원에 대한 검증입니다. 첫 번째보다 더 당연한 문제입니다. 영희와 철수가 싸웠습니다. 화난 영희는 철수의 통장 잔고를 모조리 빼가려고 합니다. 그래서 영희는 이번에도 자기가 철수라고 우기기 시작했습니다. 개인의 신원에 대한 검증이 없다면? 철수는 다시 빈털터리가 될 것입니다. 실제 은행에서는 신분증을 사용하여 이를 방지합니다.
이렇게 두 가지 검증이 통화의 거래에서 필요하고, 실제로는 은행이 모든 데이터를 가지고 내부적으로 검증을 진행하고 있습니다.
2. 비트코인에서의 검증
그럼 비트코인에서는 어떻게 검증을 진행할까요? 비트코인 네트워크는 중앙관리자가 없는 비트코인 프로토콜에 참여한 모든 사용자의 집합이라고 하였습니다. 절대 관리자가 없으므로, 모든 거래에 대한 데이터를 가지고 검증을 진행해줄 사람이 없게 되는 것입니다. 이때문에 비트코인 네트워크는 공개 키(Public Key) - 개인 키(Private Key) 알고리즘을 사용합니다.
우선, 공개 키와 개인 키는 둘 다 자물쇠이자 열쇠입니다. 이게 무슨 말이냐면, 공개 키가 자물쇠인 경우에는, 개인 키가 열쇠가 됩니다. 반대로 개인 키가 자물쇠인 경우에는, 공개 키가 열쇠가 됩니다. 둘 중 하나로 만든 자물쇠는 반드시 나머지 하나로만 풀 수 있다는 것이죠.
이 공개 키-개인 키 알고리즘를 이용해서 비트코인 네트워크의 모든 트랜잭션은 암호화되고, 복호화됩니다. 여기서 트랜잭션은 거래 내역을 의미합니다. 이 알고리즘을 이용해서 비트코인은 통화에 필요한 두 가지 검증방식을 모두 구현할 수 있습니다.
첫 번째는 거래내역의 검증입니다. 비트코인 네트워크에는 중앙 관리자가 없기 때문에, 모든 사용자가 거래내역의 복사본을 가지고 있게 됩니다. 그럼 이 거래내역의 복사본이 어떻게 저장될까요? 한 명의 사용자가 거래내역을 만들고 다른 모든 사용자에게 뿌려줄까요? 아닙니다. 바로 자신한테 들어오는 모든 트랜잭션에 대해서 사실유무를 검증한 후, 올바른 트랜잭션만을 자신의 거래내역에 저장하는 것입니다.
예를 들어보면 다음과 같습니다. 사용자 "영희"이 하나의 트랜잭션을 자신의 개인 키를 이용해서 암호화하고, 다른 모든 사용자에게 ( 트랜잭션의 원본 + 암호화된 트랜잭션 ) 을 보냅니다. 원본과 바꾼 것을 묶어서 보내는 것입니다. 그럼 이 트랜잭션을 받은 사용자들은 보낸이가 "영희"임을 확인하고, "영희"의 공개 키를 이용해 암호화된 트랜잭션을 복호화합니다. 이제 이 복호화된 트랜잭션을 트랜잭션의 원본과 비교하여 올바른 트랜잭션일 경우 자신의 거래내역에 저장하고, 아닐경우 버리게 되는 것입니다.
그럼 여기서 또 나오는 궁금증이, 왜 원본과 암호화된 것을 같이 보낼까?가 있습니다. 이는 트랜잭션의 거짓을 확인하기 위함입니다. 만약 "영희"가 사기를 치기 위해 보낸 사람을 "철수"로 하고 "철수가 영희에게 1비트코인을 보낸다" 라는 거짓 트랜잭션을 보냅니다. "영희"는 이런 가짜 트랜잭션을 만들고, 이를 자신의 개인 키를 이용해 암호화합니다. 그럼 이 것을 받은 사용자는 보낸 사람이 "철수"이기 때문에 "철수"의 공개 키를 활용해 암호화된 트랜잭션을 복호화 합니다. 그랬더니 웬일? 같이 온 트랜잭션의 원본은 "철수가 영희에게 1비트코인을 보낸다" 인데, 복호화된 트랜잭션은 웬 이상한 글이 튀어나오게 됩니다. 왜냐? 올바르지 않은 키로 복호화했기때문에! 이를 통해 다른 사용자들은 이 트랜잭션이 거짓된 트랜잭션임을 알고 기록내역에 저장하지 않게됩니다. 이 과정을 통해 모든 사용자의 거래내역에는 진실된 트랜잭션만이 기록됩니다.
두 번째는 개인의 신원에 대한 검증입니다. "영희"의 계좌 잔고는 "철수"가 볼 수 없어야 한다고 했습니다. 즉, 본인만이 자신의 잔고에 대해서 접근하고 처리할 수 있어야 한다는 것입니다. 이 또한 위에 설명한 공개 키 - 개인 키 알고리즘을 통해 해결할 수 있는데, 예시는 다음과 같습니다.
"영희"는 "철수"에게 1비트코인을 보내고 싶습니다. 따라서 모두가 접근할 수 있는 철수의 공개 키를 이용하여 박스를 하나 만들고, 이 안에 비트코인을 넣어 보냅니다. 이 박스는 철수의 개인 키로만 열 수 있기 때문에, 오직 철수만 이 박스를 열어 비트코인을 가져갈 수 있게 됩니다. 따라서 철수가 자신의 개인 키를 노출하지 않는 이상, 이 비트코인은 아무도 훔쳐갈 수 없게 되는 것입니다.
이 글은 edX의 Bitcoin and Cryptocurrencies 강의의 내용을 바탕으로 작성된 글입니다.
www.edx.org/course/bitcoin-and-cryptocurrencies
<참고>
steemit.com/kr/@yahweh87/15-3-n
'Study > Blockchain' 카테고리의 다른 글
[비트코인과 가상화폐] 2. 비트코인이 은행을 대체할 수 있는 방법 (0) | 2021.04.11 |
---|---|
[비트코인과 가상화폐] 1. 비트코인이란 무엇인가? (1) | 2021.04.11 |