하드웨어 서명기를 이용한 CoinJoin 서명의 어려움

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

저자: 파볼 루스낙

출처: https://btctranscripts.com/advancing-bitcoin/2022/challenges-in-implementing-coinjoin-in-hardware-wallets

원문은 저자가 Advancing Bitcoin 2022 컨퍼런스에서 발표한 연설을 delcin-raj가 review.btctranscripts.com을 통해 녹취한 것입니다.

연설 영상: https://www.youtube.com/watch?v=gqINXwsR33g

소개

안녕하세요 여러분, 저는 파볼 루스낙입니다. 비트코인 ​​커뮤니티에서는 스틱(Stik)이라는 닉네임으로 알려져 있습니다. 저는 사토시 랩(Satoshi Labs)의 공동 창립자이며, 저희 회사에서 트레저(Trezor) 하드웨어 서명기를 개발했습니다. 오늘은 하드웨어 서명기를 사용하여 코인조인(CoinJoin) 거래에 서명할 때 발생하는 문제점에 대해 이야기해 보겠습니다.

개인정보 보호는 왜 필요한가요?

먼저 개인정보 보호의 중요성에 대해 이야기해 보겠습니다. 여러 가지 이유가 있지만, 제가 생각하기에 가장 중요한 이유는 다음과 같습니다.

  • 자율성 : 사생활 보호는 개인이 자신의 개인 정보를 스스로 관리할 수 있도록 하여 독립적인 선택과 결정을 내릴 수 있게 해줍니다.
  • 개인 안전 : 사생활 보호는 스토킹, 괴롭힘, 신분 도용과 같은 위해와 위협으로부터 개인을 보호합니다.
  • 표현의 자유 : 사생활 보호는 자유로운 표현과 열린 소통을 장려합니다.
  • 신뢰 : 사생활 보호는 개인 간, 그리고 기관 간의 신뢰를 구축하는 데 필수적인 요소입니다.
  • 평등 : 개인정보 보호는 인종, 성별, 종교 등에 관계없이 모든 사람이 동등한 대우를 받을 수 있도록 도와줍니다.
  • 민주주의 : 사생활 보호는 민주주의를 유지하는 데 매우 중요합니다. 시민들이 서로 그리고 자신들의 대표자들과 자유롭게 소통할 수 있도록 해주기 때문입니다.
  • 혁신 : 개인정보 보호는 개인과 기업이 도용이나 악용 없이 새로운 아이디어와 기술을 실험하고 개발할 수 있는 안전한 환경을 제공함으로써 혁신을 촉진합니다.

요약하자면, 사생활 보호는 개인의 자율성, 안전 및 자유를 보호하는 동시에 신뢰, 평등, 민주주의 및 혁신을 장려하는 기본적인 인권입니다.

비트코인에서의 프라이버시 보호

비트코인 개인정보보호의 현황

비트코인 거래는 공개 온체인 에 기록되어 누구나 추적하고 분석할 수 있으며, 과거 거래 내역까지 확인할 수 있습니다. 거래 참여자의 실제 신원은 반드시 드러나는 것은 아니지만, IP 주소 추적이나 정보 유출 등을 통해 신원이 연결되는 경우가 많습니다. 예를 들어, 트위터나 노스트르(Nostr) 프로필에 기부금 수령 주소를 게시하는 경우, 해당 주소를 재사용하면 더욱 심각한 문제가 됩니다. 하지만 이러한 모든 것보다 더 심각한 문제는 거래소 와 그 이용자들의 행태에서 비롯됩니다.

관련 개인정보 보호 기술에는 어떤 것들이 있을까요?

  • "비밀 거래"는 거래 금액을 숨기는 한 가지 유형입니다. 하지만 이 과정에서 새로운 비트코인이 발행되거나 소멸되지 않았는지 확인해야 합니다. 이는 일반적으로 온체인 에서 구현됩니다. 비트코인 ​​기본 레이어에는 아직 비밀 거래 기술이 없습니다.
  • 라이트닝 네트워크는 블록체인에 채널 개설 및 종료 관련 거래만 표시되고 사용자가 채널 내에서 수행하는 모든 거래가 표시되지 않기 때문에 개인 정보 보호에도 기여합니다.
  • Tor나 사설 가상 네트워크와 같은 일부 서비스는 IP 주소(따라서 지리적 위치)를 숨기는 데 도움이 될 수 있습니다. 또한 이를 통해 여러 거래를 연결하기가 더 어려워집니다. 예를 들어 Tor에서는 서로 다른 거래를 보낼 때 신원을 변경할 수 있으므로 네트워크 상에서 각 거래는 서로 다른 사람으로 처리됩니다.
  • 물론 CoinJoin도 그중 하나입니다.

