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.
"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 nOceně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.
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 .
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í 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).
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 ).
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.
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 α.
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 = 881Také volíme číslo r z intervalu [1,q]
r = 588w , 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íč.
Ať Alice chce zašifrovat „a“. Nejprve musí převést "a" na binární
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 = 1129K dešifrování zprávy Bob vynásobí hodnotu, kterou obdržel, multiplikativní inverzí r modulo q .
1129 * 442 mod 881 = 372Poté 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 = 0Prvky, které byly vybrány z w , budou odpovídat 1 v binárním zápisu zdroje.
01100001Zpětným překladem z binárního zápisu získá Bob konečně požadované „a“.
Problém s batohem | |
---|---|
Aplikace | |
Kryptosystémy založené na problému batohu |
|
dodatečně |