2016. 4. 5. 20:20

수학으로 만든 화폐 `비트코인(Bitcoin)` 암호화 원리

전자 암호 화폐 `비트코인`은 게임 머니나, 카카오톡 등에서 사용하는 가상 화폐와 어떤 차이가 있는 걸까. 가장 큰 차이는 사용 범위가 매우 넓다는 점이다. 지난 2009년 비트코인이 등장한 이후, 세계의 수많은 상품 판매자들이 비트코인을 결재 수단으로 받아들이고 있다. 현재 세계 최대 온라인 쇼핑몰인 아마존과 미국의 온라인 음식 주문 사이트인 푸들러를 비롯해 다양한 곳에서 비트코인으로 상품을 구입할 수 있다.

최근에는 캐나다에서 비트코인을 현금으로 바꿔서 인출할 수 있는 현금자동입출금기가 등장해 오프라인에서도 비트코인을 자유롭게 사용할 수 있게 됐다. 또 자동차와 부동산 판매 대금을 비트코인으로 받는 곳도 있다. 아직 세계 모든 곳에서 쓰이는 것은 아니지만 음식에서부터 자동차와 집까지 비트코인으로 못하는 게 없는 셈이다.

현재 한국과 미국을 비롯한 세계 여러 나라에서 그 나라의 화폐와 비트코인을 교환하는 거래소가 운영되고 있다. 비트코인의 환전 가격은 마치 금처럼 수요에 따라 매일 달라진다. 비트코인에는 특별한 점이 있다. 화폐 시스템이 수학을 기반으로 운영된다는 점이다. 비트코인은 거래소에서 돈을 주고 환전할 수도 있지만, 돈을 들이지 않고도 수학 문제만 풀면 얻을 수 있게 설계돼 있다. 바로 이점이 비트코인 운영체계의 핵심이다.

보통 인터넷 거래를 할 때는 판매자와 소비자 사이에 은행이나 신용카드 회사 등의 금융기관이 매개체로 존재한다. 금융기관은 상품을 사는 소비자의 계좌에서 돈을 빼낸 뒤 판매자에게 전달한다. 그리고 그 내용을 통장 같은 공식적인 장부에 기록한다. 금융기관은 이처럼 거래를 중계하고 보증하는 역할을 하면서 거래 금액의 일부를 수수료로 받는다. 하지만 비트코인은 이런 구조를 따르지 않는다. 은행 없이 안전한 거래를 할 수 있도록 모든 비트코인 사용자가 거래의 증인이 되도록 하는 방식을 택했기 때문이다. 수학 문제를 푸는 것은 그 과정의 일부다.

예를 들어, 비트코인 시스템에서는 A가 물건을 구입하면서 B에게 비트코인을 보낼 때, 마치 이메일을 보내는 것처럼 받는 사람의 전자 지갑 주소와 보내는 돈의 액수만 적으면 된다. 거래 내용은 자동으로 암호로 바뀐다. 비트코인 시스템은 이같은 거래 내용을 10분 단위로 한데 모아 전체 사용자가 공유하는 장부에 기록한다. 이때 장부를 기록하는 권리와 일정 금액의 비트코인을 사용자 중 한 사람에게 주는데, 상금으로 주는 비트코인은 새로 발행되는 돈이다. 사용자들은 상금으로 걸린 비트코인을 얻기 위해 경쟁하면서 수학 문제를 풀어야 한다.

그런데, 비트코인을 얻기 위해 경쟁하는 사람들이 풀어야 하는 수학 문제란 바로 암호화된 거래 내용을 푸는 것이다. 비트코인 시스템은 ‘공개키 암호’라는 방식으로 거래 내용을 암호화 하는데, 공개키 암호란 한마디로 암호를 만드는 방식과 푸는 방식이 다른 암호 체계다. 수학 못하는 사람 어디 서러워서 살겠나, 이거 참~...

