Pamiętacie BEAST? i Lucky13? Te ataki celowały w szyfry blokowe w trybie CBC wykorzystywane w SSL/TLS. Zalecanym "rozwiązaniem" problemu było wykorzystanie szyfru strumieniowego, konkretnie RC4. Co prawda po drodze był jeszcze CRIME, który dobrze się nadawał do atakowania RC4, ale w tym wypadku wystarczyło wyłączyć kompresję.
Aż tu nagle pojawił się problem: Attack of the week: RC4 is kind of broken in TLS. To znaczy problem się nie pojawił nagle, bo o tym, że w wyjściu RC4 (generatora, a nie zaszyfrowanych danych) są pewne "zakłócenia" (niektóre wartości na określonych pozycjach są bardziej prawdopodobne, niż powinny być), wiadomo od dawna. Teraz pokazane zostało, że jeśli atakujący dysponuje wystarczającą ilością próbek, w których ta sama wiadomość jest szyfrowana przy pomocy RC4 z użyciem różnych kluczy, można ustalić jej treść.
Jak to działa? Prosty przykład - załóżmy, że bit o jakiejś nieznanej nam wartości "szyfrujemy" wykonując operację XOR z bitem klucza, który jest wynikiem losowania. Nie znamy ani wartości szyfrowanej "wiadomości", ani klucza. Gdybyśmy zebrali dużą ilość próbek - wyników XOR dla tej samej szyfrowanej "wiadomości" dla różnych kluczy, to prawdopodobieństwo, że szyfruje się to do wartości 0 jest dokładnie takie samo, jak prawdopodobieństwo zdarzenia, że zaszyfrowana wartość to będzie 1.
Teraz zepsujmy nieco to założenie. Załóżmy, że nasz "generator" generuje 1 z prawdopodobieństwem 0.6, natomiast 0 z prawdopodobieństwem 0.4. Dalej szyfrujmy naszą tajną wiadomość (o wartości 1). Wyniki są proste:
1 xor 1 = 0
1 xor 0 = 1
Tylko, że na wyjściu wartość 0 będziemy dostawać z prawdopodobieństwem 0.6 (bo z takim prawdopodobieństwem w kluczu pojawi się wartość 1), natomiast wartość 1 z prawdopodobieństwem 0.4, bo to jest prawdopodobieństwo wystąpienia 0 w kluczu.
Co nam to daje? Zobaczmy co w takim przypadku by się działo, gdyby szyfrowaną wartością nie było 1, lecz 0:
0 xor 1 = 1
0 xor 0 = 0
W tym przypadku wynikiem szyfrowania będzie 1 z prawdopodobieństwem 0.6 i 0 z prawdopodobieństwem 0.4. Dokładnie odwrotnie w stosunku do poprzedniego przypadku.
Podsumowując - jeśli wartość klucza będzie zaburzona w sposób nam znany, możemy wykorzystać tę informację do ustalenia szyfrowanej (tajnej) wartości. I właśnie o to chodzi w tym przykładzie. Co prawda ilość próbek wymaganych do tego, by wyciągać sensowne wnioski jest duża, ale możliwe są dalsze optymalizacje w tym zakresie.