Ιστορικό Σπασίματος WEP Επ4: Chopchop Attack

  1. Επεισόδιο 1: FMS Attack
  2. Επεισόδιο 2: KoreK Attack
  3. Επεισόδιο 3: PTW Attack
  4. Επεισόδιο 4: Chopchop Attack

 

Η επίθεση Chopchop επιτρέπει στον επιτιθέμενο να αποκρυπτογραφήσει τα τελευταία \(m\) bytes του plaintext ενός κρυπτογραφημένου πακέτου με διαδραστικό τρόπο (θα καταλάβεις παρακάτω τι εννοώ με το «διαδραστικό»), στέλνοντας \(m\cdot 128\) πακέτα (κατά μέσο όρο) στο δίκτυο. Η επίθεση αυτή δεν αποκαλύπτει το root key και δεν βασίζεται σε τίποτα φοβερές ιδιότητες του stream cipher του RC4.

Η επίθεση δουλεύει ως εξής:
Πριν την κρυπτογράφηση, ένα CRC32 checksum ονόματι ICV μεγέθους 4 bytes προσαρτάται (μπαίνει στο τέλος ντε!) στα data του πακέτου. Το πακέτο που περιέχει το checksum \(P\) μπορεί θα θεωρηθεί και ως ένα στοιχείο του δακτυλίου πολυωνύμων \(F_{2}[X]\). Αν το checksum είναι σωστό, ισχύει ότι \(P \mod{P_{CRC}}= P_{ONE}\), όπου το \( P_{ONE}\) είναι ένα γνωστό πολυώνυμο και το \( P_{CRC}\) είναι ένα επίσης γνωστό και ανάγωγο\(^{1}\) πολυώνυμο (όχι δεν θα σε βρίσει, μην φοβάσαι!). Μπορούμε να γράψουμε το \(P\) σαν \(QX^{8}+R\) όπου το \(R\) είναι το τελευταίο byte του \(P\) και το \(Q\) είναι όλα τα εναπομείναντα bytes. Όταν αφαιρεθεί ένα byte από το κρυπτογραφημένο πακέτο, το \(Q\) κατά πάσα πιθανότητα θα έχει λάθος checksum.

Ας υποθέσουμε ότι ο επιτιθέμενος γνωρίζει το \(R\). Αν προσθέσει το \(P_{ONE}+\left ( X^{8} \right )^{-1}\left ( P_{ONE}+R \right )\) στο \(Q\), διορθώνει το checksum. Αν το \(R\) είναι λάθος, το τελικό πακέτο θα έχει λάθος checksum. Αυτή η πρόσθεση μπορεί να γίνει και στο κρυπτογραφημένο πακέτο.

Τα περισσότερα APs (Access Points) μπορούν να καταλάβουν την διαφορά μεταξύ πακέτων με σωστό και λάθος checksum. Για παράδειγμα, αν ένα AP λάβει ένα πακέτο από κάποιον client που δεν είναι authenticated, το AP θα δώσει error msg. Τα πακέτα που έχουν λάθος checksum απορρίπτονται από το AP αθόρυβα και αυτό μπορεί να το εκμεταλλευτεί ο επιτιθέμενος ώστε να αποκρυπτογραφήσει πακέτα με διαδραστικό τρόπο, όπως είπαμε στην αρχή. Πρώτα, επιλέγει ένα πακέτο που έχει υποκλέψει για αποκρυπτογράφηση. Μειώνει το μέγεθος του πακέτου κατά 1 byte, μαντεύει το \(R\), διορθώνει το checksum και στέλνει το πακέτο στο AP για να δει αν μάντεψε σωστά το \(R\). Αν το μάντεψε σωστά, τότε γνωρίζει το τελευταίο byte του plaintext και μπορεί να συνεχίσει για το προ-τελευταίο byte. Αν μάντεψε λάθος, κάνει μια καινούρια μαντεψιά για το \(R\). Μετά από 256 μαντεψιές το πολύ, ή 128 κατά μέσο όρο, θα έχει μαντέψει το σωστό \(R\).
 
 
\(^{1}\) Ανάγωγα (irreducible) πολυώνυμα: Ένα πολυώνυμο \(\Delta \left ( x \right )\in C[x]\) με βαθμό \(\nu > 0\), αποκαλείται ανάγωγο αν και μόνο αν έχει μόνο προφανείς διαιρέτες (το ίδιο δηλαδή που ισχύει περίπου για τους πρώτους αριθμούς στο σύνολο των ακεραίων). Στο \(C[x]\) τα μόνα ανάγωγα πολυώνυμα είναι τα πολυώνυμα πρώτου βαθμού \(\alpha x+\beta \) με \(\alpha \neq 0\), ενώ στο \(R[x]\) ανάγωγα πολυώνυμα είναι τα \(\alpha x+\beta \) με \(\alpha \neq 0\) και τα πολυώνυμα δευτέρου βαθμού που έχουν μιγαδικές ρίζες (\(\Delta < 0\)).

Leave a Reply

Your email address will not be published. Required fields are marked *