Rabbit – szyfr strumieniowy o wysokiej prędkości zaprezentowany[1] w lutym 2003 na dziesiątych warsztatach FSE. W maju 2005 został wysłany do projektu eSTREAM sieci ECRYPT.
Rabbit został zaprojektowany przez Martina Boesgaarda, Mette Vesteragera, Thomasa Pedersena, Jespera Christiansena, Erika Zennera i Ove Scaveniusa.
Rabbit korzysta z 128-bitowego klucza i 64-bitowego wektora inicjalizacji. Zaprojektowany został z myślą o dużej wydajności w oprogramowaniu, gdzie w pełni zoptymalizowane impementacje osiągają prędkość 3.7 cykli na bajt na Pentium 3 i 9.7 cykli na bajt na procesorze ARM7. Szyfr jest także optymalny do zastosowań sprzętowych.
Głównym komponentem szyfru jest generator strumienia bajtów który szyfruje 128 bitów wiadomości na iterację. Siła szyfru tkwi w mocnym mieszaniu stanu wewnętrznego pomiędzy następnymi iteracjami. Funkcja mieszająca jest w całości oparta na operacjach arytmetycznych dostępnych na nowoczesnym procesorze, czyli nie występują S-boksy ani potrzeba korzystania z tablicowania.
Autorzy szyfru udostępnili pełny zestaw dokumentów kryptoanalitycznych na stronie Cryptico[2]. Szyfr jest także opisany w RFC 4503 ↓. Cryptico miało oczekujące patenty na algorytm i przez wiele lat wymagało opłaty licencyjnej za komercyjne wykorzystanie szyfru. Został on jednak udostępniony za darmo w październiku 2008.[3]
Rabbit zakłada 128-bitowe bezpieczeństwo przeciwko atakom, których celem jest jeden konkretny klucz. Jeśli jednak atakowanych jest wiele kluczy naraz i nie jest istotne, który zostanie złamany, mały rozmiar wektora inicjalizacji skutkuje zredukowanym poziomem bezpieczeństwa do 96 bitów. Spowodowane jest to ogólnym atakiem TMD trade-off[4].
Istnieje drobne przekłamanie w wyjściu Rabbita[5], umożliwiające uzyskanie wyróżnika z trudnością 2247, odkryte przez Jean-Philippe Aumassona w grudniu 2006. Mimo że udało się poprawić atak do 2158[6], nie jest to zagrożeniem bezpieczeństwa szyfru, gdyż zaatakowanie go w ten sposób jest trudniejsze niż metoda brute force(2128).