블록체인 학습
0 XP

Chapter 1: 블록체인이란 무엇일까?

공개키, 개인키와 디지털 서명이란?

블록체인은 '누구나 볼 수 있는 장부'입니다. 그런데 누구나 볼 수 있다면, 내가 한 거래를 남이 가로채거나 위조할 수도 있지 않을까요? 이 문제를 푸는 열쇠가 공개키 암호와 디지털 서명입니다.

열쇠가 두 개인 자물쇠

전통적인 암호는 자물쇠와 열쇠가 하나로 묶여 있습니다(같은 열쇠로 잠그고 연다). 공개키 암호는 다릅니다. 수학적으로 짝지어진 두 개의 키를 만듭니다.

  • 개인키(private key): 절대 남에게 보여주지 않는, 나만 아는 비밀 키
  • 공개키(public key): 누구에게나 공개해도 되는 키. 개인키로 계산해 만든다.

핵심은 이 관계가 일방향(one-way)이라는 점입니다. 개인키로 공개키를 계산하기는 쉽지만, 반대로 공개된 공개키만 보고 원래 개인키를 역산하는 것은 현실적으로 불가능합니다. 앞 수업의 해시와 똑같이 "한쪽으로는 쉽고, 거꾸로는 사실상 막혀 있는" 성질을 이용한 것입니다.

공개키는 '누구나 넣을 수 있지만 나만 열 수 있는 우체통의 투입구'에 비유할 수 있습니다. 투입구(공개키)는 길에 공개해 둬도 안전하고, 안의 내용물을 꺼내는 열쇠(개인키)는 나만 가지고 있습니다.

서명: '내가 보냈다'는 증거

디지털 서명은 이 두 키를 거꾸로 활용합니다.

  1. 서명(signing): 내가 보내려는 메시지(예: "A에게 1코인 전송")를 개인키로 처리해 짧은 서명값을 만듭니다. 개인키를 아는 사람만 만들 수 있습니다.
  2. 검증(verification): 받는 사람(그리고 네트워크의 누구든)은 공개키로 그 서명이 해당 메시지와 정말 맞는지 확인합니다.

검증이 통과하면 두 가지가 동시에 증명됩니다.

  • 인증(authentication): 이 메시지는 그 공개키의 짝인 개인키 소유자가 보냈다.
  • 무결성(integrity): 메시지가 중간에 단 한 글자도 바뀌지 않았다. (바뀌면 서명 검증이 실패한다.)

게다가 서명은 위조할 수 없습니다. 개인키 없이 유효한 서명을 만들어 내기란 일방향성 때문에 사실상 불가능합니다.

손글씨 서명은 보고 베낄 수 있지만, 디지털 서명은 메시지마다 값이 달라지고 개인키 없이는 만들 수 없습니다. 게다가 메시지가 조금만 달라져도 서명이 통째로 어긋나므로, 베껴 붙이는 위조가 통하지 않습니다.

블록체인 주소는 어디서 올까?

흔히 보는 지갑 주소(예: 0x로 시작하는 긴 문자열)는 무작위로 만든 게 아닙니다. 공개키를 해시한 값에서 나옵니다. 흐름을 정리하면 이렇습니다.

개인키  ──(계산)──▶  공개키  ──(해시)──▶  주소
 (비밀)             (공개 가능)         (남에게 알려주는 계좌번호)

그래서 주소는 사실상 공개키의 별명이고, 그 주소의 자산을 움직일 수 있는 사람은 짝이 되는 개인키를 가진 사람뿐입니다.

트랜잭션은 서명으로 인증된다

블록체인에서 "내 주소에서 코인을 보낸다"는 트랜잭션은 반드시 내 개인키로 서명되어 네트워크에 제출됩니다. 검증 노드들은 트랜잭션에 담긴 공개키(또는 주소)로 서명을 검증해 다음을 확인합니다.

  • 이 트랜잭션이 정말 그 주소의 주인이 만든 것인가? (인증)
  • 수수료나 전송액 같은 내용이 도중에 변조되지 않았는가? (무결성)

서명이 맞지 않으면 트랜잭션은 그대로 거부됩니다. 그래서 비밀번호 서버도, 중앙 인증기관도 없이 누구든 스스로 거래의 정당성을 증명할 수 있습니다.

개인키를 잃어버리면 누구도 대신 복구해 줄 수 없고, 개인키가 유출되면 그 주소의 자산은 전부 위험해집니다. 블록체인에는 "비밀번호 찾기"가 없습니다. 개인키 관리가 곧 자산 관리입니다.

결국 공개키 암호는 신뢰할 중앙 기관 없이도 "내가 나임"과 "내용이 그대로임"을 수학으로 증명해 줍니다. 다음 수업에서는 수많은 거래를 효율적으로 묶어 검증하는 또 다른 도구, 머클 트리를 살펴봅니다.