mexc 거래수수료할인 가입하기 – 가입 추천인코드 : 1Xici
광풍에 가까웠던 비트코인 열풍이 이제는 조금 사그라들었지만, 그 과정에서 비트코인과 블록체인 기술은 우리 사회에 조금씩 녹아들었습니다. 하지만 우리는 비트코인과 블록체인 기술의 가치만 알뿐, 그 기술이 어떤 건지는 정확히 모르고 있습니다. 워낙에 어렵기도 하고, 지금도 실시간으로 발전하고 있는 기술이기 때문일 것입니다. 비트코인을 이루는 핵심 기술 중 ‘타원곡선 암호’라는 것이 있습니다. 수학의 분야 중 대수기하학에서 중요한 연구 대상인 타원곡선의 개념을 이용한 암호지요. 지금부터 타원곡선 암호가 무엇인지, 또 비트코인에 어떻게 이용되는지를 알아보겠습니다! 타원곡선이름만 타원인 곡선 타원곡선은 그 이름과는 다르게 타원과는 별 관련이 없습니다. 역사적인 맥락에서 지어진 이름인데, 타원곡선이 타원의 둘레를 구하기 위한 적분에서 처음 등장하여 이런 이름이 붙었습니다. 하지만 타원곡선 연구가 계속되면서, 수학자들은 타원곡선 자체가 매우 중요하다는 것을 알아냈습니다. 타원곡선은 대수기하학과 정수론 분야에서 매우 중요합니다. 수학의 여러 난제들과도 관련이 있는데, 페르마의 마지막 정리가 타원곡선을 이용해서 해결된 것으로 유명합니다. 그 밖에도 밀레니엄 문제 중 버츠-스위너톤-다이어 문제가 타원곡선과 관련이 있습니다. 타원곡선의 방정식 타원곡선은 위의 방정식으로 정의되는 모든 곡선을 말하며, a와 b의 값에 따라 모양이 달라집니다. 아래 그림에서 여러 타원곡선의 모양을 볼 수 있습니다. 수학자들은 여러 타원곡선이 서로 어떻게 다른지를 연구하기도 하고, 모든 타원곡선이 만족하는 법칙을 찾기 위해서도 노력합니다. 여러 타원곡선의 모양 (출처: 위키백과) 지금까지 타원곡선이 무엇인지, 어떻게 생겼는지 알아보았으니 이제 타원곡선 암호의 원리로 다가갈 차례입니다. 타원곡선 암호는 타원곡선이 가지고 있는 매우 독특하고 재밌는 성질을 이용해 만들어집니다. 타원곡선의 점들을 연산해 보자 타원곡선이 가지는 독특한 성질은 바로 타원곡선 위의 점들끼리 서로 연산할 수 있다는 점입니다. 수도 아닌 점들끼리 대체 어떻게 연산을 할 수 있는가 하고 생각하실 수 있지만, 수학에서는 사칙연산보다 훨씬 더 다양한 연산을 사용합니다. 연산이란 본질적으로 수학적 대상 두 개를 조합하여 새로운 수학적 대상을 만드는 규칙입니다. 그러니 점과 점을 조합해서 새로운 점을 만들면 그것이 바로 점 사이의 연산인 것입니다. 그러면 지금부터 타원곡선 위의 점들끼리 연산할 때의 규칙을 알아보겠습니다. 타원곡선 위의 점 A와 B는 다음의 순서로 연산할 수 있습니다. 첫 번째, 두 점을 잇는 직선을 찾습니다. 두 번째, 그 직선과 타원곡선의 교점 C를 찾습니다. 마지막으로, 그 교점과 x축에 대해 대칭되는 점 C’을 잡으면 끝입니다. 이 점 C’이 A와 B를 연산한 결과입니다. 연산 기호를 뭐로 쓰든 상관은 없습니다. 하지만 수학자들은 이 연산이 덧셈과 가장 비슷하다고 생각하고, 그냥 덧셈 기호로 표시하기도 합니다. 이후에 나올 내용인데, 이 연산이 ‘아벨군’이라는 것을 이룬다는 사실 때문입니다. 하지만 그냥 덧셈 기호를 쓴다면 다른 것들과 헷갈릴 수 있으니 이 글에서는 A#B=C’과 같이 쓰도록 하겠습니다. 타원곡선의 점들끼리의 연산 (이미지 출처: 위키백과에서 발췌 후 수정) 알아두어야 할 특수한 경우가 딱 두 가지 있습니다. 한 가지는 서로 같은 점 두 개를 연산할 때, 즉 A=B 일 때입니다. 이때는 두 점을 잇는 직선을 그릴 수가 없어 연산의 첫 번째 단계에서 두 점을 잇는 직선이 아니라 A를 지나는 접선을 사용합니다. 다른 한 가지는 A와 B가 x축에 대해 서로 대칭일 때입니다. 이때는 두 점을 잇는 직선이 타원곡선과 다시 만나지 않습니다! 오직 A와 B가 서로 대칭일 때만 이런 일이 발생합니다. 이런 경우를 위해 타원곡선에 실제로는 없는 가상의 점 E를 하나 추가하고, x축에 대해 대칭인 두 점을 연산한 결과는 항상 E가 되도록 정의합니다. 그리고 임의의 점 A와 E를 연산한 결과는 항상 A가 되도록 정의합니다. 특수한 경우의 연산 (이미지 출처: 위키백과에서 발췌 후 수정) 타원곡선의 점들은 아벨군을 이룬다 새로운 연산을 정의할 때 수학자들이 주로 확인하는 성질이 있습니다. 항등원의 존재성, 역원의 존재성, 결합법칙과 교환법칙의 총 4가지 성질입니다. 이 4가지 성질을 모두 만족할 경우 ‘아벨군’이라는 이름이 붙는데, 이것은 수학적으로 매우 좋은 구조입니다. 우선은 이 성질들이 무엇인지 알아보고, 타원곡선의 점들 사이의 연산이 이들을 만족하는지 확인해 보겠습니다. 항등원이란 A와 연산하면 A가 되고, B와 연산하면 B가 되는 식으로 어떤 것과 연산해도 자기 자신이 되는 것을 말합니다. 타원곡선 위에도 이런 점이 있었는데요, 바로 가상의 점 E입니다. 즉 타원곡선 위에서의 연산 #에는 항등원이 존재합니다. 어떤 대상의 역원이란 그 대상과 연산했을 때 항등원이 되는 대상을 말합니다. 타원곡선 위에서는 점 A의 역원은 점 A와 x축에 대해 대칭인 점 A’입니다. 따라서 타원곡선 위에서의 연산 #에는 역원이 존재합니다.교환법칙은 연산할 때 순서를 바꿔도 된다는 성질입니다. 즉 A#B와 B#A가 서로 같은지를 확인하는 것입니다. 사칙연산을 예시로 들면, 덧셈과 곱셈은 순서를 바꿔도 되지만 뺄셈과 나눗셈은 순서를 바꾸면 안 됩니다. 즉 덧셈과 곱셈은 교환법칙을 만족하지만, 뺄셈과 나눗셈은 그렇지 않은 것입니다. 타원곡선에서의 경우를 생각해 보겠습니다. A#B의 경우에는 A와 B를 잇는 직선을 이용하여 연산합니다. 그리고 B#A는 B와 A를 잇는 직선을 이용합니다. 당연히 두 직선은 서로 같고, 따라서 A#B와 B#A는 같게 됩니다. 그러므로 타원곡선 위에서의 연산 #은 교환법칙을 만족합니다. 마지막으로 결합법칙입니다. 결합법칙은 연산을 연달아서 두 번 행할 때 어느 것을 먼저 해도 상관이 없다는 성질입니다. 다시 말하면 (A#B)#C와 A#(B#C)가 서로 같다는 성질입니다. 타원곡선의 연산 #은 결합법칙을 만족한다는 것이 알려져 있습니다. 이 글에서 설명하기에는 다소 어렵고 긴 내용이라 생략하겠습니다. 이렇게 4가지 성질을 타원곡선 위에서의 연산 #가 만족한다는 것을 확인했습니다. 다시 말하면, 타원곡선 위의 점들과 연산 #은 아벨군을 이룹니다! 연산의 방법 자체가 대단히 특이한데도 아벨군이라는 좋은 구조가 성립한다는 사실에 수학자들은 깊은 관심을 가졌습니다. 이로 인하여 타원곡선은 대수 기하와 정수론 분야에서 중요한 연구 주제가 되었고, 그런 연구 끝에 타원곡선 암호가 탄생할 수 있었습니다. 비트코인 서명과 공개키 암호 타원곡선 암호는 공개키 암호의 일종입니다. 따라서 이것을 이해하기 위해서는 공개키 암호를 이해해야 합니다. 따라서 타원곡선 암호를 바로 설명하기보다는, 공개키 암호에 대하여 먼저 설명하고 비트코인에서 공개키 암호를 어떻게 쓸 수 있는지도 알아보겠습니다. 비트코인의 핵심은 보안과 투명성입니다. 둘 중에서는 투명성이 비트코인의 본래 철학에 더 가깝습니다. 비트코인은 은행이 없는 화폐입니다. 비트코인을 찍어내는 것도, 거래하는 것도, 장부에 기록하는 것도 모두 이용자의 몫입니다. 정보를 숨길 수 있는 은행이나 기관이 없으니 모든 정보가 투명하게 공개됩니다. 즉 비트코인은 투명성이 극에 달한 화폐라고 말할 수 있습니다. 그런데 여기에서 문제가 생깁니다. 장부를 모두가 기록할 수 있다면, 누군가 내가 한 적 없는 거래를 허위로 장부에 기록할지도 모릅니다. 그러면 내 비트코인이 순식간에 증발해버리겠죠. 이런 화폐 체계는 성립할 수가 없습니다. 이 문제를 해결하려면 장부에 적힌 나와 관련된 거래를 내가 기록했다고 분명히 증명할 수 있어야 합니다.기존의 은행 거래에서는 서명, 도장, 신분증 확인 등등의 방법을 활용하여 거래의 진위를 증명했습니다. 하지만 서명, 도장, 신분증은 모두 위조의 여지가 있습니다. 인터넷 세계라면 더더욱 그렇죠. 이 문제를 해결하기 위해 등장한 것이 바로 ‘공개키 암호(public key cryptography)’를 이용한 증명입니다. 공개키 암호를 이용하면 위조의 여지가 없는 완전한 증명이 가능합니다. 그리고 타원곡선 암호가 바로 이 공개키 암호의 일종입니다. 흔히 암호를 자물쇠에 비유하고는 합니다. 암호화하는 것은 자물쇠를 잠그는 것이고, 암호를 해독하는 것은 자물쇠를 푸는 것이죠. 일반적인 자물쇠는 잠글 때나 풀 때나 똑같은 열쇠를 씁니다. 기존의 암호는 대부분 이런 식입니다. 공개키 암호는 잠글 때와 풀 때 서로 다른 열쇠를 쓰는 자물쇠와 같습니다. 이런 암호는 인터넷의 대형 서버에서 나의 비밀 정보를 확인해야 할 상황에 사용할 수 있습니다. 서버는 나의 비밀 정보를 암호화해서 보관합니다. 암호를 해독하는 방법은 나와 서버만이 알아야 합니다. 그렇지 않으면 모두가 나의 비밀 정보를 확인할 수 있겠죠. 문제는 암호를 해독하는 방법이 유출될 수도 있다는 점입니다. 공개키 암호는 이런 문제를 해결할 수 있습니다.먼저 나만이 갖고 있을 비밀키와 공개해도 상관없는 공개키를 만듭니다. 그리고 서버에 공개키를 주고 나는 비밀키를 보관합니다. 이제 공개키는 잠글 때 쓰는 열쇠가 되고, 비밀키는 열 때 쓰는 열쇠가 됩니다. 즉 암호를 해독하려면 반드시 비밀키가 필요합니다. 서버는 나의 비밀 정보를 공개키를 이용해 암호화합니다. 그리고 나는 비밀키를 이용해 암호를 해독합니다. 이렇게 공개키 암호를 이용하면 정보 전달 과정에서 유출이 있어도 비밀 정보가 드러나지 않습니다. 전달된 정보는 암호화된 정보와 공개키뿐이지만 암호를 해독하려면 반드시 비밀키가 있어야 하기 때문입니다.여기서 중요한 점은 내 공개키로 암호화된 것은 내 비밀키로만 해독할 수 있다는 점입니다. 반대로, 내 비밀키로 해독됐다면 그것은 내 공개키로 암호화된 것입니다. 어떻게 보면 당연합니다. 남의 자물쇠를 내 열쇠로 열 수는 없는 법이니까요. 하지만 이 당연한 성질을 이용하면 비트코인의 문제를 완벽하게 해결할 수 있습니다. 비트코인에 필요했던 것은 나와 관련된 거래 기록이 정말로 내가 쓴 게 맞는지에 대한 증명입니다. 이를 위해 거래를 기록할 때 그냥 기록하지 않고, 내 비밀키로 암호화한 것과 함께 기록합니다. 이제 암호화한 내용을 내 공개키로 해독하여 내가 쓴 게 맞다고 증명할 수 있습니다. 해독한 내용과 원래 내용이 같다면, 내 공개키로 해독한 것이기 때문에 반드시 내 비밀키로 암호화되었어야만 합니다. 그런데 내 비밀키는 오직 나만이 갖고 있으므로 이 거래 기록을 쓸 수 있는 사람은 나밖에 없게 됩니다! 이런 방식으로 비트코인은 투명성을 구축하고 보안을 확립하며, 여러 공개키 암호 중에서도 비트코인이 쓰는 암호가 바로 타원곡선 암호입니다. 타원곡선 암호의 원리 공개키 암호의 핵심은 무엇일까요? 이름에서부터 알 수 있듯이, 공개키와 비밀키가 핵심입니다. 공개키 암호가 성립하기 위해서는 공개키와 비밀키를 마구잡이로 정하면 안 됩니다. 하나로는 잠그고 나머지 하나로는 열 수 있어야 하니 어느 정도의 규칙이 있어야겠죠. 하지만 그 규칙은 어려워야 합니다. 쉬운 규칙을 적용한다면 공개키만 보고도 비밀키를 유추해버릴지도 모르니까요. 즉 비밀키와 공개키 사이에는 서로 관련이 있어야 하지만, 공개키만 봤을 때는 비밀키를 유추할 수 없어야 합니다. 여기가 바로 수학이 등장하는 지점입니다. 공개키 암호는 대부분 수학의 난제를 이용하여 비밀키와 공개키를 정합니다. 수학에서 많은 것들이 한 방향으로는 계산하기는 쉽지만, 반대 방향으로 계산하기는 어렵습니다. 예를 들면 소인수분해가 그렇습니다. 두 소수를 곱하는 것은 쉽지만, 곱한 결과를 보고 원래의 두 소수가 무엇인지를 알아내기는 어렵지요. 이런 종류의 문제를 활용하는 것이 공개키 암호의 핵심이고, 타원곡선과 관련된 문제 중에서도 정확히 조건과 부합하는 것이 있습니다. ‘타원곡선 이산로그’라는 문제가 바로 그것입니다.타원곡선 위의 한 점 G와 어떤 정수 n을 생각합시다. 그러면 n개의 G를 연산한 값 H = G#G#…G는 빠르게 계산할 수 있습니다. n개의 G를 연산하지만 실제로 연산하는 횟수는 훨씬 적다는 것이 핵심입니다. 예를 들면 4개의 G를 연산한 값 G#G#G#G는 두 개씩 쪼개서 (G#G)#(G#G)로 계산하면 연산을 2번만 해도 됩니다. 8개의 G를 연산하려면 네 개씩 쪼개고, 네 개를 다시 두 개로 쪼개면 연산을 3번만 해도 됩니다. 이런 식으로 계속하면 100만 개의 G를 연산한 값도 스무 번의 연산만으로 계산할 수 있습니다. 따라서 n과 G로부터 H를 구하는 과정은 쉽고 빠른 과정입니다.하지만 H와 G가 주어진 상태에서 n을 구하는 것은 어렵고, 이것이 바로 ‘타원곡선 이산로그’ 문제입니다. 아직은 G를 계속 더해보면서 일일이 확인하는 것 외에는 마땅한 방법이 없습니다. 예를 들어 n이 100만이라면, G와 n을 이용해서 H를 구하는 건 20번만 연산해도 충분합니다. 하지만 G와 H를 이용해서 n을 구하려면 100만 번의 연산을 해야겠죠. 실제로는 100만은 따위로 보일 만큼 큰 n을 쓰는데, 대충 우주의 원자 개수와 비슷한 크기의 수를 쓴다고 합니다. 이러면 n과 G에서 H를 구하는 것도 엄청나게 오래 걸리지 않냐고 물으시겠지만, 전혀 그렇지 않습니다. 약 200~300번의 연산만으로 충분합니다. 한 방향으로는 계산하기 쉽지만, 반대 방향으로 계산하기가 얼마나 어려운지 감이 오시나요?이 문제를 이용해 만들어진 공개키 암호가 바로 타원곡선 암호입니다. 정수 n이 비밀키가 되고, 타원곡선 위의 점 G와 n개의 G를 연산한 값 H가 공개키가 됩니다. n이 있으면 G로부터 H를 구할 수 있지만, G와 H만 있을 때는 n을 계산할 수가 없습니다. 비밀키와 공개키가 서로 연관되어 있어야 하지만 공개키만 가지고는 비밀키를 알 수 없어야 한다는 조건에 완벽하게 부합합니다. 수학의 난제가 사회의 핵심이 되기까지 지금까지 타원곡선이 무엇인지, 비트코인에서 어떤 암호가 필요한지, 그리고 타원곡선의 성질이 어떻게 암호가 되어 비트코인에 적용될 수 있는지 알아보았습니다. 구체적인 알고리즘이나 여러 어려운 내용을 생략했음에도 상당히 어려우셨을 겁니다. 타원곡선 암호가 어렵다는 건 분명히 단점이지만, 동시에 큰 장점이기도 합니다. 암호가 어렵다는 건 그만큼 깨뜨리기 어렵다는 뜻이니까요. 그래서 타원곡선 암호는 다른 공개키 암호와 비교해 더 작은 용량을 사용해도 똑같은 수준의 보안을 유지할 수 있습니다. 보안성과 효율성 양면에서 한 발짝 앞서 있는 암호인 것입니다. 타원곡선은 대수기하학과 정수론 등 순수수학의 주요 연구 대상이었습니다. 그 과정에서 여러 난제를 풀기도 하고 남기기도 했죠. 그런 타원곡선은 이제 암호가 되어, 사회를 뒤바꾼 비트코인의 핵심 기술이 되었습니다. 이렇게 수학의 흥미에서 출발한 연구가 사회의 중요한 기술이 되는 것이야말로 수학이 품고 있는 가능성이자 아름다움이 아닐까요?