코인조인

자, 그럼 "코인조인(CoinJoin)"이란 무엇일까요? 코인조인은 비트코인 ​​거래의 개인정보 보호와 익명성을 강화하는 기술입니다. 여러 참여자가 각자의 거래(즉, 입력과 출력을 합산한 거래)를 하나로 통합한 후 서명합니다. 이렇게 완성된 거래는 입력과 출력을 각각의 소유자와 연결하기가 훨씬 더 어렵게 만듭니다. 코인조인은 제가 여기서 보여드린 것보다 훨씬 더 큰 규모의 거래도 처리할 수 있지만, 이 예시로도 충분히 이해하기 쉽습니다.

사례

세 명의 참여자가 동일한 거래에 참여하기로 동의했다고 가정해 봅시다. 그러면 총 5 + 3개의 출력(추가 3개는 잔돈 출력)이 발생합니다. 입력은 3개라고 가정합니다. 각 잔돈 출력이 누구의 것인지 추측할 수 있을지도 모릅니다. 하지만 다른 출력들은 누가 어떤 출력을 소유하는지 확실히 알 수 없습니다. 핵심은 동일한 값을 가진 출력들을 만드는 것입니다. 이렇게 동일한 값을 가진 출력들의 집합을 "k-익명성 집합"이라고 합니다. 이 경우, 출력들은 모두 동일한 k-익명성 집합에 속하며, 여기서 k는 5입니다. 따라서 누가 어떤 출력을 소유하는지 추측할 수 없습니다.

코인조인 단계

  1. 입력 등록 : 각 참가자는 코디네이터에게 자신의 입력을 등록합니다. 일반적으로 Tor 네트워크를 통해 이루어지며, 각 입력은 Tor ID에서 시작됩니다. 입력 등록이 성공적으로 완료되면 코디네이터는 참가자에게 일종의 "토큰"을 제공합니다. 이 토큰은 암호화폐 토큰은 아닙니다. 예를 들어 Wasabi 1에서는 블라인드 서명, Wasabi 2에서는 키를 사용하여 검증할 수 있는 익명 인증서일 수 있습니다. 자세한 설명은 생략하겠지만, 핵심은 이 토큰이 두 번째 단계인 출력 등록에 사용될 수 있다는 점입니다.
  2. 출력 등록 : 각 참여자는 (서로 다른 Tor ID를 사용하여) 코디네이터에게 자신의 출력을 등록합니다. 여기서 중요한 점은 참여자가 입력 등록에 사용한 ID와 출력 등록에 사용하는 ID가 다르기 때문에 연관성이 감지되지 않는다는 것입니다. 각 출력 등록에는 토큰 하나가 소모되는데, 이 토큰은 특정 크기의 출력을 등록할 자격이 있음을 증명합니다. 이 토큰은 "소각"되는데, 이는 코디네이터가 해당 토큰을 사용됨으로 태그 의미입니다. 일반적으로 이 토큰은 특정 CoinJoin 라운드에 귀속되며 다른 CoinJoin 라운드에서는 사용할 수 없습니다. 이러한 설계는 태그 이 시간이 지남에 따라 무한정 증가하는 대신 현재 CoinJoin 라운드 후에 폐기될 수 있다는 점에서 유용합니다. 일부 기술에서는 이러한 토큰을 무기한으로 사용할 수 있지만, 이는 일반적으로 Cashu 및 Fedimint와 같은 다양한 전자 화폐 구현에서 나타나는 현상입니다. CoinJoin으로 돌아가서, 이러한 토큰은 현재 라운드 내에서만 사용할 수 있습니다.
  3. 서명 : 입력과 출력이 모두 등록되면, 이들을 하나의 거래로 결합하여 각 참여자에게 서명을 요청합니다. 참여자들은 서로 다른 신원을 사용할 수 있지만, 그것이 핵심은 아닙니다. 첫 번째 단계에서 입력을 등록한 참여자의 신원을 다시 사용할 수도 있습니다. 첫 번째 단계에서 입력을 등록했다면, 이번 단계에서도 동일한 입력에 서명할 것이 확실하기 때문입니다. 모든 참여자는 서명을 제공해야 합니다. 최종적으로 결합된 거래가 유효하면 코인조인이 성공적으로 완료되고, 해당 거래는 네트워크에 전송됩니다.

