RC4 (zwany również ARC4 albo ARCFOUR) – symetryczny szyfr strumieniowy. Używany jest w protokołach, takich jak SSL oraz WEP. RC4 nie jest odporny na kryptoanalizę liniową i kryptoanalizę różnicową. Jest obecnie uznawany za niedostatecznie bezpieczny kryptosystem. RC4 nie jest zalecany do używania w nowych systemach.

RC4
ilustracja
Rodzaj algorytmu

symetryczny szyfr strumieniowy

Data stworzenia

1987

Autorzy

Ron Rivest

Skuteczne ataki

atak FMS

Historia edytuj

RC4 został opracowany przez Rona Rivesta z RSA Security w 1987 roku. Oficjalnie nazwa jest akronimem słów „Rivest Cipher 4”.

RC4 początkowo był tajemnicą handlową. We wrześniu 1994 implementacja szyfru w języku C została wysłana anonimowo na listę mailową Cypherpunks, skąd trafił na grupę dyskusyjną sci.crypt. Od tej pory algorytm nie jest już tajemnicą handlową, ale nazwa RC4 nadal jest zastrzeżonym znakiem handlowym. Nieoficjalne implementacje szyfru są legalne, ale noszą inną nazwę niż RC4 („ARC4” lub „ARCFOUR”).

W lutym 2015 w proponowanym RFC 7465 zakazano stosowania szyfru w połączeniach Transport Layer Security[1].

Opis szyfru edytuj

RC4 generuje pseudolosowy strumień bitów (strumień szyfrujący). W celu zaszyfrowania wykonywana jest operacja XOR na tekście oryginalnym i strumieniu szyfrującym (jak w każdym szyfrze Vernama). W celu odszyfrowania analogicznie wykonywana jest operacja XOR na tekście zaszyfrowanym i strumieniu szyfrującym.

W celu wygenerowania strumienia szyfrującego wykorzystuje się tajny stan początkowy, składający się z dwóch części:

  1. Permutacji 256-elementowej wszystkich możliwych stanów (oznaczanej później S).
  2. Dwóch 8-bitowych wskaźników (oznaczanych „i” i „j”).

Permutacja jest zainicjalizowana za pomocą klucza o długości zazwyczaj pomiędzy 40 i 256 bitów (procedura inicjowania klucza). Następnie tworzony jest strumień bitów wyjściowych za pomocą algorytmu pseudolosowej generacji.

Procedura inicjalizacji klucza edytuj

Procedura inicjalizacji klucza jest używana w celu stworzenia początkowej permutacji liczb w 256-elementowej tablicy „S”. Długość klucza jest wyznaczona poprzez liczbę bajtów w kluczu. Typowo wynosi pomiędzy 5 a 16 bajtów (pomiędzy 40 a 128 bitów).

Początkowo w tablicy „S” tworzona jest permutacja identycznościowa. Następnie „S” jest przetwarzane w 256 iteracjach (podobnie jak w algorytmie pseudolosowej generacji) i mieszane jednocześnie z bajtami klucza.

for i from 0 to 255
    S[i] := i
j := 0
for i from 0 to 255
    j := (j + S[i] + klucz[i mod długość_klucza]) mod 256
    zamień(S[i],S[j])

Algorytm pseudolosowej generacji edytuj

 
Etap pośredni RC4. Bajt strumienia szyfrującego K jest tworzony poprzez znalezienie wartości w S wskazywanej przez S[i] + S[j] (modulo 256).

Algorytm pseudolosowej generacji modyfikuje stan tablicy S i generuje bajt strumienia szyfrującego tyle razy, ile wynosi długość tekstu oryginalnego. Za każdym razem algorytm zwiększa i o 1, dodaje do j wartość w S wskazywaną przez i, zamienia ze sobą wartości S[i] i S[j] oraz jako wynik daje wartość z S wskazywaną przez S[i] + S[j] (modulo 256). Każda wartość S jest zamieniana co najmniej raz na każde 256 iteracji.

i := 0
j := 0
while TworzonyStrumieńSzyfrujący:
    i := (i + 1) mod 256
    j := (j + S[i]) mod 256
    zamień(S[i],S[j])
    wynik S[(S[i] + S[j]) mod 256]

Wektory testowe edytuj

Wektory testowe podane poniżej nie mają statusu oficjalnego, jednak są dogodne dla każdego, kto chce przetestować swoją implementację RC4. Dane wejściowe są w formacie ASCII, dane wyjściowe w formacie heksadecymalnym

RC4( "Key", "Plaintext" ) == BBF316E8D940AF0AD3
RC4( "Wiki", "pedia" ) == 1021BF0420
RC4( "Secret", "Attack at dawn" ) == 45A01F645FC35B383552544B9BF5
RC4( "Kry", "ptologia" ) == 015C5F30796B0B94

Bezpieczeństwo RC4 edytuj

Pewne sekwencje bajtów pojawiają się nieznacznie częściej w strumieniu szyfrującym RC4 niż inne. W 2000 roku Fluhrer i McGrew opracowali atak oparty na tej własności. Za pomocą tego ataku można wyodrębnić strumień szyfrujący z gigabajta losowych danych wyjściowych.

Atak Fluhrera, Mantina i Shamira edytuj

W 2001 roku Fluhrer, Mantin i Shamir odkryli, że wśród wszystkich możliwych kluczy RC4 rozkład statystyczny kilku pierwszych bajtów wyjściowego strumienia szyfrującego jest silnie nielosowy. Analizując dużą liczbę wiadomości zaszyfrowanych tym samym kluczem, można uzyskać ten klucz. Odkrycie to pozwoliło na złamanie standardu szyfrowania WEP („wired equivalent privacy”) używanego w bezprzewodowych sieciach typu 802.11. Spowodowało to przyspieszony rozwój standardu szyfrowania WPA, będącego następcą WEP.

Istnieje możliwość obrony przed atakiem tego typu. W tym celu należy odrzucić początkową porcję danych ze strumienia szyfrującego (co najmniej pierwsze 1024 bajty).

Kryptosystemy oparte na RC4 edytuj

W kryptosystemach oznaczonych „(opcjonalnie)” RC4 jest jednym z wielu szyfrów, które mogą być użyte.

Zobacz też edytuj

Przypisy edytuj

Linki zewnętrzne edytuj