커밋먼트 스킴 (Commitment Scheme)
커밋먼트 스킴(Commitment Scheme)은 어떤 값을 숨긴 채 먼저 '확정'해 두고, 나중에 그 값을 공개(open)해 확인시키는 암호 기법입니다. 공개 전에는 내용을 알 수 없어야 하고(은닉성, hiding), 일단 확정한 뒤에는 다른 값으로 바꿀 수 없어야(구속성, binding) 합니다. 영지식 증명, 전자 경매, 블록체인 프로토콜의 기본 부품입니다.
자세히 알아보기
커밋먼트는 두 단계로 이루어집니다. ① 커밋 단계: 값 m과 무작위 값 r로 c = Commit(m, r)을 계산해 상대에게 보냅니다. ② 공개 단계: 나중에 (m, r)을 공개하고, 상대는 Commit(m, r)이 c와 같은지 확인합니다. 가장 단순한 구현은 해시 커밋먼트 c = H(m ‖ r)입니다. r이 없으면 '예/아니오'처럼 후보가 적은 값은 전수 대입으로 쉽게 알아낼 수 있으므로, 충분히 긴 무작위 값이 필수입니다.
은닉성과 구속성은 동시에 '완전(무조건적)'일 수 없습니다. 페더슨 커밋먼트는 완전 은닉·계산적 구속이고, 해시 커밋먼트는 계산적 은닉·(충돌 저항 가정하의) 계산적 구속입니다. 용도에 따라 어느 쪽을 무조건적으로 보장할지 선택합니다.
고급 형태로는 여러 값을 한 번에 커밋하고 일부만 여는 벡터 커밋먼트(머클 트리가 대표적), 다항식을 커밋하고 특정 점의 값만 여는 다항식 커밋먼트(KZG, FRI, IPA)가 있습니다. 이들은 현대 SNARK·STARK의 핵심 구성 요소입니다.
커밋-공개 방식은 봉인 입찰 경매에도 쓰입니다. 입찰자는 먼저 입찰가의 커밋먼트만 제출하고 마감 후 일제히 공개하므로, 다른 사람의 입찰가를 보고 금액을 조정할 수 없습니다. 영지식 증명에서도 증명자가 먼저 중간값을 커밋하고, 검증자의 도전값을 받은 뒤 일부를 여는 구조가 반복됩니다.
블록체인·암호화폐에서는
블록 헤더의 머클 루트는 블록 안 모든 트랜잭션에 대한 커밋먼트로, SPV 지갑이 트랜잭션 포함 여부를 확인하는 근거입니다. Ethereum의 ENS 도메인 등록은 '커밋-공개(commit-reveal)' 절차를 써서 다른 사람이 원하는 이름을 보고 먼저 가로채는 프런트러닝을 막습니다. EIP-4844 블롭은 KZG 커밋먼트로, Monero의 금액은 페더슨 커밋먼트로 표현됩니다.
쉽게 말하면
답을 적은 쪽지를 봉인된 상자에 넣어 먼저 맡겨 두는 것입니다. 상자를 열기 전에는 아무도 답을 모르고, 맡긴 사람도 나중에 답을 바꿀 수 없습니다.
예시
가위바위보를 온라인으로 공정하게 하려면, 각자 H(선택 ‖ 무작위 값)을 먼저 공개한 뒤 둘 다 받았을 때 선택과 무작위 값을 공개합니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.