RSA

Možná hledáte: Jihoafrická republika.
Adi Šamir (2009), jeden ze tří spoluautorů algoritmu RSA

RSA (iniciály autorů Rivest, Shamir, Adleman) je šifra s veřejným klíčem, jedná se o první algoritmus, který je vhodný jak pro podepisování, tak šifrování. Používá se i dnes, přičemž při dostatečné délce klíče je považován za bezpečný.

Princip

Bezpečnost RSA je postavena na předpokladu, že rozložit velké číslo na součin prvočísel (faktorizace) je velmi obtížná úloha. Z čísla n = p q {\displaystyle n=pq} je tedy v rozumném čase prakticky nemožné zjistit činitele p {\displaystyle p} a q {\displaystyle q} , neboť není znám žádný algoritmus faktorizace, který by pracoval v polynomiálním čase vůči velikosti binárního zápisu čísla n {\displaystyle n} . Naproti tomu násobení dvou velkých čísel je elementární úloha.

Popis činnosti algoritmu

Alice a Bob chtějí komunikovat prostřednictvím otevřeného (nezabezpečeného) kanálu a Bob by chtěl Alici poslat soukromou zprávu.

Tvorba klíčového páru

Nejprve si bude Alice muset vyrobit pár veřejného a soukromého klíče:

  1. Zvolí dvě různá velká náhodná prvočísla p {\displaystyle p} a q {\displaystyle q} .
  2. Spočítá jejich součin n = p q {\displaystyle n=pq} .
  3. Spočítá hodnotu Eulerovy funkce φ ( n ) = ( p 1 ) ( q 1 ) {\displaystyle \varphi (n)=(p-1)(q-1)} .
  4. Zvolí celé číslo e {\displaystyle e} menší než φ ( n ) {\displaystyle \varphi (n)} , které je s φ ( n ) {\displaystyle \varphi (n)} nesoudělné.
  5. Nalezne číslo d {\displaystyle d} tak, aby platilo d e 1 ( mod φ ( n ) ) {\displaystyle de\equiv 1{\pmod {\varphi (n)}}} , kde symbol {\displaystyle \equiv } značí kongruenci zbytkových tříd.
  6. Jestli e {\displaystyle e} je prvočíslo, tak d = 1 + r φ ( n ) e {\displaystyle d={\frac {1+r\cdot \varphi (n)}{e}}} , kde r = ( e 1 ) φ ( n ) e 2 {\displaystyle r=(e-1)\varphi (n)^{e-2}}

Veřejným klíčem je dvojice ( n , e ) {\displaystyle (n,e)} , přičemž n {\displaystyle n} se označuje jako modul, e {\displaystyle e} jako šifrovací či veřejný exponent. Soukromým klíčem je dvojice ( n , d ) {\displaystyle (n,d)} , kde d {\displaystyle d} se označuje jako dešifrovací či soukromý exponent. V praxi se klíče uchovávají v mírně upravené formě, která umožňuje rychlejší zpracování. Veřejný klíč poté Alice uveřejní, respektive zcela otevřeně pošle Bobovi. Soukromý klíč naopak uchová v tajnosti.

V bodě 5 je použit rozšířený Eukleidův algoritmus na e {\displaystyle e} a φ ( n ) {\displaystyle \varphi (n)} , čímž nalezneme d {\displaystyle d} a c {\displaystyle c} do rovnice d e + c φ ( n ) = 1 {\displaystyle de+c\varphi (n)=1} .

Zašifrování zprávy

Bob nyní chce Alici zaslat zprávu M {\displaystyle M} . Tuto zprávu převede nějakým dohodnutým postupem na číslo m {\displaystyle m} ( m < n {\displaystyle m<n} ). Šifrovým textem odpovídajícím této zprávě pak je číslo

c = m e mod n {\displaystyle c=m^{e}\mod n}

Tento šifrový text poté zašle nezabezpečeným kanálem Alici.

Dešifrování zprávy

Alice od Boba získá šifrovaný text c {\displaystyle c} . Původní zprávu m {\displaystyle m} získá následujícím výpočtem:

m = c d mod n {\displaystyle m=c^{d}\mod n}

Fakt, že je výsledek tohoto výpočtu původní zprávou, je důsledek následující rovnosti:

c d ( m e ) d m ( mod n ) {\displaystyle c^{d}\equiv (m^{e})^{d}\equiv m{\pmod {n}}}

A jelikož e d 1 ( mod p 1 ) {\displaystyle ed\equiv 1{\pmod {p-1}}} a e d 1 ( mod q 1 ) {\displaystyle ed\equiv 1{\pmod {q-1}}} , díky malé Fermatově větě platí, že

( m e ) d m 1 + c ( p 1 ) m 1 ( m p 1 ) c m 1 c m ( mod p ) {\displaystyle (m^{e})^{d}\equiv m^{1+c(p-1)}\equiv m^{1}(m^{p-1})^{c}\equiv m\cdot 1^{c}\equiv m{\pmod {p}}}

a zároveň

