블록 보류 공격: 풀이 단일 셰어로는 알 수 없는 공격
채굴자가 진짜 셰어는 보내면서 블록이 될 셰어 하나만 숨깁니다. 그 비용, 누가 내는지, 왜 하는지, 어떻게 잡아내는지 알아봅니다.
블록 보류 공격이란 무엇인가요?
평범한 셰어는 모두 보내면서, 블록이 될 셰어 하나만 숨기는 채굴자입니다. 풀은 셰어에 대해 지급합니다. 블록은 끝내 도착하지 않습니다.
풀에 보내는 셰어는 모두 블록 목표값을 넘지 못한 진짜 해입니다. 블록 목표값은 블록이 되려면 해시가 넘어야 하는 더 어려운 기준입니다. 가끔 어떤 해가 그 기준까지 넘으면, 그 셰어 하나가 블록 하나입니다.
그런 셰어는 풀이 검사하기 전까지 다른 셰어와 똑같아 보입니다.
공격자는 작업을 정직하게 하고 평범한 셰어를 모두 보냅니다. 블록이 될 셰어 하나만 조용히 버립니다. 풀은 셰어를 세고 지급합니다. 풀이 받았어야 할 블록은 끝내 도착하지 않습니다.
왜 셰어 하나로는 들키지 않나요?
셰어 하나만 보면 공격자에게 이상한 점이 없습니다. 하드웨어도 진짜이고 해시레이트도 진짜입니다. 셰어는 유효하고 적절한 속도로 도착합니다. 풀이 셰어 하나를 살펴봐도 아무것도 보이지 않습니다.
빠진 것은 부재이고, 부재는 시간이 지나야 드러납니다. 풀 해시레이트에서 어떤 몫을 가진 채굴자는 블록도 대략 그 몫만큼 찾아야 합니다.
한 시간 동안이라면 이것은 아무것도 말해 주지 않습니다. 블록 발견은 무작위이고, 조용한 기간은 흔합니다. 기간이 충분히 길면 많은 것을 말해 줍니다.
비용은 얼마이고, 누가 내나요?
풀은 받았어야 할 블록 보상을 잃습니다. 하지만 그 손실이 실제로 풀에 떨어지지는 않습니다. 어느 풀에서든 이 부분은 알아 둘 만합니다.
- 비례 방식에서는 다른 누군가가 블록을 찾을 때까지 라운드가 이어집니다. 그 라운드의 모든 사람이 원래보다 오래 걸린 라운드에서 일한 셈입니다. 그래서 모두가 작업 단위당 조금씩 덜 법니다. 비용은 정직한 채굴자들에게 나뉩니다.
- 셰어당 지급 방식에서는 운영자에게 더 나쁩니다. 풀은 이미 모든 셰어를 자기 주머니에서 지급했고, 블록이 도착하기를 기대합니다. 공격이 계속되면 운영자의 돈이 그대로 빠져나갑니다. 역사적으로 사람들이 가장 걱정한 것이 이 경우입니다.
누가 왜 이런 일을 하나요?
공격자도 블록 보상을 버립니다. 언뜻 보면 순전히 자해입니다. 공격자가 풀이 볼 수 없는 곳에서 이득을 볼 때만 말이 됩니다.
흔한 동기는 경쟁입니다. 자기 풀을 운영하는 사람이 해시레이트를 빌리거나 돌려서 경쟁 풀에 보내 그 결과를 억누를 수 있습니다. 그러면 자기 풀이 상대적으로 운이 좋아 보입니다. 공격자가 그래도 받는 셰어 지급이 방해 비용을 메워 줍니다.
더 교묘한 변형에서는 공격자가 블록을 버리지 않고 쥐고 있습니다. 그 위에서 몰래 계속 채굴하다가, 자기에게 유리한 때에 나중에 제출합니다. 이것은 성공시키기 더 어렵습니다. 시도할 가치가 있으려면 해시레이트의 큰 몫이 필요합니다.
어떻게 탐지하나요?
다른 신호가 없으므로 탐지는 통계적으로 합니다. 어떤 참여자가 찾은 블록과, 그 셰어 수로 보아 찾았어야 할 블록을 비교합니다. 운이 평균으로 수렴할 만큼 긴 기간에 걸쳐 비교합니다.
어려운 것은 기간입니다.
- 짧게 잡으면 평범한 불운도 공격처럼 보입니다. 정직한 채굴자들이 끊임없이 의심받게 됩니다.
- 길게 잡으면 진짜 공격자가 숫자가 드러나기 전까지 한동안 활동합니다.
이 맞교환을 피할 묘수는 없습니다. 이것은 소프트웨어가 아니라 무작위성에서 나옵니다.
그래서 제대로 된 탐지기는 혼자 조치하지 않고 사람에게 문제를 제기합니다. 통계에 따라 자동으로 차단하면 언젠가는 그저 운이 나빴던 사람을 차단하게 됩니다. 정당한 채굴자를 내쫓는 것은 공격 자체보다 더 나쁩니다.
정직한 채굴자에게는 무슨 의미인가요?
거의 아무 의미도 없으며, 이 점은 분명히 말해 둘 만합니다.
내 셰어는 어느 경우든 똑같이 세어지고 지급됩니다. 운이 나쁜 것은 잘못이 아니며, 잘못일 수도 없습니다. 짧은 기간으로 보면 대부분의 채굴자는 운이 나쁩니다.
내가 많이 기여했는데 풀이 아무것도 찾지 못한 라운드가 이어지는 것은 평범한 변동입니다. 풀 통계의 운 수치가 그것이 얼마나 평범한지 보여 줍니다.
이 공격은 풀이 누가 자기에게 해시레이트를 보내는지 신경 쓰는 이유 중 하나입니다. 블록과 운을 정직하게 공개하는 풀을 더 믿기 쉬운 이유이기도 합니다. 풀을 확인하는 데 필요한 것은 모두 블록 페이지에 있습니다.