Obrona proof-of-work w Torze: drogi DDoS na onion services
Onion service zalewany atakiem nie może zrobić tego, co robi zwykła strona: nie ma adresów IP do limitowania, bo ani odwiedzający, ani atakujący nie ujawniają żadnego. Odpowiedź Tora, dostarczona w Torze 0.4.8 i ogłoszona na blogu projektu w sierpniu 2023, to wycena etapu introdukcji w czasie procesora. Projekt wywodzi się z proposal 327, spisanej w kwietniu 2020 przez George'a Kadianakisa, Mike'a Perry'ego, Davida Gouleta i tevadora, który nazwał sedno wprost: budowanie obwodów rendezvous jest drogie dla usługi i dla sieci, a samo limitowanie szybkości nigdy tego nie zmieniło.
Zagadka, która pojawia się tylko pod obciążeniem
Schemat jest przezroczysty w sensie protokołu: nie ma dodatkowej rundy wyzwania. Parametry zagadki leżą wewnątrz deskryptora onion service, który klienci i tak pobierają - znacznik wersji, 32-bajtowy seed, sugerowany poziom wysiłku i termin ważności. Dopóki sugerowany wysiłek wynosi zero, obrona śpi, a introdukcje przebiegają dokładnie jak wcześniej. Gdy usługa wykryje przeciążenie, podnosi sugerowany wysiłek. Klienci rozwiązują wtedy Equi-X - funkcję zagadki określoną w propozycji - nad wyzwaniem zbudowanym z ciągu personalizacji, zaślepionego ID usługi, seeda, losowego 16-bajtowego nonce i wybranego wysiłku. Rozwiązanie, około 43 bajty, jedzie w komórce INTRODUCE1 jako rozszerzenie. Według bloga Tora pierwsze rozwiązanie kosztuje około 5 milisekund na szybkiej maszynie i do około 30 na wolniejszym sprzęcie; przy utrzymującym się ataku wymagana praca może piąć się w stronę minuty obliczeń.Kolejka płaci wysiłkiem
Sprawdzenie rozwiązania jest celowo tanie; droga część - zbudowanie obwodu rendezvous - jest odkładana. Zweryfikowane żądania trafiają do kolejki priorytetowej uporządkowanej po zadeklarowanym wysiłku, starsze wpisy wygrywają remisy, a harmonogram opróżnia ją w kontrolowanym tempie. Trudność podąża cyklem add-increase/multiply-decrease w oknach 300-sekundowych: dopóki kolejka jest nasycona, usługa podnosi wysiłek do poprzedniej wartości plus jeden albo do średniego wysiłku obsłużonych introdukcji - co jest większe; gdy presja spada, wysiłek maleje o około jedną trzecią. Klienci ponawiają z rosnącym wysiłkiem - podwajając poniżej 1000, potem mnożąc przez 1,5 - w granicach, które specyfikacja ustawia na 8 i 10 000. Seedy rotują około co dwie godziny, poprzedni seed pozostaje przez chwilę ważny, by uniknąć wyścigów.Dlaczego zwykli użytkownicy prawie tego nie zauważają
Ponieważ zagadka istnieje tylko dopóki usługa jest pod presją, zwykły ruch przy niskim obciążeniu nie płaci nic. Człowiek klikający kilka stron w trakcie ataku wydaje milisekundy - doświadczenie, które blog porównuje do czekania na wolne połączenie - podczas gdy atakujący zalewający usługę milionami introdukcji płaci za każdą z nich. Podsumowanie Tor Project:"Blocks attackers while giving real users a chance to reach their destination" - blog Tor Project, sierpień 2023
Jak usługi włączają obronę
Operatorzy sterują obroną przez torrc. Przełączniki udokumentowane w przewodniku projektu po DoS dla onion services:- HiddenServicePoWDefensesEnabled - publikuje zagadkę w deskryptorze i włącza kolejkę sortowaną po wysiłku
- HiddenServicePoWQueueRate i HiddenServicePoWQueueBurst - jak szybko zweryfikowane żądania opuszczają kolejkę
- CompiledProofOfWorkHash - opcja globalna wybierająca funkcję skrótu używaną w zagadkach










