EIP-8321 해시체인 RANDAO (Hash-Chain RANDAO)

Hegota 포함 제외 (DFI) · 합의·스테이킹 · 원문 상태 Draft · 2026-07-05 작성

RANDAO의 BLS 서명 기반 난수 기여를 양자내성 있는 해시체인 커밋-리빌 방식으로 바꿉니다. 검증자가 미리 등록한 해시체인을 블록 제안 때마다 한 칸씩 거꾸로 공개하는 구조입니다.

왜 필요한가

지금 비콘체인의 난수(RANDAO)는 블록 제안자가 에포크 번호에 BLS 서명을 해 기여하는 방식입니다. BLS 서명은 메시지와 공개키가 정해지면 유효한 서명이 하나뿐이라는 유일성이 있어 제안자가 자기 기여를 입맛대로 고르는 그라인딩을 막아 줍니다. 그런데 BLS는 양자내성이 없습니다. 충분히 강한 양자컴퓨터(CRQC)는 공개키에서 비밀키를 복구할 수 있고 그러면 공격자가 검증자들의 미래 기여와 제안자 순서를 멀리까지 미리 계산할 수 있습니다. 예측이 가능해지면 기존의 '공개하거나 감추거나' 편향 공격도 세집니다. 지금은 에포크 끝의 연속된 k개 슬롯을 잡아야 2^k개 후보 중 고를 수 있지만 정직한 기여를 전부 예측하는 공격자는 믹싱 구간 안의 아무 k개 슬롯이면 충분합니다. 게다가 합의 계층에 도입이 계획된 해시 기반 서명(lean 서명, XMSS 계열)은 솔트가 있어 유일성이 없고 그대로 RANDAO에 쓰면 그라인딩이 가능합니다. 해시체인은 서명 자체를 없애 이 의존을 끊습니다.

무엇이 바뀌나

지금

EIP-8321 이후

누구에게 영향이 있나

심층 설명

해시체인 구성과 0 금지 규칙

검증자는 무작위 32바이트 비밀값 c_0을 뽑고 c_i = blake3(HASH_CHAIN_RANDAO_DST + c_{i-1})로 길이 n의 체인을 만든 뒤 끝값 c_n을 커밋으로 등록합니다. HASH_CHAIN_RANDAO_DST(b'HASH_CHAIN_RANDAO')는 프로토콜의 다른 해시와 충돌하지 않게 하는 도메인 분리 접두사이며 링크별 인덱스를 담지 않아 검증자는 체인 값만 저장하면 됩니다. 공개는 역순으로, 첫 리빌이 c_{n-1}, 다음이 c_{n-2}입니다. 공개된 값이 새 커밋으로 저장되므로 프로토콜은 n이나 현재 위치를 알 필요가 없습니다. 체인 값은 0 워드가 될 수 없습니다. 0은 미등록 표시로 쓰이기 때문이며 0인 링크가 있으면 체인을 다시 생성해야 합니다. n은 2^16 이상이 권장되며 생성은 밀리초, 전체 저장은 약 2MB입니다. 체인은 제자리 연장이 불가능해 c_0까지 쓰면 고갈되지만 공격적인 가정에서도 검증자는 연간 100번 정도 제안하므로 권장 길이면 수백 년 분량입니다. 고갈되거나 비밀값을 잃으면 퇴장 후 재진입이 유일한 복구 수단입니다.

process_randao의 두 경로와 해시 누산기

process_randao는 저장된 커밋이 0이 아니면 해시체인 경로를 탑니다. hash_chain_reveal이 0이 아닌지, blake3(HASH_CHAIN_RANDAO_DST + reveal)이 저장된 커밋과 같은지, randao_reveal이 G2_POINT_AT_INFINITY인지 확인한 뒤 mix = blake3(기존 mix + reveal)로 누적하고 공개값을 새 커밋으로 저장합니다. 커밋이 0이면 기존대로 BLS 서명을 검증하고 xor로 섞습니다. 해시체인 경로가 xor 대신 해시 누산기를 쓰는 이유는 커밋 복사 공격 때문입니다. 커밋에는 신원이 없어 남의 현재 커밋을 베껴 유효한 등록을 만들 수 있는데 선형 xor 누산기라면 같은 값을 다시 넣어 피해자의 기여를 상쇄할 수 있습니다. 해시는 효율적인 역연산이 없어 같은 값을 다시 넣어도 무관한 새 mix가 나올 뿐이므로 이 공격이 원천 차단됩니다. 그래서 검증자별 개인화 없이 리빌 원값을 그대로 섞을 수 있습니다. 0 리빌을 거부하는 단언은 '0은 미등록'이라는 불변식을 지키는 장치입니다.

등록 연산과 3에포크 활성화 지연

