Nahlédněte RSA pod sukni – šifrujeme a dešifrujeme

V předchozích dvou dílech jsme si nejdříve polopaticky objasnili nezbytnou teorii šifrování a následně jsme si vygenerovali pár klíčů. Dnes si s těmito klíči konečně zašifrujeme nějakou přísně tajnou informaci.

Celý proces šifrování se dá jednoduše smrsknout do jedné matematické operace.

// provedeme sifrovani
crypted_message = powMod(message,pub_key,modulo)

Funkce powMod z knihovny BigInt.js provádí takzvané modulární umocnění. Princip modulárního umocňování je celkem prostý. Vezmeme si například číslo 15 k zašifrování, číslo 37 jako náš veřejný klíč a číslo 323 bude reprezentovat modulo. Výsledek modulárního umocnění je 1537 (mod 323) = 53. Během výpočtu nejdříve umocníme naši zprávu na veřejný klíč a pak zjistíme zbytek po celočíselném dělení našim modulem.

Tato operace je na pochopení dosti jednoduchá, ale pro opravdu veliká čísla by byla v takové podobě nesmírně paměťově a výpočetně náročná a proto se používají její méně náročné a složitější varianty. Ty tady pro jednoduchost rozebírat nebudeme.

Princip už známe, ale v čem je tedy ten fór? Výše popsaná matematická operace je snadno proveditelná i pro docela veliká čísla, ale nalezení našeho veřejného klíče i se znalostí nešifrované zprávy, zašifrované zprávy a modula je velmi obtížné. Výsledek takového snažení se jmenuje diskrétní logaritmus a právě díky složitosti jeho výpočtu můžeme modulární umocnění považovat za jednosměrnou matematickou funkci, což se nám v asymetrické kryptografii skvěle hodí.

Jak ale získat naši správu zpět, když je to tak složité?

Složité je to pouze pro někoho, kdo nezná soukromý klíč. S jeho pomocí a s pomocí nám už dobře známé operace modulárního umocnění se snadno dostaneme zpět k naší zprávě.

// provedeme desifrovani
decrypted_message = powMod(crypted_message,priv_key,modulo)

Při použití výsledku z dřívějšího příkladu co by šifrované zprávy, stejného modula, které je pro oba klíče společné a našeho tajného soukromého klíče dostaneme následující rovnici: 53109 (mod 323) a tedy naši šifrovanou zprávu umocníme na náš soukromý klíč a výsledkem je, světe div se, naše původně šifrované číslo 15.

Ve výsledku ani není celý postup tak složitý, co říkáte? Snad Vám můj mini seriál pomohl pochopit základní princip asymetrického šifrování a algoritmu RSA a já jsem jej tak nestudoval zcela zbytečně.

Kategorie:

Okomentovat