Kraken

보유고 증명

감사

크라켄의 감사 과정에 대해서 알아보세요

크라켄 보유고 증명(Proof-of-Reserves) 감사 프로세스  

소개

본 문서는 크라켄의 감사 프로세스에 대한 배경과 자침을 제공하고 있습니다.

크라켄은 전체 적립금을 보유하고 있으며, 당사의 고객들을 포함한 제3자에게 고객들의 자금이 적절하게 보유되고 있음을 입증해 보이기 위해 저희는 독립적이고 암호법으로 검증된 감사를 실시합니다. 투명성과 독립적으로 검증된 감사는 기업들이 고객 자금에 대한 전체 적립금을 확실히 보유하고 있도록 하는 데 매우 중요합니다. 공공 보존증명 체계는 기술적으로 구현이 될 수 있습니다. 하지만, 그것들 가운데 중요한 외재성, 즉 사용자 프라이버시가 있는데, 이는 공공 보존증명 체계의 구체적인 구현에서 주의 깊게 고려되어야 합니다. 크라켄은 거래소들과 월릿이 책임을 통해 신뢰를 쌓아야 하며 투명성에 대한 지역사회의 열망을 해소해야 할 책임이 있다고 생각합니다.

지난 수 주 동안 크라켄은 업계 최고 수준의 독립적이고 암호화로 검증된 감사를 성공적으로 개발하여 완성시켰습니다. 저희는 이러한 프로세스의 개요를 글로벌 디지털 통화 커뮤니티에 제출할 수 있게 되었음을 자랑스럽게 생각합니다. 크라켄은 비트코인 업계가 전통적인 금융서비스 업계를 능가하는 수준의 보장과 책임감을 제공할 수 있다고 여기고 있으며, 저희의 목표는 최적의 투명성을 지향하여 그 임무를 선도해 나가는 것입니다.

현재 상황

이 계획에 대한 추동력은 교환소/월렛들이 가지고 있는 비트코인 예치금들을 증명하자는 Greg Maxwell의 제안입니다. [1]

오늘날까지 비트코인 업계에 의해 만들어진 감사들은 대중에게 불투명하고, 피상적이며 독립적으로 검증이 가능한 암호화 검증이 없었습니다. 크라켄은 개념 증명을 제공하여 사람들이 따라올 수 있고 개선할 수 있는 디지털 화폐 생태계로부터의 더 큰 투명성과 책임에 대한 업계표준을 설정하는 일을 추구하고 있습니다.

높은 수준의 과정

맥스웰(Maxwell)의 제안에 따르면 비트 코인 회사는 잔액이 포함 된 모든 주소를 공개해야했습니다. 이 방법을 사용하면 거래소 또는 지갑 제공 업체의 비트 코인 지갑 및 총 보유, 상업적으로 민감한 정보 및 회사와 사용자에게 잠재적 인 보안 위험을 나타내는 정보를 공개적으로 알 수 있습니다. 더구나, 개인 정보 및 금융 활동의 이력과 궤적을 원인이나 정당한 절차없이 제 3 자에 의해 추적 할 수있는 사용자 개인 정보 침해는 허용되지 않습니다.

크라켄의 절차는 저희에게 총액, 주소 또는 열쇠를 공개할 것을 요구하지 않습니다. 크라켄 감사는 신뢰할 수 있는 감사자와 공개적으로 검증 가능한 암호화의 장점을 결합하고 활용함으로써 개인 정보 보호와 투명성 사이의 이상적인 균형을 가지고 있습니다.

비트코인이 우세한 암호화폐인 만큼 저희의 초기 감사는 비트코인 적립금만 담당하게 됩니다. 그러나 향후 개발을 위해 다른 자산에 대한 감사가 검토될 것입니다.

프로세스 개요

  • 제1단계 – 감사자가 크라켄의 전체 월릿 자금을 점검함

    크라켄은 감사자에게 당사의 모든 공공 주소를 주고 거기에 서명합니다. 서명 당시의 블록 해시는 서명된 메시지의 일부이며 서명이 작성된 시점을 위한 타임스탬프로 사용할 수 있습니다. 이들 공공 주소의 서명이 검증될 것이며 감사자는 비트코인 블록체인을 사용하여 특정 시점에서 이들 주소에 사용 가능한 총 금액을 추출하게 될 것입니다.

    이 단계에서 필요한 코드는 Payward의 COO인 Michael Gronager에 의해 작성되었으며 따라서 향후 그대로 오픈 소스가 될 수도 있습니다. 하지만 대부분의 코드는 리브코인(libcoin) 기반의 코드이기 때문에 이미 대부분 오픈 소스가 되어 있습니다.[2]

  • 제2단계 – 감사자가 크라켄 사용자들의 잔액이 크라켄 월릿의 자금과 맞는지 점검함

    크라켄은 감사자에게 당사 사용자들 각각의 BTC 잔액을 제공하고 머클 트리를 생성합니다. 감사자는 루트 노드 해시를 게시하여 모든 사람이 볼 수 있도록 하고, 루트 해시로 대표되는 총 자산이 그가 블록체인으로부터 당사의 월릿에서 본 가치에 아주 가까운 근사치인지를 확인합니다. 또한 이 흐름은 루트 노드까지로 이어지는 노드들 중 크라켄이 아무것도 숨기지 않음을 확실히 해줍니다.

    이 감사 단계의 경우 감사자는 트리를 생성하는 프로그램의 소스 코드에 접근할 수 있을 것이며 개별 계정은 데이터 파일의 균형을 잡아줍니다. 크라켄은 MIT 라이센스에 따라 이 단계에 대한 C++ 코드를 공개했습니다: https://github.com/payward/krakendb

  • 제3단계 – 사용자들이 독립적으로 자신들의 계정 잔고가 감사자가 이용한 데이터에 들어 있었던 것임을 검증함

    크라켄은 사용자들에게 당사가 감사자에게 보고한 금액과 더불어 (감사자가 게시한 금액과 일치하는) 그들의 계정에서 해당 루트까지의 노드(및 인접 노드)를 제공합니다 당사는 또한 그들의 노드에 대한 해시를 생성하는 데 사용되는 해싱 방법을 공개하며 그렇게 되면 그들은 그 노드가 당사가 그렇다고 주장하는 금액을 나타내고 있는지 검증할 수 있습니다.

    이를 통해 사용자들은 그들의 계정이 감사자가 검증한 데이터에 포함되어 있는지 스스로 독립적으로 확인할 수 있습니다.

