Blowfish

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania
Blowfish
Blowfish Feistel function (en).svg
Funkcja Feistela w algorytmie Blowfish
Rodzaj szyfru symetryczny szyfr blokowy
Data stworzenia 1993
Autorzy Bruce Schneier
Wielkość bloku wejściowego 64 bity
Długość klucza 32 do 448 [bit]
Liczba rund 16

Blowfish (pol. rozdymka) to szyfr blokowy stworzony przez Bruce'a Schneiera w 1993 roku jako szybka i bezpłatna alternatywa dla istniejących ówcześnie algorytmów.

Algorytm operuje na 64-bitowych blokach i używa kluczy od 32 do 448 bitów. Ma on postać szyfru Feistela z 16. rundami z SBOX-ami zależnymi od klucza. Każda zmiana klucza wymaga dość sporej ilości wstępnych obliczeń w celu ustalenia SBOX-ów. Z tego powodu atak brute-force trwa znacznie dłużej, niż można byłoby się spodziewać.

W typowych algorytmach, jeśli długość klucza to k, a koszt zakodowania bloku to B, koszt ataku brute-force wynosi 2^kB. W przypadku Blowfisha trzeba dla każdego klucza obliczyć SBOX-y, co zajmuje tyle, co zakodowanie ok. 2^9 bloków, a więc czas ataku brute-force wynosi około 2^{k+9}B (a zatem atak na 64-bitowy Blowfish zajmuje mniej więcej tyle czasu, co na 73-bitowy bardziej tradycyjny szyfr). Wadą tego rozwiązania są dość duże wymagania pamięciowe – potrzebne są ponad 4 kB pamięci, co nie jest problemem dla nawet słabych komputerów, ale jest już dla np. kart chipowych.

Nie istnieją (2011) znane ataki na Blowfisha o ilości rund większej niż 4. Są znane, dość duże jak na symetryczny szyfr blokowy, grupy słabych kluczy, czyli takich, dla których Blowfish jest słabszy, niż dla typowych kluczy (większość szyfrów posiada takowe, jednak szansa na wylosowanie takiego klucza jest bardzo niska).

Linki zewnętrzne[edytuj | edytuj kod]