Zavazadlový algoritmus

Zavazadlový algoritmus je jeden z nejstarších způsobů šifrování s veřejným klíčem. Byl vyvinut Ralphem Merklem a Martinem Hellmanem v roce 1978.[1] Je jednodušší než RSA a bylo již prokázáno, že jej lze v polynomiálním čase prolomit.[2]

Popis

Zavazadlový algoritmus je způsob asymetrického šifrování, což znamená, že jsou pro komunikaci potřeba dva klíče: veřejný a soukromý. Kromě toho, na rozdíl od RSA, je pouze jednosměrný: veřejný klíč je používán pouze pro šifrování a soukromý klíč pouze pro dešifrování. Proto se nedá využívat pro autentizaci elektronickým podpisem.

Zavazadlový algoritmus je založen na problému součtu podmnožiny (speciální případ problému batohu). Problém je následující: je dána množina čísel A {\displaystyle A} a číslo b {\displaystyle b} a je potřeba najít takovou podmnožinu A {\displaystyle A} , jejíž součet je roven b {\displaystyle b} . Obecně je tento problém považován za NP-úplný. Pokud je však tato posloupnost superrostoucí, tedy každý prvek množiny A {\displaystyle A} je větší než součet všech menších prvků množiny, je tento problém „snadný“ a řešitelný v polynomiálním čase jednoduchým hladovým algoritmem.

Generování klíčů

V zavazadlovém algoritmu jsou klíči dvě „zavazadla“. Veřejným klíčem je „složité“ zavazadlo A {\displaystyle A} a soukromým klíčem je „snadné“ zavazadlo B {\displaystyle B} , spolu s dalšími dvěma čísly, násobitelem a modulem. Násobitel a modul mohou být použity k převedení superrostoucí posloupnosti do složitého zavazadla. Stejná čísla jsou použita k převedení součtu podmnožiny složitého zavazadla na součet podmnožiny snadného zavazadla, což je problém řešitelný v polynomiálním čase.

Šifrování

K zašifrování zprávy je vybrána podmnožina složitého zavazadla A {\displaystyle A} , a to porovnáním množiny bitů (plaintextu) s touto množinou. Každý prvek veřejného klíče, který odpovídá číslu 1 plaintextu, je prvkem podmnožiny A m {\displaystyle A_{m}} , zatímco prvky odpovídající číslu 0 v plaintextu jsou při tvorbě A m {\displaystyle A_{m}} ignorovány – nejsou prvky klíče. Prvky této podmnožiny jsou sečteny a výsledný součet je šifrovým textem.

Dešifrování

Dešifrování je možné, protože násobitel a modul požité k převedení snadného zavazadla na veřejný klíč mohou být rovněž použity k transformaci čísla představujícího šifrového textu na součet příslušných prvků superrostoucí posloupnosti. Poté, použitím jednoduchého hladového algoritmu, může být snadné zavazadlo převedeno pomocí O(n) aritmetických operací na plaintext.

Matematická metoda

Generování klíčů

K zašifrování n {\displaystyle n} -bitové zprávy je vybrána superrostoucí posloupnost

w = ( w 1 , w 2 , . . . , w n ) {\displaystyle w=(w_{1},w_{2},...,w_{n})}

n {\displaystyle n} nenulových přirozených čísel. Je vybráno náhodné celé číslo q {\displaystyle q} pro které platí, že

q > i = 1 n w i {\displaystyle q>\sum _{i=1}^{n}w_{i}}

a náhodné celé číslo r {\displaystyle r} , pro které platí, že gcd( r , q {\displaystyle r,q} ) = 1 {\displaystyle =1} (tzn. r {\displaystyle r} q {\displaystyle q} jsou nesoudělná).

q {\displaystyle q} je voleno tímto způsobem proto, aby byla zajištěna unikátnost šifrového textu. Pokud by bylo menší, bylo by možné více než jeden plaintext zašifrovat tím samým šifrovým textem. Vzhledem k tomu, že q {\displaystyle q} je větší než součet jakékoliv podmnožiny w {\displaystyle w} , žádný součet není kongruentní modulo q {\displaystyle q} a tudíž žádný ze soukromých klíčů nebude stejný. r {\displaystyle r} musí být nesoudělné s  q {\displaystyle q} , v opačném případě nebude mít inverzní modulo q {\displaystyle q} . Bez něj by nebylo možné dešifrování.

Nyní je spočítána posloupnost

β = ( β 1 , β 2 , . . . , β n ) {\displaystyle \beta =(\beta _{1},\beta _{2},...,\beta _{n})}

kde

β i = r w i mod q {\displaystyle \beta _{i}=rw_{i}\;{\bmod {\;}}q}

Veřejným klíčem je β {\displaystyle \beta } , zatímco soukromým klíčem je ( w , q , r ) {\displaystyle (w,q,r)} .

Šifrování