취약점

이 부분에서는이 감사의 단점 중 일부를 설명합니다. 이것은 분명히 약점의 전체 목록이 아닙니다. 그러나 사용자에게 투명성을 중요하게 여기기 때문에 감사 프로세스에서 식별 한 특정 단점에 대한 비공식적 배경을 제공하고 있습니다.

물리적 자산과 달리 정보를 다른 사람이 소유하기 위해 소유물에서 제거 할 필요는 없습니다. 따라서이 감사 방법을 사용하는 크라켄 또는 다른 회사는 공격자가 개인 키를 복제하지 않았 음을 증명할 수 없습니다. 또한 감사 자금을 독점적으로 소유하고 있음을 증명할 수 없습니다. 저희는 감사 시점에 개인 키를 소유 한 사람 중 하나임을 증명할 수 있습니다.

전체 감사는 사전 고지 없이 온디맨드 방식으로 수행될 수 없습니다. 이 때 필요한 정보, 감사 구조, 업계 표준 콜드 스토리지 보안 관행을 감안할 때 기습적인 당일 감사는 가능하지 않습니다. 저희는 이전에 생성된 서명에 의존하여 더 자주 수행될 수 있는, 이전의 완전한 감사를 근거하여 잠재적인 '경량' 감사를 구상하고 있습니다.

감사는 신뢰할 수 있고 유능해야합니다. 커뮤니티는 감사인이 자신의 평판을 높이 평가하고 기술적으로 능력이 있다고 믿어야합니다. 이 감사 프로세스에는 피 감사인이 덜 기술적 인 또는 편집증적인 감사관을 속이는 기회가 몇 가지 있습니다. 또한 감사인이 의도적으로 또는 실수로 기밀 회사 및 고객 정보를 손상시킬 수있는 기회도 있습니다. 감사인과 피 감사 인 모두 컴퓨터, 감사 공간, 블록 체인, 인터넷 연결, 라우터, DNS 등을 제공하는 사람을 고려해야합니다. 만약 10억 달러의 사기 행각을 숨기는 것이 목표라면, 해당 감사를 손상시키기 위해 많은 노력을 기울일 거입니다.

감사는 실시간으로 지속적으로 갱신되지 않습니다. 마지막 감사 시간 이후 키가 손실되거나 자금이 도난되었을 수 있습니다. 전체 감사는 키가 손실되지 않았다는 확인을 갱신하지만 감사를 수행하기 위해 콜드 스토리지 키를 사용해야하기 때문에 더 큰 위협에 노출됩니다.

피 감사인은 감사를 통과하기 위해 일시적으로 자금을 빌리거나 실제 자금 소유자와 키를 공유 할 수 있습니다.

감사인은 피감사인의 위협에 결탁하거나 굴복할 수 있습니다.

정기적

크라켄은 지속적으로 정기적인 감사를 수행하려고 합니다. 보편적으로 신뢰할 수 있는 감사자가 없기 때문에, 저희는 매번 다른 감사자 또는 복수의 감사자를 이용할 수도 있습니다. 이는 특별 개별 감사자의 자격을 의심하고 있는 사람들을 만족시킵니다.

향후 변경 계획과 개선사항

크라켄은 당사 및 다른 사람들에게 도움이 될 수 있도록 감사 진행을 개선할 수 있는 개선사항에 대한 피드백을 커뮤니티로부터 받기를 희망합니다. 크라켄은 암호화폐 커뮤니티의 구성원으로서 DATA (www.datauthority.org) 와 같은 업계 기구와 협력하여 기본적인 기준과, 확장이 가능한 툴, 그리고 포괄적 매뉴얼을 만들어 동종업계에서 비슷한 감사를 실시할 수 있도록 도움을 주려고 합니다.

참고사항

