모든 글

읽는 데 7분

Merkle 묶음에서 파일 하나를 입증하기: 포함 증명서

여러 파일 해시가 하나의 Merkle 루트로 Cardano에 게시된 뒤, 포함 증명서는 특정 파일 하나가 그 묶음의 일부였음을 입증하는, 내려받을 수 있는 작은 파일입니다. 직접 자신의 브라우저에서 확인할 수 있고, CardanoWall을 신뢰할 필요가 없으며, 언제까지나 유효합니다.

파일 묶음을 Cardano에 게시할 때, 체인에 올라가는 것은 작은 지문 하나뿐입니다. 목록 전체를 대신하는 단일 Merkle 루트 말입니다. 덕분에 게시 비용은 낮게 유지됩니다. 그런데 자연스레 한 가지 의문이 따라옵니다. 체인에 루트만 있다면, 나중에 어떤 특정 파일 하나가 정말로 그 묶음에 있었음을 어떻게 입증합니까?

그 답이 바로 포함 증명서입니다. 특정 파일 하나의 해시가 그 게시된 묶음의 일부였음을 입증하는, 내려받을 수 있는 작은 파일입니다. 누구나 자신의 브라우저에서, 어떤 공개 Cardano 탐색기와 대조하든, CardanoWall을 전혀 신뢰하지 않고도 확인할 수 있습니다. 그리고 증명이 파일 안에 새겨져 있기 때문에, 언제까지나 계속 동작합니다.

이것은 Merkle 배칭의 일상적인 동반자입니다. 배칭은 수천 개의 파일에 한 번에 커밋하는 방법이고, 포함 증명서는 그중 하나를 다시 골라내 나중에 입증하는 방법입니다.

포함 증명서는 어떤 문제를 해결합니까?

작년에 묶음 하나로 파일 천 개를 게시했다고 상상해 보십시오. 계약서가 든 폴더 하나, 릴리스 산출물 한 벌, 하루치 감사 로그 같은 것들입니다. 그것들은 모두 하나의 Merkle 루트로 접혀 들어갔고, 그 루트는 Cardano 위에 타임스탬프가 찍혔습니다. 싸고, 간결하고, 끝입니다.

그런데 이제 그 파일들 가운데 딱 하나에 대해 누군가가 이의를 제기합니다. 가령 거래 상대가 "이 계약서가 마감 전에 존재했음을 보일 수 있습니까?"라고 물을 수 있습니다. 블록체인은 루트만 보관할 뿐, 파일도 목록도 없습니다. 그 트랜잭션을 가리켜 봐야 알려진 크기의 어떤 묶음이 존재했다는 것만 증명될 뿐, 이 문서 하나가 그 안에 있었다는 것까지는 증명되지 않습니다.

포함 증명서가 그 틈을 메웁니다. 작고 자기 완결적인 파일로서, 사실상 이렇게 말합니다. "이 파일의 해시는 이 Cardano 트랜잭션 뒤에 있는 묶음의 42번째 항목이며, 누구든 직접 돌려서 확인할 수 있는 정확한 계산이 여기 있습니다." 당신이 증명서를 건네면, 상대는 당신도, 당신의 계정도, 심지어 우리 웹사이트도 더 이상 존재할 필요 없이 그것을 확인할 수 있습니다.

증명서에는 실제로 무엇이 들어 있습니까?

봉인된 증거 꾸러미라고 생각하십시오. 세 부분으로 이루어집니다.

  • 당신 파일의 지문. 파일 자체가 아니라 그 해시뿐입니다. 증명서는 당신 문서의 내용을 결코 담지 않으므로, 파일이 비공개일 때에도 안전하게 공유할 수 있습니다.
  • 증명 경로. 짧은 "형제" 지문 목록으로, 이를 통해 누구나 당신 파일의 해시를 Merkle 트리 위로 다시 접어 올려 게시된 루트에 정확히 도달할 수 있습니다. 바로 이 부분이 증명서를 자기 완결적으로 만듭니다. 계산이 새겨져 있어, 묶음의 나머지를 당신에게 물어볼 일이 결코 없습니다.
  • 블록체인 앵커. 루트가 게시된 Cardano 트랜잭션, 블록체인이 그것에 기록한 시각, 그리고 누구나 직접 찾아볼 수 있도록 몇 개의 공개 탐색기 링크.