( m e ) d m ( mod q ) {\displaystyle (m^{e})^{d}\equiv m{\pmod {q}}}

Jelikož p {\displaystyle p} a q {\displaystyle q} jsou různá prvočísla, pomocí čínské věty o zbytcích je dáno

( m e ) d m ( mod p q ) {\displaystyle (m^{e})^{d}\equiv m{\pmod {pq}}}

Tudíž

c d m ( mod n ) {\displaystyle c^{d}\equiv m{\pmod {n}}}

Hodnoty m ( mod p ) {\displaystyle m{\pmod {p}}} ani m ( mod q ) {\displaystyle m{\pmod {q}}} se při dešifrování nepočítají, slouží pouze pro důkaz správnosti dešifrování spolu s čínskou větou o zbytcích. Kongruence platí i pro m > p {\displaystyle m>p} m > q {\displaystyle m>q} .

Příklad

V tomto příkladu jsou pro jednoduchost použita extrémně malá čísla, v praxi se používají o mnoho řádů větší.

  • p = 61 {\displaystyle p=61} ; q = 53 {\displaystyle q=53} (dvě náhodná prvočísla, soukromá)
  • n = p q = 3233 {\displaystyle n=pq=3233} (modul, veřejný)
  • e = 17 {\displaystyle e=17} (veřejný, šifrovací exponent – číslo menší a nesoudělné s  φ ( n ) = 60 52 = 3120 {\displaystyle \varphi (n)=60\cdot 52=3120} )
  • d = 2753 {\displaystyle d=2753} (soukromý, dešifrovací exponent – tak aby d e 1 ( mod φ ( n ) ) {\displaystyle de\equiv 1{\pmod {\varphi (n)}}} )

Pro zašifrování zprávy 123 probíhá výpočet:

123 17 mod 3233 = 855 {\displaystyle 123^{17}\mod 3233=855}

Pro dešifrování pak:

855 2753 mod 3233 = 123 {\displaystyle 855^{2753}\mod 3233=123}

