영지식 증거를 통해 Cashu는 임의의 지출 조건을 가질 수 있습니다.

이 기사는 기계로 번역되었습니다
원문 표시

저자: 스타크넷

출처: https://blog.cashu.space/bringing-zero-knowledge-proofs-to-cashu/

이 글에서는 "영지식 증거"를 통해 튜링 완전 프로그래밍 언어로 지정된 임의의 지출 조건을 가진 이쉬 토큰을 개인 정보를 희생 하지 않고 교환할 수 있는 방법을 살펴보겠습니다.

Cashu 프로토콜 개요

다음은 "캐슈" 프로토콜에 대한 일반적인 개요입니다. 자세한 내용은 프로토콜 문서 " 캐슈 NUT(표기법, 사용법 및 용어)"를 참조하십시오.

Cashu는 전자 토큰을 통해 거의 무료이고 개인 정보를 보호하는 비트코인 ​​거래를 허용하는 무료 오픈 소스 Chaumian ecash 프로토콜( Chaum, 1982 )입니다. 이러한 전자 토큰은 지폐와 동전과 유사하며 사용자가 보유합니다.

이미지

Cashu 프로토콜은 세 당사자 간의 상호 작용을 정의합니다.

  • 발신자(앨리스): 토큰을 전송합니다...

  • 수신자(칼라): 토큰을 수신합니다.

  • 민트(밥): 앨리스와 칼라가 다음 작업을 수행할 수 있도록 허용하는 제3자:

    • 채굴 : 사용자는 라이트닝 네트워크를 통해 비트코인을 보내 캐슈 토큰을 민트.

      • 앨리스는 밥에게 특정 양의 캐슈 토큰을 민트 하고 싶다는 신호를 보냅니다.
      • 그러면 밥은 해당 금액에 대한 라이트닝 송장을 생성하여 앨리스에게 줍니다.
      • 밥은 지불을 받은 후 앨리스가 정의한 몇 가지 비밀 값에 " 맹목적으로 서명 "합니다.
      • 앨리스는 블라인드를 해제하여 밥의 서명을 얻을 수 있고, 이를 통해 캐시 토큰을 생성할 수 있습니다.
      • 그러면 앨리스는 이 토큰(기본적으로 공개된 비밀과 밥의 (숨김 해제) 서명)을 칼라에게 보낼 수 있습니다.

      (번역자 주: Cashu 프로토콜에서 토큰은 2의 거듭제곱으로 표준화된 단위를 갖습니다. 따라서 사용자는 한 민트 에 하나의 토큰을 받는 것이 아니라, 원하는 금액을 얻기 위해 결합할 수 있는 여러 개의 토큰을 받습니다.)

    • 교환: 다른 캐시 토큰을 사용하여 캐시 토큰을 생성합니다.

      • 칼라는 밥에게 토큰을 교환하고 싶다는 신호를 보냅니다(그녀는 토큰을 밥에게 보내야 합니다).
      • 토큰을 검증한 후, Bob은 Carla가 정의한 새로운 비밀 값에 익명 서명을 하고 Carla가 교환에 사용한 토큰을 무효화합니다.
      • 또한, 현금으로 거스름돈을 주는 것과 마찬가지로, 칼라는 토큰을 다른 단위로 분할해 달라고 요청할 수도 있습니다. 예를 들어, 32사토시 가치의 토큰을 각각 16사토시 가치의 토큰 두 개로 분할할 수 있습니다.
    • 멜트다운 : 캐시 토큰을 비트코인으로 교환

      • 앨리스는 밥에게 토큰을 녹이고 싶다는 신호를 보냈습니다.
      • 그녀는 Cashu 토큰과 동일한 양의 Lightning 송장을 Bob에게 보냈습니다.
      • 밥은 토큰을 검증한 후 라이트닝 송장을 지불하고 녹은 토큰을 무효화했습니다.

예: 앨리스가 칼라에게 100개의 스마트를 보냅니다.

(다음 예는 cashu.me 웹 지갑에서 보여집니다.)

좀 더 구체적인 예를 들어 보겠습니다. 앨리스가 캐시 지갑에 충분한 잔액을 가지고 있고 칼라에게 100 사토시(satoshi)의 ecash를 보내려고 한다고 가정해 보겠습니다.

이미지

  1. "보내기" 페이지에서 앨리스의 지갑 소프트웨어는 앨리스가 최소 100 사토시 상당의 토큰을 보유하고 있음을 보장합니다. 만약 앨리스의 잔액 이 금액을 초과하더라도 토큰이 100 사토시에 정확히 미치지 못하면, 지갑은 민트와 스왑 작업을 수행합니다.
  2. 그런 다음, 앨리스는 전송할 토큰을 직렬화합니다 .
  3. 그러면 앨리스는 직렬화된 토큰을 칼라에게 보낼 수 있습니다(통신 채널을 통해).
  4. "결제 수령" 단계에서 칼라는 수신된 토큰을 사용하여 즉시 스왑을 수행합니다. 앞서 언급했듯이, 스왑을 통해 밥은 스왑에 사용된 토큰을 무효화하고 칼라가 정의한 비밀 값을 사용하여 새 토큰을 생성하여 토큰 값의 소유권 이전을 완료합니다.

비용 조건

앨리스는 임의로 사용할 수 없고 특정 공개 키 소유자만 사용할 수 있는 토큰을 보내고 싶어할 수 있습니다. 여기서 " 사용 조건 "이라는 개념이 생겨납니다.

토큰의 사용 조건은 해당 조건을 충족하는 "증인"이 제공될 경우에만 토큰을 교환하거나 멜트할 수 있음을 의미합니다.