또한 그 증명서가 무엇을 입증하는지 평이한 문장으로 적은 claim 한 줄과, 그것을 독립적으로 검증하는 방법에 대한 짧은 안내도 들어 있습니다. 증명서 하나는 파일 하나를 다룰 수도, 여러 개를 한꺼번에 다룰 수도 있습니다. 각각에는 고유한 증명 경로와 명확한 verified 표시가 붙습니다.

CardanoWall은 이 꾸러미를 몇 가지 형식으로 건넬 수 있습니다. JSON 파일(도구가 다시 확인할 수 있는, 기계가 읽을 수 있는 원본)과 PDF(사람과 법무 파일을 위한, 읽기 쉽고 인쇄할 수 있는 버전으로, JSON이 첨부 형태로 문서 안에 담겨 있어 문서 그대로 기계 검증이 가능합니다)입니다.

어떻게 받습니까?

트랜잭션 페이지에서, 자신의 브라우저로, 직접 만듭니다.

묶음을 실은 트랜잭션의 공개 페이지를 엽니다. 레코드에 Merkle 루트가 들어 있으므로, 페이지는 포함 확인 기능을 제공합니다. 거기서부터는 작은 두 단계입니다.

  1. 어떤 파일인지 알려 줍니다. 파일의 해시를 붙여넣거나, 파일을 페이지에 끌어다 놓기만 하면 됩니다. 브라우저가 로컬에서 해시를 계산하며, 결코 업로드하지 않습니다.
  2. 결과를 읽습니다. 페이지는 묶음의 리프 목록을 가져와 증명을 다시 계산한 뒤, 명확한 초록(당신 파일이 묶음에 있음) 또는 빨강(없음) 결과를 보여 줍니다.

초록일 때, 증명서를 내려받습니다. JSON, PDF, 또는 둘 다입니다. 그 내려받은 파일이 곧 들고 다닐 수 있는 증명입니다. 이메일로 보내고, 보관하고, 계약서에 첨부하고, 데이터 룸에 넣으십시오. 이제 그것은 CardanoWall과 완전히 독립적입니다.

이 모든 일은 클라이언트 측에서 일어납니다. 우리가 서버에서 증명서를 만들어 놓고 그것을 믿어 달라고 부탁하는 것이 아닙니다. 당신 자신의 브라우저가 그 일을 합니다. 결과가 신뢰할 만한 이유가 바로 그것입니다.

왜 누구도 CardanoWall을 신뢰할 필요가 없습니까?

증명서의 그 무엇도 우리가 정직하다거나, 온라인이라거나, 심지어 사업을 계속하고 있다는 데 기대지 않기 때문입니다.

포함 증명서 안에는 두 가지 주장이 들어 있고, 둘 다 누구나 스스로 확인할 수 있는 것입니다.

  • 당신의 파일이 묶음에 있었다. 검증자는 당신 파일의 해시를 증명 경로를 따라 접어 올려, 그것이 게시된 루트를 재현하는지 확인합니다. 이것은 순수한 산술입니다. 증명서 파일만 있으면 되고, 그 밖에는 아무것도 필요 없습니다. 당신 파일이 단 1비트라도 바뀌었다면, 접어 올린 결과는 다른 루트에 떨어지고 확인은 실패합니다.
  • 루트가 정말로 Cardano 위에 있다. 검증자는 어떤 공개 Cardano 탐색기(Cardanoscan, AdaStat, 또는 직접 고른 어느 것이든)에서 그 트랜잭션을 찾아, 같은 루트가 온체인 레코드에 들어 있음을 확인합니다. 그 조회에는 CardanoWall 서버가 전혀 관여하지 않습니다.

이 두 확인을 합치면, 블록체인이 그 트랜잭션에 찍은 시각까지(또는 그 이전에) 파일이 존재했음이 증명됩니다. 그리고 그 시각은 Cardano에서 오는 것이지 우리에게서 오는 것이 아닙니다. 우리는 블록을 빨리 감을 수도, 트랜잭션 날짜를 앞당겨 적을 수도, 역사를 슬쩍 고쳐 쓸 수도 없습니다. 언제 일어났는지는 블록체인이 정합니다. 회사의 시계를 믿어 달라고 부탁하는 대신 공개 체인에 닻을 내리는 일의 핵심이 바로 이것입니다.

CardanoWall이 내일 사라지더라도, 우리가 그동안 발급한 모든 증명서는 계속 검증됩니다. 오픈소스 cardanowall 명령줄 도구와, 이 형식을 이해하는 어떤 독립 도구라도 같은 확인을 다시 돌릴 수 있습니다.

