새로운 개인 정보 보호 도구가 등장했습니다: statechains에서의 코인 스왑. 원래 statechain 설계는 2018년 도쿄에서 열린 Scaling Bitcoin에서 Ruben Somsen에 의해 제안되었습니다. 간단히 요약하자면, Aaron van Wirdum이 원래 개념에 대한 매우 철저한 설명을 제공하고 있습니다. 일반적인 아이디어는 중개 기관(상태 체인 운영자)이 사용자와 함께 2-of-2 멀티시그 주소를 생성하여 오프 체인에서 UTXO를 전송하는 것입니다. 사용자는 그 후 2-of-2의 개인 키를 새로운 사용자에게 전송합니다. 상태 체인 기관은 이 일이 발생했을 때 통보를 받고, 그 시점에서 새로운 소유자만 자금을 전송할 수 있도록 허용합니다. 따라서 전체 아이디어는 실제로 개인 키 자체를 전송하고 상태 체인 운영자가 현재 소유권을 집행하도록 하는 것입니다.
그리고 라이트닝 네트워크 채널과 마찬가지로, 각 사용자는 시간 잠금이 만료된 후 UTXO에 대한 단독 제어를 허용하는 미리 서명된 거래를 가지고 있습니다. 이렇게 하면 상태 체인 운영자가 사라지더라도 자금이 영원히 그 2-of-2에 갇히지 않게 됩니다. 그러나 이 백업 옵션은 한쪽 당사자가 미리 서명된 거래를 악용하여 자금을 훔치려는 위험과 균형을 이루어야 합니다. Somsen의 제안은 이전 소유자가 자금을 되찾으려 할 경우 새로운 소유자가 이전 소유자의 미리 서명된 종료 거래를 대체할 수 있도록 eltoo에 의존합니다. 상태 체인 설계의 마지막 주요 부분은 원래 소유자에서 현재 소유자까지의 서명 체인으로, 원래 소유자로 시작하여 현재 소유자까지 이어집니다. 이는 한 소유자에서 다른 소유자로 전달되며 각 거래와 병렬로 추가되어 모든 사람이 합법적인 전송을 증명하는 로컬 복사본을 유지할 수 있도록 하며, 현재 소유자의 경우 그들이 실제로 합법적인 소유자임을 증명합니다.
eltoo에 대한 의존성과 소프트 포크가 하룻밤 사이에 발생하지 않는 사실 때문에, CommerceBlock은 2020년에 eltoo에 의존하지 않는 상태 체인의 변형 구현 작업을 시작했습니다. eltoo가 최신 거래가 이전 거래를 대체할 수 있도록 하는 대신, 그들은 Mercury라는 감소하는 nLocktime 스킴을 구현했습니다. 아이디어는 원래 소유자의 종료 거래가 미래의 x 블록으로 시간 잠금되어 있다는 것입니다; 블록체인이 이 임계값에 도달할 때까지 자금을 되찾기 위한 거래를 실행할 수 없습니다. 그리고 다음 소유권 이전 시, 새로운 소유자의 거래는 x-1로 시간 잠금됩니다. 이렇게 하면 현재 소유자가 원래 소유자의 거래가 제출할 수 있는 유효성이 생기기 전에 종료 거래를 체인에 제출할 수 있습니다. 추가 소유권 이전이 발생함에 따라 시간 잠금은 계속 감소하며(x-2, x-3 등), 현재 소유자가 이전 소유자의 거래가 잠금 해제되기 전에 항상 행동할 수 있도록 보장합니다. 이는 eltoo의 필요성을 제거하지만 소유자 간의 상태 체인 전송에 제한을 도입합니다: 시간 잠금을 더 이상 낮출 수 없을 때까지 몇 번이나 감소할 수 있습니다; 어떤 시점에서 미래에서 일부 시간(블록)을 빼면 현재와 같아집니다(현재 블록 높이가 nLocktime입니다). 이 시점에서 사용자는 상태 체인을 종료해야 하며, 이전 소유자가 자금을 훔칠 수 있는 기회를 가지게 됩니다.
Somsen의 원래 설계와 Mercury의 또 다른 주요 차이점은 키 생성 방식입니다. 명백한 2-of-2 멀티시그 스크립트를 사용하는 대신, Mercury는 ECDSA-MPC(타원 곡선 디지털 서명 알고리즘 다자간 계산)를 구현합니다. 이는 Schnorr를 사용하는 MuSig 주소와 기능적으로 유사하다고 생각할 수 있지만, Schnorr의 경우 사용자는 주소를 생성하기 위해 두 개의 공개 키를 단순히 더합니다. ECDSA-MPC에서는 키 생성이 여러 단계의 상호작용 프로세스입니다. 결국 이들은 기능적으로 동일한 결과를 생성합니다: 명백한 멀티시그가 아닌 단일 공개 키와 거래 서명에 필요한 일치하는 개인 키의 일부를 가진 두 당사자가 있습니다.
ECDSA-MPC를 활용한 전송 프로세스는 원래 소유자가 Somsen의 제안에서 설명한 대로 기존 개인 키를 명시적으로 전송하는 대신, 상태 체인 운영자와 발신자가 ECDSA-MPC를 통해 키 공유를 생성하여 개인 키를 생성하는 상호작용 프로세스입니다. 중요하게도, 동일한 개인 키를 생성할 수 있는 가능한 키 공유 세트가 여러 개 있습니다. 따라서 상태 체인 운영자는 수신자와 함께 다른 키 공유를 만들어 개인 키를 재생성합니다. 그런 다음 상태 체인 운영자는 이전 소유자와 관련된 키 공유를 삭제합니다. CommerceBlock은 이를 HSM(하드웨어 보안 모듈)으로 시행하지만, 이는 모든 신뢰를 제거하지는 않습니다. 이렇게 하면 상태 체인이 정직하게 운영된다면, 현재 보유하고 있는 키 공유가 이전 소유자의 키 공유와 유효한 서명을 생성하는 데 작동하지 않기 때문에 과거 소유자와 종료 거래를 서명할 수 없습니다. 또한 이러한 공모의 경우, 상태 체인 기관이 부정직하게 행동했음을 보여주는 공개 증거를 게시할 수 있습니다. 이는 그렇게 하는 것에 대한 평판상의 억제 요소입니다.
공개 증거는 어떻게 작동합니까? CommerceBlock은 이전에 Opentimestamps의 변형인 Mainstay를 설계했습니다. Opentimestamps는 임의의 데이터를 가져와 매우 큰 머클 트리에 포함시키고 그 루트를 비트코인 거래에 커밋하는 프로토콜입니다. Opentimestamps의 문제는 트리가 완전히 무질서하다는 것입니다; 들어오는 대로 트리의 끝에 추가됩니다. 이는 블록체인에서 동일한 앵커링 거래에 의해 상충되는 정보가 커밋되지 않도록 보장하지 않습니다. Mainstay가 하는 일은 특정 데이터 조각에 대해 머클 트리에서 정식 “슬롯”을 할당하는 것입니다. 예를 들어, 스포츠 경기 결과를 증명하는 오라클이 있습니다. 모든 사람은 특정 오라클을 확인하기 위해 어떤 “슬롯”을 확인해야 하는지 알 수 있으며, 해당 슬롯에 없는 상충되는 타임스탬프는 무시할 수 있습니다. 이를 통해 사람들은 타임스탬프가 있는 무언가를 증명할 수 있으며, 상충되는 것을 타임스탬프하는 가능성을 열어두지 않습니다(머클 트리의 어디서든 쓸 수 있다면, 한 곳에 진짜 타임스탬프를 두고 다른 곳에 가짜 타임스탬프를 가리킬 수 있습니다). Mercury 상태 체인의 각 전송은 현재 소유권의 타임스탬프 증명을 제공하기 위해 특정 mainstay 슬롯에서 증명됩니다. 상태 체인 기관이 부정직하게 행동할 경우 이를 게시할 수 있습니다.
상태 체인 구현의 세부 사항이 정리되었으니, 흥미로운 부분으로 넘어가겠습니다: 코인 스왑. 역사적으로 코인 조인과 코인 스왑 간의 일반적인 구분은 코인 조인이 단일 거래에서 발생하는 개인 정보 보호 강화 기술의 명시적이고 공개적으로 가시적인 사용인 반면, 코인 스왑은 일반적으로 비밀스럽고, 성공적인 협력의 경우 공개적으로 가시적인 개인 정보 보호 기술의 사용이 여러 개의 별도 거래에서 발생한다고 생각됩니다. UTXO가 코인 조인에 들어갈 때 전 세계가 이를 볼 수 있지만, 일반적으로 이전에 논의된 대로 구현된다면, UTXO가 코인 스왑에 관련될 때 참가자 외에는 아무도 알 수 없습니다.
Mercury 상태 체인 위에 구축된 코인 스왑 구현은 이 명시적 대 비밀스러운 개인 정보 속성 측면에서 코인 조인과 코인 스왑 간의 명확한 구분을 무너뜨립니다. 상태 체인의 전송은 Mainstay 커밋에 기록되므로 적대적으로는 상태 체인이 소유자를 변경할 때마다 공개 지식이라고 가정해야 합니다. 그러나 각 전송은 동일한 블록 간격에서 전송된 다른 상태 체인과 코인 스왑일 수도 있습니다. 따라서 익명성 도구 측면에서, 이는 코인 조인의 익명성 속성을 결합하면서 UTXO의 오프 체인 교환을 수행하기 위해 코인 스왑 메커니즘을 사용하는 일종의 프랑켄슈타인 괴물이 됩니다. 이는 상태 체인 위에서 오프 체인에서 코인 조인의 유사한 익명성 속성을 에뮬레이트하기 위해 “코인 스왑”을 사용하며, 각 스왑에 대한 온체인 수수료를 발생시키지 않습니다.
Mercury 상태 체인에서의 코인 스왑은 본질적으로 익명성을 부여하기 위한 재미있는 암호학적 마법을 가진 일반적인 상태 체인 전송입니다. 일반적인 코인 조인(예: Whirlpool 또는 Wasabi)에 대해 UTXO를 등록할 때, 입력으로 UTXO를 등록하고, 그런 다음 코인 조인에서 출력 생성을 위해 사용할 수 있는 블라인드 암호화 자격 증명을 받습니다. 이는 개인 정보를 보호하기 위해 코디네이터에 대한 새로운 네트워크 연결을 통해 자금을 되찾기 위해 사용됩니다. Mercury의 계획에서는 상태 체인을 등록하고 블라인드 토큰을 받은 다음 코디네이터에게 무작위로 새로운 주소를 할당받아 상태 체인을 전송하도록 요청하여 이와 유사한 조정을 근사합니다. 심지어 자신의 상태 체인을 다시 받을 가능성도 있습니다. 무작위입니다. 그 후에는 본질적으로 모든 사람이 코인 조인처럼 상태 체인 전송에 대해 원자적으로 서명하는 것입니다.
결국 우리가 여기서 얻는 것은 매우 직관에 반하는 것이며, 사람들이 깊이 고려하는 데 익숙하지 않은 비트코인 도구의 “신뢰 스펙트럼”에서 이상한 지점에 있습니다. 기술적 수준에서 엄밀히 말하면, 일어나고 있는 것은 코인 스왑입니다; 코인이 직접적인 온체인 지문을 남기지 않고 비밀리에 교환되고 있습니다. 그러나 모든 전송에 대한 Mainstay 커밋과 서로 다른 시간대에 소유자를 전송한 상태 체인에 대한 휴리스틱 분석 가능성 덕분에 코인 스왑이 발생했음을 추론할 수 있으며, 따라서 익명성 세트의 이득이 표준 코인 조인과 동등해집니다. 그러나 각 “코인 조인”에 대해 온체인 수수료를 지불할 필요는 없습니다.
“이상한 지점”의 요점을 강조하기 위해, 단일 기관이 상태 체인 운영자로 기능하는 경우 이를 수탁 계약에 근사하는 것으로 볼 수 있습니다. 그러나 HSM에 의해 시행되는 키 공유 삭제, Mainstay 증명 및 미리 서명된 종료 거래 덕분에 사용자는 운영자가 이전 상태 체인 소유자와 협력하여 정당한 소유자를 사기치지 않는 한 항상 시스템에서 단독으로 탈출할 수 있는 경로를 가지고 있습니다.
신뢰 모델을 설명하는 가장 좋은 방법은 CommerceBlock의 Tom Trevethan을 인용하는 것입니다: “이는 개인 정보 보호 도구 측면에서 완전한 수탁 믹서와 완전한 신뢰 없는 코인 조인 사이의 중간 지점을 차지하는 것을 목표로 합니다.” 상태 체인 운영자, 즉 CommerceBlock이 정직하게 행동할 것이라는 어느 정도의 신뢰는 부인할 수 없습니다. 그러나 그들로부터 부정직한 행동을 사용자에게 공개적으로 경고하는 메커니즘과 순수한 온체인 코인 조인에 비해 잠재적인 수수료 절감을 통해 얻을 수 있는 명확한 개인 정보 보호 이점도 있습니다.
완전히 신뢰가 없는 것은 아니지만, 또한 완전히 신뢰 기반도 아닙니다. 개인 정보 보호 도구 측면에서 새로운 위치입니다. 개인적으로 중앙 집중식 믹서가 얼마나 널리 사용되고 있는지를 간과할 수 없다는 사실을 고려할 때, 이 시스템이 그 생태계에 어떻게 적합할지 지켜보는 것이 흥미롭습니다. 새로운 아이가 등장했습니다.
이 글은 Shinobi의 게스트 포스트입니다. 표현된 의견은 전적으로 그들의 것이며 BTC, Inc. 또는 Bitcoin Magazine의 의견을 반드시 반영하지는 않습니다.