Keepit History: 익명화폐의 역사 2편

in #kr7 years ago (edited)

KakaoTalk_Photo_2017-09-05-14-57-29.png

Keepit History


안녕하세요! Keepit 입니다.
Keepit 뉴스에서 매주 화요일 새롭게 블록체인 역사 칼럼을 연재하고 있습니다. 지난 주 비트코인 믹싱서비스에 이어 이번주는 익명화폐 대쉬와 모네로를 소개해드리겠습니다.

1.익명 거래를 위하여

지난 주에는 비트코인이 익명 프로토콜이 아니고, 익명 거래의 수요에 따라 비트코인 믹싱 서비스가 생겨났다는 것을 보여드렸습니다. 하지만 믹싱 서비스는 (신뢰성이 담보되지 않는) 제 3자를 필요로 하고, 완전한 익명성을 보장해주지도 않았습니다. 모든 거래내역이 기록되는 블록체인의 특성상 믹싱이 이루어지는 흔적 자체를 감출 순 없었죠. 따라서 익명 거래를 원하는 수요는 새로운 익명 가상화폐들을 낳게 됩니다. 그 중에서 Keepit History는 오늘 Dash와 Monero에 대한 소개를 준비해 보았습니다.

2. 믹싱은 마스터노드에게 맡긴다 – Dash(Digital Cash) 편

대시.jpg

대시(Dash)는 2014년 1월 18일에 원래는 XCoin이란 이름으로 출시되었습니다. 그 후 2월 28일에 Darkcoin으로 변경됐습니다. 그리고 마침내 2015년 3월 25일에 Dash라는 브랜드로 재탄생합니다.

대시 역시 대표적인 익명 화폐로 알려져 있습니다. 대시에는 PrivateSend 라는 기능이 있어 사용자가 필요에 따라 익명 전송을 선택할 수 있습니다. 이 기능은 비트코인 믹싱 중 코인조인의 아이디어를 계승했습니다. 다만, 코인조인의 믹싱 원리는 P2P믹싱이라면, 대시의 믹싱 원리는 사용자가 보낸 대시를 마스터노드가 대신 섞어주는 마스터노드 믹싱입니다. P2P믹싱은 사용자들끼리 합의한 주소에서 각자의 비트코인을 섞는 방식이라면, 마스터노드 믹싱은 사용자들이 마스터노드에게 보낸 대시를 마스터노드가 대신 섞어주는 방식입니다. 코인조인 서버의 역할을 마스터노드가 대신하는 것입니다.

대시에서도 블록을 승인하는 일은 채굴자들이 담당하지만, PrivateSend를 처리하는 일은 오직 마스터노드만이 할 수 있습니다. PrivateSend를 원하는 세 명 이상의 사용자가 모이면, 마스터노드가 이들이 제출한 대쉬의 수량을 뒤죽박죽으로 섞어서 원래의 대시 보유자가 누구인지 알 수 없게 만듭니다. 사용자들은 이렇게 원래의 주인을 알 수 없게 뒤섞은 대시를 받게 됩니다. 그 대가로 마스터노드는 익명 전송의 수수료를 챙겨갑니다. 이 마스터노드가 제공하는 PrivateSend 기능이 대시를 추적이 어려운 화폐로 만드는 것입니다. 그러나 대시 믹싱은 근본적으로 코인 믹싱 아이디어를 계승했기에, 대시의 추적을 기하급수적으로 어렵게 할 뿐, 프로토콜 자체가 익명성을 보장하지는 못하는 한계를 고스란히 가지고 있습니다.

대시2.jpg
그림1. 믹싱을 거칠 라운드를 1회부터 8회까지 설정할 수 있습니다. 라운드를 많이 거칠수록 대시의 추적은 어려워집니다. PrivateSend의 각 라운드에는 0.0125 DASH의 마스터노드 요금이 포함됩니다.

대시4.jpg
그림2. 믹싱이 진행중인 대시입니다.

대시3.jpg
그림3. 믹싱이 완료된 대시가 사용자의 PrivateSend 잔고에 반환됩니다. 이때 반환되는 대시는 원래의 사용자 주소가 아닌, 새로 생성된 임의의 주소로 반환됩니다.
Image 1,2,3 from https://dashpay.atlassian.net/wiki/spaces/DOC/pages/1867847/Using+PrivateSend

스크린샷 2017-09-12 오후 3.41.03.png
그림4. PrivateSend의 작동원리 - 최소 세 명(파란색, 노란색, 초록색) 이상이 참가하는 믹싱 라운드에서 마스터노드가 각 참가자가 제출한 대쉬를 뒤섞은 다음 돌려줌으로써 추적이 어렵도록 만듭니다. 각 참가자는 수량은 같지만, 원래 제출했던 대시와 다른 대시를 받습니다.


