비트코인암호학 중급

비밀번호도 은행도 없이 어떻게 내 비트코인이 내 것이 될까

비트코인에는 아이디도, 비밀번호도, 은행도 없습니다. 소유권은 오직 하나의 숫자 - 개인 키 - 를 아는 것으로 증명됩니다. 비트코인 전체를 떠받치는 공개키 암호학의 원리를 정리합니다.

· 6분

비트코인에는 계정도, 비밀번호도, 가입 절차도 없습니다. 누가 비트코인을 소유했는지는 어떤 서버의 데이터베이스에도 기록되지 않습니다. 소유권은 오직 하나, 개인 키(private key)라는 숫자를 아는 것으로 증명됩니다. 이 단순한 사실을 가능하게 하는 기술이 바로 공개키 암호학입니다. 비트코인의 주소, 서명, 지갑, 멀티시그 - 거의 모든 기술이 이 토대 위에 서 있습니다.

두 종류의 암호

암호화에는 크게 두 가지 방식이 있습니다.

대칭키 암호(symmetric) 는 하나의 열쇠로 잠그고 같은 열쇠로 엽니다. 빠르고 간단하지만 치명적인 약점이 있습니다. 떨어져 있는 두 사람이 안전하게 통신하려면 먼저 같은 비밀 열쇠를 공유해야 합니다. 그런데 그 열쇠 자체를 어떻게 안전하게 전달할 것인가? 도청당하는 채널로 열쇠를 보내면 그 순간 보안이 무너집니다. 이것이 수천 년간 암호학을 괴롭힌 키 분배 문제입니다.

비대칭키 암호(asymmetric), 즉 공개키 암호는 이 문제를 우아하게 해결합니다. 열쇠가 하나가 아니라 한 쌍입니다.

  • 개인 키(private key): 절대 공개하지 않고 혼자만 보관하는 숫자
  • 공개 키(public key): 누구에게나 마음껏 알려도 되는 숫자

두 키는 수학적으로 짝을 이루지만, 공개 키로부터 개인 키를 거꾸로 계산하는 것은 사실상 불가능합니다. 그래서 공개 키는 전 세계에 뿌려도 안전합니다.

일방향 함수: 쉬운 방향과 불가능한 방향

공개키 암호의 핵심에는 일방향 함수(one-way function) 가 있습니다. 한쪽 방향으로 계산하기는 쉽지만, 반대 방향으로 되돌리기는 계산적으로 불가능한 함수입니다.

흔한 비유는 페인트 섞기입니다. 노란색과 파란색을 섞어 녹색을 만드는 것은 순식간입니다. 하지만 완성된 녹색을 보고 원래 어떤 노란색과 어떤 파란색이었는지 정확히 분리해 내는 것은 사실상 불가능합니다. 공개 키는 섞인 녹색, 개인 키는 그 속의 원래 색에 해당합니다.

비트코인의 일방향 함수: 타원곡선

비트코인은 이 일방향성을 타원곡선 암호(Elliptic Curve Cryptography, ECC) 로 구현합니다. 비트코인이 사용하는 곡선의 이름은 secp256k1입니다.

개인 키 k는 단순한 256비트 난수입니다. 공개 키 K는 곡선 위의 정해진 기준점 G(생성점)에 개인 키를 곱해서 얻습니다.

K = k × G

여기서 ×는 보통의 곱셈이 아니라 타원곡선 위에서 정의된 특수한 "점 덧셈"의 반복입니다. 중요한 것은 그 성질입니다.

  • kG를 알면 K를 구하는 것은 수 밀리초면 끝납니다.
  • 반대로 KG를 알아도 k를 구하는 것은 현재 기술로 우주의 나이보다 오래 걸립니다.

이것을 이산로그 문제라고 부릅니다. 개인 키를 안전하게 만드는 것은 비밀 금고가 아니라 이 수학적 비대칭성입니다.

숫자의 크기가 곧 보안

개인 키는 1부터 약 1.158 × 10^77 사이의 정수입니다. 가능한 개인 키의 개수는 관측 가능한 우주의 원자 수(약 10^80)에 맞먹는 규모입니다. 지구상의 모든 컴퓨터를 동원해도 특정한 개인 키 하나를 무작위로 맞힐 확률은 사실상 0입니다. 비트코인의 보안은 비밀이 아니라 천문학적 숫자의 크기에 기댑니다.

디지털 서명: 비밀을 드러내지 않고 증명하기

공개키 암호의 진짜 마법은 디지털 서명에 있습니다. 디지털 서명은 두 가지를 동시에 보장합니다.

  1. 본인 확인: 이 메시지는 그 개인 키의 주인이 만들었다.
  2. 무결성: 메시지가 한 글자도 변조되지 않았다.

비트코인에서 거래를 보낸다는 것은 곧 "이 비트코인을 이렇게 쓰겠다"는 메시지에 개인 키로 서명한다는 뜻입니다.

  • 송신자는 거래 내용에 개인 키로 서명을 만듭니다.
  • 네트워크의 누구나 송신자의 공개 키로 그 서명을 검증할 수 있습니다.
  • 검증이 통과하면, 개인 키를 한 번도 보지 않고도 그 키의 주인이 서명했음이 증명됩니다.

개인 키는 절대 네트워크에 노출되지 않습니다. 노출되는 것은 공개 키와 서명뿐이며, 그것만으로 소유권 증명이 끝납니다. 은행 직원도, 중개자도, 신뢰할 제3자도 필요 없습니다. 검증은 순수하게 수학입니다.

비트코인에서의 전체 흐름

개인 키에서 출발해 거래가 완성되기까지의 사슬은 다음과 같습니다.

개인 키 (256비트 난수)
   │  타원곡선 곱셈 (K = k × G)

공개 키
   │  해싱 (SHA-256 → RIPEMD-160 등)

비트코인 주소
  • 비트코인을 받을 때: 상대방은 당신의 주소(공개 키에서 파생)로 잠긴 출력을 만듭니다.
  • 비트코인을 쓸 때: 당신은 개인 키로 서명해 그 잠금을 풀 권한을 증명합니다.

이 구조 덕분에 비트코인은 누구에게나 받을 주소를 공개하면서도, 개인 키만 지키면 자산을 안전하게 통제할 수 있습니다.

"당신이 곧 은행"의 진짜 의미

공개키 암호는 비트코인의 핵심 명제를 가능하게 합니다. 개인 키를 통제하는 사람이 비트코인을 소유한다. 은행 계좌처럼 누군가의 허락을 받아 잔고에 접근하는 것이 아닙니다. 개인 키만 있으면 세상 어디서든, 어떤 기관의 동의도 없이 자산을 움직일 수 있습니다.

이것은 강력한 자유인 동시에 무거운 책임입니다. 개인 키를 잃으면 비트코인도 영원히 잃습니다. 개인 키를 빼앗기면 자산도 빼앗깁니다. "내 키가 아니면 내 코인이 아니다(Not your keys, not your coins)"라는 격언은 바로 이 수학적 사실에서 나옵니다. 그래서 개인 키를 어떻게 생성하고 보관하느냐가 비트코인 자기보관의 전부라 해도 과언이 아닙니다.

양자컴퓨터는 위협인가

충분히 강력한 양자컴퓨터는 이론적으로 타원곡선의 일방향성을 깰 수 있습니다(쇼어 알고리즘). 다만 그 정도 규모의 양자컴퓨터는 아직 존재하지 않으며, 비트코인은 사전에 양자 저항 서명 방식으로 교체할 수 있는 업그레이드 여지를 갖고 있습니다. 또한 공개 키를 아직 한 번도 드러내지 않은 주소(받기만 한 주소)는 해시 한 겹이 더 보호하고 있습니다. 당장의 위협이라기보다, 비트코인 개발 커뮤니티가 장기적으로 대비하는 과제입니다.

연결되는 개념

관련 글