Windows Server 2008

Kodowanie w systemie Windows to nie szyfrowanie Udostępnij na: Facebook

Autor: Raymond Chen

Opublikowano: 18 września 2009

Informacje o użyciu menu Start są zakodowane (słowo to zastosowano umyślnie w celu uniknięcia nieporozumień) w rejestrze. Proces „kodowania” polega na zmianie formatu danych, natomiast słowo „szyfrowanie” sugeruje, że odzyskanie tekstu powinno być trudne, a w tym przypadku tak nie jest. Słowo szyfrowanie sugeruje także, że algorytm kodowania powinien być odporny na ataki, a nie jest.

Informacje o użyciu są zakodowane, a zatem nie pojawiają się w wynikach wyszukania NazwaJakiejśAplikacji.exe w rejestrze przy użyciu klawisza F3. Tego typu operacje wyszukiwania mają miejsce po uruchomieniu niestandardowych narzędzi do "weryfikacji efektów odinstalowywania", które przetrząsają dysk oraz rejestr. Gdyby informacje o wykorzystaniu były zapisywane w postaci zwykłego tekstu, narzędzia znalazłyby wpis w bazie danych użycia, a następnie zaraportowałyby, że nie wszystkie komponenty zostały odinstalowane. Jednak rolą programów odinstalowujących nie jest eliminowanie wszystkich kluczy rejestru. Nie stworzyły ich, więc nie są zobowiązane do ich usunięcia. Co więcej, zalecane jest, aby informacje o użyciu przetrwały proces dezinstalacji. Dzięki temu, jeśli użytkownik odinstaluje program, a następnie ponownie go zainstaluje, menu Start może przekazać komunikat „Witaj ponownie! Oto twoja wysoka pozycja w rankingu menu Start”.

Kodowanie ma również za zadanie zasygnalizować programistom, że „nie powinni tam myszkować”. Jeśli programiści koniecznie chcą dokonać zmian, muszą zastosować algorytm dekodowania (bardzo prosty, aczkolwiek stanowiący pewną barierę). Dzięki temu nie można nieumyślnie zmodyfikować tego typu wartości rejestru lub przypadkowo jej usunąć. Gdy programista stosuje algorytm dekodujący na danych w nieudokumentowanym kluczu rejestru, nie ma wątpliwości, że robi to celowo. Istnieje nadzieja, że w pewnym momencie zaświta mu w głowie myśl "A może nie powinienem tego robić".

Innymi słowy mechanizm kodowania pełni rolę znaku "Wstęp wzbroniony". Nie zapobiega wkraczaniu na niedozwolony teren, ale sygnalizuje intruzowi, że jego obecność jest tu niepożądana i pozbawia go argumentu "Ale ja nie wiedziałem!".

Kodowanie nie ma nic wspólnego z zabezpieczaniem. Informacje są przechowywane w rejestrze użytkownika, a zatem dostęp do nich jest zarezerwowany dla użytkowników (oraz administratorów). Nie służy do przechowywania żadnych informacji poufnych, takich jak hasła. Kodowanie pełni jedynie rolę progu spowalniającego dającego programistom aplikacji, którzy są na tyle aroganccy lub lekkomyślni, by próbować majstrować przy wartościach rejestru, dodatkową szansę uświadomienia sobie, że informacje te nie są przeznaczone dla nich.

Oczywiście progi spowalniające nie powstrzymają programistów przed napisaniem funkcji do kodowania i dekodowania tych danych. Za przykład tego typu „kombinowania” może posłużyć program, który modyfikował dane o użyciu, gdy użytkownik zmieniał konfigurację. Co więcej proces ten nie przebiegał podczas instalacji, ale był realizowany w czasie wykonania. Innymi słowu programiści zdecydowali się celowo manipulować informacjami o użyciu, aby w ten sposób zmienić pozycję programu w menu Start.

Odkrycie algorytmu dekodowania nie stanowi powodu do dumy, ponieważ to nic trudnego. A poza tym wcale nie trzeba wyprowadzać algorytmu dekodowania przy pomocy narzędzi inżynierii odwrotnej, ponieważ wystarczy użyć innego klucza rejestru (również nieudokumentowanego) do zmiany algorytmu kodowania. Program, o którym wspomniałem, nie wziął tego mechanizmu pod uwagę. Gdy ustawienia kodowania miały wartość inną niż domyślną, narzędzie traktowało dane o użyciu jak uszkodzone. Na szczęście programiści nie wpadli na pomysł ich „naprawiania”!

Jednym z wymagań dotyczących algorytmu kodowania jest jego maksymalna szybkość tak, aby nie spowalniał on procesu decydującego o rozmieszczeniu elementów w menu Start. Nie chcemy przecież, aby przetwarzanie funkcji szyfrowania zajmowało 80 procent czasu uruchamiania menu Start.

Algorytm kodowania pozostał niezmieniony od momentu wprowadzenia go w systemie Windows 2000, dzięki czemu informacje mogą być przekazywane podczas aktualizacji do wersji Windows XP oraz Windows Vista.

Jednak programiści menu Start w systemie Windows 7 czasowo zmienili algorytm kodowania. Zmiana wiązała się z decyzją o modyfikacji formatu informacji o użyciu aplikacji oraz nieprzenoszeniu dawnych informacji z wcześniejszych wersji systemu Windows. Modyfikacja algorytmu kodowania ułatwiła rozróżnianie starych danych od nowych. Ta tymczasowa zmiana pociągnęła za sobą sztuczne poruszenie wśród obserwatorów systemu Windows, którzy przyjęli błędne założenie, że przy pomocy nowego sposobu kodowania programiści menu Start chcą „skorygować” słabe „szyfrowanie” przy użyciu innego słabego „szyfrowania”. Jednak w rzeczywistości żaden z mechanizmów nie służył do szyfrowania. W finalnej wersji systemu oryginalny algorytm kodowania zostanie przywrócony. W końcu spójne kodowanie stanowi już w pewnym sensie tradycję.

O autorze

Raymond Chen jest autorem witryny The Old New Thing oraz książki o identycznym tytule (Addison-Wesley 2007), które są poświęcone historii systemu Windows oraz programowaniu Win32. Czasami zajmuje się kodowaniem informacji poprzez tłumaczenie ich na język niemiecki (z marnymi efektami).

 Do początku strony Do początku strony

Windows Server 2008