예를 들어 다양한 공개키 암호화 방식 중에서 ‘RSA’라고 부르는 방식은 자연수로 이루어진 ‘공개키’를 이용해서 메시지를 암호화 한다. 그리고 이 메시지를 복원하기 위해서는 곱했을 때 공개키가 되는 두 소인수인 ‘비밀키’를 알아야 한다. 이 소인수를 찾기 위해서는 특별한 공식이 있는 것이 아니라 공개키의 소인수 조합을 하나씩 검토해 봐야 한다. 만약 공개키의 자리수가 100자리만 넘어가도 슈퍼컴퓨터로 몇 만 년이나 계산해야 할 만큼 시간이 오래 걸리기 때문에 안전한 암호가 된다.

이처럼 공개키 암호화 방식은 기본적으로 암호를 풀기 위해 수많은 경우의 수 조합을 검토해야 한다. 따라서 비트코인을 얻고자 하는 사람은 컴퓨터를 이용해서 암호 문제 풀이에 도전해야 한다. 수많은 계산과 검토 끝에 문제를 푸는 사람이 비트코인을 얻게 된다는 점은 마치 광부가 광산에서 곡괭이질을 거듭한 끝에 금을 캐내는 것과 비슷하다. 따라서 사람들은 비트코인을 얻는 과정을 ‘비트코인 채굴’이라고도 부른다.

이렇게 컴퓨터를 이용한 문제 풀이 경쟁 끝에 암호화된 10분 동안의 거래 기록을 풀어낸 사람은 그 내용을 장부에 기록하고, 모든 비트코인 사용자들에게 발표한다. 그리고 그 사람은 새로 발행된 비트코인을 받게 된다. 이때 새로 발행되는 비트코인의 액수 또한 수학적으로 계획돼 있다는 점이 비트코인의 또 다른 특징이다.

비트코인이 처음 만들어진 2009년부터 4년 동안은 매 10분마다 문제를 푸는 사람에게 50비트코인을 발행했다. 하지만 그 이후부터는 4년 단위로 발행량이 절반씩 줄어들도록 했다. 그리고 현재는 10분마다 25비트코인이 발행되고 있는데, 이 금액은 점점 줄어서 2040년이 되면 총 2,100만 비트코인을 끝으로 발행이 끝나게 된다. 그 이후부터는 시중에 유통되고 있는 비트코인 사용자들이 조금씩 내는 수수료를 통해 비트코인 장부를 기록하는 사람에게 수수료를 지급하도록 되어 있다.

이런 비트코인의 수학적인 특징 덕분에 모든 사용자가 거래 내용이 기록된 장부를 가지고 있게 되어 장부를 조작할 수도 없고, 비트코인을 이중으로 사용할 수도 없다. 이처럼 비트코인 시스템은 거래와 거래 기록, 그리고 발행량 조절을 모두 수학적으로 연결해 안전한 화폐 구조를 만든 최초의 수학 기반 화폐다.

그렇다면 비트코인을 암호화하는 방법에는 어떤 것이 있는지 알아보자. 컴퓨터와 같은 전자기기를 이용한 통신 환경은 허락받지 않은 공격자가 통신 중인 정보를 도청하여 변조하거나 다른 내용을 삽입 또는 삭제할 수 있다. 이런 문제점을 해결하는 가장 안전한 방법은 정보를 암호화하는 것이다. 암호화된 정보를 원래대로 되돌리는 것을 복호라고 한다. 정보를 암호화하는 방법은 크게 비밀열쇠방식과 공개열쇠방식이 있다.

비밀열쇠방식은 보내고자하는 정보를 암호화할 때, 암호화하는 열쇠와 복호하는 열쇠가 서로 대칭이다. 즉, 정보를 보내는 쪽이나 받는 쪽 중에서 하나의 열쇠만 알면 다른 쪽의 열쇠를 알 수 있다. 예를 들어 a라는 정보를 보내는 경우를 생각해 보자. 정보를 보내는 송신자는 a를 암호화하기 위하여 a에 2를 곱해서 2a를 만들었다면 송신자의 암호화열쇠는 2이다.

