유치원생도 이해할 수 있는 밈블윔블

Min Seo Park
BEAM Korea
Published in
12 min readAug 5, 2019

밈블윔블의 기본 원리를 누구나 쉽게 이해할 수 있게 설명했습니다.

Mimblewimble(밈블윔블)! 이름부터 약간은 우스꽝스러운 이것은 블록체인 상에서 개인정보를 최대한 가려주는 기술입니다. 이 이름은 해리포터에서 나오는 주문에서 따온 것인데, 그 주문에 걸리면 비밀을 말할 수 없게 됩니다.
(말하려고 하면 혀를 꼬아버립니다.)

<읶쓰뻭토 뻬뜨로ㄴ…>

사토시 나카모토의 비트코인 백서에도 ‘Privacy’라는 제목을 가진 섹션이 있습니다. 하지만 나카모토 스스로도 개인 정보보호의 측면에서 봤을 때 비트코인의 한계점에 대해서 인지하고 있었고 이를 매우 현실적인 자세로 받아들였습니다.

그리고 이 한계점은 악의적인 사용자들이 비트코인이 흘리는 데이터를 이용하는데 있어서 더 수월해진 후 심각해 졌습니다. 이는 ‘비트코인은 실제 이름을 드러내지 않기 때문에 프라이버시를 지킨다’고 생각했었던 사람들에게는 충격적으로 다가왔습니다.

비트코인은 어떠한 데이터를 공개하고 있고 왜 그러는지 알아봅시다 -

비트코인은 2가지 요건을 충족시키기 위해서 3가지 정보를 공개합니다.

<터벅터벅터버ㄱ…>

비트코인은 매 거래마다 3가지 정보를 공개합니다.

  1. 보내는 사람의 주소
  2. 거래량
  3. 받는 사람의 주소

비트코인이 이 정보들을 공개하는 것은 프라이버시를 중요시 여기지 않아서가 아닙니다. 이는 모든 금융 시스템(금, 현금)이 충족해야하는 2가지 기본 조건 때문입니다:

  1. 정확하게 송금한 양만큼 입금되어야 합니다. 내가 거래를 일으켰을때 특정 주소로 1코인을 보냈는데 2코인이 입금되면 그 시스템은 무너집니다. 내가 타인에게 5유로를 지급하면, 5유로만 타인의 손에 들어가야 합니다. 거래를 과정에서 돈이 추가로 생기거나 없어지지 않아야 합니다.
  2. 화폐의 소유자만이 그것을 이용해 거래를 일으킬 수 있습니다.
    저는 타인의 은행 계좌를 이용하여 거래를 발생시킬 수 없습니다. 오직 주인만이 할 수 있습니다. 거래를 발생 시키려면 해당 카드나 계좌 비밀 번호 PIN 번호의 주인이 이를 실행 했다는 것을 증명해내야 합니다.
    암호화폐의 경우에는 개인키가 되겠습니다.

비트코인은 3가지 정보를 공개하면서 2가지 요건을 충족시킵니다.

비트코인의 거래는 거래량과 받는 사람의 주소를 그대로 포함하고 있습니다. 이로써 첫번째 요건은 충분히 만족했습니다; 거래에 5개의 비트코인이 투입되고 정확히 5개가 나감을 볼 수 있습니다.

두번째 요건을 만족하기 위해 비트코인은 개인키에 상응하는 공개 주소를 사용합니다. 그 공개키로는 잔고도 확인할 수 있게 됩니다. 송신자는 개인키로 서명을 만들고 거래에 서명합니다. (한번 더 강조하지만, 거래에는 거래량과 받는 사람의 주소가 그대로 적혀있습니다.)

누구나 해당 공개키와 쌍을 이루는 개인키로부터 형성된 서명 이라는 사실을 확인할 수 있습니다 ; 이를 통해 우리는 올바른 사람이 거래를 생성 했다는 사실을 알 수 있게 됩니다.

제가 주장하고자하는 바는 이것입니다.

밈블윔블은 금융시스템이 필요로 하는 조건 2가지를 충족하는 동시에 3개의 정보 중 하나도 노출시키지 않는다는 것입니다.

