Zádový kryptosystém Merkle-Hellman

Kryptosystém batohu Merkle-Hellman , založený na „ problému batohu “, byl vyvinut Ralphem Merklem a Martinem Hellmanem v roce 1978 [1] . Byl to jeden z prvních kryptosystémů s veřejným klíčem , ale ukázalo se, že je kryptograficky slabý [2] a v důsledku toho si nezískal popularitu.

Popis

"Problém batohu" je následující: pokud známe podmnožinu nákladů zabalených do batohu, je snadné vypočítat celkovou hmotnost , ale při znalosti hmotnosti není snadné určit podmnožinu nákladů. Podrobněji budiž posloupnost n kladných čísel (n je "velikost" batohu)

w = ( w 1 , w 2 , …, w n ) a s .

Úkolem je takový binární vektor najít

x = ( x 1 , x 2 , …, x n ), ( x i = 0 nebo 1),

na

.

Pokud je každé binární číslo x spojeno s nějakým písmenem abecedy, pak by mohlo být přenášeno v zašifrované podobě jednoduše jako součet s . Pro libovolnou množinu čísel w i je problém obnovení x z s NP-těžký .

Merkleovi se podařilo získat funkci inverzní k číslu s , která by dala vektor x , znal pouze jistý „tajný“ klíč a nabídl 100 dolarů někomu, kdo by mohl objevit zádový systém Merkle-Hellman.

Podívejme se na to podrobněji.

Merkle nepoužil libovolnou posloupnost w i , ale superrostoucí, tedy takovou, že

.

Je snadné vidět, že pro takový soubor čísel je řešení úlohy triviální. Abychom se této triviality zbavili, bylo nutné zavést „tajný klíč“, konkrétně dvě čísla: q takové, že a r takové, že gcd(r, q) =1. A nyní místo původní množiny čísel w i použijeme čísla b i =r w i mod q . V původních dokumentech Merkle doporučoval používat n řádově 100, kde n je počet prvků v supernarůstající posloupnosti ("velikost" batohu).

Ve výsledku získáme: veřejný klíč - ( b 1 , b 2 , ..., b n ), soukromý klíč - ( w 1 , w 2 , ..., w n ; q , r ).

– zpráva x = ( x 1 , x 2 , ..., x n ) - vypočítat y = b 1 x 1 + b 2 x 2 + , ..., + b n x n - vypočítat s = yr -1 mod q - vyřešit úlohu pro s pro superrostoucí posloupnost ( w 1 , w 2 , ..., w n ), tzn. najít binární číslo x

Ocenění získal A. Shamir poté, co v březnu 1982 zveřejnil zprávu o odhalení zádového systému Merkle-Hellman s jednou iterací. Všimněte si, že Shamir dokázal sestrojit klíč, který se nemusí nutně rovnat tajemství, ale umožňuje vám otevřít šifru .

Takže to byl jeden z neúspěšných, ale velmi zajímavých pokusů vybudovat kryptosystém založený na problému batohu.

Generování klíčů

V systému Merkle-Hellman se klíče skládají ze sekvencí. Veřejný klíč je „komplexní“ posloupnost, soukromý klíč se skládá z „jednoduché“ nebo supernarůstající posloupnosti a také dvou dalších čísel – násobiče a modulu, které se používají k převodu supernarůstající posloupnosti na „komplexní“ jeden (generování veřejného klíče) a na transformaci součtu podmnožiny "komplexní" sekvence na součet podmnožiny "jednoduché" sekvence (dešifrování). Poslední problém je řešen v polynomiálním čase .

Šifrování

Za prvé, zdrojový text musí být reprezentován v binární formě a rozdělen do bloků, které mají stejnou délku jako veřejný klíč. Dále, ze sekvence, která tvoří veřejný klíč, se vyberou pouze ty prvky, které odpovídají v pořadí 1 v binárním zápisu zdrojového textu, přičemž se ignorují prvky odpovídající bitu 0 . Poté jsou přidány prvky výsledné podmnožiny. Výsledný součet je šifrový text.

Dešifrování

Dešifrování je možné, protože multiplikátor a modul použitý pro generování veřejného klíče ze supernarůstající sekvence se také používá k převodu šifrovaného textu na součet odpovídajících prvků supernarůstající sekvence. Dále pomocí jednoduchého chamtivého algoritmu lze zprávu dešifrovat pomocí aritmetických operací O(n).

Matematický popis algoritmu

Generování klíčů

Pro zašifrování n - bitové zprávy zvolíme super rostoucí posloupnost n nenulových přirozených čísel

w = ( w1 , w2 , … , wn ) .

Dále náhodně vybereme koprimá celá čísla q a r taková, že

.

