161 / 736CASHU

Cashu

특정 발행자가 상환을 책임지는 디지털 현금

Cashu를 사용하면 메시지로도 디지털 현금을 보낼 수 있습니다. 다만 받는 사람은 누가 발행했는지, 어떻게 받아야 하는지, 비트코인으로 어떻게 바꿀 수 있는지 알아야 합니다. 결제가 더 비공개로 이루어져도 운영자에 대한 신뢰까지 사라지지는 않습니다.

Cashu는 mint라는 발행자가 만드는 디지털 토큰인 e-cash를 위한 개방형 프로토콜입니다. 토큰은 흔히 비트코인 금액을 나타내며, 입출금에는 예를 들어 Lightning Network를 이용할 수 있습니다. 보유자가 통제하는 것은 토큰이지 mint의 비트코인 키가 아니므로, 발행자의 협조가 계속 필요합니다.

안나가 개인 메시지로 페트르에게 Cashu 토큰을 보낸다고 생각해 봅시다. Bitcoin 거래를 블록체인에 전파하는 것이 아닙니다. 해당 mint에 제출해 교환할 수 있는 데이터를 건네는 것입니다. 토큰에는 하나 이상의 증명 데이터(Proof)가 들어갈 수 있습니다. 각각 금액, 비밀값, mint의 서명 등을 담은 데이터 기록입니다. Cashu는 공통 프로토콜이지, 하나의 준비금을 공유하는 단일 서비스가 아닙니다. 발행자, 통화 단위, 서명 키 묶음이 모두 중요합니다. sats는 비트코인의 작은 단위이며, 숫자가 같아도 단위가 다르면 뜻이 달라집니다. 한 mint의 토큰이 다른 mint에서 자동으로 받아들여지지도 않습니다. 형식이 궁금하다면 V4는 간결한 CBOR 바이너리 인코딩을 사용하고, 하나의 mint에서 발행한 증명 데이터만 담는다는 점을 알아두면 됩니다. [1] [2] [9]

추가 지출 조건이 없는 일반 토큰이라면 안나는 사본을 보관할 수 있습니다. 그래서 페트르에게는 swap이 필요합니다. 지갑은 기존 증명 데이터를 mint에 제출하고, 안나가 모르는 새로운 비밀값을 가진 증명 데이터를 받습니다. mint는 기존 입력을 무효화합니다. 이 교환이 성공해야 안나가 같은 사본을 다시 쓸 수 없게 됩니다. 상태 조회만으로는 부족합니다. UNSPENT는 처리 중이거나 이미 사용했다는 기록이 없다는 뜻이지, 페트르를 위해 예약했다는 뜻이 아닙니다. PENDING은 처리 중, SPENT는 이미 교환에 사용된 상태입니다. 토큰을 영수증처럼 공개하지 마세요. 사용 가능한 사본을 얻은 사람이 먼저 교환할 수 있습니다. [3] [5]

Blind Signature, 블라인드 서명은 토큰 발행과 이후 사용 사이의 연결을 숨기는 데 도움이 됩니다. 지갑은 비밀값을 만들고 수학적 표현을 가린 뒤 mint에 서명을 요청합니다. 이후 가림 처리를 제거합니다. mint는 나중에 제출된 토큰 자체만으로 원래 발행 요청을 알아낼 수 없어야 합니다. 그렇다고 모든 정보가 숨겨지지는 않습니다. 액면가마다 키가 다르므로 발행자는 어떤 액면가를 발행하는지 압니다. 기술적으로는 secp256k1 곡선을 이용하는 BDHKE라는 방식입니다. 결제를 이해하려고 곡선 위의 점부터 계산할 필요는 없습니다. 이 수학이 어느 연결을 보호하는지가 핵심입니다. [1]

선택적 확장 NUT-12는 DLEQ를 추가합니다. 서명에 쓰인 개인키가 mint의 공개키에 대응하는 개인키와 같다는 수학적 증명입니다. 필요한 부가 데이터가 있으면 페트르는 mint에 접속하지 않고도 서명을 검증할 수 있습니다. 그러나 다른 사본이 이미 쓰였는지, 서비스가 응답하는지, 비트코인 준비금이 충분한지는 알 수 없습니다. DLEQ가 첨부된 경우 규격은 지갑에 검증을 요구합니다. 그래도 서명 검증이 완료된 swap을 대신하지는 못합니다. 운영자가 의무를 이행하지 못하는 위험인 Counterparty risk는 남습니다. [7]

