Anatomia adresu onion v3: co naprawdę koduje 56 znaków
Każdy adres onion v3 wygląda jak szum z klawiatury: 56 małych liter i cyfr, kończących się literą d. Ten ostatni znak to nie przypadek - i nic innego w tym ciągu też nie. Każdy z 56 znaków jest wyliczany według krótkiego przepisu ze specyfikacji rendezvous projektu Tor, która zamienia klucz publiczny serwisu dokładnie w ten adres, który zaakceptuje Tor Browser.
Co naprawdę koduje 56 znaków
Sekcja kodowania specyfikacji rendezvous definiuje adres onion jako kodowanie base32 dokładnie 35 bajtów, po których następuje sufiks .onion:- Bajty 1-32: publiczny klucz tożsamości ed25519 serwisu - klucz, którego prywatna połowa podpisuje wszystko, co serwis publikuje.
- Bajty 33-34: suma kontrolna - pierwsze dwa bajty SHA3-256 ze stałego napisu ".onion checksum", klucza publicznego i bajtu wersji.
- Bajt 35: pole wersji, ustalone na 0x03 dla adresów trzeciej generacji.
Suma kontrolna, która wyłapuje literówki
Dwa bajty sumy kontrolnej istnieją dlatego, że nazwy onion nie mają rejestru, WHOIS ani autouzupełniania w przeglądarce, które wyłapałoby poślizg. Projekt pożycza pomysł od Bitcoina, którego adresy Base58Check dodają podobny, wyprowadzony z hasza sufiks; gdy deweloperzy Tora zaproponowali ten format na początku 2017 roku, przedstawili arytmetykę w propozycji na liście dyskusyjnej:"W przypadku literówki w adresie mamy prawdopodobieństwo 1/65536, że błędu nie wykryjemy."Pojedynczy źle wpisany znak zmienia dane wejściowe hasza, więc przeliczona suma kontrolna prawie nigdy nie pasuje, a klient Tor odrzuca ciąg jako nieprawidłowy, zanim w ogóle spróbuje nawiązać połączenie. Prześlizguje się tylko około jeden błąd na 65 536, a literówka, która przeżyje sumę kontrolną, wyląduje na losowym 32-bajtowym kluczu, który z dużą pewnością nie należy do żadnego serwisu. Cena tego ryzyka resztkowego to dwa bajty; alternatywą byłyby ciche połączenia z tym, na co dekoduje się źle wpisany adres.
Adres to klucz: urząd certyfikacji nie jest potrzebny
W zwykłym internecie przeglądarka wierzy, że nazwa należy do klucza, bo tak orzeka urząd certyfikacji. Adresy onion przenoszą tę gwarancję do samej nazwy. 56 znaków to klucz publiczny serwisu, więc adres nie potrzebuje rejestru i nie może być wydany dwa razy - dwa serwisy nie mogą się nim podzielić, bo każdy adres to inny klucz. Dokumentacja onion services Tora opisuje, jak to wygląda przy łączeniu: serwis publikuje deskryptor podpisany prywatną połową klucza zakodowanego w jego adresie, a klient weryfikuje ten podpis, zanim w ogóle zbuduje obwód, potwierdzając, że deskryptor "mógł powstać wyłącznie w tym serwisie onion i od nikogo innego". To właśnie deweloperzy Tora nazywają samouwiarygadnieniem. Przegląd usług v3 opublikowany przez Tor Project w 2021 roku przypisuje temu samemu projektowi także korzyści prywatności formatu: przekaźniki katalogowe mają do czynienia tylko z zaślepioną pochodną klucza tożsamości, więc punkty wprowadzenia nigdy nie poznają klucza publicznego, który zapisuje adres. Uwierzytelnienie, innymi słowy, nie jest doklejane przez stronę trzecią; jest obecne w każdym znaku.Co oznacza wyciek klucza prywatnego
Skupienie tożsamości w jednym kluczu skupia ryzyko w jednym pliku. Kto zdobędzie prywatny klucz serwisu, może podpisywać ważne deskryptory, odpowiadać na wprowadzenia i całkowicie podszywać się pod serwis - i nic w adresie nie będzie wyglądało podejrzanie, bo atakujący używa prawdziwego klucza. Suma kontrolna się zgadza, podpis się weryfikuje; podszywanie się jest niewidzialne dla wszystkich kontroli po stronie klienta, jakie oferuje format."Jeśli twoje klucze wyciekną, inne osoby mogą podszyć się pod twój serwis onion, uznając go za skompromitowany, bezużyteczny i niebezpieczny do odwiedzania."W przeciwieństwie do skompromitowanego hasła nie ma czego rotować: adres nie może się zmienić bez jego porzucenia. Przewodnik konfiguracji Tora traktuje plik private_key jako jedyną tajemnicę, która się liczy, ostrzega operatorów, by trzymali go w tajemnicy, i zaleca bezpieczną kopię zapasową, jeśli serwis ma przetrwać dłużej niż jego sprzęt. Dla każdego, kto obserwuje serwisy onion z zewnątrz, praktyczna lekcja jest taka: strukturalnie idealny adres dowodzi tylko, że ciąg jest nienaruszony - nie mówi nic o tym, kto trzyma klucze dzisiaj.
Jak ręcznie sprawdzić sumę kontrolną
Cała weryfikacja mieści się w kilku wierszach dowolnego języka skryptowego ze wsparciem SHA-3, a kroki wynikają wprost ze specyfikacji:- Zdejmij sufiks .onion i sprawdź, że zostało 56 znaków base32.
- Zdekoduj je do 35 bajtów: pierwsze 32 to klucz publiczny, następne dwa to suma kontrolna, a ostatni to bajt wersji.
- Podaj SHA3-256 stały napis ".onion checksum", potem 32 bajty klucza, potem bajt wersji.
- Porównaj pierwsze dwa bajty skrótu z bajtami sumy kontrolnej. Zgodność oznacza, że ciąg został skopiowany poprawnie.