이제 10살 짜리 많이 잡아도 12살 짜리도 이해할 수 있는 간단한 수학으로 이 프로토콜을 설명해 보려고 합니다.

곱하기는 쉽지만, 분해는 어렵죠.

많은 사람들은 수식의 ‘수’자만 봐도 그냥 넘겨버리려고 합니다.
글쎄, 과연 이 정도 수학도 어려울까요?

만약 종이와 펜을 주면서 2분 안에 풀어봐 라고 한다면, 여기있는 모든 것들을 풀 수 있을 것입니다. 곱셈을 하는 것은 누구에게나 꽤 쉽습니다.

그런데 여기서 한가지를 살짝 바꿔보겠습니다.

물음표의 위치를 옮기는 것입니다 :

자 다시 한번 풀어보시죠. 과연 풀 수 있을까? 아마도! 아닐 것입니다.

바뀐 것은 단 한가지입니다. 계산이 진행되는 방향입니다. 하지만 이 단순한 변화로 난이도는 엄청나게 올라갑니다.

(이번 글에서는 8과 23, 이러한 간단한 숫자들을 이용합니다. 특별한 이유는 없고 그냥 설명하고 이해하기 쉽기 때문입니다. 실제로는 이러한 숫자를 사용하지 않습니다, 엄청나게 큰 숫자를 사용합니다. 사실 컴퓨터는 4221 이 어느 숫자들이 곱해져서 만들어졌는지 정도는 쉽게 알 수 있는데, 아무리 성능 좋은 컴퓨터라도 여러개를 섞어서 곱하면 쉽게 알아낼 수 없습니다.)

이 글은 최대한 개념을 간단하게 설명하는 것이 목적이기에 타원 곡선 등에 대해서는 논하지 않겠습니다. 실제로, 암호화를 할 때는, 아무 숫자를 사용하지는 않습니다. elliptic curve points 라고 불리우는 것들을 사용합니다.

그래도 그 기본적인 원리는 똑같습니다 : 곱하기는 쉽지만, 그 반대인 분해는 어렵다는 것입니다.

정보를 숨기면서 소유권을 검증하는 방법

자 이제 제가 물음표에 들어간 숫자를 물어보려고 합니다.

…아마도… 쉽게 구하지는 못 할 것입니다. 물음표가 왼쪽에 있으면 보통 조금 구하기 힘듭니다. 이 역시 쉽지는 않을 것입니다.

그냥 정답을 말하겠습니다. 23과 83입니다. 한번 확인해보시죠.

정말 23과 83이 맞을까요? 맞는지 확인하는 과정은 그냥 곱셈만 하면 됩니다. 모두가 아는 것처럼 곱셈은 상당히 쉽습니다.

답을 아는 상태에서 곱하기를 하는 것은 상당히 쉽습니다.
계산해보면, 바로 알 수 있기 때문입니다.
보나마나 결과는 20,348,031 이 나옵니다 :

만약 제가 거짓말을 했다면, 금방 알아챌 수 있을 것입니다. 계산을 한 결과 우변에 나온 값과 비교해보면 되기 때문이죠. 물음표에 들어가는 값에 대해서는 거짓말을 할 수가 없습니다.

즉, 물음표 안의 숫자를 직접 구하기는 어렵지만 그 결과에 대한 검증은 상당히 쉽습니다.

검증을 하는 과정 즉, 곱셈은 10살 짜리 아이도 할 수 있는 간단한 문제입니다.그러나 이는 동시에 중요한 2가지를 이루어냅니다.

첫째, 우리는 거래 정보를 가립니다 : 거래량에 알려지지 않은 숫자 곱함으로써 숨길 수 있습니다. 그리고 이는 분해는 어렵다는 특징을 이용하였습니다.

둘째, 개인키를 소유한 사람이 거래를 일으켰다는 것이 증명됩니다: 이는 오직 곱하기의 결과값을 보여줌으로써 가능해집니다. 이 역시, 곱셈의 기본 속성을 이용하였습니다.

거래량 가리기

방금 위에서 언급 하였듯이, 미지의 큰 숫자를 곱하여 정보를 가릴 것입니다. 비트코인이 노출시키는 3개의 정보 중 하나는 거래량입니다. 비트코인에서는 5 코인을 보내면 이 내용이 그대로 ‘5’라고 기록됩니다. 밈블윔블은 그렇지 않습니다.

