공급업체가 카드를 제시하지 않고도 거래 자격을 증명한다면?

발행: (2026년 5월 24일 PM 08:25 GMT+9)
9 분 소요
원문: Dev.to

Source: Dev.to

이상한 협상 문제 하나를 소개하겠습니다.
상황을 상상해 보세요: 기업 에너지 구매자는 수소 공급자가 최소 3,000 MWh의 인증된 그린 크레딧을 보유하고 있다는 것을 확인해야 계약을 체결합니다. 충분히 합리적인 요구죠. 공급자는 크레딧을 가지고 있고, 거래를 원합니다. 그래서 실제 재고량을 알려줍니다.

그 순간 방 안 분위기가 바뀝니다.
구매자는 이제 공급자가 8,500 MWh를 보유하고 있다는 사실을 알게 됩니다. 갑자기 구매자는 공급자가 절박하지 않다는 것을 명확히 파악하게 되고, 협상력이 이동합니다. 거래 조건이 공급자에게 불리하게 바뀔 것이며, 이미 손을 보여버렸기 때문에 공급자는 어쩔 수 없습니다.

이 문제를 계속 생각하다가, 이것이 단순히 협상 문제가 아니라 정보 구조 문제라는 걸 깨달았습니다. 공급자는 “예, 저는 자격이 있습니다”라고 말하고 싶지만 “여기 제가 정확히 얼마나 가지고 있는지 보여드리겠습니다”라고는 하고 싶지 않았습니다.

그래서 제가 만든 것이 H2Ledger입니다. 이는 그린 수소 크레딧을 위한 탈중앙화 마켓플레이스로, 공급자는 실제 양(actualAmount) ≥ 임계값(threshold)임을 스마트 계약에 암호학적으로 완전하게 증명할 수 있지만, 실제 숫자는 어디에도 나타나지 않습니다. 체인 상에도, 증명 안에도, 전송 중에도, 어디에도 나타나지 않죠.

이를 가능하게 하는 도구가 영지식 증명(zero‑knowledge proof) 입니다. 어떻게 동작하는지, 코드가 어떻게 생겼는지, 그리고 제가 다르게 했으면 좋았을 부분을 보여드리겠습니다.
두려워하실 필요 없습니다.


영지식 증명이란?

친구가 금고 조합을 알고 있다는 것을 입증하라고 도전했지만, 숫자를 말하고 싶지는 않은 상황을 떠올려 보세요. 영지식 증명은 비밀을 공개하지 않으면서 그 진술이 옳다는 것을 증명할 수 있게 해 주는 수학적 프로토콜입니다.

정확히는 세 가지 속성이 필요합니다.

  1. 완전성 (Completeness): 진실을 말하고 올바른 비밀을 가지고 있다면 언제든지 유효한 증명을 만들 수 있다.
  2. 음성성 (Soundness): 거짓말을 하면 유효한 증명을 만들 수 없다. 수학적으로 부정 행위가 계산적으로 불가능하도록 만든다.
  3. 영지식 (Zero‑knowledge): 증명을 검증하는 사람은 진술이 참인지 거짓인지만 알게 되고, 그 외의 정보는 전혀 누출되지 않는다.

H2Ledger에서 검증하고자 하는 진술은 actualAmount >= threshold 입니다. 비밀(“증인”)은 actualAmount이며, 증명을 검증하는 주체는 사람이 아니라 EVM‑호환 블록체인 위에 배치된 Solidity 스마트 계약입니다.

신뢰가 필요 없습니다. 중개자도 필요 없습니다. 오직 수학만이 작동합니다.


현재 상황은 위험합니다.

수소 크레딧 시장은 현재 다음과 같은 문제에 직면해 있습니다.

  • 종이 기반 인증 체인: 온체인 앵커가 없으며, 동일한 인증 크레딧이 여러 구매자에게 중복 제시될 수 있다. 공유 원장이 없어 이를 잡아낼 방법이 없다.
  • 규제 프레임워크가 다른 사일로형 레지스트리: 독일 구매자와 칠레 공급자는 서로 다른 인증 기준을 사용해 검증이 어렵다.
  • 투명성 vs 불투명성 선택 강요: 크레딧 잔액을 퍼블릭 블록체인에 올리면 경쟁자가 실시간으로 재고를 볼 수 있다. 오프체인에 두면 신뢰 없는 결제 메커니즘이 사라진다.

영지식 증명은 이 시소에서 완전히 벗어날 수 있게 해 줍니다. 결제는 공유 원장에 기록하고, 기초 수치는 완전히 비공개로 유지합니다. 두 마리 토끼를 동시에 잡는 것이죠.


시스템 구조

시스템은 서로 통신하는 세 개의 레이어로 구성됩니다.

[ Supplier (off-chain) ]
        |
        | Private: actualAmount (stays here, never transmitted)
        v
[ Circom Circuit + Groth16 Prover ]
        |
        | Outputs: proof.json (256 bytes) + public.json (threshold only)
        v
[ GreenHydrogenMarketplace.sol ]
        |
        | Delegates the heavy cryptographic check to:
        v
[ Verifier.sol ]  -->  true / false

공급자의 실제 재고 수치는 절대 머신을 떠나지 않습니다. 체인에 올라가는 것은 256 바이트 크기의 증명과 공개 임계값뿐입니다. 스마트 계약은 증명을 검증하고, 유효하면 주문 상태를 fulfilled 로 전환합니다. 이것이 전체 정산 흐름입니다.


회로(Circuit)와 코드

회로는 ZK 증명 시스템이 평가하는 프로그램입니다. 저는 Circom 2.0 으로 회로를 작성했으며, 이는 연산 제약식 시스템을 표현하기 위한 도메인‑특화 언어입니다. 핵심 템플릿은 다음과 같습니다.

template ThresholdVerification(n) {
    signal input actualAmount;    // Private: never leaves the prover's machine
    signal input threshold;       // Public: the buyer's stated minimum
    signal output isValid;        // 1 if actualAmount >= threshold, else 0

    // Uses LessThan from circomlib to prove:
    // NOT (actualAmount = threshold)
}

컴파일하면 193개의 와이어와 128개의 R1CS 제약식이 생성됩니다.

  • 64개의 제약식은 actualAmountthreshold를 각각 64비트 이진수로 분해합니다.
  • 나머지 64개는 비트‑단위 비교기를 구현해 어느 숫자가 큰지 판단합니다.

64비트 선택 이유: 기업 시장에서 수소 거래량은 수백만 MWh 단위이며, 64비트 필드는 2^64까지 커버합니다. 이는 실제 거래 규모보다 약 2^40 정도 여유가 있어 실용적인 상한 문제는 없습니다.

Groth16 프로버는 회로, 증인, 그리고 설정 단계에서 만든 proving key를 입력받아 BN254 타원곡선 위의 세 개 그룹 원소를 출력합니다.

π_a, π_b, π_c

이 세 원소가 바로 증명이며, 직렬화하면 언제나 정확히 256 바이트가 됩니다. 고정 크기 덕분에 가스 비용이 예측 가능하고, ABI 인코딩

0 조회
Back to Blog

관련 글

더 보기 »

내 스킬

프로젝트를 위한 AI 지시문을 만들고, 설치하고, 관리하세요 — 코딩이 필요 없습니다. CREATE 이름을 정하고, 카테고리를 선택하고, 원하는 것을 설명하세요 — 마법사가 자동으로 구성합니다.