[1] Zak Wilcox 의 요약: https://iwilcox.me.uk/2014/proving-bitcoin-reserves. 아이디어를 주신 Greg Maxwell 에게 감사를 표합니다.

[2] libcoin 은 비트코인을 모듈화 및 재사용 가능한 라이브러리로 탈바꿈 시킨 것입니다: https://github.com/libcoin/libcoin

크라켄 감사를 진행할때 고객님의 크라켄 계정을 확인하는 방법

또한 참조하세요: 크러켄의 적립금 증명 감사 프로세스.

이 설명서에서는 고객님의 크라켄 계정 잔액과 감사 대상에 포함된 사항들을 어떻게 암호화 된 방법으로 검증하는지를 설명합니다.

이검증에는 감사 당시 고객님의 계좌의 비트코인(XBT) 잔액이 반영될 것입니다.

 

  • 단계 1

    아직 로그인을 아직 하지 않았다면 고객님의 크라켄 계정으로 로그인을 하세요.

    https://www.kraken.com/로 가서 고객님의 브라우저의 주소 바가 "https://www.kraken.com/"를 보여주고 있는지 확인하세요.

  • 단계 2

    "자금 조달" 탭을 클릭 -> "감사" 하위 탭 -> 왼쪽에 있는 "비트코인 (XBT)".

    그림 1. 그림 1. 크라켄 비트코인 감사  페이지

  • 단계 3

    감사자에 의해 검증된 고객님의 계좌에 대한 정보를 보세요

    • 감사 시간 은 감사자가 사용한 시간 스탬프입니다.

    • 제출 코드는 64 비트의 솔트(salt) 입니다.

    • 감사 당시 고객님의 계정에 보관된 비트코인의 금액입니다. 이것은 크라켄이 감사자에게 제공한 여러분 계좌의 잔액 가치입니다.

    • 노트에는 해당 감사에 이용된 루트 해시(root hash)를 증명하는 감사자로부터 받은 정보가 포함되어 있습니다. 서명된 상세 보고서에 대한 링크도 제공됩니다.

    • 고객님의 노드 해시에서 루트 해시까지의 해시에는 인접한 해시가 포함되어 있습니다. 고객님이 직접 경로에 있는 해시 값에는 별표(*)가 표시되어 인접한 노드 해시와 구별이 됩니다. 이해시들을 이용하면 귀하의 노드가 해당 루트에 포함되어 있는지 검증해 볼 수 있습니다:

    • 가장 첫 번째 라인은 감사자가 제공한 루트 해시 값과 일치해야 합니다.

      만약 고객님의 해시 (리스트에서 a*가 들어 있는 가장 마지막 해시)를 검증해보고 싶다면 다음과 같이 해보세요:

      sha256(sha256(<submission code> || ":" || <amount with decimal point removed and leading 0's removed>))

      해당 값은 해시에서 부여된 가장 마지막 값과 일치해야 합니다.

      예시 코드

      제출 코드:  379377cd8190f9bf

      금액: 0.01500000

      Python

      import hashlib; print(hashlib.sha256(hashlib.sha256(b'379377cd8190f9bf:1500000').digest()).hexdigest());
      

      PHP

      echo hash('sha256', hash('sha256', '379377cd8190f9bf:1500000', true));
      

      결과

      66b51ba0f4a5cf8278acac6782ffdfb9a64b9f7c895bc308266b0757c7025b27
      

      고객님은 각 해시의 쌍(또는 "tuple")에 대한 해시를 수행하여 고객님의 머클 브랜치(Merkle branches)를 완전히 검증해 볼 수 있습니다. 형식은 다음과 같습니다:

      sha256(left-hash || right-hash)
      

      그 결과는 이전의 tuple 해시 (또는 루트 해시)를 그 안에 있는 a*와 일치시켜야 합니다. 이 작업은 모든 tuple에 대해 수행하도록 합니다.

      해당 루트 해시를 제외하고 모든 해시는 tuple로 부여되며, 이 순서에 따라 왼쪽 해시와 오른쪽 해시를 나타냅니다. a*는 고객님의 직접 노드를 나타내는 해시에 부여됩니다.

      예시 코드:

      해시:

      306daae528dc137c9053554c45e90a631ef859490a3ede651d488135602500a3* c3fb1f931c681f4a7b779fb19e107bba156cae78c3a928707c42b395b056541b* 5e01ee0fee85641dd5cd4e3005792f973a2a1362180783041eb1719163b1d21c
      

      Python

      import hashlib; print(hashlib.sha256(b'c3fb1f931c681f4a7b779fb19e107bba156cae78c3a928707c42b395b056541b5e01ee0fee85641dd5cd4e3005792f973a2a1362180783041eb1719163b1d21c'.decode('hex'))).hexdigest();
      

      PHP

      echo hash('sha256', hex2bin('c3fb1f931c681f4a7b779fb19e107bba156cae78c3a928707c42b395b056541b5e01ee0fee85641dd5cd4e3005792f973a2a1362180783041eb1719163b1d21c'));
      

      결과

      306daae528dc137c9053554c45e90a631ef859490a3ede651d488135602500a3