하드웨어 서명기를 사용하여 CoinJoin에 서명하기

현상 유지

그렇다면 이것이 하드웨어 서명 생성기와 무슨 관련이 있을까요? 일반적으로 일반 거래(코인조인이 아닌 경우)에 서명할 때는 하드웨어 서명 생성기가 사용자 개입을 통해 서명을 완료합니다. 즉, 사용자는 출력 주소(출력 스크립트)를 확인하고, 출력 금액과 채굴 수수료(일반적으로 입력 금액의 합계에서 출력 금액의 합계를 뺀 값)를 확인합니다. 여기서 예외가 있는 이유는 일반적으로 하드웨어 서명 생성기가 매우 높은 수수료를 감지하지 않는 한 사용자에게 확인 메시지를 표시하지 않기 때문입니다. 이 부분은 나중에 자세히 설명하겠습니다.

도전

CoinJoin 거래의 경우, 사용자 개입 없이 거래 서명을 완료해야 합니다. 그 이유는 무엇일까요?

다른 사람들이 서명할 준비가 되었는지, 또는 우리가 서명 단계에 진입할 수 있는 시점을 알 수 없기 때문입니다. 일반적으로 코인조인에 성공하려면 여러 라운드에 참여해야 합니다. 그리고 사용자들이 컴퓨터 앞에 앉아 (이틀 이상) 기다리는 것을 원하지 않습니다. 따라서 하드웨어 서명기는 여러 가지 작업을 수행해야 합니다. 입력값의 합이 출력값의 합에 약간의 차이(예: 채굴 수수료, 코디네이터 수수료 등)를 더한 값과 일치하는지 확인해야 합니다. 여기서 어려운 점은 어떤 입력값이 내 것인지, 어떤 출력값이 내 것인지, 그리고 그 금액이 얼마인지 정확하게 식별하는 것입니다.

Segregated Witness는 이전에 수수료 공격(입력 금액 위조)의 표적이 된 적이 있습니다.

채굴 수수료는 입력 금액의 합계에서 출력 금액의 합계를 뺀 값입니다. 하지만 거래 입력에는 금전적 정보가 전혀 포함되어 있지 않습니다. 단지 이전 거래의 해시 값과 출력의 인덱스 번호만 포함되어 있을 뿐입니다. 그렇다면 공격자가 입력 금액을 속이면 어떻게 될까요? 예를 들어 입력 금액이 10 BTC인데 1 BTC라고 거짓으로 입력했다고 가정해 보겠습니다. 하드웨어 서명 장치를 사용하는 경우 출력 금액만 검증할 수 있고 입력 금액은 검증할 수 없다는 점에 유의하십시오. 이 경우 사용자는 9 BTC를 거래 수수료로 지불하게 됩니다.

(역자 주: 여기서 저자는 공격자가 사용자의 지갑 소프트웨어를 변조했다고 가정합니다. 하드웨어 서명 장치의 맥락에서 "지갑 소프트웨어는 신뢰할 수 없다"는 것은 일반적인 가정입니다.)

Trezor는 이러한 공격을 어떻게 완화합니까?

따라서 Trezor를 사용할 때는 하드웨어 서명자가 입력값의 실제 가치를 계산할 수 있도록 이전 거래 내역 전체를 항상 전달해야 합니다. 이 과정에서 거래 금액이 매우 클 경우 문제가 발생할 수 있습니다. 앞서 언급했듯이 Trezor는 수수료가 매우 높을 경우 경고를 표시합니다. 수수료가 극도로 높으면 오류를 직접 표시합니다. 수수료가 이 임계값 미만이면 거래가 승인됩니다.