K zašifrování n {\displaystyle n} -bitové zprávy

α = ( α 1 , α 2 , . . . , α n ) {\displaystyle \alpha =(\alpha _{1},\alpha _{2},...,\alpha _{n})}

kde α i {\displaystyle \alpha _{i}} je i {\displaystyle i} -tý bit zprávy a  α i { 0 , 1 } {\displaystyle \alpha _{i}\in \{0,1\}} , je určeno

c = i = 1 n α i β i {\displaystyle c=\sum _{i=1}^{n}\alpha _{i}\beta _{i}}

Šifrovým textem je potom c {\displaystyle c} .

Dešifrování

Aby byl příjemce schopen dešifrovat šifrový text c {\displaystyle c} , musí najít zprávu s bity α i {\displaystyle \alpha _{i}} takovými, aby platilo, že

c = i = 1 n α i β i {\displaystyle c=\sum _{i=1}^{n}\alpha _{i}\beta _{i}}

V případě náhodných hodnot β i {\displaystyle \beta _{i}} by se jednalo o složitý problém, protože by příjemce musel vyřešit problém součtu podmnožiny, jenž je považován za NP-obtížný. Nicméně hodnoty β i {\displaystyle \beta _{i}} byly zvoleny tak, aby bylo dešifrování při znalosti soukromého klíče ( w , q , r ) {\displaystyle (w,q,r)} snadné.

Je potřeba najít celé číslo s {\displaystyle s} , jenž je modulární inverzí r {\displaystyle r} modulo q {\displaystyle q} . To znamená, že s {\displaystyle s} splňuje rovnici s r mod q = 1 {\displaystyle sr\;{\bmod {\;}}q=1} nebo ekvivalentně existuje celé číslo k {\displaystyle k} takové, že s r = k q + 1 {\displaystyle sr=kq+1} . Protože r {\displaystyle r} bylo zvoleno tak, že gcd( r , q {\displaystyle r,q} ) = 1 {\displaystyle =1} , je možné nalézt s {\displaystyle s} k {\displaystyle k} pomocí rozšířeného Euklidova algoritmu. Dále příjemce šifrového textu c {\displaystyle c} spočítá

c c s ( mod q ) {\displaystyle c'\equiv cs{\pmod {q}}}

A proto

c c s i = 1 n α i β i s ( mod q ) {\displaystyle c'\equiv cs\equiv \sum _{i=1}^{n}\alpha _{i}\beta _{i}s{\pmod {q}}}

Protože s r mod q = 1 {\displaystyle sr\;{\bmod {\;}}q=1} β i = r w i mod q {\displaystyle \beta _{i}=rw_{i}\;{\bmod {\;}}q} , platí dále, že

β i s w i r s w i ( mod q ) {\displaystyle \beta _{i}s\equiv w_{i}rs\equiv w_{i}{\pmod {q}}}

A proto

c i = 1 n α i w i ( mod q ) {\displaystyle c'\equiv \sum _{i=1}^{n}\alpha _{i}w_{i}{\pmod {q}}}

Součet všech hodnot w i {\displaystyle w_{i}} je menší než q {\displaystyle q} a proto i = 1 n α i w i {\displaystyle \sum _{i=1}^{n}\alpha _{i}w_{i}} je také v intervalu [ 0 ; q 1 ] {\displaystyle [0;q-1]} . Z toho důvodu musí příjemce vyřešit problém součtu podmnožiny

c = i = 1 n α i w i {\displaystyle c'=\sum _{i=1}^{n}\alpha _{i}w_{i}}

Ten je však jednoduchý, protože w {\displaystyle w} je superrostoucí posloupnost. Příjemce vezme největší prvek w {\displaystyle w} , dále označený jako w k {\displaystyle w_{k}} . Pokud je w k > c {\displaystyle w_{k}>c'} , potom α k = 0 {\displaystyle \alpha _{k}=0} . Pokud je w k c {\displaystyle w_{k}\leq c'} , potom α k = 1 {\displaystyle \alpha _{k}=1} . Poté odečte w k × α k {\displaystyle w_{k}\times \alpha _{k}} od  c {\displaystyle c'} a postup opakuje, dokud nezjistí c {\displaystyle c'} .

Reference

V tomto článku byl použit překlad textu z článku Merkle–Hellman knapsack cryptosystem na anglické Wikipedii.

  1. MERKLE, Ralph; HELLMAN, Martin. Hiding information and signatures in trapdoor knapsacks. IEEE Transactions on Information Theory. Roč. 24, čís. 5, s. 525–530. DOI 10.1109/TIT.1978.1055927. (anglicky) 
  2. SHAMIR, Adi. A polynomial-time algorithm for breaking the basic Merkle - Hellman cryptosystem. IEEE Transactions on Information Theory. Roč. 30, čís. 5, s. 699–704. DOI 10.1109/TIT.1984.1056964. (anglicky)