flowchart LR
  A["당신의 파일"] -->|"로컬에서 해시"| B["파일 해시"]
  B --> C["증명 경로를 접어 올림"]
  C --> D["다시 계산한 루트"]
  E["Cardano 트랜잭션<br/>(공개 탐색기)"] --> F["게시된 루트 + 블록 타임"]
  D -->|"일치해야 함"| F
  F --> G["블록 타임까지<br/>(또는 그 이전에) 존재했음"]

증명서가 입증하지 않는 것은 무엇입니까?

증명서는 한 가지에 대해서는 정확하고, 그 밖의 모든 것에 대해서는 침묵합니다. 그리고 그 점에 솔직한 것이야말로 증명서를 신뢰할 만하게 만듭니다.

증명서가 입증하는 것은, 특정 파일 하나의 해시가 블록체인의 블록 타임까지(또는 그 이전에) 존재했으며 커밋된 묶음의 일부였다는 것입니다. 그것이 전부입니다. 구체적으로는 이렇습니다.

  • 누가 파일을 만들었는지는 증명하지 않습니다. 증명서는 작성자에 대해 아무 말도 하지 않습니다. 묶음을 게시한 것은 누구든 될 수 있습니다. (Label 309에서 작성자 표시는 별개의 선택적 서명이며, 결코 전제되지 않습니다. 증명이 증명하지 않는 것을 참고하십시오.)
  • 파일이 참이거나, 정확하거나, 적법함을 증명하지 않습니다. 바이트가 특정 시점까지 존재했음은 증명하지만, 그 내용이 옳다는 것까지는 증명하지 않습니다.
  • 파일이 유일한 버전이거나 원본임을 증명하지 않습니다. 바로 이 파일이 묶음에 있었음은 증명하지만, 다른 버전이 존재하지 않는다는 것까지는 증명하지 않습니다.
  • "적격" 타임스탬프가 아닙니다. 이것은 블록체인에 닻을 내린 타임스탬프로, 다른 블록체인 타임스탬프와 같은 계열입니다. 시점에 대한 강력한 보강 증거이긴 하지만, 규제 기관이 발급하는 eIDAS 적격 전자 타임스탬프는 아닙니다. 어떤 절차가 적격 타임스탬프를 명시적으로 요구한다면, 이것 단독으로는 그 기준을 충족하지 못합니다(존재 증명과 타임스탬프 기관의 비교를 참고하십시오).

증명서의 가치는 바로 아무것도 부풀려 주장하지 않는다는 데 있습니다. 시점과 무결성을 단단히 못 박고, 의미는 그것을 둘러싼 문서와 사람들에게 맡깁니다.

이것은 OpenTimestamps와 어떻게 관계됩니까?

OpenTimestamps를 이미 아신다면, 이 발상이 익숙하게 느껴질 것입니다.

OpenTimestamps는 작은 .ots 증명 파일을 줍니다. 들고 다닐 수 있는 자기 완결적인 타임스탬프로, 그것을 만든 서비스를 신뢰하지 않고도 누구나 나중에 검증할 수 있습니다. 포함 증명서도 같은 모양의 것, 즉 누구에게나 건넬 수 있는 들고 다니는 증명 파일입니다. 다만 알아 둘 만한 두 가지 차이가 있습니다.

타임스탬프 기관이 Cardano 블록체인이며, 시간은 달력 서버가 아니라 당신의 루트를 실은 블록에서 가져옵니다. 그리고 증명 계산은 이 표준의 다른 곳에서 쓰이는 것과 같은 Merkle 트리 구조이므로, 증명서 하나만으로 커밋된 큰 묶음에서 파일 하나를 골라낼 수 있습니다. 정신은 같고, 닻이 다릅니다.

더 자세한 항목별 대조는 존재 증명과 OpenTimestamps 비교를 보십시오.

한 줄 요약

여러 파일을 하나의 Merkle 루트로 게시하면 블록체인 비용을 아주 작게 유지할 수 있습니다. 포함 증명서는 그 파일들 가운데 어느 하나든 나중에 정말로 묶음에 있었음을 입증하는 방법입니다. 작은 내려받기 파일 하나로, 자신의 브라우저에서, 어떤 공개 Cardano 탐색기와 대조하든 확인할 수 있고, 시간은 체인이 공급하며, CardanoWall을 신뢰할 필요가 없습니다. 증명 경로가 파일 안에 새겨져 있으므로, 특정 도구나 계정, 회사가 사라진 뒤에도 한참 동안 증명서는 계속 동작합니다.

더 읽을거리

merkleproof-of-existencelabel-309