Segregated Witness v0이 이 문제를 해결하나요?

  • BIP-143 서명은 입력값의 지출액을 명시한다는 점에서 긍정적입니다.
  • 공격자가 UTXO의 양에 대해 거짓 정보를 제공하면 서명이 무효화되어 비트코인 ​​네트워크에서 인식되지 않습니다.

이 해결책의 문제점

그럼 해결된 건가요? 아니요. SegWit v0이 이 문제를 완전히 해결한 건 아닙니다. 왜 그럴까요?

피해자가 15 BTC와 20 BTC 상당의 BIP-143(SegWit v0) UTXO 두 개를 가지고 있다고 가정해 보겠습니다. 악성 프로그램은 사용자에게 거래를 확인하라는 메시지를 표시합니다. 이 거래의 첫 번째 입력값은 15 BTC UTXO이고, 두 번째 입력값은 5 BTC에 1 사토시를 더한 값으로 설정되어 있습니다. 사용자는 출력값과 잔돈 출력값(필요한 경우)을 선택합니다. 그런 다음 사용자는 거래를 확인합니다. 하지만 실제로는 출력값만 확인하는 것입니다. 사용자는 20 BTC에 1 사토시를 더한 금액을 지불하는 것으로 착각합니다.

그러면 악성 프로그램은 오류를 표시하고 사용자에게 거래를 다시 확인하도록 요청합니다. 하지만 이번에는 첫 번째 입력에 1 사토시를, 두 번째 입력에 20 BTC UTXO를 사용하여 하드웨어 서명기로 전송합니다. 사용자 입장에서는 출력만 볼 수 있고 입력은 볼 수 없습니다. 따라서 이전에 서명했던 거래와 동일하다고 생각하고 20 BTC와 1 사토시를 지불하여 다시 확인합니다.

하지만 악성 소프트웨어가 두 개의 서명을 결합하여 두 개의 UTXO를 모두 사용하는 거래를 생성했기 때문에 실제로는 15 BTC + 20 BTC를 사용한 셈입니다. 즉, 15 BTC가 자신도 모르게 거래 수수료로 지불된 것입니다.

Segregated Witness v1은 이 문제를 해결합니까?

BIP341(Taproot) 서명은 모든 입력값의 액면가를 보장합니다. 이는 좋은 점입니다. 즉, 거래의 모든 서명은 모든 입력값의 액면가를 보장합니다. 또한 입력값의 스크립트도 보장합니다. 이 역시 좋은 점입니다. 이렇게 하면 공격자가 입력 스크립트를 수정할 수 없습니다. 그렇다면 이것이 완벽한 해결책일까요?

질문

어떻게 생각하세요? 아니요, 아직은 아닙니다. 공격자는 입력 스크립트에 대해 거짓말을 할 수 있습니다. 예를 들어, 해당 입력이 이 지갑에 속하지 않는다고 주장할 수 있죠. 그러면 하드웨어 서명기가 해당 입력을 고려하지 않도록 속일 수 있습니다. 그 후, 동일한 서명을 두 번 수행하고 두 서명을 추출 및 수집한 다음 결합할 수 있습니다. 공격 방법은 완전히 동일합니다.

해결책

이 문제는 제 동료인 앤드류 코즐릭이 2020년 코인조인 서명을 개발하던 중 발견했습니다. 그는 즉시 BIP341 서명이 서명 대상 입력의 스크립트뿐만 아니라 모든 입력의 스크립트에도 커밋되어야 한다고 제안했습니다. 다행히 논의는 빠르게 진행되었고, 모두가 이 의견에 동의했습니다. 그렇게 하지 않을 이유가 없었죠. 그래서 Segregated Witness v1은 이 문제를 해결했습니다. Segregated Witness v1의 입력 서명은 이전 트랜잭션의 해시, 사용되는 출력의 인덱스 번호, 서명되는 금액, 트랜잭션의 총액, 서명 대상 입력의 스크립트, 그리고 모든 입력 스크립트에 커밋됩니다. 바로 이 부분이 코인조인이 Taproot의 진정한 이점을 누리는 지점입니다.

탭루트와 코인조인

