10.4 Modulare Quadratwurzeln a) Sei p eine ungerade Primzahl. Die Menge Q = {y 2 : y ∈ Z∗p } ist eine Untergruppe von Z∗p . Da y und −y mod p = p − y das gleiche Quadrat haben, aber y 6= p − y (p ungerade), ist genau die Hälfte der Elemente in Z∗p ein Quadrat (mod p), d.h. |Q| = (p − 1)/2. Das bedeutet, dass ein Element x ∈ Z∗p entweder keine oder zwei Quadratwurzeln mod p besitzt. Ist a ein Quadrat in Z∗p , so ist a|Q| = 1 (in Z∗p ), d.h. a(p−1)/2 mod p = 1. Ist a kein Quadrat in Z∗p , so ist a(p−1)/2 mod p = p − 1. (Der Grund hierfür ist folgender: Für jedes a ∈ Z∗p gilt nach dem kleinen Satz von Fermat ap−1 = 1 (in Z∗p ). Also kann a(p−1)/2 als Nullstelle des Polynoms t2 −1 ∈ Zp [t] nur die Werte 1 bzw. −1 mod p = p − 1 annehmen. Sämtliche (p − 1)/2 Elemente a ∈ Q erfüllen a(p−1)/2 = 1 in Z∗p , sind also Nullstellen des Polynoms t(p−1)/2 − 1 ∈ Zp [t]. Da dieses Polynom nicht mehr als (p − 1)/2 Nullstellen besitzt, muss für alle übrigen Elemente a ∈ Z∗p , also die Nichtquadrate, a(p−1)/2 mod p = p − 1 gelten.) Man kann also leicht entscheiden, ob ein a ∈ Z∗p ein Quadrat ist oder nicht. Zur Berechnung von Quadratwurzeln in Z∗p gibt es schnelle (probabilistische) Algorithmen (siehe z.B. Wätjen, Kap. 9.2). Ganz einfach ist die Quadratwurzelbestimmung, wenn p ≡ 3 (mod 4). Ist nämlich a ein Quadrat, so ist (a(p+1)/4 )2 ≡ a(p+1)/2 ≡ a · a(p−1)/2 ≡ a (mod p). b) Sei nun n = p · q, wobei p 6= q ungerade Primzahlen sind. Dann gilt: Ist a ∈ Z∗n (d.h. ggT(a, n) = 1), so hat a entweder keine Quadratwurzel in Z∗n oder genau vier: Hat a eine Quadratwurzel mod n, so auch mod p und mod q. Seien x1 , p − x1 die Quadratwurzeln von a in Z∗p und x2 , q − x2 die in Z∗q . Nach dem Chinesischen Restsatz gibt es dann zu jeder Kombination x ∈ {x1 , p−x1 }, x0 ∈ {x2 , q − x2 } ein y ∈ Z∗n mit y ≡ x (mod p) und y ≡ x0 (mod q). Damit erhält man vier verschiedene y mit y 2 ≡ a (mod p) und y 2 ≡ a (mod q), d.h. y 2 ≡ a (mod n). Beispiel: n = 21, p = 3, q = 7. Gesucht: Quadratwurzeln aus 16 in Z∗n . 4|p + 1, 4|q + 1. x1 = 16(3+1)/4 mod 3 = 1, 3 − x1 = 2. x2 = 16(7+1)/4 mod 7 = 4, 7 − x2 = 3. Viermalige Anwendung des Chinesischen Restsatzes liefert die folgenden vier Quadratwurzeln von 16 in Z∗21 : y1 = 4 (zu x1 = 1 und x2 = 4) y2 = 17 (zu 3 − x1 = 2 und 7 − x2 = 3) y3 = 11 (zu 3 − x1 = 2 und x2 = 4) y4 = 10 (zu x1 = 1 und 7 − x2 = 3). (Beachte: y2 = n − y1 , y4 = n − y3 ) c) Sei wieder n = p · q, wobei p 6= q ungerade Primzahlen sind. Dann ist die Berechnung von Quadratwurzeln mod n genauso schwierig, wie die Bestimmung der Faktorisierung von n: Kennt man p und q, so kann man nach a) und b) Quadratwurzeln modulo n effizient berechnen. Umgekehrt: Wähle x ∈ Z∗n zufällig und berechne a = x2 mod n. Bestimme Quadratwurzel y aus a. Ist y = x oder y = n − x, so wähle neues x. Da es vier Quadratwurzeln von a gibt, ist y 6= x, n − x mit Wahrscheinlichkeit 1/2. Durch Iterieren erhält man also mit beliebig hoher Wahrscheinlichkeit zu einem x und a = x2 mod n eine Quadratwurzel y von a mit y 6= x, n − x. Mit einem solchen y kann man die Faktorisierung von n schnell bestimmen: Es ist x2 − y 2 ≡ 0 (mod n), d.h. n = p · q|(x − y) · (x + y). n teilt nicht x + y, da wegen x + y < 2n sonst x + y = n folgte, also y = n − x, im Widerspruch zur Annahme über y. n teilt auch nicht x − y, da sonst x = y, ebenfalls im Widerspruch zur Annahme über y. Also ist ggT(x+y, n) = p oder q. Da der ggT mit Hilfe des Euklidischen Algorithmus schnell zu berechnen ist, erhält man somit die Faktorisierung von n.