Vissza

7. labor: az RSA rendszer


1. Válasszunk két, legalább 1024 bites prímszámot, majd RSA-kulcsként alkalmazva őket titkosítsunk és fejtsünk vissza egy tetszőleges ASCII karaktereket tartalmazó szöveget. A szöveget generáljuk véletlenszerűen, hossza pedig akkor legyen, hogy a szövegnek megfelelő szám kisebb legyen, mint az RSA-modulus. Ugyanazt a szöveget titkosítsuk többször RSA-val, majd RSA-OAEP-vel. A titkosított bájtszekvenciákat hexa formában írjuk ki a képernyőre. A titkosított bájtszekvenciákat megfigyelve mit lehet megállapítani?

2. A crypted7_2.png AES-GCM módszerrel volt rejtjelezve. Határozzuk meg az eredeti png filet, ha az AES 32 bájtos kulcs titkosított értékét hexában cryptedAESkey7_2.txt-ben találjuk. Az AES kulcs RSA-OAEP-vel volt titkosítva, ahol az RSA publikus kulcs az RSA_pubKey7_2.pem állományban található.
Megjegyzések:

  • a további hitelesített bájtszekvencia, a header:
    AES_GCMEncryption 2025.04.01,
  • a nonce értéke a titkosított állomány első 12 bájtja,
  • a hitelesítő tag pedig a titkosított állomány utolsó 16 bájtja.
Útmutatás: faktorizáljuk az RSA publikus kulcs modulusát Fermat módszerével.

3. Határozzuk meg azt a nyílt szöveget, amelyről tudjuk, hogy három különböző félnek RSA-textbookkal rejtjelezve volt elküldve, ahol a következő linken elérhetőek a felek nyilvános kulcsai, illetve a rejtjelezett szövegek:

            key1.txt            key2.txt            key3.txt
            cryptE3_1        cryptE3_2        cryptE3_3

Útmutatás: alkalmazzuk a kínai maradéktételt, majd a kapott értéknek határozzuk meg a köbgyökét:
x = nre mod n1, azaz x = c1 mod n1
x = nre mod n2, azaz x = c2 mod n2
x = nre mod n3, azaz x = c3 mod n3

A köbgyököt meghatározó Python kód:

decimal.getcontext().prec = 100
nr = math.ceil(pow(x, 1/decimal.Decimal(3)))

4. Az RSA kriptorendszer visszafejtésének időigényét gyorsítani lehet, ha alkalmazzuk a kínai maradéktételt. Alkalmazzuk ezt a gyorsítási folyamatot az RSA-textbook esetében. Írjunk programot, melyben összehasonlítjuk a két visszafejtési algoritmus időigényét.

5. Ugyanaz a szöveg RSA-textbook módszerrel, kétszer volt rejtjelezve. Határozzuk meg az eredeti szöveget, ha tudjuk, hogy a titkosítást különböző exponensekkel legyenek ezek e és f, de ugyanazzal a modulussal, legyen ez n végezték, ahol (e, f) = 1. A két rejtjelezett szövegnek megfelelő bináris állomány az RSAcr1 és az RSAcr2, a két kulcs, ahol az első érték mindkét esetben a modulus, pedig key_e.txt és key_f.txt állományokban található.
Útmutatás:

  • (e, f) = 1, azaz e · x + f·y = 1
  • nr = nre·x + f·y = (nr e)x· (nr f)y = cnr1 x · cnr2 y (mod n), ahol nr-nek cnr1 az egyik, cnr2 a másik a titkosított értéke
  • az x és y a kiterjesztett Euklideszi algoritmussal határozható meg: alkalmazzuk Pythonban a sympy modulban a gcdx függvényt.
  • mindkét titkosított állomány bájtjaiból hozzunk létre egy-egy egész számot, az egyik a cnr1, a másik cnr2 lesz.

6. A crypted7_6.jpg AES-CBC módszerrel volt rejtjelezve, ahol az alkalmazott iv a titkosított file első 16 bájtja. Határozzuk meg az eredeti jpg filet, ha az AES 32 bájtos kulcs titkosított értékét hexában a cryptedAESkey7_6.txt-ben találjuk. Az AES kulcs RSA-OAEP-vel volt titkosítva, ahol az RSA privát kulcs az RSA_privKey7_6.pem állományban található, és adott az állományhoz való hozzáférési jelszó SHA256-os értéke: 591a6e49ad819403426545301221da1764be6c58727b18831cc7d4bf8dbff4e9.
Útmutatás: A jelszó a kövtekező értékek közül valamelyik: myPassword000, problem7_6, password2025, myPass2025, password7_6