Złodziej z oscyloskopem

Atak ze stoperem

Z matematycznego punktu widzenia szyfr jest algorytmem - opisem reguł postępowania. Można go zapisać na papierze, ale także w programie albo w postaci krzemowego układu scalonego. W tej postaci nawet najlepszy pod względem matematycznym algorytm kryptograficzny staje się obiektem rzeczywistym i tym samym naraża się na ataki prowadzone przez umiejętnego kryptoanalityka, będącego po trochu elektronikiem, fizykiem i programistą.

Pierwszy z tego typu ataków został opublikowany przez Paula Kochera z Cryptography Research. Opracowana przez niego metoda wykorzystywała drobne różnice w czasie potrzebnym do wykonywania operacji na kluczach publicznych w algorytmach, takich jak RSA, DSS czy Diffiego-Hellmana. Wszystkie charakteryzują się tym, że operują na ogromnych liczbach, których przetwarzanie jest czasochłonne w porównaniu na przykład z szyframi symetrycznymi, takimi jak DES. Precyzyjne badanie odstępów czasowych podczas wykonywania operacji na kluczach publicznych umożliwiło Kocherowi stopniowe uzyskiwanie pojedynczych bitów klucza prywatnego - aż do jego pełnego odtworzenia.

Praca Kochera została rozszerzona m.in. przez kryptologów czeskich i w ub.r. opublikowano dokładny opis włącznie z programem umożliwiającym przeprowadzenie tego ataku na serwery SSL wykorzystujące darmową bibliotekę OpenSSL. Atak ten wymagał wykonania dużej liczby połączeń w krótkim czasie, był więc możliwy do przeprowadzenia praktycznie tylko w warunkach bezpośredniego dostępu do podsieci LAN "widzącej" serwer SSL i, jak można się było spodziewać, nie zaowocował spektakularnymi włamaniami. Mimo to atak na SSL czerpiący z dorobku Kochera stał się ważną lekcją dla wszystkich programistów implementujących rozwiązania kryptograficzne.

Podatność biblioteki OpenSSL wynikała z tego, że nie implementowała ona (opcjonalnej) techniki RSA Blinding. Inne implementacje SSL (np. Netscape) były odporne na ten atak dzięki domyślnemu używaniu techniki blindingu. W skrócie, blinding polega na wprowadzaniu do każdej operacji dodatkowej, losowo dobieranej czynności maskującej rzeczywisty czas wykonania operacji. Powodem, dla którego zapewne zrezygnowano z domyślnego stosowania tej flagi, był niewielki spadek wydajności, który ona powoduje (rzędu 2-10%). Twórcy OpenSSL uznali zapewne, że atak Kochera jest zbyt mało realny, by rezygnować z tych kilku procent wydajności w bibliotece, która słynie z doskonałej optymalizacji. Jak się okazało - niesłusznie.

Sinusoida pod lupą

W tym czasie zespół Kochera prowadził prace badawcze, których owocem było wynalezienie kolejnego ataku na praktyczne systemy kryptograficzne. Atak ten opiera się również na analizie zachowania implementacji fizycznej, tym razem jednak obserwowanym parametrem jest pobór mocy. Nieprzypadkowo, jako że operacje kryptograficzne są bardzo złożone obliczeniowo, ich wykonywanie powoduje zwiększenie poboru mocy. Taki atak nosi nazwę SPA (Simple Power Analysis).

Podobnie jak w przypadku metod opartych na analizie czasu, atak ten jest szczególnie łatwy do wykonania, gdy dotyczy urządzeń, które atakujący może łatwo umieścić w stabilnym, izolowanym środowisku. Takimi urządzeniami są np. karty mikroprocesorowe, będące w powszechnym przeświadczeniu idealnym środowiskiem do przechowywania klucza prywatnego - czy to na potrzeby podpisu elektronicznego, czy to wymiany bezgotówkowej.

Ataki polegające na analizie poboru mocy są doskonale widoczne na przykładowych wykresach z pracy Kochera (patrz wykresy str. 20). Widać na nich pobór prądu podczas pojedynczej operacji szyfrowania algorytmem DES wykonanej przez kartę mikroprocesorową. Na wykresie (Rys. A) wyraźnie widać 16 rund szyfrowania DES w postaci ząbkowanych pików. To nie daje jeszcze żadnej przydatnej informacji - konstrukcja algorytmu DES jest bowiem powszechnie znana.

Bardziej interesujące detale wychodzą na jaw po zwiększeniu rozdzielczości wykresu, co obrazuje zwiększenie częstotliwości próbkowania poboru mocy. Na wykresie (Rys. B) widać już pojedyncze cykle pojedynczej rundy DES. Przedstawiają on dwa warianty tej rundy - w górnym, w kroku 6 procesor wykonał skok warunkowy, który został pominięty w dolnym wykresie. Skok ten jest wykonywany zależnie od tego, czy określony bit klucza ma wartość 0 czy 1. Stąd już tylko krok do odtworzenia całości klucza, jeśli powtórzymy tę analizę w innych miejscach.

Większość implementacji sprzętowych jest odporna na prostą analizę zasilania - różnice w poborze mocy są zbyt małe, by ujawniały informacje o bitach klucza. Kolejnym krokiem była technika różnicowej analizy zasilania (DPA - Differential Power Analysis), która wykorzystuje zaawansowaną analizę statystyczną zebranego ciągu próbek dla wykrycia minimalnych korelacji pomiędzy stanami algorytmu DES a poszczególnymi bitami klucza. Opis tego ataku jest skomplikowany, jednak jego siła polega na tym, że jest skuteczny nawet w przypadkach, gdy prosta analiza poboru mocy zawodzi ze względu na zbyt małe różnice pomiędzy poszczególnymi cyklami.

Przyszłość z suspensem

Co te zaawansowane technicznie ataki oznaczają dla użytkownika systemów kryptograficznych? Raczej nic, bo obrona przed nimi nie leży w jego gestii. To przede wszystkim problem spędzający sen z powiek projektantom i producentom urządzeń kryptograficznych, jak karty mikroprocesorowe czy sieciowe urządzenia szyfrujące. Jednak w związku z tym, że kryptografia szybkim krokiem wkracza w coraz to nowe dziedziny życia, należy się liczyć z wieloma nowymi atakami i - jak to zwykle bywa - koniecznością stosowania nowych zabezpieczeń. Kto wie, czym jutro zaskoczy nas Paul Kocher i jego koledzy.

Czas na działanie

Ochrona przed atakami polegającymi na odczycie klucza szyfrującego na podstawie obserwacji parametrów pochodnych, jak czas czy pobór mocy, wydaje się fantastyką, niemniej naukowo dowiedziono, że jest to możliwe. A zatem, bać się czy nie? A jeśli tak, to jak bardzo? Zamiast pielęgnowania można uruchomić działania zapobiegawcze. W przypadku SSL będzie to uaktywnienie mechanizmu RSA Blinding, zaś w kontekście zasilania można zastosować ujednolicenie poboru mocy, np. przez unikanie wykonywania skoków warunkowych lub innych operacji zmieniających tok wykonywania kodu.


TOP 200