Útoky proti RSA

  • Pokud je pro šifrování použita nízká hodnota exponentu e {\displaystyle e} (např. e = 3 {\displaystyle e=3} ) a nízké hodnoty m {\displaystyle m} je výsledek m e {\displaystyle m^{e}} nižší než n {\displaystyle n} . V tomto případě může být dešifrovaná hodnota (například text rezprezentovaný číselně) získána jako e {\displaystyle e} -tá odmocnina zašifrované hodnoty (textu).
  • Pokud je stejná nezašifrovaná zpráva po zašifrování poslána e {\displaystyle e} nebo více příjemcům a příjemci mají stejné e {\displaystyle e} , ale jiné p {\displaystyle p} , q {\displaystyle q} , a tím pádem i n {\displaystyle n} , potom je možné původní zprávu snadno dešifrovat pomocí Čínské věty o zbytcích. Johan Hastad zjistil, že tento útok je možný i v případě, že zprávy nejsou stejné, ale útočník zná lineární vztah mezi nimi. Tento útok byl dále vylepšen Donem Coppersmithem.
  • Protože šifra RSA je deterministický šifrovací algoritmus (tj. nemá žádnou náhodnou část) útočník může zkusit generovat pravděpodobný text zprávy, následně jej zašifruje pomocí veřejného klíče a porovná jej se zašifrovaným textem. Šifra je nazývána sémanticky bezpečnou, pokud útočník není schopen rozlišit od sebe dva zašifrované texty i když zná (nebo zkouší) původní text. Šifra RSA bez náhodného doplnění není sémanticky bezpečná.
  • Vlastností RSA je, že násobek dvou zašifrovaných hodnot (textů) je roven zašifrování násobku dvou jejich původních hodnot (textů). Tedy m 1 e m 2 e ( m 1 m 2 ) e ( mod n ) {\displaystyle m_{1}^{e}m_{2}^{e}\equiv (m_{1}m_{2})^{e}{\pmod {n}}} . Kvůli této vlastnosti je možný útok pomocí luštění se znalostí vybraných původních hodnot (textů). Tj. útočník, který chce zjistit obsah zašifrovaného textu c m e ( mod n ) {\displaystyle c\equiv m^{e}{\pmod {n}}} může požádat držitele soukromého klíče aby odšifroval nevině vypadající zašifrovaný text c c r e ( mod n ) {\displaystyle c'\equiv cr^{e}{\pmod {n}}} pro nějakou hodnotu r {\displaystyle r} vybranou útočníkem. Kvůli této vlastnosti c {\displaystyle c} je zašifrování m r ( mod n ) {\displaystyle mr{\pmod {n}}} . Tedy pokud je útočník při tomto útoku úspěšný, dozví se m r ( mod n ) {\displaystyle mr{\pmod {n}}} , z čehož může odvodit zprávu m {\displaystyle m} násobením m r {\displaystyle mr} modulární inverzí r {\displaystyle r} modulo n {\displaystyle n} .
  • Pseudonáhodná čísla nejsou náhodná. Ovlivněním generátoru pseudonáhodných čísel lze dosáhnout prolomení.[zdroj?]

Schéma doplnění

Aby se předešlo problémům, tak se v praktické implementaci RSA používají nějaké strukturované náhodné posunutí hodnoty m {\displaystyle m} než je zašifrována. Toto posunutí zaručuje, že m {\displaystyle m} nebude spadat do rozsahu nebezpečných původních textů, a že se daná zpráva po posunutí zašifruje do různých možných zašifrovaných textů.

Standardy jako PKCS#1 byly pečlivě navrženy, aby bezpečně posunuly zprávu před RSA zašifrováním. Protože tato schémata posunují nezašifrovaný text m {\displaystyle m} nějakým množstvím přidaných bitů, velikost neposunuté zprávy M {\displaystyle M} musí být o tolik menší. Schémata pro RSA posunutí musí být pečlivě navržena, aby zabránila sofistikovaným útokům, které by mohly být založené na předvídatelné struktuře zprávy. Rané verze standardu PKCS#1 (do verze 1.5) užívaly konstrukci, která vypadala jako sémanticky bezpečná, ale na Eurokriptu 2000 Coron et al. ukázal, že pro některé typy zpráv toto doplnění neposkytuje dostatečnou úroveň zabezpečení. Navíc na Crypto 1998 Bleichenbacher ukázal, že tato verze je náchylná k praktickému adaptivnímu útoku se znalostí vybraných otevřených textů. Pozdější verze používají Optimal Asymmetric Encryption Padding (OAEP), aby předešly tomuto typu útoku. Z toho důvodu by OAEP mělo být použito ve všech nových aplikacích a PKCS#1 v1.5 doplňování by mělo být nahrazeno kdekoli je to možné. PKCS#1 standard také obsahuje schémata navržená tak, aby poskytovala dodatečnou bezpečnost pro RSA podpisy.

Vygenerování chybného klíče

Hledání velkých prvočísel p {\displaystyle p} a q {\displaystyle q} se provádí testováním náhodných čísel správné velikosti pomocí Testů prvočíselnosti (např. Millerův-Rabinův), které rychle eliminují prakticky všechna neprvočísla.

Čísla p {\displaystyle p} a q {\displaystyle q} by neměla být „příliš blízko“, jinak je Fermatova faktorizace pro n {\displaystyle n} úspěšná, pokud p q {\displaystyle p-q} , například je méně než 2 n 1 4 {\displaystyle 2n^{\frac {1}{4}}} (což i pro malé 1024bitové hodnoty n {\displaystyle n} je 3 10 77 {\displaystyle 3\cdot 10^{77}} ) řešení pro p {\displaystyle p} q {\displaystyle q} je triviální. Navíc, pokud p 1 {\displaystyle p-1} nebo q 1 {\displaystyle q-1} jsou násobky pouze malých prvočísel, n {\displaystyle n} může být rychle rozloženo Pollardovým p 1 {\displaystyle p-1} algoritmem, a tyto hodnoty p {\displaystyle p} nebo q {\displaystyle q} by tedy neměly být použity. Nejsou známy žádné útoky proti malé hodnotě veřejného exponentu jako např. e = 3 {\displaystyle e=3} , pokud je použito správné doplnění. Ale pokud doplnění použito není nebo je špatně implementováno, malý veřejný exponent způsobuje větší riziko. Běžně používaná hodnota e {\displaystyle e} je 65537, což je považováno za kompromis mezi ochranou proti potenciálnímu útoku proti malému exponentu a efektivitou šifrování (nebo podpisu).

Digitální podpis

Algoritmus RSA lze snadno využít pro digitální podpis. Základním principem takového využití je „opačné“ použití šifry – pokud Alice chce poslat Bobovi podepsanou zprávu, připojí k ní číslo získané „dešifrováním“ haše své zprávy pomocí svého soukromého klíče. Bob poté jakoby zpětně „zašifruje“ tento podpis pomocí Alicina veřejného klíče a porovná výsledek s hašem zprávy. Pokud zpráva nebyla změněna, vyjde stejná hodnota, neboť algoritmus je z hlediska šifrování i dešifrování symetrický (lze zaměnit e {\displaystyle e} a d {\displaystyle d} ). Jelikož jediný, kdo zná tajný klíč Alice, je Alice, je tím zaručeno, že ho zašifrovala Alice.

Odkazy

Reference


Literatura

  • R. Rivest, A. Shamir, L. Adleman. A Method for Obtaining Digital Signatures and Public-Key Cryptosystems Archivováno 17. 12. 2008 na Wayback Machine.. Communications of the ACM, Vol. 21 (2), pp.120–126. 1978. Previously released as an MIT „Technical Memo“ in April 1977. Initial publication of the RSA scheme.
  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction to Algorithms, Second Edition. MIT Press and McGraw-Hill, 2001. ISBN 0-262-03293-7. Section 31.7: The RSA public-key cryptosystem, pp.881–887.

Související články

Externí odkazy