또 a라는 정보를 받아야할 수신자는 2a라는 정보를 받았으므로 이것을 복호하려면 여기에 1/2을 곱해야 한다. 그래서 2a x 1/2=a라는 정보를 받는다. 즉, 수신자의 복호열쇠는 송신자의 암호화열쇠 2의 역수인 1/2이다. 여기서

송신자의 암호화열쇠가 공개되면 수신자의 복호열쇠도 바로 알 수 있기 때문에 정보는 안전하게 보호되지 못한다.

공개열쇠방식은 보내고자하는 정보를 암호화할 때, 암호화하는 열쇠와 복호하는 열쇠가 서로 대칭이 아니다. 즉, 정보를 보내는 쪽의 암호화열쇠와 받는 쪽의 복호열쇠가 다르기 때문에 암호화열쇠를 공개하여도 암호화된 정보가 무엇인지 알기는 매우 어렵다. 송신자가 정보 a를 공개열쇠방식으로 수신자에게 보낼 경우를 대강의 예로 들어보자.

먼저 정보를 받을 수신자는 어떤 두 소수(1과 자기 자신만으로 나누어 떨어지는 1보다 큰 양의 정수)의 곱 4067351을 이용하여 송신자에게 정보를 암호화해서 보내달라고 요청한다. 그러면 송신자는 공개된 암호화열쇠 4067351을 이용하여 정보 a를 b로 암호화하여 수신자에게 보낸다. 이때 송신자는 공개된 수 4067351만을 이용하여 a를 b로 암호화한다.

수신자는 4067351의 두 소인수(어떤 정수를 소수만의 곱으로 나타낼 때의 각 인수)를 이용하여 받은 암호문 b를 a로 복호한다. 암호화된 정보가 송신자로부터 수신자로 전달되는 사이에 공격자가 암호 b를 탈취하더라도 4067351이 어떤 두 소수의 곱으로 이루어져 있는지 알 수 없기 때문에 b를 a로 바꿀 수 없다.

공개열쇠방식은 두 소수(1과 그 수 자신 이외의 자연수로는 똑 떨어지게 나눌 수 없는 자연수) p,q가 주어졌을 때, 그 두 소수의 곱 m(=pq)은 쉽게 구할 수 있지만 어떤 두 소수의 곱 m이 주어졌을 때 m이 어떤 두 소수의 곱인지 알기 어렵다는 것에서 착안한 방법이다. 즉,

공개열쇠방식은 누구나 한쪽 방향으로는 쉽게 들어갈 수 있어도 특정한 사용자 이외에는 되돌아올 수 없는 이른바 덫문(trapdoor)과 같은 장치가 마련되어 있다.

이와 같은 원리를 기초로 정보를 암호화하여 보호하는 방식이 비트코인을 주고받을 때 사용되는 공개열쇠암호방식이다. 두 소수의 곱 m을 공개할 때는 두 소수 p,q가 각각 100자리 이상인 소수를 사용한다. 실제로 공개열쇠암호방식이 처음 발표되었던 1977년에 사용한 m은 다음과 같다.

m=114381625757888867669235779976146612010218296721242362562561842????935706935245733897830597123563958705058989075147599290026879543541

그 당시 알려진 인수분해 알고리즘을 이용하여 m을 인수분해 하는데 4천조 년이 걸릴 것으로 예상했으나 1994년에 개량된 인수분해 알고리즘이 발표되어 다음과 같은 m의 두 소인수 p,q를 구했다.

p=3490529510847650949147849619903898133417764638493387843990820577
q=32769132993266709549961988190834461413177642967992942539798288533

따라서 비트코인에서 사용하는 공개열쇠암호방식에는 보다 더 큰 소수들이 필요하게 되었고, 오늘날에는 앞의 p,q보다 훨씬 큰 소수를 이용하고 있기 때문에 사이버공간에서 비트코인으로 거래를 할 수 있는 것이다.

참조 싸이트

http://100.daum.net/encyclopedia/view/81XXXXXXXX20
http://100.daum.net/encyclopedia/view/73XXXXKS5414