3. 태생부터 익명인(inherent privacy) 화폐 – Monero 편

스크린샷 2017-09-12 오후 3.44.06.png
모네로는 바이트코인(Bytecoin)의 포크로 2014년 4월 탄생했습니다(바이트코인은 CryptoNote를 사용한 최초의 가상화폐로 2012년에 만들어졌습니다). 따라서 초기에 바이트코인의 코드 및 소프트웨어를 상당부분 이어받았으나 이후 모네로는 지속적인 업데이트로 익명성을 더욱 강화하고 발전시켜왔습니다.

익명거래를 원하는 이용자가 비트코인으로 거래한다면 믹싱서비스를 이용해야 하고, 대쉬를 이용하더라도 전송시 익명전송을 선택하고 마스터노드에게 수수료를 지불해야 합니다. 이에 반해 모네로는 따로 선택할 필요 없이 모든 입출금에 대해 익명성이 보장됩니다. 이렇게 보장된 익명성 때문에 Alphabay(2017년 7월 폐쇄), Oasis 등 온라인 암시장에서 빠르게 인기를 얻었습니다.

모네로의 익명성은 기본적으로 CryptoNote(CryptoNote는 비트코인과는 다른 코드베이스로 만들어졌고, 개인정보 보호를 위해 일회용 주소와 링서명을 이용합니다. CryptoNote를 이용해 만든 가상화폐로 바이트코인, 모네로 등이 있습니다.)로부터 나왔습니다. 개인정보 보호를 위해 모네로에서 이용되는 세부적인 기술로는 스텔스 주소, 링서명, 링CT 등이 있습니다. 이러한 기술들로 인해 모네로는 매 거래시 새로운 주소가 생성되어 본래의 주소를 블록체인 내에서 찾을 수 없고(스텔스 주소), 거래의 당사자가 누군지 알 수 없고(링서명), 거래된 금액이 얼마인지 또한 알 수 없습니다(링CT).

3.1 스텔스 주소(Stealth Address)

모네로는 거래마다 자동으로 일회용 주소를 생성시켜 거래합니다. 매 거래시 해당 거래에서만 이용되는 일회용 주소를 쓰기 때문에 본래 주소를 통해 거래내역을 찾을 수 없습니다. 즉, 어떤 두 개의 거래도 같은 사람에게 입금되었다는 걸 확인할 수 없습니다(unlinkability). 비트코인 주소와의 차이점을 통해 설명해드리겠습니다.
비트코인 이용자는 지갑마다 26~35자리의 다음과 같이 생긴 주소를 가집니다.
1FetSviaqRATXbwEAMs33HjMyw6JmeBup
지갑의 주인은 이 주소로 비트코인을 입금받고, 누구나 이 주소에 얼마가 들어갔는지 알 수 있습니다. 또한, 만약 이 지갑에서 다른 지갑으로 비트코인을 송금한다면, 얼마를 송금했는지도 누구나 볼 수 있습니다.

반면에 모네로 지갑의 주소(Public Address)는 다음과 같이 공개 읽기 키(public view key) 와 공개 쓰기 키(public spend key)를 포함한 95개의 문자로 구성되어 있습니다(공개 읽기 키와 공개 쓰기 키는 각각 비밀 읽기 키 및 비밀 쓰기 키와 쌍을 이룹니다).
463tWEBn5XZJSxLU6uLQnQ2iY9xuNcDbjLSjkn3XAXHCbLrTTErJrBWYgHJQyrCwkNgYvyV3z8zctJLPCZy24jvb3NiTcTJ

A가 B에게 모네로를 보낼 때 A의 지갑은 B의 공개 읽기 키와 공개 쓰기 키 그리고 다른 랜덤 데이터를 이용해 일회용 공개키를 만듭니다. 거래가 이루어지고 나면 그 일회용 공개키는 블록체인 상에서 누구나 볼 수 있습니다. 하지만 이 주소는 단 한번만 이용되는 주소이므로 A가 B에게 보냈다는 사실은 오직 두 사람만이 알 수 있습니다. 거래 후 오직 B만이 자신의 비밀 읽기 키(private view key)를 이용하여 계좌에 있는 금액을 확인할 수 있고, 자신만이 비밀 쓰기 키(private spend key)로 이 돈을 사용할 수 있습니다. 거래내역은 블록체인 상에 일회용 공개키로 나타나기 때문에 다른 사람은 B의 공개주소(Public Address)를 블록체인에서 찾아보더라도 여기에 얼마가 들어왔는지 알 수 없습니다.