등록은 RandaoCommitmentRegistration(validator_index, commitment)에 검증자의 BLS 키로 서명해 블록에 싣는 일회성 연산입니다. 서명 도메인 DOMAIN_RANDAO_COMMITMENT_REGISTRATION(0x0F000000)은 제네시스 포크 버전으로 계산해 BLSToExecutionChange처럼 포크를 넘어도 유효합니다. 블록당 MAX_RANDAO_COMMITMENT_REGISTRATIONS = 128개까지 실을 수 있어 약 100만 검증자 전체가 이틀 안에 등록할 수 있고 마감은 없습니다. 등록은 저장된 커밋이 0일 때만 유효하고 검증자당 대기 중 등록은 하나만 허용되므로 재사용과 큐 채우기가 모두 막힙니다. 활성화는 포함 에포크 N 기준 N + COMMITMENT_REGISTRATION_DELAY(= 3)입니다. 에포크 E의 제안자 추첨 시드는 E - MIN_SEED_LOOKAHEAD - 1 말에 확정되는데 N + 3의 시드는 포함 이후인 N + 1 말에 확정되므로 등록 시점에는 자신이 활성화 에포크에 제안할지조차 알 수 없습니다. 유리한 후보 체인을 계산해 등록하는 반응형 그라인딩이 불가능한 이유이며 이 하한이 MIN_SEED_LOOKAHEAD + 2입니다.

상태·가십·포크 전환

BeaconState에 두 필드가 생깁니다. randao_commitments는 검증자 인덱스로 찾는 List[Bytes32, VALIDATOR_REGISTRY_LIMIT]로, 0이면 미등록이라 레거시 경로를 씁니다. pending_randao_commitments는 EIP-7916의 ProgressiveList로, 평소 거의 비어 있고 최악의 정상 상태도 약 12,300개라 큰 고정 한도 리스트의 해싱 비용을 피합니다. 대기 커밋은 매 에포크 process_registry_updates 직후의 process_pending_randao_commitments에서 활성화 에포크에 도달하면 적용됩니다. 가십에는 전역 토픽 randao_commitment_registration이 추가되며 검증자는 한 번만 등록하므로 bls_to_execution_change처럼 검증자당 최초 1회 전달로 중복을 거릅니다. 커밋이 0이거나 인덱스가 없으면 REJECT, 이미 본 검증자나 대기 중 등록은 IGNORE, 이미 등록된 검증자와 서명 불량은 REJECT입니다. 포크 시점에는 randao_commitments를 검증자 수만큼 0으로 초기화하고 이후 add_validator_to_registry가 새 검증자마다 0 항목을 덧붙여 리스트 길이 불변식을 유지합니다.

보안 분석: 편향·도난·고아 블록·DoS

편향 가능성은 지금과 같습니다. 체인 전체가 커밋 시점, 즉 제안 슬롯을 알기 전에 고정되므로 제안자의 선택지는 오늘처럼 '공개하거나, 감추고 블록과 보상을 포기하거나'뿐입니다. 체인 비밀값을 도난당하면 공격자는 그 검증자의 미래 기여를 예측할 수 있지만 고를 수는 없어 예측에 서명 권한까지 주는 현재의 서명키 도난보다 엄격히 약한 피해입니다. 그래도 비밀값은 서명키 수준으로 보관해야 하고 체인은 끝까지 가면 시드가 드러나므로 서명키에서 파생하면 안 됩니다. 고아 블록에 실린 리빌은 그 검증자의 미래 의무 기여를 미리 노출하지만 예측 가능한 기여는 감춘 기여보다 나쁠 것이 없고 RANDAO는 믹싱 구간에 정직한 기여자 하나면 충분하므로 실질적 피해가 없습니다. 등록 시 프리이미지 보유는 검증할 수 없어 잘못된 커밋은 제자리 수정이 불가능하므로 클라이언트는 등록 전에 체인 전체를 되짚어 확인해야 합니다. 등록 스팸은 블록(128개 한도), 가십(검증자당 1회 검증), 상태(대기 1개 규칙과 약 12,300개 상한)에서 모두 제한됩니다.

범위의 한계, Draft 상태와 콜 결정

이 EIP만으로 비콘체인 난수가 끝까지 양자내성이 되는 것은 아닙니다. 블록 서명과 등록 연산의 서명은 여전히 BLS이고 레거시 BLS 리빌 경로도 과도기 동안 남습니다. 이후 양자내성 포크에서 예치 시점에 초기 커밋을 설정하고 서명 방식을 바꾸면 randao_reveal 필드와 등록 연산을 함께 걷어내도록 설계되어 있습니다. 원문 상태는 Draft라 명세가 아직 바뀔 수 있습니다. 코어 개발자 콜에서는 07.23 ACDC #183에서 헤고타(Hegota) 후보로 접수(PFI)됐지만 반복적 양자내성 접근이 시기상조라는 반론이 커 포스트퀀텀 디스코드 채널에서 논의를 이어가기로 했습니다. 09.17 ACDC #187에서는 EIP-8321을 포함한 일곱 건이 헤고타 후보에서 제외(DFI)됐습니다. 해시체인 RANDAO를 포함한 양자내성 관련 작업은 헤고타 기간에 비공식적으로 계속됩니다.

EIP 원문 · ← EIPs