자 아래의 식을 봅시다 :

아주 정확하지는 않지만, 위의 식은 밈블윔블에서 거래량이 어떤 방식으로 처리되는지 보여줍니다.

밈블윔블에서는, 송, 수신자가 각각 이와 같은 숫자를 각각 가지고 거래에 참여합니다 :

이것을 페데르센 계산법 (Pedersen commitment) 이라고 부릅니다; 알아둬야할 점은 여기에 거래량과 개인키 부분을 포함되어 있다는 것입니다.(다시 말하지만, 미지의 큰수와 곱셈을 하여 직접적으로 드러나지 않습니다.)

보내는 사람과 받는 사람 모두가 거래를 생성할 때 참여합니다. 비트코인과는 약간 다릅니다. 거래를 진행하려면 받는 사람의 주소가 필요하기는 합니다. 더 정확히 하자면 수신자의 주소가 직접적으로 필요하지 않고, 송신자가 수신자에게 거래를 보낼 방법이 필요합니다.

하지만, 이 부분 역시 다른 방법을 사용하여 가리려고 합니다. Beam 은 Beam 블록체인과는 별개로 BBS 시스템을 사용합니다. 이는 송신자와 수신자가 페데르센 계산법을 이용하여 거래할 수 있게 합니다. (추후에 BBS System 에 대해서 작성하려고 합니다.)

(수수료 개념은 뺐습니다. 실제로 거래할 때는 채굴자들에게 부여되는 수수료가 필수입니다. 또한 rangeproof, 한국말로는 ‘범위증명’에 대한 부분도 뺐습니다. 범위 증명은 거래에 투입되는 수가양수인지를 확인하는 것입니다. 예를 들어 -5 만큼을 보낸다고 한다면, 내 지갑에는 원칙상 5가 생기게되는데, 이는 시스템에 혼란을 야기할 것입니다. 그래서 항상 음수가 아닌지 확인합니다.)

2개의 숫자를 제 3의 숫자에 곱하기 (분배법칙)

이제 부터는 약간 더 어려운 수학을 사용해보려고 합니다

자 2와 4를 각각 3과 곱하고 그 결과를 더하려고 합니다. 하지만, 굳이 따로 곱할 필요 없이 2,4를 합친 후 3에 곱해도 됩니다. 결과는 똑같기 때문입니다.
2와 3을 곱한 결과 6, 4와 3을 곱한 결과 12. 둘을 더하면 18입니다.
2,4를 합쳐 나온 6과 3을 곱한 결과 역시 18입니다.

요지는 이것입니다. 2개의 숫자를 제 3의 숫자에 곱하려고 할 때 2가지 방법이 있다는 것입니다.

첫째, 둘을 더하고 제 3의 숫자에 곱하는 거나,
둘째, 각각 곱하고 더해주는 것입니다.
어찌되었던, 결과는 같습니다.

들어온 금액과 나가는 금액은 항상 같아야 합니다.

금융 시스템에서 지켜져야할 필수요건 중 하나는 보낸 금액과 받은 금액이 일치해야한다는 것이었습니다. 내가 당신에게 5만큼을 주면, 내 손에서는 5가 떠나가고 당신의 손에는 5만큼이 들어와야 합니다.

보낸값과 받은값 둘을 빼면 5–5 = 0 이 나오게 됩니다.

1개의 밈블윔블 거래는 2개의 페데르센 계산법으로 이루어져 있습니다. :
1개는 거래에 보내는 사람(입력값 , input)을 위한 것이고 또다른 하나는 받는 사람(출력값, output)을 위한 것입니다:

예를 들어, 송신자가 5만큼을 보내면 수신자는 5만큼을 받습니다 :

계산을 할 때 입금액을 큰 숫자와 곱하고 출금액을 큰 숫자와 곱하는 식으로 따로, 할 수도 있지만, 아래처럼 합치려고 합니다:

5 빼기 5는 0입니다. 큰 수를 여기에도 곱해도 여전히 그 결과는 0일 것입니다. 그리고 아래 것들만 남게 됩니다 :