Číslo q je zvoleno tak, aby byla zaručena jedinečnost (jedinečnost) šifrového textu. Pokud je to alespoň o něco méně, může nastat situace, že jednomu šifrovanému textu bude odpovídat více zdrojových (otevřených) textů. r musí být coprime s q , jinak nebude mít multiplikativní inverzní modulo q , jehož existence je nezbytná pro dešifrování.

Nyní sestavíme sekvenci

β = (β 1 , β 2 , …, β n ),

kde každý prvek se vypočítá podle následujícího vzorce

β i  = rw i mod q .

β bude veřejný klíč, zatímco soukromý klíč tvoří sekvenci ( w , q , r ).

Šifrování

K zašifrování n - bitové zprávy

α = (α 1 , α 2 , …, α n ),

kde  je i -tý bit, tedy {0, 1}, vypočítáme číslo c, které bude šifrovým textem.

Dešifrování

Pro přečtení původního textu musí příjemce určit bity zprávy , které by odpovídaly vzorci

Takový problém by byl NP-těžký , kdyby β i byly náhodně vybrané hodnoty. Hodnoty βi však byly zvoleny tak, že dešifrování je jednoduchý úkol, za předpokladu, že je znám soukromý klíč ( w , q , r ).

Klíčem k nalezení zdrojového textu je najít celé číslo s , které je multiplikativní inverzí k r modulo q . To znamená, že s splňuje rovnici sr mod q = 1, což je ekvivalentní existenci celého čísla k takové, že sr = kq + 1. Protože r je coprime k q , je možné najít s a k pomocí rozšířeného euklidovského algoritmu . Dále počítá příjemce šifrovaného textu

Odtud

Z toho, že rs mod q = 1 a βi = rwi mod q

Pak

Součet všech w i je menší než q . Hodnota je tedy také v intervalu [0,q-1]. Příjemce tedy musí z podmínky určit, že

.

A to je již snadný úkol, protože w  je superrostoucí posloupnost. Nechť w k  je největší prvek v w . Jestliže w k > c' , pak α k = 0; jestliže w k ≤c' , pak α k = 1. Dále odečtěte součin w k × α k od c' a tyto kroky opakujte, dokud nevypočítáme α.

Příklad

w = {2, 7, 11, 21, 42, 89, 180, 354} je superrostoucí sekvence.

Je základem pro generování soukromého klíče. Vypočítejte součet prvků posloupnosti

Dále zvolíme prvočíslo q , které přesahuje hodnotu námi získaného součtu.

q = 881

Také volíme číslo r z intervalu [1,q]

r = 588

w , q a r tvoří soukromý klíč.

Abychom vygenerovali veřejný klíč , zkonstruujeme posloupnost β vynásobením každého prvku ze sekvence w r modulo q .

2 * 588 mod 881 = 295 7 * 588 mod 881 = 592 11 * 588 mod 881 = 301 21 * 588 mod 881 = 14 42 * 588 mod 881 = 28 89 * 588 mod 881 = 353 180 * 588 mod 881 = 120 354 * 588 mod 881 = 236 Dostaneme β = (295, 592, 301, 14, 28, 353, 120, 236).

Posloupnost β tvoří veřejný klíč.


Alice chce zašifrovat „a“. Nejprve musí převést "a" na binární

01100001

Poté vynásobí každý bit odpovídajícím číslem ze sekvence β a součet hodnot odešle příjemci.

a = 01100001 0*295 +1*592 +1*301 + 0 * 14 + 0 * 28 +0*353 + 0 * 120 +1*236 = 1129

K dešifrování zprávy Bob vynásobí hodnotu, kterou obdržel, multiplikativní inverzí r modulo q .

1129 * 442 mod 881 = 372

Poté Bob rozloží 372 následovně. Nejprve vybere největší prvek z w, který je menší než 372 a vypočítá jejich rozdíl. Dále vybere další největší prvek, který je menší než výsledný rozdíl, a tyto kroky opakuje, dokud rozdíl nebude nulový.

372 - 354 = 18 18 - 11 = 7 7 - 7 = 0

Prvky, které byly vybrány z w , budou odpovídat 1 v binárním zápisu zdroje.

01100001

Zpětným překladem z binárního zápisu získá Bob konečně požadované „a“.

Viz také

Poznámky

  1. Ralph Merkle a Martin Hellman, Skrytí informací a podpisů v batohu Trapdoor, IEEE Trans. Information Theory , 24(5), září 1978, str. 525-530.
  2. Adi Shamir, Polynomiální časový algoritmus pro prolomení základního kryptosystému Merkle-Hellman. CRYPTO 1982, str. 279-288. Archivovaná kopie . Získáno 6. prosince 2005. Archivováno z originálu 24. dubna 2005.

Literatura

Odkazy