스크린샷 2017-09-12 오후 3.43.25.png
그림5. 만약 모네로 블록체인 인포(http://moneroblocks.info/)에서 공개주소를 통해 거래내역을 확인하려고 하면 이런 메시지가 뜹니다.

3.2 링서명(Ring Signatures)

링서명은 송금자의 공개키만을 이용하는 일반적인 디지털서명과 달리 여러 유저의 공개키를 사용합니다. 만약 A가 B에게 송금하는데 C, D의 공개키와 자신의 공개키를 섞어 링서명을 했다면(참고로 이렇게 링서명에 세 명의 공개키가 들어간 경우 링 사이즈를 3이라 합니다), 이 때 A, C, D 세 명이 각각 1/3의 확률로 송금인이라는 것을 알 수 있을 뿐 송금자가 A라는 사실은 알 수 없습니다(untraceability).
즉, 스텔스주소가 수신인을 감추는 역할을 했다면 링서명은 송신인을 감추는 역할을 하여 보안성을 높여줍니다. 하지만 링서명만을 이용한다면 송금 사실을 다른 이가 모르므로 이중지불의 위험이 있습니다. CryptoNote는 ‘키 이미지’를 이용해 이중지불 위험을 차단시킵니다. 서명/ 검증 공식에 일회용 비밀키에 일대일로 대응하는 숫자인 키 이미지를 사용하는 것입니다. 키 이미지로 개인키와 공개키를 알아낼 수는 없지만 사용된 모든 키 이미지가 블록체인에 저장되어 네트워크에서 중복되지 않게 합니다.

이해를 돕기 위해 CryptoNote 홈페이지에 나와있는 도식을 통해 CryptoNote 코인의 거래가 일어나는 프로세스를 설명해드리겠습니다.
Bob이 거래에 필요한 일회용 비밀키를 만들어내기 위해서는 랜덤 데이터(1), TxOutNumber(2), 자신의 계좌 비밀키(3)가 필요합니다. 이렇게 일단 일회용 비밀키를 만들어낸 후, Bob이 Carol에게 송금을 하려면 Carol의 일회용 공개키 또한 만들어야 합니다. Bob은 어떤 값을 랜덤으로 만들어내고(5), 이 랜덤 데이터(6)와 TxOutNumber(7), Carol의 공개키(8)를 이용하여 Carol의 일회용 공개키를 만들어냅니다(9).
송금시 Bob은 그룹의 다른 공개키들 사이에 자신의 키를 섞어 자신이 보냈다는 것을 숨깁니다(10). 그리고 이중지불 방지를 위하여 그의 일회용 비밀키로부터 나온 키 이미지 또한 추가합니다(11).
마지막으로, Bob 자신의 일회용 비밀키(12), 모든 공개키(13), 키 이미지(14)를 이용해 거래에 서명합니다. 이렇게 만들어진 링서명을 거래정보에 덧붙입니다(15).

cryptonote_transaction.png
그림6. CryptoNote 코인 거래 도식 (https://cryptonote.org/inside#untraceable-payments)

3.3 링CT(Ring Confidential Transactions)

앞의 스텔스주소와 링서명은 CryptoNote의 보안기술로서 모네로의 엄마격인 바이트코인도 가지고 있는 특성이라면, 링CT는 모네로에 새로 도입된 보안기술입니다. 링서명의 발전된 방식으로서 거래 금액을 숨기는 기술인 링CT는 2017년 1월 10일(1,220,516번째 모네로 블록) 도입되어 현재 95% 이상의 모네로 거래에 이용되고 있으며, 2017년 9월 15일 하드포크 이후 모든 거래에 적용될 예정입니다. 링CT는 송금되는 금액이 블록체인에 표시되지 않게 합니다.

https://getmonero.org/2017/09/07/monero-0.11.0.0-released.html
(Monero 0.11.0.0 “Helium Hydra” Released)
https://eprint.iacr.org/2015/1098.pdf
(Ring CT에 관한 전문적인 설명)

3.4 Kovri 프로젝트

Kovri는 현재(2017년 9월) 48명의 모네로 개발자들이 진행 중인 프로젝트로, I2P(Invisible Internet Project) 라우터를 C++로 구현하는 것입니다. I2P는 토르와 유사한 익명 네트워크이지만 토르와 달리 분산화된 P2P 방식을 이용하는 등의 차이점이 있습니다. 일반적인 I2P 라우터는 Java로 작성되는데, Kovri는 모네로와의 호환성을 위해 C++언어로 구현시키고자 합니다.
모네로는 현재의 스텔스주소, 링서명, 링CT 만으로도 거래 쌍방과 거래 금액을 숨길 수 있지만, 다른 메타 데이터와 함께 IP 주소가 유출됩니다. IP 주소는 블록체인에 영원히 기록되지는 않지만 만약 악의적인 이용자가 네트워크를 적극적으로 모니터링한다면 IP 주소를 알아낼 수 있습니다. Kovri가 실현되면 이러한 모니터링을 불가능하게 만들어 모네로의 익명성이 극대화될 것입니다. Kovri는 2017년 하반기 중에 알파 버전을 출시한 후 버그 수정 등을 거쳐 베타 버전을 출시할 것으로 계획되어 있습니다.
https://btcmanager.com/what-is-kovri-why-is-it-important-for-monero/
(Kovri 프로젝트에 관한 Monero 개발자의 인터뷰 기사)

4. 개인정보가 보호되는 세상

암호화폐가 불법적인 거래에 이용된 사례들이 기사화되면서 많은 사람들이 암호화폐, 특히 익명화폐에 대해 안 좋은 인식을 가지고 있습니다. 하지만 개인정보가 보호되지 않는다면, 즉 어떤 이의 계좌에 얼마가 있는지 누구나 알 수 있다면 개인의 신체적 안전에 위협이 될 수 있습니다. 또한, 사업자인 경우 보유 고객 수, 고객으로부터 얼마를 받았는지와 같은 민감한 내부정보가 모두에게 공개되는 것은 향후의 협상에 치명적인 일입니다.
비트코인은 블록체인을 처음으로 실현시켰지만 개인정보 보호가 부족하다는 단점이 있습니다. 비트코인을 받거나 보내기 위해 지갑 주소를 공개하는 순간 누구나 나의 지갑에 얼마의 돈이 있는지 알 수 있습니다. 반면에 모네로는 모든 거래에 자동으로 정보 보호 기술이 적용되어 개인정보 보호 문제를 해결합니다. 심지어 Kovri가 도입되면 누가 모네로를 이용하는지도 알 수 없습니다.
누구나 지키고 싶은 비밀이 있게 마련이듯이, 프라이버시의 추구는 인간의 본능일지도 모릅니다. 앞으로 다가올 미래는 중앙화된 권력에 의해 프라이버시가 침해당하지 않으면서도 상호 공존할 수 있는, 보다 수평적인 세상이 아닐지 기대해봅니다.

Sort:  

great post, follow me.

Thank you very much! Okay~ Let's share good information with each other :)

Great Information>>>>>>>>>>>>>>>>>>>>>Thanks For sharing................
Keep it up

Thank you for your reply. We will try to share good information with everyone. :)

굉장히 유익한 정보 잘 읽었습니다. 그런데 혹시 TxOutNumber는 무엇인지 설명해주실 수 있을까요?

모네로 자세하고 이해 쉬운 설명 감사합니다

익명성 코인, 대시 와 모네로 에 대해서, 상세하게 설명해주시는 아주 좋은 글이군요.

대시(Dash)는 2014년 1월 18일에 원래는 XCoin이란 이름으로 출시되었습니다. 그 후 2월 28일에 Darkcoin으로 변경됐습니다. 그리고 마침내 2015년 3월 25일에 Dash라는 브랜드로 재탄생합니다.
PrivateSend 라는 기능이 있어 사용자가 필요에 따라 익명 전송을 선택할 수 있습니다. 이 기능은 비트코인 믹싱 중 코인조인의 아이디어를 계승했습니다. 다만, 코인조인의 믹싱 원리는 P2P믹싱이라면, 대시의 믹싱 원리는 사용자가 보낸 대시를 마스터노드가 대신 섞어주는 마스터노드 믹싱
블록을 승인하는 일은 채굴자들이 담당하지만, PrivateSend를 처리하는 일은 오직 마스터노드만이

태생부터 익명인(inherent privacy) 화폐 – Monero
스텔스 주소(Stealth Address), 링서명(Ring Signatures) 스텔스주소와 링서명은 CryptoNote의 보안기술로서 모네로의 엄마격인 바이트코인도 가지고 있는 특성
링서명의 발전된 방식으로서 거래 금액을 숨기는 기술인 링CT는 2017년 1월 10일(1,220,516번째 모네로 블록) 도입되어 현재 95% 이상의 모네로 거래에 이용되고 있으며, 2017년 9월 15일 하드포크 이후 모든 거래에 적용될 예정입니다. 링CT는 송금되는 금액이 블록체인에 표시되지 않게
Kovri는 현재(2017년 9월) 48명의 모네로 개발자들이 진행 중인 프로젝트로, I2P(Invisible Internet Project) 라우터를 C++로 구현