아니면 그냥 이렇게 표현할 수 있습니다:

거래량은 이제 사라졌습니다! 큰 숫자와 곱해져서 거래량이 정확히 어떤 값인지 밝히지 않은 상태에서 이를 합쳐 0이 나오는 것을 확인할 수 있습니다.

거래량 부분이 사라진 이유는 거래를 하는데 있어서 입금액과 출금액이 같기 때문입니다. 만약 이 둘이 같지 않아서, 0이 되지 않는다면 아래와 같이 key 부분(key-part)이 아닌 다른 부분(amount-part)이 같이 남게 될 것입니다.

동시에, 거래 kernel 은 더이상 개인키 23과 83으로 나누어지지 않게 됩니다. Beam 프로토콜 에서는 이를 오작동으로 인식합니다.

(거래량 부분이 0이 되지 않았는데도 kernel이 23과 83으로 나눠지는 일이 생기기도 합니다. 1909가 대표적으로 그렇습니다. 이는 상대적으로 작은 숫자를 사용하고 있기 때문에 가능한 것입니다. 실제 컴퓨터에서 연산할 때 사용되는 큰 숫자라면 이러한 일이 발생할 확률은 0에 가깝게 됩니다.)

자 이제 거래량 부분은 사라졌고 key 부분만 남아있습니다.

이는 송신자와 수신자의 개인키를 포함하여 여러개의 큰 숫자를 곱해서 나온 엄청나게 큰 수 입니다. 겉으로 보기에는 알 수 없지만, 개인키로 나눠짐을 통해서 해당 개인키가 포함되어 있다는 사실을 증명할 수 있을것입니다.

거래 kernel 이 개인키로 나누어지는데에는 2가지 이유가 있을 것 같습니다 :

  1. 거래량 부분이 0으로 나왔기 때문입니다.
  2. 키 부분이 개인키(예시에서는 83,23)를 포함한 여러개의 숫자의 곱셈으로 이루어졌기 때문입니다.

이 2가지는 위에서 언급한 금융 시스템의 필수조건 2가지 입니다.

  1. 거래 부분이 0이 되었다는 것은 입금된 금액과 출금된 금액을 뺐을 때 0이 되었다는 것입니다. 다시 말하자면, 입금액과 출금액이 같다는 것입니다. 거래 중, 돈이 생기지도 없어지지도 않았다는 것입니다. 이는 미지의 큰수를 곱하여 가린 후, 그 둘을 더해서 0으로 만들어서 없애는 방식으로 달성했습니다.
  2. 개인키의 소유자가 거래를 발생시켰는지가 검증되었습니다. 송신자는 거래 kernel 에 키를 나눠 넣음으로써 증명해냈습니다.

밈블윔블 은 분명히 비트코인의 목표를 그 자체보다 더 분명히 더 잘 달성합니다. (개인정보보호의 측면에서). 비트코인 상에 난독화를 추가한 다른 프라이버시 코인들과는 다르게, 밈블윔블은 cutting 을 통해서 이를 달성합니다.

Beam 은 지금도 열심히 개발되어 가고 있습니다. 더 재미있는 일들을 많이 만들어가려고 합니다.

본 글은 원문을 번역한 글입니다. 글은 Beam Ambassador ‘중앙대학교 블록체인 학회 C-Link’ 가 작성하였습니다.

저희 C-Link는 지속적으로 Mimblewimble 기술에 대한 분석과 Beam 의소식을 빠르고 정확하게 전달할 예정이며, 이를 넘어서 Beam 프로젝트에 개발에도 직접 기여할 것입니다.

앞으로도 Beam Ambassador ‘C-Link’ 의 활약을 기대해주십시오.

Facebook: https://www.facebook.com/CAUCLink

Beam 프로젝트 website

Join Beam’s developer community:
Gitterhttps://gitter.im/beamprivacy/Lobby?

Telegram: t.me/BeamPrivacy

Reddit: reddit.com/r/beamprivacy/

Twitter: twitter.com/beamprivacy

Discord: discord.gg/BHZvAhg

--

--

Min Seo Park
BEAM Korea

Interested in Blockchain, Project Financing and Smart city and Love DJing and EDM