Een rainbow-tabel bevat een lijst van mogelijke wachtwoorden en de berekende hashes van deze wachtwoorden. Dergelijke tabellen worden bijvoorbeeld gebruikt om wachtwoorden te testen op hun veiligheid, of om ze te kraken.

Opgave

Het bestand rainbow.txt1 is een voorbeeld van een rainbow-tabel. Elke regel bevat de md5-checksum van een mogelijk wachtwoord, gevolgd door een spatie en het wachtwoord zelf. Wachtwoorden bevatten nooit spaties, en een md5-checksum bestaat enkel uit cijfers en de hoofdletters A tot en met F. Gevraagd wordt:

  1. Bepaal reguliere expressies voor elk van onderstaande verzamelingen, waarbij $$\mathcal{H}$$ de verzameling van alle md5-checksums voorstelt. Probeer deze reguliere expressies zo kort mogelijk te houden.

    • $$\alpha = \{ h \in \mathcal{H}\,|\,$$ derde karakter van $$h$$ is gelijk aan derde laatste karakter van $$h$$ $$\}$$

    • $$\beta = \{ h \in \mathcal{H}\,|\,$$ $$h$$ bevat vier opeenvolgende cijfers, die bestaan uit twee paren gelijke cijfers $$\}$$

      voorbeelden: 1221, 3344, 5665, 7777 $$\in \beta$$
    • $$\gamma = \{ h \in \mathcal{H}\,|\,$$ elke letter komt maximaal tweemaal voor in $$h$$ $$\}$$

    • $$\delta = \{ h \in \mathcal{H}\,|\,$$ | aantal cijfers in $$h$$ is een veelvoud van vier $$\}$$

    Gebruik een commando uit de grep familie om enkel die regels van het bestand rainbow.txt2 te selecteren die beginnen met het patroon dat tot de opgegeven verzameling behoort.

  2. Beschouw de verzamelingen $$\alpha$$, $$\beta$$, $$\gamma$$ en $$\delta$$ zoals hierboven gedefinieerd. Gebruik nu deze verzamelingen om op de volgende manier een boodschap bestaande uit vier woorden te achterhalen:

    • Het eerste woord is het wachtwoord op de unieke regel waarvan de md5-checksum $$\alpha \cap \beta$$

    • Het tweede woord is het wachtwoord op de unieke regel waarvan de md5-checksum $$\beta \cap \gamma$$

    • Het derde woord is het wachtwoord op de unieke regel waarvan de md5-checksum $$\gamma \cap \delta$$

    • Het vierde woord is het wachtwoord op de unieke regel waarvan de md5-checksum $$\delta \cap \alpha$$

    Geef telkens een Unix commando dat elk van deze woorden opzoekt in het bestand en uitschrijft naar standaard uitvoer (zonder het patroon dat aan het woord voorafgaat). Hierbij is het dus niet toegelaten om het woord letterlijk uit te schrijven (bv. echo xxx).