서명으로 모든 것을 확정하는 방식은 외부 입력이 필요한 자동화된 거래에 매우 유용합니다. 예를 들어, 코인조인(CoinJoin)에서는 공격자가 입력 금액이나 스크립트를 변경할 수 없습니다. 만약 변경한다면 서명 오류로 인해 전체 거래가 무효화되기 때문입니다.

소유권 증명서

하지만 또 하나 명확히 해야 할 점은 공격자가 여전히 일부 정보를 숨길 수 있다는 것입니다. 예를 들어, 입력값이 이 지갑에 속하는지 여부를 숨길 수 있습니다. 공격자가 하드웨어 서명자에게 어떤 BIP32 경로가 사용되었는지 알려주고 싶지 않을 수 있고, 하드웨어 서명자는 스스로 이를 파악할 수 없을 수도 있습니다. 그러면 해당 입력값은 평가되지 않습니다. 따라서 모든 입력값의 소유권을 확인할 수 있는 방법이 필요합니다. 그렇다면 어떻게 해야 할까요? 이는 외부 입력값을 사용하는 모든 거래에 중요합니다. 코인조인 거래뿐만 아니라 양방향 자금 이체를 위한 라이트닝 채널 거래 등에도 해당됩니다. 따라서 어떤 입력값이 이 지갑에 속하는지 확실하게 판별할 수 있는 메커니즘이 필요합니다. 어떻게 구현할 수 있을까요?

SLIP 19 소유권 증빙서류

이것은 "SLIP 19"라고 불립니다. SLIP은 사토시 랩에게 있어 비트코인의 BIP와 같은 역할을 합니다. SLIP 19는 "소유권 증명(Proof of Ownership)"의 약자로, 이름에서 알 수 있듯이 서명을 통해 세 가지 정보를 확보하는 것을 의미합니다.

  1. 첫 번째 정보는 "소유권 식별자"입니다. 이 식별자를 통해 해당 지갑이 주어진 스크립트 공개 키로 UTXO를 사용할 수 있는지 여부를 효율적으로 판단할 수 있습니다. 이 과정은 매우 간단하며, 기본적으로 시드에서 대칭 키를 생성한 다음 스크립트 공개 키를 메시지로 사용하여 HMAC(해시 메시지 인증 코드)로 처리하는 방식입니다.

HMAC-SHA256(key = 对称密钥; message = 脚本公钥)

  1. 또 다른 중요한 정보는 스크립트의 공개 키 자체입니다.

  2. 또한 추가적인, 제한 없는 커밋먼트 데이터가 있습니다. 원하지 않으시면 생략하셔도 됩니다. 기본적으로 이 값은 256비트의 임의 값입니다. 코인조인 거래에서는 192비트 코인조인 코디네이터 ID와 64비트 코인조인 라운드 ID를 사용합니다. 하지만 개발 중인 애플리케이션의 종류에 따라 어떤 값이든 사용할 수 있습니다.

모든 문서는 2020년 3월에 발표된 BIP322 "일반 서명 메시지 형식"에 설명된 방식을 사용하여 서명됩니다.

사람들이 코인조인을 많이 사용하지 않는 이유는 무엇일까요?

  1. 우선, 근본적인 문제는 인식 부족이라고 생각하며, 이러한 상황이 점차 개선되기를 바랍니다.

    1. 사람들은 코인조인이라는 것이 존재한다는 사실조차 모릅니다.
    2. 사람들은 사생활 보호가 왜 필요한지 전혀 이해하지 못한다.
    3. 사람들은 사생활 보호에 전혀 관심이 없어요. 아마 99%의 사람들이 사생활에 대해 신경 쓰지 않는 거품 속에 살고 있는 것 같아요.
  2. 복잡성. 예를 들어, 몇 분 안에 처리해야 할 새로운 정보가 수천 건에 달할 수도 있는데, 뭘 해야 할지조차 모를 수도 있죠.

  3. 하드웨어 서명 통합 기능이 부족합니다. 코인조인 지갑은 일반적으로 네트워크 지갑이기 때문에 모든 사토시를 네트워크 지갑에 보관하는 것은 바람직하지 않습니다.

  4. 마지막으로, 그리고 결코 무시할 수 없는 점은 법적인 결과가 따를 수 있다는 것입니다.

결론적으로

