Polyg-Hellmanův algoritmus (také nazývaný Silver-Polig-Hellmanův algoritmus ) je deterministický diskrétní logaritmický algoritmus v kruhu zbytků modulo prvočíslo . Jednou z vlastností algoritmu je, že pro prvočísla speciálního tvaru můžete najít diskrétní logaritmus v polynomiálním čase. [jeden]
Tento algoritmus vynalezl americký matematik Roland Silver , ale poprvé jej publikovali další dva američtí matematici Stephen Pohlig a Martin Hellman v roce 1978 v článku „ Vylepšený algoritmus pro výpočet logaritmů přes GF(p) a jeho kryptografický význam“ [2] , který vyvinul tento algoritmus nezávisle na Roland Silver. [3]
Nechť je uvedeno srovnání
|
(jeden) |
a rozklad čísla na prvočinitele je známý:
(2) |
Je nutné najít číslo , které vyhovuje srovnání (1). [čtyři]
Podstatou algoritmu je, že stačí najít moduly pro všechny a pak lze najít řešení původního srovnání pomocí čínské věty o zbytku .
Chcete-li najít pro každý z těchto modulů, musíte vyřešit srovnání:
Nejlepší způsob, jak se s tímto algoritmem vypořádat, je zvážit speciální případ, kdy .
Je nám dáno , a zatímco existuje primitivní prvek a my potřebujeme najít ten , který vyhovuje .
Předpokládá se, že , protože je k nerozeznání od , protože v našem případě má primitivní prvek podle definice stupeň , proto:
.Kdy je snadné určit pomocí binárního rozšíření s koeficienty , například:
Nejméně významný bit je určen zvýšením na mocninu a aplikací pravidla
Odvození horního pravidlaZvažte dříve získané srovnání :
,ale podle definice nabývá hodnoty jiné než , takže zbývá pouze jedno srovnání :
.Zvedněte srovnání (1) na mocninu a dosaďte srovnání získané výše:
Rovnost je pravdivá, pokud je sudá, to znamená, že v expanzi ve tvaru polynomu je volný člen roven , tedy platí, když .
Nyní transformujeme známý rozklad a zavedeme novou proměnnou :
,kde
Je jasné, že je dělitelné kdy , a kdy je dělitelné , ale už ne.
Když budeme argumentovat jako předtím, dostaneme srovnání :
ze kterého najdeme .
Zbývající bity se získají podobným způsobem. Napišme obecné řešení hledání s novým zápisem:
,kde
.Takže zvýšení na moc dává:
.Tudíž:
ze kterého najdeme .
Po nalezení všech bitů získáme požadované řešení . [6]
PříkladVzhledem k tomu:
Nalézt:
Řešení:
Dostáváme . Vypadá to
tedy takto:
najdeme :
Počítáme také :
najdeme :
Počítáme také :
najdeme :
Počítáme také :
najdeme :
Najděte, co hledáte :
Odpovědět:
Zvedneme levou a pravou část srovnání (1) na mocninu :
Dosaďte a transformujte srovnání:
Protože je primitivní prvek, proto srovnání tvaru:
Dostaneme
[čtyři] Pomocí tabulky sestavené v kroku 1 najdeme For j od 0 do S ohledem na srovnání Řešení najdete opět v tabulce Konec smyčky na j Konec smyčky na i Krok 3 (nalezení odpovědi). Hledání pro všechna i , najdeme podle čínské věty o zbytku . [7] PříkladJe nutné najít diskrétní logaritmus k základu v , jinými slovy, najít pro:
.Najdeme rozklad .
dostáváme .
Vyrábíme stůl :
zvažujeme . Za pravdu:
Ze srovnání zjistíme :
Z tabulky zjistíme, že pro výše uvedené srovnání platí.
Ze srovnání zjistíme :
Z tabulky dostáváme, že pro výše uvedené srovnání platí. najdeme :
Nyní zvažujeme . Za pravdu:
Analogicky najdeme :
Dostáváme :
Získáme systém:
Pojďme vyřešit systém. První srovnání transformujeme na rovnost, kterou dosadíme do druhého srovnání:
Nahradíme tím, co jsme našli, a získáme to, co hledáme :
Odpověď: . [osm]
Pokud je známa expanze (2), pak je složitost algoritmu
, kde .To vyžaduje trochu paměti. [9]
Obecně lze složitost algoritmu odhadnout také jako
. [deset]Pokud se při zpracování každého q i použijí zrychlené metody (například Shanksův algoritmus ), pak se celkové skóre sníží na
.V těchto odhadech se předpokládá, že aritmetické operace modulo p se provádějí v jednom kroku. Ve skutečnosti tomu tak není – například sčítání modulo p vyžaduje O (log p ) elementárních operací. Ale protože k podobným vylepšením dochází u jakéhokoli algoritmu, je tento faktor často vyřazen.
Když jsou primární faktory malé, pak složitost algoritmu lze odhadnout jako . [jedenáct]
Algoritmus má polynomiální složitost obecně v případě, kdy všechny prvočinitele nepřekročí ,
kde jsou kladné konstanty. [jeden]
Platí pro jednoduché druhy .
Pokud existuje prvočinitel takový, že , kde . [jeden]
Polig-Hellmanův algoritmus je extrémně účinný, když je rozložen na malé prvočinitele. To je velmi důležité vzít v úvahu při výběru parametrů kryptografických schémat. V opačném případě bude schéma nespolehlivé.
Abyste mohli použít Polig-Hellmanův algoritmus, musíte znát faktorizaci. V obecném případě je problém faktorizace poměrně časově náročný, ale pokud jsou dělitelé čísla malí (ve smyslu výše uvedeném), pak lze toto číslo rychle faktorizovat i metodou postupného dělení. Tedy v případě, kdy je Polig-Hellmanův algoritmus efektivní, potřeba faktorizace problém nekomplikuje.