비밀 제안자, 다음 블록 제안자를 미리 감추기
Strawmap 그 이후 (장기) · secret proposers
다음 블록을 누가 제안할지 미리 공개하지 않고 제안자가 블록을 내놓는 순간에야 밝혀지게 바꿉니다. 제안자를 노린 공격을 막기 위한 설계입니다.
왜 필요한가
지금 이더리움에서는 어느 검증자(validator)가 어느 슬롯에 블록을 제안할지 에포크(epoch, 32개 슬롯 묶음)가 시작되기 전에 정해집니다. 누구나 그 명단을 볼 수 있습니다. 공격자는 이 명단을 보고 다음 제안자의 노드에 트래픽을 퍼부어 블록을 못 내게 만들 수 있습니다. 이런 서비스 거부 공격(DoS)에 당하면 그 슬롯이 비고 거래가 밀립니다. 다음 제안자가 그 자리의 수수료 수익을 가져갈 여지도 생깁니다. 제안자가 미리 알려져 있다는 사실 자체가 표적 공격의 출발점이 됩니다. 비밀 제안자는 이 명단을 숨깁니다. 제안자 본인만 자기 차례를 압니다. 블록을 공개하는 순간에야 네트워크가 그 사람이 정당한 제안자였다는 것을 확인합니다. 그러면 특정 검증자를 미리 골라 공격하기가 어려워지고 혼자 운영하는 소규모 검증자도 더 안전해집니다. 이더리움 연구 커뮤니티에서는 이 방식을 비밀 리더 선출(secret leader election)이라 부릅니다. 표식을 섞는 셔플과 영지식 증명(zero-knowledge proof)을 쓰는 Whisk 같은 설계가 제안돼 있습니다. Strawmap에서는 정해진 포크 없이 장기 칸에 놓여 있어 어느 업그레이드에 들어갈지는 아직 정해지지 않았습니다.
어떻게 동작하나
- 지금은 명단이 공개됩니다 에포크가 시작되기 전에 각 슬롯의 제안자가 정해지고 누구나 그 명단을 조회할 수 있습니다. 공격자도 다음 제안자를 미리 알 수 있습니다.
- 검증자가 익명 표식을 등록합니다 각 검증자는 자기만 열 수 있는 암호화된 표식을 네트워크에 올립니다. 이 표식들을 여러 번 섞어 어느 표식이 누구 것인지 알 수 없게 만듭니다.
- 뽑힌 표식의 주인만 자기 차례를 압니다 슬롯마다 섞인 표식 중 하나가 뽑힙니다. 그 표식의 주인은 자기 차례임을 알지만 다른 참여자는 누구인지 알 수 없습니다.
- 블록과 함께 증명을 냅니다 제안자는 블록을 공개하면서 자신이 뽑힌 표식의 주인이라는 영지식 증명을 붙입니다. 네트워크는 신원을 몰라도 정당한 제안자인지 확인합니다.