|
|
www.ehaker.com
mail@ehaker.com
|
|
|
|
|
Szyfrowanie
|
Znanym technicznie oraz możliwym do zastosowania przy
wyszukiwaniu informacji jest funkcja skrótu zwana też Jednokierunkową Funkcją
Hashującą.
Zadaniem jednokierunkowych funkcji hashujących jest stworzenie unikatowego skrótu
informacji. Funkcje te powinny generować różne skróty, dla różnych danych
wejściowych. Wymaga się również, aby było praktycznie niemożliwe
odnalezienie takiej pary danych wejściowych, dla której otrzymany skrót byłby
identyczny. Funkcja spełniająca takie kryteria nazywana jest silnie
bezkonfliktową. Obecnie żadnej funkcji hashującej nie udowodniono
jednokierunkowości, ale przypuszcza się, że niektóre posiadają taką właściwość.
Jedną z takich funkcji, jest metoda Chaum-Van Heijst-Pfitzmann. Bazuje ona na
trudności w obliczaniu dyskretnych logarytmów. Jednak ze względu na jej
skomplikowanie, a zarazem trudność obliczenia, w praktyce stosuje się inne,
łatwiejsze do zrealizowania. Przykładem takiej funkcji jest MD5. Autorem jej
jest R. Rivest. Funkcja ta przekształca dowolny 512-bitowy ciąg na
128-bitowy.
Nie są znane żadne matematyczne podstawy zastosowanego algorytmu, nie mamy
więc pewności czy nie istnieje sposób jej obejścia choć dotychczasowe
badania tego nie wykazały. Algorytm ten stał się podstawą dla amerykańskiej
standardowej funkcji hashującej - Secure Hash Algorithm (SHA), która jest
jednym z głównych składników Digital Secure Algorithm (DSA), czyli amerykańskiego
standardu podpisów cyfrowych. W rzeczywistości SHA jest jedynie nieznaczną
modyfikacją MD5. W trakcie działania MD5, dokonywane są jedynie proste
operacje, takie jak suma i iloczyn logiczny oraz negacja. Algorytm ten operuje
na 32-bitowych blokach w cztero-rundowym cyklu. W celu hashowania danych dłuższych
niż 512-bitów stosuje się techniki podobne do stosowanych w algorytmach
szyfrujących (np. Cipher Block Chaining). Stosując
więc funkcję skrótu jako indeks w celu wyszukiwania danych z bazy o powyższej
złożoności zawężamy ilość przeszukiwanych informacji do porównania 128
bitów w 5 milionach rekordów, co daje nam 128*5mln=640 mln operacji porównawczych.
Wadą tej metody jest czas generowania skrótów oraz brak manewrowania długością
skrótu. Np. dla omawianej bazy danych wystarczyłaby funkcja skrótu o długości
23 bitów (ilość rek.< 223).Filtrowanie
bazy (wyszukiwanie indeksu) trwałoby więc do 6 razy krócej. Wiemy
jak ważny jest sposób dystrybucji bardzo ważnych informacji, a taką jest
niewątpliwie kod genetyczny. W celu bezpiecznej dystrybucji bardzo ważnych
informacji stosuje się algorytmy szyfrujące. Algorytmy te dzielimy na
symetryczne i asymetryczne.
Algorytmy asymetryczne (klucz publiczny do szyfrowania i klucz prywatny do
odszyfrowywania powiązane ze sobą poprzez przekształcenia matematyczne) nie są
bezpieczne do dystrybucji bardzo ważnych informacji ponieważ opierają się na
założeniu, iż niemożliwy jest rozkład dużych liczb na czynniki pierwsze w
czasie wielomianowym (sensownie krótkim), a niemożność
tego rozkładu nigdy nie została udowodniona. Symetryczne metody szyfrowania charakteryzują się tym, iż używają tego
samego klucza do szyfrowania i deszyfrowania danych. Najpopularniejszym obecnie
symetrycznym algorytmem szyfrującym jest DES (DATA ENCRYPTION STANDARD). W
algorytmie tym szyfrowaniu poddawane są 64 bitowe bloki, co dokładnie
odpowiada 8 znakom w kodzie ASCII, przy czym każdy znak posiada bit parzystości.
Klucz stosowany do szyfrowania ma długość 56 bitów. Dyskusyjną sprawą jest
więc bezpieczeństwo danych przy użyciu tak krótkiego klucza. Szyfrowanie
odbywa się w 16 rundach polegających na wykonaniu identycznych działań,
jednak kolejne działania przeprowadzane są na danych otrzymanych z poprzedniej
rundy. Dokonywana jest również odpowiednia permutacja danych przed rozpoczęciem
rund oraz permutacja odwrotna po ich zakończeniu. W każdej z 16 rund
wykorzystywany jest inny 48 bitowy podklucz. Generowany jest on z głównego
klucza, z którego po odrzuceniu bitów parzystości powstaje 16 różnych
kluczy, które składają się z góry określonych bitów tego klucza. W każdej
rundzie wykonywana jest ta sama funkcja, pobierająca dwa 32 bitowe ciągi będące
wynikiem działania poprzedniej rundy. Funkcja ta realizowana jest w kilku
krokach. Z jednego 32 bitowego ciągu tworzony jest ciąg 48 bitowy. Dokonywane
jest to przez zdublowanie niektórych bitów, co wydłuża ciąg do żądanej długości.
Następnie na otrzymanym ciągu wykonywana jest operacja XOR przez 48 bitowy
podklucz przyporządkowany danej rundzie. Wynik dzielony jest na 8 6-bitowych
grup, które poddawane są działaniu S-boksu. Jako wynik działania S-boksu
otrzymujemy 32 bitowy ciąg bitów, który jest permutowany. S-boksy, są to
macierze o rozmiarach 4 na 16, które zawierają liczby z przedziału <0,15.
Argumentem dla S-boksu jest 6 bitowy ciąg. Dwa skrajne bity wyznaczają numer
wiersza, a 4 środkowe bity wskazują numer kolumny. Wynikiem działania S-boksu
jest 4 bitowa wartość pobrana z odpowiedniej komórki. Właściwie
skonstruowane S-boksy umożliwiają realizację efektu lawinowego (bardzo
podobne dane mają zupełnie inny kryptogram), co skutecznie utrudnia
kryptoanalizę. W celu odszyfrowania kryptogramu, stosuje się te same kroki, które
były zastosowane podczas szyfrowania, tyle, że w odwrotnej kolejności.
Jedynie proces działania S-boksów nie może być odwrócony, w związku z tym
wykorzystuje się odpowiednie równanie, wykorzystujące zależności pomiędzy
poszczególnymi rundami szyfrowania. DES doczekał się również implementacji
sprzętowej, która jest zdecydowanie bardziej wydajna (około 1000 razy) niż
programowa. Istnieją różne modyfikacje DES'a, które są wprowadzane ze
względu na pewne przypuszczenia, co do istnienia luki w tym algorytmie.
Odpowiednie modyfikacje mogą całkowicie uniemożliwić jej wykorzystanie.
Przykładem modyfikacji DESa jest DESX. Wykorzystuje on aż 3 klucze do
zaszyfrowania 64-bitowego bloku, co skutecznie utrudnia kryptoanalize. Inna
modyfikacja DESa to 3DES (trzykrotny DES). Do zaszyfrowania tekstu jawnego
stosowane są 2 klucze. Pierwszy klucz szyfruje informacje. Wynik szyfrowania
jest deszyfrowany drugim kluczem, a kolejną operacją jest zaszyfrowanie
ponowne kluczem pierwszym. Ze względu na to, że DES potrafi szyfrować tylko
bardzo małe, 64-bitowe bloki, zastosowano różne metody starające się umożliwić
szyfrowanie dłuższych danych. Jedną z tych metod jest Electronic Codebook
(ECB). W celu zaszyfrowania długiego tekstu, dzielony jest on na małe bloki,
każdy blok szyfrowany jest tym samym kluczem. Sposób ten jest jednak bardzo
podatny na ataki, więc nie jest powszechnie stosowany. Kolejną metodą jest
Cipher Block Chaining (CBC). W metodzie tej wprowadzono zależności miedzy
poszczególnymi blokami. Kolejny blok poddawany szyfrowaniu powiązany jest z
poprzednio zaszyfrowanymi blokami, więc temu samemu tekstowi jawnemu odpowiadać
będzie inny kryptogram. Jednak zastosowanie takiego sposobu ogranicza
wykorzystanie go do szyfrowania np. baz danych, ze względu na to, że nie można
usunąć pojedynczego bloku z kryptogramu. Każda ingerencja w kryptogram
powoduje niemożliwość prawidłowego odszyfrowania wszystkich kolejnych bloków
W Cipher Feedback (CFB) stosowany jest odmienny sposób na szyfrowanie długich
informacji. Szyfrowaniu może zostać poddany pojedynczy bit, lub np. bajt. Umożliwia
to szyfrowanie strumienia danych, bez konieczności oczekiwania na zgromadzenie
bloku o konkretnej długości. W celu zaszyfrowania danych tą metoda, należy
wygenerować krótki ciąg, zawierający losowe liczby. W przypadku, gdy w CFB
do stworzenia kryptogramu będzie wykorzystywany DES, ciąg ten nie może
przekraczać 64 bitów. Następnie poddawany jest on szyfrowaniu przy użyciu
stałego klucza. Z kryptogramu pobieranych jest tyle początkowych bitów, ile
wynosi długość obranego bloku (w tym przypadku długość nie może
przekraczać 64 bitów), a następnie wykonywana jest operacja XOR z kolejną
porcją niezaszyfrowanych danych. Wynik przekazywany jest na wyjście. Cały
początkowy ciąg przesuwany jest o obraną liczbę bitów w lewo, a z prawej
strony ciągu umieszczane są dane, które trafiły na wyjście. W celu
odszyfrowania danych dokonywana jest zamiana roli wejścia i wyjścia. Innym
powszechnie stosowanym szyfrującym algorytmem symetrycznym jest IDEA. Dyskusyjną
sprawą jest jego bezpieczeństwo, ze względu na to, że jest to bardzo młody
algorytm (opracowany w latach dziewięćdziesiątych). W stosunku do DESa,
liczba bitów stosowana w kluczu wynosi 128, co zapewnia teoretycznie
bardzo duże bezpieczeństwo danych. Podobnie jak w DESie, szyfrowaniu poddawane
są 64 bity tekstu jawnego. Samo szyfrowanie składa się z 8 rund, które
operują na czterech blokach po 16 bitów. Podczas szyfrowania bloków, z głównego
128 bitowego klucza, tworzonych jest 6 podkluczy, które wykonują różne
operacje na danych. Każda runda wykorzystuje inny zestaw podkluczy, który jest
generowany za pomocą prostych cyklicznych przesunięć głównego klucza.
Dodatkowo po ostatniej rundzie dokonywane jest finalne przekształcenie za pomocą
4 nowych kluczy. Jednym z najmłodszych algorytmów symetrycznych jest RC5.
Został on stworzony przez R. Rivesta w 1994 r. Cechą charakterystyczną tego
algorytmu, jest to, że parametry szyfrowania mogą być praktycznie dowolnie
określone przez użytkownika. Kontroli podlegają takie parametry jak liczba
rund, długość szyfrowanego bloku i rozmiar klucza. Ciągi losowe charakteryzują
się tym, że każdy wyraz ciągu losowany jest z takim samym prawdopodobieństwem,
tzn. występuje w tym ciągu tyle samo 0 co 1; losowanie kolejnych wyrazów ciągu
jest niezależne od już otrzymanych. Ciągi losowe mają bardzo duże
zastosowanie w algorytmach szyfrujących - np. one-time pad, RSA, podpisach
cyfrowych, protokołach kryptograficznych. Otrzymanie takich ciągów jest
jednak rzeczą bardzo czasochłonną, dlatego w wielu zastosowaniach
wykorzystywane są ciągi pseudolosowe, dające się wygenerować za pomocą różnych
algorytmów. Ciągi te jednak nie dają całkowitej losowości, gdyż nie spełniają
kryteriów ciągów losowych. Zazwyczaj jedynie ziarno ciągu pseudolosowego
jest liczbą losową wygenerowaną za pomocą różnych metod (np. mierzenie
czasu pomiędzy kolejnymi naciśnięciami klawiszy na klawiaturze). Każdy
kolejny element ciągu zależy w bardzo dużym stopniu od swoich poprzedników.
W kryptografii, od ciągów pseudolosowych wymaga się by były nierozróżnialne
i nieprzewidywalne. Nierozróżnialność polega na tym, iż wygenerowanego ciągu
pseudolosowego nie można odróżnić od ciągu losowego. Wymaganie to powstało
ze względu na to, że generator pseudolosowy generujący ciągi bitów o długości
l, wykorzystując ziarno o długości k (k>0,1/2^l). Generator losowy, zawsze
generuje ciągi z prawdopodobieństwem 1/2^l. Jednak w związku z tym, że
generator losowy potrafi wygenerować każdy ciąg, nie można jednoznacznie odróżnić
go od pseudolosowego. Nieprzewidywalność jest cechą, która ma zagwarantować
to, że bez znajomości ziarna, nie jesteśmy w stanie określić kolejnych
wyrazów ciągu pseudolosowego, mając do dyspozycji poprzednie wyrazy tego ciągu.
Jednym z najpopularniejszych generatorów pseudolosowych jest Linear Feedback
Shift Register (LFSR) . Popularność swoją zdobył ze względu na szybkość
działania, ale pod kątem kryptograficznym, generowane ciągi są nie do przyjęcia.
Algorytm ten opiera się na przesunięciach bitowych i prostej operacji XOR.
Shrinking LFSR jest to modyfikacja poprzedniego algorytmu wykorzystująca 2 układy
LFSR. Algorytm ten jest również bardzo szybki i posiada dużo lepsze właściwości
pod względem kryptograficznym. W celu wygenerowania ciągów pseudolosowych
stosowane są również algorytmy szyfrujące. Przykładem może być
wykorzystanie takich algorytmów szyfrujących jak DES, RSA, czy też
modyfikacja generatora RSA - Blum-Blum-Snub (BBS). Ostatnia wymieniona metoda
jest co prawda zdecydowanie wolniejsza od algorytmów typu LFSR, jednak posiada
mocne podstawy teoretyczne, przez co otrzymane ciągi pseudolosowe posiadają
zdecydowanie lepsze właściwości.
Opracował: Bogdan Tomaszewski
Źródło:
http://www.gck.pl/szyfrowanie.htm
|
|
|
|
|
|
|
Wyślij go na adres e-mail: mail@ehaker.com
|
|
|
|
Co byś chciał zobaczyć w serwisie ?
|
|
|