Bez przesyłania, 100% lokalnie, bez konta

Artykuł

Prywatne kodowanie i dekodowanie danych

Programiści codziennie wklejają tokeny, ładunki i poświadczenia na stronach kodowania i dekodowania. Te najwygodniejsze działają na serwerze, co oznacza, że Twoje dane opuszczają komputer dla zadania, które nigdy tego nie wymagało. Te cztery narzędzia działają w całości w przeglądarce, więc dane zostają przy Tobie.

Base64: wygląda na zamieszane, ale nie jest tajne

Base64 to kodowanie, a nie szyfrowanie. Zamienia dane binarne na tekst, który przetrwa kopiowanie i wklejanie albo przejście przez systemy obsługujące tylko proste znaki. Każdy, kto widzi ciąg Base64, może w jednym kroku odkodować go z powrotem do oryginału, więc ciąg zawierający klucz API, prywatny certyfikat albo treść e-maila jest w pełni czytelny dla tego, kto go posiada. Ryzyko polega na tym, że ta wartość często kryje się w plikach konfiguracyjnych, adresach data URL czy nagłówkach uwierzytelniania i wygląda niejasno, co kusi, by wkleić ją do pierwszego dekodera znalezionego w sieci. Ten dekoder otrzymuje surowy sekret. Narzędzie dekodujące Base64 lokalnie pokazuje oryginalne bajty, a wartość nigdy nie trafia na serwer.

Hello! zakodowane jako SGVsbG8h i zdekodowane z powrotem, pokazujące, że Base64 może odwrócić każdy bez klucza.

Kodowanie URL: ciągi zapytań niosą więcej, niż myślisz

Kodowanie procentowe pozwala bezpiecznie umieścić w adresie URL spacje, znaki diakrytyczne i znaki zarezerwowane. Tekst, który kodujesz lub dekodujesz, to często prawdziwy ciąg zapytania z aplikacji, a te niosą identyfikatory sesji, frazy wyszukiwania, adresy e-mail, cele przekierowań, a czasem podpisane parametry. Wklejenie pełnego adresu URL do zdalnego kodera przekazuje to wszystko stronie trzeciej za jednym razem, a ciągi zapytań to dokładnie ten rodzaj wartości, która ląduje w logach serwera. Kodowanie i dekodowanie w przeglądarce oznacza, że adres URL jest przetwarzany w pamięci na Twoim własnym urządzeniu i nigdy nie jest przesyłany podczas pracy.

JWT: ładunek jest podpisany, a nie ukryty

JSON Web Token składa się z trzech sekcji Base64url połączonych kropkami: nagłówka, ładunku i podpisu. Podpis dowodzi, że tokenu nie naruszono, ale w żaden sposób nie ukrywa ładunku, który dekoduje się do czytelnego JSON-a z identyfikatorami użytkownika, rolami, czasami wygaśnięcia i wszelkimi własnymi oświadczeniami dodanymi przez wystawcę. Ważny token jest też żywym poświadczeniem: dopóki nie wygaśnie, każdy, kto go ma, może działać jako użytkownik. Wklejenie działającego tokenu do dekodera online wysyła aktywne poświadczenie na serwer, którego nie kontrolujesz. Dekoder analizujący token w Twojej przeglądarce ujawnia ten sam nagłówek i ładunek, a token nigdy nie opuszcza strony.

Trzy części JWT: czytelny nagłówek, czytelny payload oraz podpis potwierdzający integralność bez ukrywania czegokolwiek.

Haszowanie: dane wejściowe liczą się bardziej niż skrót

Funkcja skrótu zamienia dowolne dane wejściowe na skrót o stałej długości i nie da się odwrócić skrótu z powrotem do danych wejściowych. Ta właściwość czyni haszowanie przydatnym do sprawdzania integralności pliku lub porównywania wartości bez przechowywania oryginału. Haczyk tkwi po stronie wejścia: aby obliczyć skrót hasła, dokumentu albo sekretu konfiguracji, musisz podać narzędziu prawdziwą wartość. Jeśli to narzędzie działa na serwerze, wrażliwe dane wejściowe podróżują tam, choć zwracany jest tylko nieszkodliwy skrót. Obliczanie skrótu lokalnie trzyma dane wejściowe na Twoim urządzeniu, więc otrzymujesz potrzebny skrót bez ujawniania tego, co haszowałeś.

