검증

모든 경품 이벤트 추첨을 어떻게 확인할 수 있는가

추첨은 주최자와 우리를 포함해 그 누구도 당첨자를 고르거나 예측할 수 없을 때에만 공정합니다. GetSocialExport가 당첨자를 어떻게 추첨하는지, 그리고 누구나 증명서로부터 추첨을 어떻게 확인할 수 있는지를 여기서 정확히 설명합니다.

추첨의 네 단계

  1. 참가자 명단이 잠깁니다. 주최자의 확장 프로그램이 댓글을 수집하고, 경품 이벤트 규칙을 적용한 뒤, 자격을 갖춘 참가자 명단을 당사 서버로 전송합니다. 명단은 고정된 순서로 정렬되고 그 SHA-256 지문이 시간과 함께 기록됩니다. 그 이후로는 이름 하나만 바꿔도 지문이 달라집니다.
  2. 미래의 난수가 선택됩니다. 그 순간 서버는 약 30초 뒤에야 공개될 drand 라운드를 선택합니다. drand는 League of Entropy(Cloudflare, Protocol Labs, 대학 등)가 운영하는 공개 난수 비컨입니다. 그 숫자는 예측하거나 조작할 수 없으며, 각각에는 누구나 확인할 수 있는 서명이 담겨 있습니다.
  3. 당첨자가 계산됩니다. 라운드가 공개되면 경품 이벤트 코드, 추첨 번호, 명단 지문, 난수로부터 시드가 만들어집니다. 당첨자는 그 시드에서 SHA-256으로 편향 없이 선택되며, 규칙에 정해진 보너스 응모권을 가진 참가자에게만 추가 가중치가 부여됩니다.
  4. 모든 것이 공개됩니다. 증명서에는 당첨자, 지문, 라운드, 시드, 명단이 잠긴 시각, 사유가 적힌 모든 재추첨, 그리고 (주최자가 비공개로 설정하지 않은 한) 참가자 명단 전체가 표시됩니다.

증명서에서 확인할 수 있는 것

아무 증명서나 열어(QR 코드를 스캔해) 보면, 브라우저가 우리를 신뢰할 필요 없이 스스로 확인합니다.

  • 공개된 참가자 명단이 추첨 전에 기록된 지문과 일치합니다.
  • 난수가 drand에서 온 것이며, League of Entropy의 유효한 BLS 서명이 있습니다.
  • 명단이 그 난수가 존재하기 전에 잠겼습니다.
  • 추첨을 다시 계산하면 정확히 같은 당첨자가 나옵니다.

또한 주최자가 명단을 비공개로 두더라도, 참여하셨나요?에 이름을 입력하면 자신이 추첨에 포함되어 있었는지 확인할 수 있습니다.

증명서가 증명하지 못하는 것

추첨 자체는 증명 가능한 방식으로 공정합니다. 증명서는 주최자가 합리적인 규칙을 적용했는지, 상품을 전달했는지까지는 증명할 수 없습니다. 참가자 명단은 주최자 본인의 확장 프로그램에서 오는 것이며, 그렇기에 참가자가 확인할 수 있도록 공개되고, 그렇기에 모든 재추첨이 그 사유와 함께 표시됩니다.

기술적 세부 사항

  • 알고리즘: socialexport-draw-v1. 표준 명단: 참가자마다 한 줄, id⇥이름⇥응모권, id 순으로 정렬해 줄바꿈으로 연결; 지문 = 그 텍스트의 SHA-256.
  • 난수: drand 네트워크 quicknet, 체인 52db9ba70e0cc0f6…, 3초마다 한 라운드, G1 위의 BLS 서명(RFC 9380).
  • 시드: 알고리즘 이름, 경품 이벤트 코드, 추첨 번호, 명단 지문, 라운드, 난숫값을 줄바꿈으로 연결한 것의 SHA-256.
  • 선택: SHA-256(시드 ‖ 카운터)로 64비트 숫자를 생성; 범위의 가장 큰 배수를 넘는 값은 버림(모듈로 편향 없음); 선택할 때마다 당첨자와 그 응모권을 제거합니다.
  • 증명서는 각 명단이 언제 기록되었는지 증명하기 위해 당사 서버(ECDSA P-256)가 서명합니다. 공개 키: MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEQdshCP/QsGG2k29W80CHSmWbwYpBNgrrIjTf0qPyQuB8cXXLxsCRaty97SO44XaM3aYr6PMwI4dYc/MnSQ3/aw==

직접 검증 가능한 경품 이벤트 열기 →