따라서, 이번 달 말에 출시될 Trezor와 Wasabi 코디네이터의 통합이 위에서 언급한 네 가지 문제를 해결할 수 있기를 바랍니다. 이것으로 제 발표를 마치겠습니다. 질의응답 시간을 위해 5분이 남았습니다.

질문과 답변

[청중]: 아담 깁슨이 작년에 코인조인 워크숍을 진행했는데, 그때 다른 참가자들이 누구인지 알 수 없다는 문제점을 언급한 것 같습니다. 그래서 혹시 다른 참가자들도 모두 같은 조직 소속으로 나를 노리는 건 아닐까 하는 불안감이 드는 것 같습니다. 이에 대해 어떻게 생각하시나요?

[파볼 루스낙]: 맥스가 더 자세한 답변을 해줄 수 있을 것 같습니다. 제 생각에는 코인조인을 최대한 크게 확장하는 것이 좋을 것 같습니다. 와사비 코디네이터에서 단일 코인조인 참여자 수 제한이 현재 얼마인지는 모르겠지만, 최소 150명은 지원하는 것으로 알고 있습니다. 참여자가 5명밖에 없다면 공격에 취약해지겠지만, 그 이상이라면… 이번 통합으로 더 많은 사람들이 코인조인에 참여하게 될 것이고, 그러면 참여자 제한을 늘릴 수 있을 거라고 생각합니다. 이상입니다.

[청중]: (미확인) 예를 들어, 제가 거래소 에 돈을 입금하려고 할 때, 거래소에서 코인조인 거래의 출력을 거부할 수 있나요?

[파볼 루스낙]: 그래서 문제는 거래소 와 코인조인 거래 사이의 관계, 또는 거래소가 코인조인 거래를 어떻게 보는가 하는 것입니다. 제 생각에는 그건 거래소의 문제이지 제 문제는 아닙니다. 하지만 모든 거래소 같은 태도를 취하는 것은 아니라고 생각합니다. 어떤 거래소는 모든 코인조인 출금을 불법으로 태그 하고, 코인조인 출금을 허용하지 않습니다. 어떤 거래소 더 극단적으로 출금 후에도 거래 내역을 추적하는 것으로 알고 있습니다. 거래소 후 며칠 동안 코인조인 거래에 참여한 것으로 보인다며, 이는 바람직하지 않다고 말합니다. 저는 이런 조치가 지나치다고 생각합니다. 하지만 동시에 우리가 지금 하고 있는 일이 코인조인에 더 많은 사용자를 끌어들이고 있다고 생각합니다. 과거에는 거래소 가 코인조인을 불법 거래로 취급하는 것이 쉬웠지만, 수천 명의 합법적인 사용자들이 같은 방식으로 행동한다면 거래소도 태도를 바꿀 수도 있을 것입니다. 만약 바뀌지 않는다면, 분명 문제가 생길 것입니다. 그러니까 전략 게임이나 4차원 체스를 하는 것과 같다고 할 수 있죠.

[청중]: 안녕하세요, 저는 로버트입니다. 스타트9 노드를 운영하고 있습니다. 코인조인을 사용할 때 가장 중요한 법적 방어책은 무엇일까요? 개발자들을 체포하고 있다고 들었는데, 어떻게 대응해야 할까요?

[파볼 루스낙]: 어떻게 제 자신을 보호할 수 있을까요? 예를 들어, 체코에 전자제품을 판매하는 대형 체인점이 있습니다. 저는 그곳에서 비트코인으로 전자제품을 구매하는 것을 좋아합니다. 하지만 제가 보유한 사토시 수를 알려줄 생각은 전혀 없습니다. 그러나 코인조인을 사용하지 않는다면, 제 정보가 쉽게 노출될 수 있습니다. 온체인 거래 내역만 봐도 제가 전자제품을 구매했다는 사실을 바로 알 수 있기 때문입니다. 제가 해당 매장에 KYC(고객 신원 확인)를 완료했기 때문에 상품을 제 주소로 배송받을 것이라고 주장할 수도 있습니다. 물론 매장에서 그렇게 하지 않을 수도 있지만, 원한다면 그렇게 할 수도 있습니다. 따라서 코인조인을 사용함으로써 저는 제가 사용하는 코인과 제 지갑에 남아 있는 코인 사이에 방화벽을 구축하는 것과 같습니다.

(위에)

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