[MATH] 비트코인의 암호화 원리

by 파시스트 posted Aug 01, 2018
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
국제 수학자대회가 2014년 서울에서 개최됩니다. 이를 기념해 과학향기에서는 올 한 해 동안 매월 1편씩 [MATH]라는 주제로 우리생활 속 다양한 수학을 소개하는 코너를 마련했습니다. 기초과학의 꽃이라 불리는 수학이 우리 생활에서 얼마나 중요한 역할을 하는지, 또 우리 주변에 얼마나 많은 수학 원리들이 존재하는지를 이야기로 꾸며 매월 셋째 주 월요일에 서비스할 예정입니다. 과학향기 독자 분들의 많은 관심 부탁드립니다.

컴퓨터와 같은 전자기기와 인터넷이 발전하며 우리는 여태까지 상상하지도 못했던 것들을 직?간접적으로 경험할 수 있게 됐다. 현실에서는 가난하지만 사이버 세계에서는 부자가 될 수 있는 것도 그중 하나이다. 그런데 예전에는 사이버세계에서 부자는 현실세계의 부자가 되지 못했지만 요즘은 사이버세계의 부자가 현실세계의 부자로 전환될 수 있는 방법이 등장했다. 바로 비트코인(Bitcoin)을 통하여!

비트코인은 2009년에 ‘나가모토 사토시’라는 익명의 프로그래머에 의하여 개발된 가상의 화폐이자 이 화폐가 작동하는 방식이다. 쉽게 말해 ‘싸이월드 도토리’, ‘네이버 캐시’, ‘카카오톡 초코’와 같이 실제 돈은 아니지만 물건을 사거나 서비스 이용료를 결제할 수 있는 돈이다. 그런데 이런 돈과 비트코인의 가장 큰 차이점은 발행처이다. 현실세계에서 사용하는 실물화폐는 화폐의 거래를 담당하고 통화량을 조절하는 은행이 있다. 이를테면 우리나라의 경우 한국은행이 그런 은행이다. 또 ‘싸이월드 도토리’, ‘네이버 캐시’, ‘카카오톡 초코’ 등도 발행하는 곳과 사용하는 곳이 분명하다. 그러나 비트코인은 사용처는 있으나 발행처나 통화량을 조절하는 관리기관이 없다. 즉, 비트코인은 누구나 발행할 수 있고 누구나 사용할 수 있는 신개념의 화폐이다.

우리는 은행을 통해 돈을 이체하거나 우리나라 돈을 다른 나라 돈으로 바꾸려면 수수료를 내야 한다. 심지어 거래하고 있는 은행의 내 돈을 다른 은행이 운영하는 ATM기기를 이용하여 찾을 때도 비싼 수수료를 낸다. 반면 비트코인은 은행이나 환전소를 거치지 않고 당사자들끼리 직거래를 하기 때문에 수수료가 낮거나 없다는 장점이 있다. 하지만 사이버공간에서 직거래는 돈은 지불했는데 물건을 보내주지 않는 것과 같은 사고와 사기의 위험이 따른다. 따라서 가상의 화폐인 비트코인으로 거래를 할 때는 반드시 거래에 대한 신뢰가 필요하다. 그렇다면 비트코인을 암호화하는 방법에는 어떤 것이 있는지 알아보자.

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

비밀열쇠방식은 보내고자하는 정보를 암호화할 때, 암호화하는 열쇠와 복호하는 열쇠가 서로 대칭이다. 즉, 정보를 보내는 쪽이나 받는 쪽 중에서 하나의 열쇠만 알면 다른 쪽의 열쇠를 알 수 있다. 예를 들어 a라는 정보를 보내는 경우를 생각해 보자. 정보를 보내는 송신자는 a를 암호화하기 위하여 a에 2를 곱해서 2a를 만들었다면 송신자의 암호화열쇠는 2이다. 또 a라는 정보를 받아야할 수신자는 2a라는 정보를 받았으므로 이것을 복호하려면 여기에 1/2을 곱해야 한다. 그래서 2a x 1/2=a라는 정보를 받는다. 즉, 수신자의 복호열쇠는 송신자의 암호화열쇠 2의 역수인 1/2이다. 여기서 송신자의 암호화열쇠가 공개되면 수신자의 복호열쇠도 바로 알 수 있기 때문에 정보는 안전하게 보호되지 못한다.

비밀열쇠방식
그림 1. 비밀열쇠방식


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

먼저 정보를 받을 수신자는 어떤 두 소수(1과 자기 자신만으로 나누어 떨어지는 1보다 큰 양의 정수)의 곱 4067351을 이용하여 송신자에게 정보를 암호화해서 보내달라고 요청한다. 그러면 송신자는 공개된 암호화열쇠 4067351을 이용하여 정보 a를 b로 암호화하여 수신자에게 보낸다. 이때 송신자는 공개된 수 4067351만을 이용하여 a를 b로 암호화한다. 수신자는 4067351의 두 소인수(어떤 정수를 소수만의 곱으로 나타낼 때의 각 인수)를 이용하여 받은 암호문 b를 a로 복호한다. 암호화된 정보가 송신자로부터 수신자로 전달되는 사이에 공격자가 암호 b를 탈취하더라도 4067351이 어떤 두 소수의 곱으로 이루어져 있는지 알 수 없기 때문에 b를 a로 바꿀 수 없다.

공개열쇠방식
그림 2. 공개열쇠방식


공개열쇠방식은 두 소수(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보다 훨씬 큰 소수를 이용하고 있기 때문에 사이버공간에서 비트코인으로 거래를 할 수 있는 것이다.

그런데 앞에서 주어진 수 4067351의 두 소인수는 무엇일까?

답 : p=1733,q=2347 ←마우스로 드래그하면 정답 확인 가능


출처 - http://scent.ndsl.kr/site/main/archive/article/math-비트코인의-암호화-원리






Articles

2 3 4 5 6 7 8 9 10 11