페트르는 새 토큰을 받는 대신 Lightning Network 결제 요청을 지불하고 싶을 수 있습니다. 이를 melt라고 합니다. 지갑은 먼저 견적을 요청해 필요한 수량과 단위, 유효 기한, 수수료 예비액 여부를 확인합니다. 입력 수수료가 더해질 수도 있습니다. 그 뒤 증명 데이터를 제출하고 mint가 외부 결제를 실행합니다. HTTP 200은 웹 요청이 성공적으로 처리되었다는 뜻일 뿐, 반드시 결제 완료라는 뜻은 아닙니다. PENDING은 여전히 처리 중이고 PAID는 성공을 알립니다. 지갑은 최종 결과와 해당 결제 방식의 확인 정보를 추적해야 합니다. [4]

mint는 서명 키 묶음을 교체할 수 있습니다. active=false는 기존 키로 새 토큰을 발행하지 않는다는 뜻이며, 이것만으로 기존 증명 데이터를 입력으로 받지 않는 것은 아닙니다. 선택적 final_expiry는 다릅니다. 이 최종 기한이 지나면 규격은 mint에 상환 약속 이행을 더 이상 요구하지 않습니다. 둘을 혼동하지 마세요. 또한 input_fee_ppk는 입력마다 부과하는 요율이지 단순한 송금액의 백분율이 아닙니다. 사용하는 모든 증명 데이터의 요율을 더한 뒤 1000으로 나누고, 그다음에 수수료를 정수 단위로 올림합니다. 예를 들어 단위가 sat인 키 묶음에서 입력 3개의 요율이 각각 100 ppk라면 합계는 300이고, 나눗셈과 올림을 거친 수수료는 1 sat입니다. 같은 금액의 결제라도 증명 데이터 개수나 키 묶음이 다르면 비용이 달라질 수 있습니다. [2]

블라인드 서명이 결제 시각, 금액, 네트워크 연결 정보를 없애지는 않습니다. 새 액면가를 요청하는 방식도 단서가 될 수 있습니다. NUT-03은 요청하는 값을 작은 순서대로 정렬하라고 권고합니다. 순서가 결제액과 거스름돈의 구분을 불필요하게 드러내지 않도록 하기 위해서입니다. 보낸 사람이 전달한 토큰의 상태를 반복해서 조회하는 것도 발신자와 수신자의 연결을 돕는 경우가 있습니다. Cashu는 더 비공개적인 자금 이동 도구를 제공하지만, 모든 앱과 모든 상황에서 모든 관계를 자동으로 숨기지는 않습니다. [3] [5]

복구는 사용하는 지갑과 mint에 맞아야 합니다. NUT-13은 시작 비밀값인 seed, 키 묶음, 카운터로부터 토큰의 비밀값과 블라인딩 인자를 다시 도출하는 방법을 설명합니다. 키 묶음 버전 01은 HMAC-SHA256을, 이전 00은 BIP32를 사용합니다. seed가 직접 만들 수 없는 서명은 NUT-09로 mint에서 받아오며, 이후 이미 사용되었는지 확인해야 합니다. 따라서 “Seed Phrase가 있으니 어디서나 전부 복원된다”는 말만으로는 부족합니다. 지갑에 의존하기 전에 백업과 복구 절차를 확인하고 소액 출금도 시험해 보세요. 백업으로 사라진 mint가 응답하게 만들거나 부족한 준비금을 채울 수는 없습니다. [8] [6]

더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Fedimint, Chaumian eCash, Blind Signature, Lightning Network, Counterparty risk, Satoshi. 다음 항목에서도 이 글을 참조합니다 Chaumian eCash, Blind Signature, Fedimint, Fiduciary Media.

DOC · 001Cashu — NUT-00: Protocol and tokens명세 DOC · 002Cashu — NUT-02: Keysets and fees명세 DOC · 003Cashu — NUT-03: Swap tokens명세 DOC · 004Cashu — NUT-05: Melting tokens명세 DOC · 005Cashu — NUT-07: Token state check명세 DOC · 006Cashu — NUT-09: Restore signatures명세 DOC · 007Cashu — NUT-12: Offline signature validation명세 DOC · 008Cashu — NUT-13: Deterministic secrets명세 DOC · 009Cashu — Project introduction1차 출처
개정일: 1차 출처 우선 · 투자 조언이 아닙니다