일부 캐시 토큰의 지출 조건을 설정하려면 비밀 값이 민트 또는 교환 프로세스 중에 미리 정의된 비밀 값 형식을 따라야 합니다.

예를 들어, 칼라가 특정 공개 키의 소유자라는 조건 하에 앨리스의 비밀 값은 " 공개 키로 지불(P2PK) 비밀 값 형식 "을 따라야 합니다.

이전 예를 다시 사용하면, 마지막 두 번째 단계에서 직렬화된 토큰의 가치가 100사토시이고 다음과 같은 비밀 값을 포함하는 경우:

이미지

따라서 Calir가 자금(즉, 교환 토큰)을 받으려면 해당 공개 키의 유효한 서명을 제공해야 합니다. Carl이 제공한 모든 서명이 secret.data 에 있는 공개 키로 검증되면 Bob은 교환을 실행합니다.

현재 Cashu 프로토콜은 두 가지 지출 조건( P2PKHTLC )만 지원합니다. 새로운 지출 조건을 구현하려면 여러 활성 부분을 수정해야 하며 매우 번거로울 수 있습니다. 이러한 문제를 해결하기 위해 저희는 개인정보를 보호하는 새로운 임의 지출 조건인 "카이로 지출 조건"을 도입합니다.

STARK 증명 계산

카이로 비용 조건을 사용하면 모든 카이로 프로그램의 유효한 실행을 비용 조건으로 설정할 수 있습니다. 비용 제공자가 제공하는 증인은 해당 카이로 프로그램의 실행에 대한 영지식 증거이며, 출력은 조건과 일치합니다.

Cario와 STARK에 대한 아주 간략한 소개

"STARK 증거"는 계산의 입력 데이터를 공개하지 않고도(이러한 속성을 "영지식"이라고 함) 매우 효율적으로(계산 자체보다 훨씬 빠르게) 계산의 정확성을 검증하는 데 사용됩니다.

" Cairo "는 STARK 증명에 사용하도록 특별히 설계된 프로그래밍 언어입니다. 사람이 읽을 수 있는 코드를 다항식 평가 제약 조건 집합으로 컴파일합니다. (증명 시스템은 큰 유한체 Fp 의 다항식을 다루며, Cairo 프로그램의 바이트코드는 Fp 의 숫자 배열입니다.)

예를 들어, 다음의 카이로 프로그램 fibonacci: Fp → Fp n번째 피보나치 수를 p 로 모듈로 취한 결과를 계산합니다.

이미지

다음 결과를 계산하는 데 약 500밀리초가 걸립니다.

이미지

그런 다음 stwo-cairo를 사용하여 이 계산의 정확성을 주장하는 STARK 증거를 생성할 수 있습니다.

fibonacci 의 바이트코드, 출력 c , 그리고 이 STARK 증명이 주어지면, 전담 검증기는 n 알 필요도 없고 fibonacci 계산을 실행할 필요도 없이 단 50밀리초 만에 ∃n : fibonacci(n) = c 라는 문장의 유효성을 검증할 수 있습니다!

stwo-cairo.vercel.app 웹페이지에서 이 예제를 시도해 볼 수 있습니다.

이제 fibonacci 우리가 원하는 디지털 서명 체계의 검증 함수 구현으로 대체하면, 맞춤형 P2PK 조건을 얻을 수 있습니다! 실제로 어떻게 작동하는지 살펴보겠습니다.

카이로 지출 조건

  • (발신자)가 조건을 설정합니다:

    토큰을 보낼 때 사용자는 컴파일된 프로그램의 해시 값과 출력 조건의 해시 값을 지정하여 카이로 지출 조건을 추가할 수 있습니다.

    이 프로그램(및 출력 조건)은 별도의 커뮤니케이션 채널을 통해 수신자와 공유해야 할 수도 있습니다.

  • (수신자는) 잠긴 토큰을 다음과 같이 사용합니다.

    이 토큰을 사용하고자 하는 모든 사용자는 이 프로그램을 실행하고, 보낸 사람이 원하는 출력 조건과 일치시킨 다음, 이 계산에 대한 STARK 증거를 생성해야 합니다. 이는 최종적으로 조폐국에서 검증됩니다.

개인정보 보호에 관한 핵심 사항

이러한 설정에서 사용자가 토큰을 사용하면 민트는 프로그램의 바이트코드를 알게 됩니다(이는 증거 검증을 위한 전제 조건입니다).

개인정보 보호가 매우 중요한 상황에서는 원래 프로그램 위에 부트로더를 사용할 수 있습니다.

이 부트로더는 가상 머신과 같은 카이로 프로그램으로, 원래 프로그램을 실행한 후 (program_hash, program_output) 을 출력합니다.

지출 조건을 다음과 같이 수정할 수 있습니다.

  • 程序哈希值bootloader_program_hash
  • 输出条件(program_hash, output_condition)

그때부터 민트는 이 부트로더의 바이트코드만 알게 되고, 원본 프로그램은 처음부터 끝까지 민트에게 비밀로 유지됩니다!

우리의 작업

자세한 내용을 알아보려면 NUT 제안 과 브라우저에서 Cairo 프로그램의 클라이언트 측 검증을 위해 TypeScript 로 만든 코드베이스를 참조하세요!

샘플 영상

카이로 비용 조건 데모

(위에)

출처
면책조항: 상기 내용은 작자의 개인적인 의견입니다. 따라서 이는 Followin의 입장과 무관하며 Followin과 관련된 어떠한 투자 제안도 구성하지 않습니다.
라이크
즐겨찾기에 추가
코멘트