Dwóch administratorów porównuje sekret na ekranie, zgadzają się, że jest zgodny, a tunel nadal nie przechodzi uwierzytelniania. Ciąg, który porównali, nie jest wartością, którą którakolwiek strona podaje do wyprowadzania klucza. Między znakami, które widzisz, a bajtami, które protokół miesza, znajduje się typ pola, kodowanie tekstu, edytor i schowek, a każdy z tych czterech może zmienić dane wejściowe bez zmiany wyglądu. Porównaj bajty, a niezgodność zwykle pojawia się w ciągu sekund.

Co brama robi z ciągiem

Wstępnie współdzielony klucz nie jest wysyłany przez sieć i porównywany. Każda strona podaje swoją lokalną kopię do wyprowadzania klucza dla wymiany IKE, a powstałe ładunki uwierzytelniania są weryfikowane lub nie. Taki projekt oznacza, że obie kopie muszą być identyczne bajtowo, a nie tylko wizualnie podobne, i oznacza też, że błąd jest zgłaszany na etapie uwierzytelniania, a nie jako komunikat o nieprawidłowym haśle.

Zatem użyteczne pytanie nigdy nie brzmi „czy te wyglądają tak samo”, ale „jaki dokładny ciąg bajtów miesza każda implementacja”.

Skąd biorą się dodatkowe bajty

Końcowy znak nowej linii to klasyczny winowajca i ukrywa się na widoku, ponieważ większość edytorów niewidocznie dodaje go podczas zapisywania pliku. Spacja na początku lub końcu wklejona z okna czatu robi to samo, podobnie jak typograficzny cudzysłów zamieniony na prosty przez edytor tekstu. Nic z tego nie zmienia porównania wizualnego, którego dokonuje człowiek.

Porównuj narzędziem, które pokazuje bajty, a nie glify. printf '%s' "$PSK" | xxd | tail -2 wypisuje koniec wartości w systemie szesnastkowym, gdzie zabłąkany 0a lub 20 jest oczywisty. Zrób to po obu stronach i porównaj oba zrzuty obok siebie. Rób to na wygenerowanym materiale testowym, a nie na sekrecie produkcyjnym, który potem zostawiasz w historii powłoki.

Zakodowane nie znaczy zaszyfrowane

Eksporty konfiguracji często przenoszą sekret w kodowaniu bazowym, czasem z podziałem wiersza co sześćdziesiąt lub siedemdziesiąt sześć znaków, a czasem z dopełnieniem. Jeśli jedna strona oczekuje zdekodowanych bajtów, a ty wklejasz zakodowany tekst, nie wysłałeś innego hasła, wysłałeś znacznie dłuższe hasło złożone z drukowalnych znaków. Base64 nie zapewnia żadnej poufności, dlatego zakodowanego sekretu nigdy nie wolno wklejać na forum po drugą opinię.

Słownik IPSec firmy Apple jest dobrym przykładem tego, że typ ma znaczenie: dokumentuje SharedSecret jako dane dla metody uwierzytelniania wspólnym sekretem w ładunkach L2TP i Cisco IPsec. To konkretna właściwość w konkretnym ładunku, a nie ogólne pole tekstowe, które można ponownie wykorzystać dla innego protokołu, który akurat prosi o sekret.

Twierdzony limit należy do jednej kombinacji

Stare raporty o pułapie trzydziestu dwóch znaków w jednym kliencie Apple to prawdziwe raporty o jednej wersji klienta, protokole i kształcie profilu. Nie są uniwersalnym limitem dla każdej platformy Apple, każdego dostawcy i każdego protokołu. Sprawdź wersję, typ ładunku i wymaganie bramy razem, a następnie przetestuj w zatwierdzonym układzie, zamiast wnioskować z wątku. Zapisz przetestowaną kombinację w rejestrze zmian, bo inaczej następna osoba zacytuje ten sam wątek z większą pewnością, niż na to zasługuje.

Jeśli limit naprawdę obowiązuje, odpowiedzią jest obsługiwany projekt danych logowania, który się w nim mieści, a nie skrócona wersja silnego sekretu. Skrócenie klucza produkcyjnego, aby spełnić domniemany limit, trwale zmniejsza jego siłę i tworzy system, którego dokumentacja nie odpowiada już jego bezpieczeństwu.

Napraw reprezentację, nie siłę

Gdy uwierzytelnianie nie powiedzie się po potwierdzeniu reprezentacji, przeczytaj obowiązującą politykę na etapie uwierzytelniania: jaka metoda jest negocjowana, jaka tożsamość partnera jest oczekiwana i czy brama odpowiada połączeniu, które masz na myśli. Stopniowo słabsze domysły nie są diagnozą, to powolne obniżanie poziomu z dołączonym zgłoszeniem do pomocy technicznej.

Jeśli wymagane dane logowania nie mogą spełnić standardu organizacji, zmień projekt na taki, który może. Wspólny sekret z wystarczającą entropią, wygenerowany raz, przechowywany w zarządzanym polu i nigdy niepublikowany, jest całkowicie dobrą odpowiedzią; jego krótsza wersja nie.

Powiązane artykuły