이 가이드는 프라이버시 코인이 무엇인지, 일반 블록체인이 결제에 대해 무엇을 드러내는지, 그리고 프라이버시 코인이 송신자, 수신자, 금액을 숨기기 위해 사용하는 암호 기술을 설명합니다. 마지막으로 Blocknet을 예시로 살펴보고, 채굴로 첫 프라이빗 코인을 얻는 방법을 소개합니다.
프라이버시 코인이란 무엇입니까?
프라이버시 코인은 결제할 때 송신자, 수신자, 금액이 공개적으로 드러나지 않도록 만든 암호화폐입니다. 링 서명, 일회용 스텔스 주소, 숨겨진 금액 같은 암호 기술을 사용하므로, 모든 노드는 여전히 각 결제를 검증할 수 있지만 블록체인을 읽는 사람은 결제에 대해 거의 알 수 없습니다.
모든 암호화폐는 여러 독립적인 컴퓨터가 복사하고 검증하는 공유 원장, 즉 블록체인을 유지합니다. 이런 개방성 덕분에 서로 모르는 사람들이 은행 없이도 누가 무엇을 소유하는지 합의할 수 있습니다. 프라이버시 코인이 답하는 질문은 그 원장이 각 결제를 얼마나 보여 줘야 하느냐입니다.
Bitcoin은 대부분을 보여 줍니다. Bitcoin 백서는 프라이버시 모델을 한 줄로 설명합니다. “대중은 누군가가 다른 누군가에게 어떤 금액을 보내는 것은 볼 수 있지만, 그 트랜잭션을 특정인과 연결하는 정보는 볼 수 없다.” 이름은 없지만 주소와 금액은 공개됩니다. 프라이버시 코인은 한 걸음 더 나아가, 결제가 규칙을 따른다는 것은 증명하면서도 각 결제의 세부 내용은 공개 기록에 남기지 않습니다.
공개 블록체인은 나에 대해 무엇을 드러냅니까?
Bitcoin 같은 투명한 체인에서는 내 주소 하나를 아는 사람이라면 누구나 블록 탐색기에서 그 주소를 조회해 다음을 볼 수 있습니다.
- 잔액: 마지막 단위까지 정확하게 보입니다.
- 모든 입출금: 금액과 날짜까지 보입니다.
- 돈이 다음에 어디로 갔는지: 결제마다 보낸 주소와 받는 주소가 기록되기 때문입니다.
이름은 적혀 있지 않지만, 주소가 오랫동안 연결되지 않은 채로 남는 경우는 드뭅니다. 가게에 결제하거나, 거래소에서 출금하거나, 후원용으로 주소를 게시하면 주소가 나와 연결되고, 그때부터 전체 기록을 읽을 수 있게 됩니다. 이름 대신 계좌 번호를 적은 은행 거래 내역서를 공개 게시판에 붙여 두는 것과 비슷합니다. 내가 돈을 보낸 사람은 내가 얼마를 가졌는지 볼 수 있고, 나에게 돈을 보낸 사람은 내가 그 돈으로 무엇을 하는지 지켜볼 수 있습니다.
프라이버시 코인은 그 게시판에 유효한 결제가 있었다는 사실만 보이도록 설계되었습니다.
프라이버시 코인은 송신자, 수신자, 금액을 어떻게 숨깁니까?
많은 프라이버시 코인이 세 가지 기술을 결합합니다. 링 서명은 실제 코인을 디코이와 섞어 송신자를 숨기고, 일회용 스텔스 주소는 결제마다 새 주소를 주어 수신자를 숨기며, 커밋먼트와 범위 증명은 금액이 유효함을 증명하면서 금액을 숨깁니다. 많은 코인이 네트워크 계층도 보호해 트랜잭션의 출발지를 숨깁니다.
각 기술은 결제의 한 부분을 담당합니다. 쉽게 설명하면 다음과 같습니다.
링 서명은 누가 보냈는지 숨깁니다
링 서명을 쓰면 어느 구성원이 서명했는지 드러내지 않고 그룹을 대표해 서명할 수 있습니다. Ron Rivest, Adi Shamir, Yael Tauman이 2001년에 이 아이디어를 발표했고, 2013년 CryptoNote 설계가 이를 암호화폐에 도입했습니다. 코인을 쓸 때 지갑은 체인에서 다른 출력들을 디코이로 골라 그룹 전체를 대표해 서명합니다. 누구나 그중 하나가 사용되었음을 확인할 수 있지만, 서명은 어느 것인지 말해 주지 않습니다.
프라이버시 코인은 키 이미지를 더한 연결 가능한 링 서명을 사용합니다. 키 이미지는 실제로 사용되는 코인마다 고유한 태그이며, 링 구성원 중 어느 것인지는 전혀 드러내지 않습니다. 같은 키 이미지가 두 번 나타나면 네트워크가 두 번째 지출을 거부하므로, 프라이빗 코인도 이중으로 쓸 수 없습니다. Monero와 Blocknet은 CLSAG라는 간결한 방식을 사용합니다.
스텔스 주소는 누가 받았는지 숨깁니다
스텔스 주소 방식에서는 내가 공유한 주소가 체인에 절대 나타나지 않습니다. 주소에는 조회 키와 지출 키라는 두 개의 공개 키가 들어 있습니다. 결제할 때마다 송신자의 지갑은 이 키들을 새로운 난수와 섞어 한 번만 쓰고 다시는 쓰지 않는 주소를 만듭니다. 내 쪽에서는 개인 조회 키로 지갑이 체인을 스캔해 나에게 온 출력을 찾고, 개인 지출 키로 그것을 씁니다.
내 웹사이트의 주소로 열 명이 결제하면, 체인에는 서로 눈에 보이는 연결이 없는 일회용 주소 10개가 따로 나타나므로 누구도 내가 받은 금액을 합산할 수 없습니다.
커밋먼트와 범위 증명은 금액을 숨깁니다
금액은 숫자를 드러내지 않고 고정하는 페더슨 커밋먼트로 저장됩니다. 커밋먼트는 서로 더할 수 있으므로, 모든 노드는 어떤 숫자도 보지 않고 트랜잭션에 들어간 금액이 수수료를 포함해 나온 금액과 일치하는지 확인할 수 있습니다. 그리고 범위 증명이 숨겨진 금액 중 음수가 없음을 보여 주므로, 누구도 없는 코인을 만들어 낼 수 없습니다. 2018년 Bünz와 동료들이 발표한 Bulletproofs는 이 증명의 크기를 크게 줄였습니다.
네트워크 프라이버시는 결제가 시작된 곳을 숨깁니다
완벽하게 프라이빗한 트랜잭션이라도 어느 노드가 가장 먼저 알렸는지 지켜보면 그 트랜잭션을 전파한 컴퓨터를 추적할 수도 있습니다. 2018년에 발표된 Dandelion++는 새 트랜잭션을 먼저 “줄기(stem)“를 따라 피어에서 피어로 조용히 전달한 다음, 더 멀리 떨어진 무작위 지점에서 네트워크 전체로 퍼지게 해 이를 막습니다.
다른 길을 택한 프라이버시 코인도 있습니다. 2016년에 출시된 Zcash는 zk-SNARK라는 영지식 증명을 사용합니다. 쉴디드 주소는 송신자, 수신자, 금액을 숨기며, 증명은 이 중 어느 것도 드러내지 않고 트랜잭션이 유효함을 보여 줍니다.
기본 프라이버시는 왜 중요합니까?
프라이버시가 켜야 하는 기능이라면, 그 기능을 쓰는 트랜잭션은 더 작은 집단을 이루고, 작은 집단일수록 분석하기 쉽습니다. 모든 트랜잭션이 같은 방식으로 만들어지면 프라이빗 결제는 체인의 다른 모든 결제와 똑같아 보이고, 누구도 보호를 켜는 것을 기억할 필요가 없습니다.
기본 프라이버시는 모든 코인을 서로 바꿔 쓸 수 있게 유지하며, 이 특성을 대체 가능성(fungibility)이라고 합니다. 투명한 체인에서는 코인이 전체 이력을 지니고 다니므로, 같은 가치의 두 코인이 거쳐 온 곳 때문에 다르게 취급될 수 있습니다. 어떤 코인에도 보이는 과거가 없다면 모든 코인의 가치가 같으며, 이것이 사람들이 돈에 기대하는 성질입니다.
일상적인 이유는 간단합니다. 기업은 경쟁사가 공급업체 결제 내역을 읽는 것을 원하지 않습니다. 직원은 커피를 사는 가게마다 자기 급여가 보이는 것을 원하지 않습니다. 어떤 대의에 기부하는 사람은 그 사실을 혼자 간직하고 싶을 수 있습니다. 현금과 일반 은행 계좌는 이미 이런 프라이버시를 제공하며, 프라이버시 코인은 이를 디지털 결제에 가져옵니다.
프라이버시 코인의 예시, Blocknet
Blocknet은 모든 결제에 링 서명, 스텔스 주소, 숨겨진 금액, 네트워크 프라이버시를 적용하는 프라이버시 코인입니다. 트랜잭션 형식에는 투명 모드가 없습니다.
- 송신자: 각 입력은 실제 출력 하나와 디코이 15개, 정확히 16개의 출력으로 이루어진 CLSAG 링으로 서명되며, 합의 규칙은 다른 크기를 모두 거부합니다.
- 수신자: 모든 결제는 일회용 스텔스 주소로 갑니다.
- 금액: 금액은 64비트 Bulletproofs 범위 증명이 붙은 페더슨 커밋먼트입니다.
- 네트워크: 트랜잭션은 Dandelion++로 전달되며, 줄기 경로는 10분마다 바뀝니다.
- 메모: 각 출력에는 최대 124바이트의 암호화된 메모를 담을 공간이 있으며, 송신자와 수신자만 읽을 수 있고 128바이트 고정 크기로 채워지므로 메모가 있는 결제와 없는 결제가 똑같아 보입니다.
Blocknet에서는 이름으로 결제할 수도 있습니다. @alice 같은 Blocknet ID 짧은 이름이 90자가 넘는 주소를 대신하며, 이름으로 보낸 결제도 새로운 스텔스 주소에 도착하므로 공개된 이름으로는 소유자의 수입을 전혀 알 수 없습니다. 각 계층을 자세히 알아보려면 Blocknet이 결제를 프라이빗하게 지키는 방법을, 더 넓은 그림은 Blocknet이란?을 읽어 보십시오.
Blocknet이 계획 중인 Faraday 업그레이드는 각 지출이 숨는 집단을 넓힐 예정입니다. blocknetcrypto.com의 표현으로는 “현재 지출은 16개의 출력 사이에 숨습니다. Faraday 이후에는 체인의 모든 출력 사이에 숨습니다.”
프라이버시 코인은 어떻게 얻을 수 있습니까?
채굴로 얻을 수 있습니다. Blocknet의 작업 증명인 Argon2id는 해시마다 약 2 GB의 메모리가 필요하므로, 데스크톱, 노트북, 서버의 일반 CPU와 RAM이 채굴을 합니다. 풀 지급은 다른 Blocknet 결제와 마찬가지로 금액이 숨겨진 일회용 스텔스 주소로 도착합니다.
- 지갑을 준비하십시오. 채굴용 Blocknet 지갑 가이드에서 지갑을 만들고, 시드를 백업하고, 주소를 복사하는 방법을 보여 줍니다.
- seine를 다운로드하십시오. Windows, macOS, Linux용 무료 오픈 소스 Blocknet 채굴기이며, 다운로드 섹션에서 받을 수 있습니다. CPU로 채굴하고 Windows와 Linux에서는 NVIDIA 그래픽카드로도 동시에 채굴하며, 실행 중에 스스로 튜닝합니다.
- bntpool.com에서 채굴을 시작하십시오. 주소나
@name을 붙여넣고 기본 풀을 선택하면 지급이 지갑에 프라이빗하게 도착합니다. Blocknet 채굴 방법에서 각 단계를 안내합니다.
자주 묻는 질문
프라이버시 코인과 Bitcoin은 무엇이 다릅니까?
Bitcoin은 모든 주소와 금액을 그대로 기록하므로 누구나 코인이 주소에서 주소로 이동하는 경로를 따라가고 각 잔액을 읽을 수 있습니다. 프라이버시 코인은 링 서명, 일회용 주소, 숨겨진 금액 같은 암호 기술을 사용하므로, 체인은 여전히 모든 결제가 유효함을 증명하면서도 외부인에게는 누가 누구에게 얼마를 보냈는지 거의 보여 주지 않습니다.
모든 프라이버시 코인이 프라이버시를 의무로 적용합니까?
아닙니다. 설계마다 다릅니다. Monero와 Blocknet 같은 코인은 모든 트랜잭션에 프라이버시를 적용하므로 공개 모드가 아예 없습니다. Zcash는 영지식 증명으로 송신자, 수신자, 금액을 숨기는 쉴디드 주소와 함께 Bitcoin 주소와 비슷하게 동작하는 투명 주소를 제공합니다. 사용자는 두 주소 사이에서 자금을 옮길 수 있습니다.
네트워크는 볼 수 없는 결제를 어떻게 검증합니까?
암호 기술 덕분에 노드는 결제의 세부 내용을 읽지 않고도 결제를 검증할 수 있습니다. 링 서명은 여러 출력 중 하나가 사용되었음을 증명하고, 키 이미지는 같은 코인의 두 번째 지출을 막으며, 금액 커밋먼트는 합산이 가능하므로 노드가 입력이 출력과 수수료의 합과 같은지 확인할 수 있습니다. 범위 증명은 숨겨진 금액이 음수가 아님을 보여 줍니다.
일반 컴퓨터로 프라이버시 코인을 채굴할 수 있습니까?
네, 코인이 메모리 하드 작업 증명을 사용한다면 가능합니다. Blocknet은 해시마다 약 2 GB의 메모리가 필요한 Argon2id를 사용하므로 일반 데스크톱, 노트북, 서버가 채굴을 합니다. seine를 다운로드하고 Blocknet 주소나 @name을 입력하면, CPU와 NVIDIA 그래픽카드로 bntpool.com 풀에서 채굴합니다.