Skip to content

암호화 프로토콜

Commit / Reveal

Round t에서, 비밀 값 s_i ∈ {0,1}^128을 가진 사용자 i는 답변 b_i ∈ {0,1}을 선택하고 다음을 게시합니다:

ci=HMAC-SHA256(siroundt,bi)

여기서 는 연결(concatenation)을 나타내며, round_t는 공개된 고유 Round (라운드) 식별자입니다.

Reveal (리빌) 단계에서 사용자 i(s_i, b_i)를 브로드캐스트합니다. Round Engine (라운드 엔진) 및 모든 제3자 검증자는 HMAC-SHA256(s_i ‖ round_t, b_i)를 계산하여 이전에 게시된 c_i와 일치하는지 확인합니다. 일치하지 않는 Reveal은 거부되며, Reveal하지 않은 사용자는 Round에서 제외되지만 해당 Commit (커밋)은 감사(audit)를 위해 Merkle Root (머클 루트)에 남아 있습니다.

일반 해시 대신 HMAC을 사용하는 이유

일반 Commit H(s_i ‖ b_i)는 두 가지 공격에 취약합니다:

  1. 레인보우 사전 계산. s_i가 짧은 경우(모바일 UX 제약으로 인해 최대 16바이트의 기기 내 난수로 제한됨), 비밀 공간 전체에 걸쳐 H(s ‖ 0)H(s ‖ 1)의 사전 계산된 테이블이 Reveal 전에 Commit을 해독할 수 있습니다.
  2. 크로스-Round 재사용. Round 바인딩이 없으면 Round t에서 유효한 Commit이 Round t' ≠ t에서 증거로 재사용될 수 있습니다.

적절한 크기의 키(여기서는 128비트)와 Round 바인딩(round_t를 키가 적용된 메시지에 연결)을 사용하는 HMAC은 두 가지 문제를 모두 제거합니다. 표준 가정 하에서 HMAC 구조의 의사난수성(pseudorandomness)은 s_i 없이는 공격자가 b_i = 0b_i = 1을 구별할 이점이 무시할 수준임을 보장합니다.

s_i는 어디서 오는가

각 사용자 기기는 Round 진입 시 브라우저의 crypto.getRandomValues(new Uint8Array(16))를 통해 s_i를 생성합니다. 이 값은 Round 기간 동안만 WebApp의 세션 스토리지에 저장됩니다. Reveal 이후에는 폐기됩니다. 사용자가 입력한 비밀은 관여하지 않습니다.

Round 중간에 세션을 지우는 사용자는 해당 Round를 포기하게 됩니다(키를 더 이상 보유하지 않은 Commit을 Reveal할 수 없음). Reputation Score (평판 점수)는 소폭 감소합니다.

Round Merkle Root

Settle (정산) 단계에서 Engine은 다음을 계산합니다:

roott=Merkle({(i,ci,bi,outcomei):iParticipantst})

루트는 24시간마다 TON에 일괄 정산되도록 대기열에 추가됩니다. TON의 단일 트랜잭션으로 약 5,760개의 Round 루트(60초당 1개 × 86,400 / 60 / 15 상각)를 Commit할 수 있습니다.

모든 참가자는 Engine에서 Merkle proof (머클 증명)를 가져와 Engine을 신뢰하지 않고도 온체인 루트에 대해 자신의 포함 여부를 확인할 수 있습니다.

이의 제기 기간

24시간의 이의 제기 기간 동안 온체인 챌린지가 가능합니다: 사용자는 온체인 루트가 오프체인 Engine의 주장과 일치하지 않음을 보여주는 Merkle proof를 제출합니다. 챌린지가 성공하면 해당 Round는 무효화되고 재정산되며, 운영자는 1,000 $POP (팝 토큰)의 패널티를 Treasury (트레저리)에 지불합니다. 이의가 제기되지 않은 루트는 최종 확정됩니다.

Reputation Score

r_i ∈ [0, 1]은 사용자 정직성에 대한 베이지안 추정치로, 각 Round마다 업데이트됩니다:

ri(t+1)=ri(t)λ(oi(t))ri(t)λ(oi(t))+(1ri(t))(1λ(oi(t)))

여기서 λ(o_i^{(t)})는 관찰(참여, 제때 Reveal, 소수 확률과의 편차, 이상 징후)에 대한 우도 함수입니다. 초기 r_i = 0.5 (정보 없는 사전 확률)입니다.

Reputation은 비활동 시 δ = 0.01 / 일의 비율로 감소합니다. Reputation은 0.99를 초과할 수 없으며(인식론적 겸손), 0.01 미만으로 떨어질 수 없습니다(회복 가능).

Reputation Score는 정산 시 Trust Ladder (트러스트 래더) Multiplier (멀티플라이어)에 곱해집니다:

effective weighti=ri×αT(i)

공식 보안 논증

HMAC-SHA256이 의사난수 함수(PRF)이고 s_i가 균일하게 무작위이며 공격자에게 알려지지 않았다는 가정 하에, 효율적인 공격자는 다음을 수행할 수 없습니다:

  1. b_i = 0 vs b_i = 1에 대한 Commit c_i = HMAC(s_i ‖ round_t, b_i)를 무시할 수 없는 이점으로 구별합니다. (은닉성)
  2. (s'_i, b'_i)(s_i, b_i)를 찾아 HMAC(s'_i ‖ round_t, b'_i) = c_i를 만족시킵니다. (HMAC의 충돌 저항성 하에서의 바인딩)
  3. DRAND 및 TON-VRF 검증자 세트 모두와 공모하지 않고 다음 Round 시드를 예측합니다. (Oracle & Randomness 참조)

이것들은 공정한 Commit / Reveal 조정 게임에 필요한 세 가지 속성입니다. 프로토콜은 추가적인 암호화 가정을 필요로 하지 않습니다.

감사 및 오픈소스

Round Engine 및 검증 로직은 MIT 라이선스 하에 오픈소스로 제공됩니다. 저장소는 github.com/cashpop-protocol/round-engine에 있습니다. Trail of Bits의 전체 감사는 Phase 2 (2026년 4분기)를 목표로 합니다.

Built on TON.