Hatványozás modulo – a természetes számokra vonatkozó egyik művelet – hatványozás – végrehajtott modulo . Alkalmazható a számítástechnikában , különösen a nyilvános kulcsú kriptográfia területén .
A modulo hatványozás az a természetes szám (bázis) osztásának maradékának kiszámítása , amelyet n hatványra emelünk ( kitevő ) egy m természetes számmal (modulus). Kijelölve:
Például, ha adunk a = 5, n = 3 és m = 13, akkor a c = 8 megoldás a 13-mal való osztás maradéka .
Ha a , n és m nem negatív és a < m , akkor létezik c egyedi megoldás , 0 ⩽ c < m .
A hatványozás modulo n negatív kitevővel is elvégezhető. Ehhez meg kell találni a d számot, az a modulo m szám reciprokát . Ez könnyen megtehető az Euklidész algoritmusával . Ily módon
A modulo hatványozása meglehetősen egyszerű, még nagy bemeneti értékek esetén is. De a diszkrét logaritmus kiszámítása, azaz adott a , c és m n kitevőjének meghatározása sokkal nehezebb. A függvénynek ez az egyirányú viselkedése alkalmassá teszi a kriptográfiai algoritmusokban való használatra.
A modulo hatványozásának legegyszerűbb módja, ha közvetlenül kiszámolja a számot , majd megkeresi a maradékot, amikor ezt a számot elosztja m -rel . Számítsa ki c -t , ha a = 4, n = 13 és m = 497:
Számológéppel kiszámolhatod a 4 13 -at, 67 108 864-et kapunk. Most ezt a modulo 497 számot vesszük, és megkapjuk a 445-öt.
az a csak egy karakter hosszú, az n csak két karakter, az n értéke pedig 8 karakter hosszú.
A kriptográfiában az a gyakran 256 bitből áll (77 tizedesjegy). Tekintsük a = 5 × 10 76 és n = 17 értékeket, amelyek mindegyike valós értéket vesz fel. Ebben a példában az a 77 karakter, az n pedig 2 karakter hosszú, de a hatványozás eredménye 1304 karakter hosszú. Ilyen számítások lehetségesek a modern számítógépeken, de az ilyen számok kiszámításának sebessége lassú. Az a és n értékeit növeljük a magasabb biztonsági szint elérése érdekében, ami az n értékét nehézkessé teszi .
A hatványozáshoz szükséges idő az operációs rendszertől és a processzortól függ. A fent leírt mód O ( n) szorzást igényel.
Ez a módszer több műveletet igényel, mint az előző. Mivel azonban kevesebb memória szükséges, és a műveletek kevesebb időt vesznek igénybe, az algoritmus sokkal gyorsabb.
Ez az algoritmus azon a tényen alapul, hogy adott a és b , a következő két egyenlet ekvivalens:
Az algoritmus a következő:
A 3. lépés minden egyes lépésénél a kifejezés igaz. A 3. lépés n-szeri végrehajtása után c tartalmazza a kívánt értéket. Így az algoritmus n' számlálására támaszkodik, amíg n' el nem éri az n -t, amikor c -t (a hurok előző iterációjából) megszoroz b modulo m -vel a ciklus aktuális iterációjában (annak érdekében, hogy az eredmény kicsi legyen).
Például b = 4, n = 13 és m = 497. Az algoritmus tizenháromszor megy végig a 3. lépésen.
A c végső válasz 445, akárcsak az első módszernél.
Az első módszerhez hasonlóan O( n) szorzás szükséges a befejezéshez. Mivel azonban az ezekben a számításokban használt számok sokkal kisebbek, ennek az algoritmusnak a végrehajtási ideje lecsökken.
Pszeudokódban így néz ki:
függvény modular_pow(alap, index_n, modulus) c := 1 ha index_n_prime = 1 - index_n c := (c * alap) mod modulus return cA gyors hatványozási algoritmus alkalmazása az 595 703 -hoz ( 991 -es mód ):
Nálunk n = 703 =(1010111111) 2 = 2 0 +2 1 +2 2 +2 3 +2 4 +2 5 + 2 7 +2 9 .
595 703 = (((((((595 2 ) 2 *595) 2 ) 2 * 595) 2 *595) 2 * 595) 2 *595) 2 *595) 2 *595
= ((((((238 2 * 595) 2 ) 2 * 595) 2 * 595) 2 * 595) 2 * 595) 2 * 595) 2 * 595
= (((((261 2 ) 2 * 595) 2 * 595) 2 * 595) 2 * 595) 2 * 595) 2 * 595
= (((((733 2 * 595) 2 * 595) 2 * 595) 2 * 595) 2 * 595) 2 * 595
= (((((167*595) 2 *595) 2 *595) 2 *595) 2 *595) 2 *595
= ((((265 2 * 595) 2 * 595) 2 * 595) 2 * 595) 2 * 595
= (((342 2 * 595) 2 * 595) 2 * 595) 2 * 595
= ((605 2 * 595) 2 * 595) 2 * 595
= (733 2 * 595) 2 * 595
= (167*595) 2 *595
= 265 2 * 595
= 342 .
Egy másik lehetőség a jobbról balra haladó elrendezés. A következő képlettel ábrázolható:
Példa . Egy egyszerű bináris jobbról balra hatványozási séma segítségével számítsuk ki a 175 235 mod 257 értéket .
A 235-ös számot ábrázoljuk bináris formában:
235 10 = 11101011 2 .
1 . d := 1 * 175 mod 257 = 175,
t := 175 2 mod 257 = 42;
2 . d := 175 * 42 mod 257 = 154,
t := 42 2 mod 257 = 222;
3 . t := 222 2 mod 257 = 197;
4 . d := 154 * 197 mod 257 = 12,
t := 197 2 mod 257 = 2;
5 . t := 2 2 mod 257 = 4;
6 . d := 12 * 4 mod 257 = 48,
t := 4 2 mod 257 = 16;
7 . d := 48 * 16 mod 257 = 254,
t := 16 2 mod 257 = 256;
8 . d := 254 * 256 mod 257 = 3,
9 . → d = 3. 7 négyzetre emelés és 6 szorzás kellett.
A Fibonacci-számok modulo n hatékonyan megkereshetők, ha egy adott m -re és egy adott A mátrixra kiszámoljuk A m (mod n) értéket . A felsorolt módszerek könnyen alkalmazhatók ebben az algoritmusban. Ez jó primalitástesztet biztosít nagy n számokhoz (500 bit).
Ismétlődő algoritmus ModExp(A, b, c) = A b (mod c) esetén, ahol A négyzetmátrix.
A Diffie-Hellman kulcscsere hatványozást használ véges ciklikus csoportokban. A mátrix hatványra emelésének fenti módszere teljes mértékben kiterjed a ciklikus csoportokra. A modulo C = AB mátrixszorzást (mod n) egyszerűen helyettesítjük a c = ab csoportszorzással .
A kvantumszámításban a hatványozás modulo része Shor algoritmusának . Ezenkívül ebben az algoritmusban minden hívásnál megtudhatja az alapot és a kitevőt, amelyek lehetővé teszik az áramkör különféle módosításait [3] .
A hatványozás modulo egy fontos művelet a számítástechnikában, és vannak olyan hatékony algoritmusok (lásd fent), amelyek sokkal gyorsabbak, mint egyszerűen hatványozás, majd a maradék felvétele. A programozási nyelvekben vannak olyan könyvtárak, amelyek speciális funkciót tartalmaznak a hatványozás modulo számára: