UPDATED. 2022-09-30 17:12 (금)
비트코인의 필수 개념: 개인 키와 공개 키, 디지털 서명
상태바
비트코인의 필수 개념: 개인 키와 공개 키, 디지털 서명
  • 블록체인투데이
  • 승인 2022.09.06 09:59
이 기사를 공유합니다

글: 베가엑스

우리가 흔히 알고 있는 가장 대중적인 암호화폐 비트코인. 비트코인의 핵심을 이해하기 위해서는 우선 기본 개념들을 파악하는 것이 중요하다. 그 중에서도 비트코인 네트워크의 기반이 되는 디지털 서명(digital signature)과 개인(private key) 및 공개 키(public key) 쌍에 대해 자세히 살펴볼 필요가 있다.

이들 개념이 비트코인 네트워크에 어떻게 적용되었는지 본격적으로 알아보기 전에, 먼저 공개 키와 개인 키 암호화 방식의 역사를 살펴볼 필요가 있다. 일반적으로 ‘공개 키 암호화 방식(Public Key Cryptography)’이란 공개 및 개인 키 쌍을 활용해 메시지를 암호화 및 해독하는 시스템을 말한다. 이 시스템의 장점은 네트워크의 모든 참여자가 공개 키를 알고는 있지만 수학적인 복호화 메커니즘(개인 키 또는 디지털 서명)이 없는 한 메시지가 안전하게 암호화되며, 의도된 수신자만이 메시지를 분석할 수 있다는 점이다. 

공개 키 암호화 방식은 단방향 인증(one-way authentication) 또는 비대칭 암호화 방식(asymmetric cryptography)이라고도 불린다. 이 시스템은 1976년 마틴 헬만(Martin Hellman), 랄프 머클(Ralph Merkle), 그리고 휫필드 디피(Whitfield Diffie)에 의해 개발됐다. 스탠포드 대학에서 만난 이들은 두 개의 피어(peer)가 모두 개인 키를 가지고 있는 개인 키 암호화 방식보다 더 안전한 솔루션을 고안하기 위해 연구했다. 개인 키 암호화 방식의 가장 큰 단점은 키 하나가 노출되면 암호화 전체가 소용없게 된다는 점이다. 이들은 공개 키 암호화 방식을 개발함으로써 개인 키를 하나로 줄이고 공개 키의 개념을 도입해 암호화의 보안 수준을 획기적으로 높였다.

역사적 배경에 이어, 본문에서는 공개 키의 구현 방식을 다뤄보려 한다. 개인 키의 개념과 생성 방법, 공개 키의 개념과 관련된 수학 함수, 공개 키 암호화 방식에서 타원곡선(elliptic curve)의 중요성, 그리고 디지털 서명의 구조와 비트코인에서 디지털 서명이 활용되는 방식을 설명하겠다.


◆개인 키: ‘큰 무작위의 숫자’
개인 키의 가장 간단한 정의는 ‘큰 무작위 숫자(난수)’다. 비트코인 네트워크에서 개인 키는 256비트 길이의 숫자다. 비트코인이 SHA-256 해싱 알고리즘을 사용하기 때문이다. 256비트 숫자는 다양한 형식으로 표현할 수 있다. 예를 들어, 바이너리 포맷(2진법)(예: 0101001011010)을 사용하면 방대한 데이터를 단 두 문자로 표기할 수 있다. 이 밖에도 10진법(예: 18061531356)과 16진법(예: ef235aacf90d9f4aadd8)이 있는데, 비트코인은 바로 이 16진법을 활용해 시스템의 데이터를 표시한다.

256비트 숫자를 다시 살펴보자. 256비트 숫자는 256비트 데이터 안에 저장할 수 있는 숫자다. 비트는 컴퓨터 데이터의 가장 작은 단위로, ‘0’이나 ‘1’의 값만 가질 수 있다. 하지만 비트만으로도 모든 숫자를 표현할 수 있다. 예를 들어, 숫자 ‘5’를 비트로 저장하면 ‘101’이 된다. 256 비트 숫자는 최대 256개의 비트를 사용해 표현되며, 256비트의 총 숫자는 2의 256승과 동일한 값이다.

주제를 확장해, 256비트 숫자가 비트코인 네트워크에서 어떻게 사용되는지 살펴보자. 앞서 언급했듯이 개인 키는 무작위로 생성된 256비트 길이의 숫자다. 개인 키는 최대 256개의 비트 숫자로 표현된 바이너리 포맷, 프로그래밍 언어를 사용해 숫자를 생성하는 10진법, 그리고 SHA-256 해싱 기능을 통해 데이터를 실행하는 16진법 방식으로 생성이 가능하다. 결과가 무작위라는 가정하에, 이러한 생성 전략은 모두 효과가 있다. 반면 악의적인 행위자가 난수를 생성하는 데 사용되는 패턴이나 생성원(generator)을 잘 알고 있다면, 개인 키가 악용될 소지가 있으며 개인 키와 연관된 주소에 보관된 비트코인도 도난의 위험으로부터 안전하지 못하다.

개인 키를 보다 직관적으로 이해하기 위해서는 동전을 256번 던지는 것을 상상해보자. 이때는 비슷한 과정을 거친다고 해도 여러 사람이 완전히 같은 결과를 얻을 가능성은 매우 낮다. 난수(개인 키)를 생성함으로써 누구나 자신의 ‘비트코인 계좌’를 만들 수 있다는 사실은 비트코인 프로토콜이 가지는 환상적인 특징이다. 신규 계좌의 발급을 담당하는 중앙 권력이 존재하지 않는다는 점에서, 개인 키 생성 기능은 본질적으로 비트코인을 민주화(탈중앙화)한다고 볼 수 있다. 또한, 개인 키의 경우의 수는 2^256에 이르므로, 무작위로 생성된 개인 키는 사용자에게 매우 높은 수준의 보안을 제공한다.


◆공개 키에 적용된 수학과 그래프
개인 키와 마찬가지로 공개 키는 16진법의 256비트 숫자로 표현된다. 그러나 공개 키의 핵심은, 공개 키가 바로 개인 키를 사용해 만들어진다는 점이다. 공개 키는 개인 키를 특정 수학 함수에 대입해 얻을 수 있다. 이 함수는 y^2=x^3+ax+7 (where a = 0)라는 방정식을 만족하는 타원곡선이다. 다음 그림은 타원곡선을 그래프로 나타낸 것이다.
 

(출처=Greg Walker/learnmeabitcoin)

여기서 타원곡선을 사용하는 이유는 무엇일까? 이는 타원곡선이 개인 및 공개 키 쌍에 적합한 몇 가지 특성을 지니고 있기 때문이다. 먼저, 타원곡선 곱셈 함수는 트랩도어 함수(trapdoor function, 비밀통로 일방향함수)에 해당한다. 트랩도어 함수는 한 방향으로 계산하기는 쉽지만 ‘트랩도어’라고 불리는 특수한 정보가 없이는 역방향 계산이 어려운 함수다. 따라서, 개인 키를 구하기 위해 공개 키의 좌표를 나누는 방식으로 타원곡선의 역산된 값을 구하기는 매우 어렵다.

두 번째 특성은 공개 키가 개인 키에 수학적으로 연결되어 있으므로 개인 키를 실제로 공개하지 않고도 개인 키의 소유권을 증명할 수 있다는 점이다. 이는 비트코인 네트워크에서 특히 중요한 특성이다. 비트코인 네트워크에서는 거래 시 거래 데이터에 공개 키가 사용되어야 하며, 공개 키와 연관된 개인 키를 사용자가 제어할 수 있다는 사실을 증명해야 한다. 공개 키와 개인 키 쌍은 수학적으로 연결되어 있어서 개인 키를 타원곡선 함수에 대입하면 새로운 값이 반환된다. 그리고 공개 키를 타원곡선 함수에 대입하면 또 다른 값이 반환된다. 이 두 값 사이에는 일치하는 부분이 있으며, 이것만으로도 공개 및 개인 키 쌍의 연결성을 입증하기에는 충분하다. 


◆디지털 서명
다음으로는 디지털 서명의 개념과 디지털 서명이 어떻게 소유권 증명 과정을 더욱 간소화하는지 알아보자.

비트코인에서 디지털 서명은 공개 키와 비슷하게 16진법으로 표현된 큰 수이며, 개인 키 소유권을 증명하기 위해 사용된다. 또한, 디지털 서명을 사용하면 개인 키를 공개하지 않으면서 개인 키 소유권을 증명할 수 있다. 앞서 살펴본 공개 및 개인 키 쌍과 마찬가지로, 디지털 서명과 공개 키의 관계를 증명하는 데는 약간의 수학이 필요하다.

디지털 서명은 크게 두 가지 요소로 이루어진다. 무작위 부분과 서명 부분이다. 먼저 무작위 부분은 난수를 생성하고 타원곡선의 생성자(generator point)와 곱해 얻을 수 있다. 이 생성자는 앞서 설명한 대로 공개 키를 생성하는 데 사용된다. 디지털 서명에서 무작위 부분은 이렇게 생성된 지점의 좌표에 해당한다. 이 점을 ‘r’이라 부르겠다. 두 번째인 서명 부분은 개인 키를 임의의 점인 ‘r’과 곱해 얻을 수 있다. 이다음 단계는 서명을 하고 싶은 내용, 즉 ‘메시지’를 더하는 것이다.

비트코인에서 메시지는 전체 거래 데이터의 해시다. 해시에는 우리가 해제(unlock)하고 특정 거래에서 사용하고자 하는 출력값이 포함된다. 거래 해시를 포함하면, 서명이 특정한 거래와 연결되므로 재사용이나 변조가 불가능해진다. 마지막으로, 지금까지 계산한 [(r*개인 키) + 메시지]를 처음의 난수로 나눈다. 이렇게 얻은 서명 부분을 ‘s’라고 부르겠다. 이제 누군가 특정 공개 키에 대한 개인 키를 제어할 수 있는지 증명하라고 하면, 증거로 디지털 서명인 (r,s)를 제시하면 된다.


◆비트코인이 디지털 서명을 사용하는 이유
비트코인 거래를 구성할 때는 입력값에 해당하는 모든 UTXO(Unspent Transaction Output, 미지출 거래 출력값)가 잠금 해제되어야 한다. 출력값이 잠겨있는 개인 키에 대한 지식을 증명하면 UTXO를 소유한다는 것을 증명할 수 있다. 하지만 거래에 개인 키를 입력하면 개인 키가 네트워크 전체에 공개되므로, 악의적인 주체가 해당 주소에 잠긴 다른 UTXO의 잠금을 해제할 수 있게 된다. 디지털 서명을 사용하면 개인 키를 공개하지 않으면서도 개인 키 소유권을 증명할 수 있다.

그렇다면, 누군가 서명을 재사용해 내 주소의 다른 출력값을 해제할 수도 있을까? 각 디지털 서명에는 서명의 대상이 되는 특정 거래 해시가 포함된다. 원본 거래 데이터는 디지털 서명을 구성하는 데 사용되므로 일종의 일회용 암호로 볼 수 있다. 만약 누군가 이 서명을 다른 거래에 재사용하려고 하면, 기존 서명 내의 거래 데이터는 새로이 서명하려는 거래 데이터와 서로 충돌하게 된다. 그리고 네트워크 노드는 즉시 이 불일치를 인식하고 거래를 거부한다. 이처럼 각 디지털 서명은 특정 거래 해시를 포함함으로써 거래가 조작될 가능성을 방지한다.

1970년대에 일궈낸 암호학의 획기적인 발전은 인류에게 돈의 개념과 잠재력을 확장할 수 있는 기회를 선사해주었다. 개인 키 암호화 방식의 약점은 보다 안전한 공개 키 시스템의 개발을 통해 극복됐다. 또한, 디지털 서명의 등장으로 인해 개인 키의 소유권을 확장 가능하고 안전하게 증명할 수 있게 됐다. 

이러한 혁신은 비트코인 ‘덕분에’ 이뤄진 것이 아니다. 오히려 비트코인이 이러한 수많은 디테일과 프로세스에 기반을 두고 있다고 보는 것이 더 정확하며, 이와 같은 비트코인의 근본적인 요소를 이해할 때 비로소 비트코인 투자가 제공하는 가치를 완전히 깨달을 수 있을 것이다. 

info@blockchaintoday.co.kr



댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글 0
댓글쓰기
계정을 선택하시면 로그인·계정인증을 통해
댓글을 남기실 수 있습니다.
주요기사
이슈포토