Kodowanie Base64: mapowanie bajtów i dopełnienie

Base64 przekształca 8-bitowe bajty w 6-bitowe znaki, grupując trzy bajty wejściowe (24 bity) w cztery wartości 6-bitowe. Każda wartość 6-bitowa jest odwzorowana na znak w alfabecie Base64 (A-Z, a-z, 0-9, +, /). Ponieważ proces wymaga danych wejściowych podzielnych przez 24 bity, krótkie dane są uzupełniane: jeden pozostały bajt daje dwa znaki dopełnienia (==), dwa pozostałe bajty dają jeden (=). Wariant Base64url, używany w tokenach JSON Web Token (JWTs), zastępuje + przez - i / przez _, aby ciąg był bezpieczny w URL, i całkowicie usuwa dopełnienie =, ponieważ znaki dopełnienia mogą powodować błędy w surowych parserach URI. Rozróżnianie tych wariantów ma znaczenie przy debugowaniu obsługi tokenów: JWT wyglądający na nieprawidłowy może po prostu być zakodowany w Base64url, a nie standardowym Base64.

Sygnatury JWT: HS256, RS256 i confusion algorytmów

Bezpieczeństwo JSON Web Token zależy wyłącznie od jego sygnatury, czyli trzeciego segmentu oddzielonego kropką. W przypadku HS256 (HMAC-SHA256) serwer podpisuje nagłówek i ładunek zakodowane w Base64url przy użyciu tajnego klucza. Funkcja skrótu SHA-256 zapewnia odporność na kolizje: obliczeniowo niemożliwe jest wytworzenie zmodyfikowanego ładunku, który dawałby ten sam skrót bez znajomości klucza tajnego. W przypadku RS256 serwer podpisuje przy użyciu prywatnego klucza RSA i weryfikuje kluczem publicznym. Znana podatność zwana algorithm confusion pojawia się, gdy biblioteka serwera nie egzekwuje ściśle oczekiwanego typu algorytmu. Atakujący może zmienić pole alg w nagłówku tokenu z RS256 na HS256 i podpisać token kluczem publicznym serwera jako tajemnicą HMAC, ponieważ klucze publiczne są często dostępne. Lokalne dekodowanie nagłówka JWT w przeglądarce pozwala sprawdzić, który algorytm jest faktycznie określony, bez ujawniania aktywnego tokenu systemom logowania firm trzecich.

Narzędzia w tym artykule

Najczęściej zadawane pytania

Czy Base64 lub kodowanie URL to forma zabezpieczenia?

Nie. Oba to odwracalne kodowania zaprojektowane do bezpiecznego transportu danych, a nie do ich ochrony. Każdy, kto potrafi odczytać zakodowany ciąg, dekoduje go natychmiast, bez klucza ani hasła. Jeśli musisz zachować wartość w poufności, zaszyfruj ją odpowiednim algorytmem i zarządzaj kluczem oddzielnie. Traktuj każdą wartość w Base64 lub kodowaną procentowo tak, jakby była zapisana zwykłym tekstem.

Dlaczego ma znaczenie, gdzie dekoduję token lub haszuję hasło?

Ponieważ to dane wejściowe są częścią wrażliwą. Ważny JWT to żywe poświadczenie, a hasło, które haszujesz, to prawdziwy sekret. Narzędzie serwerowe otrzymuje te surowe dane wejściowe, zanim w ogóle zwróci wynik, co oznacza, że kopia może zostać zapisana w logach lub zachowana w miejscu, którego nie widzisz. Narzędzie działające w Twojej przeglądarce wykonuje tę samą operację w pamięci Twojego komputera, więc token ani hasło nigdy nigdzie nie są wysyłane.