Faktorisierung großer Zahlen Die Sicherheit moderner Datenverschlüsselung beruht darauf, daß es ungeheuer schwierig ist, eine mehr als 100stellige Zahl in ihre Primfaktoren zu zerlegen. Die Technik der Faktorisierung hat jedoch enorme Fortschritte gemacht; möglicherweise sind heute gängige kryptographische Systeme schon bald nicht mehr sicher. Von Prof. Johannes Buchmann Die 129stellige Zahl 114 381 625 757 888 867 669 235 779 976 146 612 010 218 296 721 242 362 562 561 842 935 706 935 245 733 897 830 597 123 563 958 705 058 989 075 147 599 290 026 879 543 541 ist Produkt zweier Primzahlen. Wie lauten diese Faktoren? Diese Frage stellte Martin Gardner den Lesern des Scientific American im August 1977 in seiner Kolumne "Mathematical Recreations". (Sie blieb den Lesern von "Spektrum der Wissenschaft", das die Kolumne unter dem Namen "Mathematische Spielereien" eindeutschte, vorenthalten, denn diese Zeitschrift wurde erst ein Jahr später gegründet.) Im Gegensatz zu den Rätseln, die Gardner sonst aufzugeben pflegte, mußte dieses ungewöhnlich lange auf eine Lösung warten: Erst mehr als 16 Jahre später, im April 1994, präsentierten Paul Leyland von der Universität Oxford, Michael Graff von der Universität von Iowa in Iowa City und Derek Atkins vom Massachusetts Institute of Technology in Cambridge die Faktoren. Sie hatten im Herbst zuvor über das Internet Teile der Aufgabe an etwa 600 Freiwillige vergeben, die dafür ihre Workstations viele Nächte durch laufen ließen. Das Programm stammte von Arjen K. Lenstra vom Zentrum Bell Communications Research in Morristown (New Jersey). Faktorisieren - das Zerlegen von Zahlen in Primfaktoren - ist jedoch alles andere als eine belanglose Spielerei. Zwei Zahlen miteinander zu multiplizieren, auch wenn jede 65 Stellen hat, fällt nicht schwer: Mit Papier und Bleistift schafft man es mit Geduld und Disziplin vielleicht in einer Stunde, mit einem Computer ist es eine Kleinigkeit. Die Umkehrung dieser Aktion, also aus dem Produkt die Faktoren wieder herauszufinden, ist dagegen extrem aufwendig, selbst mit den schnellsten verfügbaren Rechnern. Mathematische Operationen mit einer derartigen Asymmetrie - eine Richtung sehr leicht, die andere sehr schwer - wirken wie Falltüren: Es ist viel leichter, in das Loch hineinzufallen als wieder herauszukommen. Sie bilden die Grundlage moderner kryptographischer Systeme, die mit sogenannten Falltürfunktionen arbeiten. Verschlüsseln muß nämlich schnell gehen, aber Entschlüsseln soll praktisch unmöglich sein. Ronald Rivest vom Massachusetts Institute of Technology in Cambridge, Adi Shamir vom Weizmann-Institut in Rehovot (Israel) und Leonard Adleman von der Universität von Südkalifornien in Los Angeles hatten 1978 auf der Grundlage der Faktorisierung das nach ihren Initialen benannte RSA-Verfahren entwickelt (siehe "Die Mathematik neuer Verschlüsselungssysteme" von Martin E. Hellmann, Spektrum der Wissenschaft, Oktober 1979, Seite 92). Auch Martin Gardner hatte mit den Faktoren der genannten 129stelligen Zahl eine (Nonsense-)Nachricht verschlüsselt: "The magic words are squeamish ossifrage." Wer mit RSA verschlüsselte Nachrichten empfangen will, wählt zwei Primzahlen p und q, also zwei natürliche Zahlen, die nur durch 1 und sich selbst teilbar sind, berechnet deren Produkt n=p×q und veröffentlicht es, hält aber die Faktoren geheim. Zum Verschlüsseln muß man lediglich das Produkt n kennen. Entschlüsseln kann dagegen nur, wer die Primfaktoren p und q weiß. Aber wenn diese mehr als 150 Dezimalstellen haben, würde es selbst mit den besten bekannten Methoden auf einer modernen Workstation mehr als 2000 Jahre dauern, n zu faktorisieren. Faktorisierungsprobleme kann man also leicht erzeugen, aber für hinreichend große Primfaktoren heutzutage nicht in vertretbarer Zeit lösen. Wird das immer so bleiben, oder wird es einmal wirklich schnelle Faktorisierungsverfahren geben? Um das herauszufinden, veranstaltet die Firma, die RSA vertreibt, einen weltweiten Wettbewerb. Sie veröffentlicht Produkte großer Primzahlen und lobt ein Preisgeld für deren Faktorisierung aus. Die kleinste zur Zeit noch nicht zerlegte RSA-Zahl ist 21 290 246 318 258 757 547 497 882 016 271 517 497 806 703 963 277 216 278 233 383 215 381 949 984 056 495 911 366 573 853 021 918 316 783 107 387 995 317 230 889 569 230 873 441 936 471. Sie hat 140 Dezimalstellen, und für ihre Faktorisierung bekommt man vier Siebtel vom Inhalt eines Geldtopfes, der zur Zeit 10895 Dollar enthält und in den RSA alle drei Monate 1750 Dollar einzahlt. (Die restlichen drei Siebtel bleiben für den Faktorisierer der nächsthöheren RSA-Zahl im Topf.) Die Idee, möglichst viele Interessierte mit ihrer Denk- und Rechenkapazität auf das Problem anzusetzen, ist durchaus sinnvoll: Es ist nämlich nicht beweisbar, ob Faktorisieren prinzipiell so schwer ist oder ob die Mathematiker vielleicht auf das geschickteste Verfahren nur noch nicht gekommen sind. Das gilt allgemeiner. Man kennt kein Berechnungsproblem, das drei Bedingungen zugleich erfüllt: Es ist rasch zu erzeugen, seine Lösung ist leicht zu verifizieren, und es existiert nachweislich kein schnelles Verfahren zu seiner Lösung. So gibt es für die Sicherheit von Verschlüsselungsverfahren nur die Erfahrung, daß bisher niemand eine schnelle Methode zur Faktorisierung gefunden hat. Die Anbieter von RSA und ähnlichen Verfahren tun also gut daran, nach solchen Algorithmen zu suchen (und ihre Verfahren dagegen zu schützen), bevor ihnen Gegenspieler aus den Geheimdiensten oder der Unterwelt zuvorkommen. Das Faktorisierungsproblem hat eine ehrwürdige Tradition. Schon in der Antike haben Mathematiker bewiesen, daß jede natürliche Zahl ein Produkt von Primzahlen ist und daß die Primzahlen, die in diesem Produkt vorkommen, bis auf die Reihenfolge eindeutig bestimmt sind. So ist zum Beispiel 12=2×2×3. Für die weitere Untersuchung der Eigenschaften natürlicher Zahlen war es wichtig, Methoden für diese Primfaktorzerlegung zu finden. Seit der Entwicklung der Computer hat dieses Gebiet enorme Fortschritte gemacht. Darüber werde ich hier berichten. Ich versuche zu erklären, wie moderne Faktorisierungsalgorithmen funktionieren und wie sie sich in der Praxis verhalten. Stellenweise gehe ich so ins Detail, daß Sie einfache Versionen auf ihrem PC ausprobieren können; im WWW steht dafür eine Programmbibliothek namens LiDIA zur Verfügung. Schließlich werde ich Bilanz ziehen und eine subjektive Antwort auf die Frage geben, ob Faktorisieren ein schweres Problem bleibt. Fermat-Zahlen Der französische Jurist Pierre de Fermat (1601 bis 1665), der vor allem durch seine erst kürzlich bewiesene Vermutung berühmt geworden ist, glaubte ein Rezept zur Erzeugung beliebig großer i Primzahlen gefunden zu haben: Zu einer natürlichen Zahl i berechne man Fi=2(2 )+1; die Zahlen 0 1 Fi heißen heute Fermat-Zahlen. Die ersten unter ihnen sind F0=2(2 )+1=3, F1=2(2 )+1=5, 2 F2=2(2 )+1=17, F3=257, F4=65537. Man erkennt sofort, daß die ersten drei Fermat-Zahlen 3, 5 und 17 Primzahlen sind. Das gilt auch für F3 und F4. Doch nicht alle Fi sind Primzahlen. Der schweizerische Mathematiker Leonhard Euler (1707 bis 1783) fand 1732 bereits heraus, daß F5=4294967297=641×670041, also zusammengesetzt ist. Erst 150 Jahre später - 1880 - stellten Landry und Le Lasseur fest, daß F6=18446744073709551617 Produkt der Primzahlen 274177 und 67280421 310721 ist. Michael A. Morrison und John D. Brillhart (der heute an der Universität von Arizona in Tucson arbeitet) bestimmten 1970 die beiden Primfaktoren von F7, Richard Brent und John M. Pollard von der Universität Reading (England) zerlegten 1980 die Zahl F8 und Arjen K. Lenstra, Hendrik W. Lenstra von der Universität von Kalifornien in Berkeley sowie Mark S. Manasse vom Forschungszentrum des Computerherstellers DEC und Pollard 1990 die Zahl F9 (Spektrum der Wissenschaft, November 1990, Seite 38). Einerseits sieht man an diesen Daten, wie schwierig das Faktorisierungsproblem ist; immerhin hat es bis 1970 gedauert, bis die 39stellige Fermat-Zahl F7 zerlegt war. Andererseits ist die enorme Weiterentwicklung in jüngster Zeit daran zu erkennen, daß nur 20 Jahre später die 155stellige F9 faktorisiert wurde. Lange bevor die Faktoren bekannt waren, wußte man allerdings schon, daß F7, F8 und F9 keine Primzahlen sind. Man kann nämlich mit einem speziellen Test festellen, ob eine Zahl zusammengesetzt ist, ohne ihre Faktoren berechnen zu müssen (siehe "Primzahlen im Schnelltest" von Carl Pomerance, Spektrum der Wissenschaft, Februar 1983, Seite 80). Erst wenn man sich so vergewissert hat, daß sich die Mühe lohnt, wird man die aufwendige Faktorisierung in Angriff nehmen. Ein einfacher Primzahltest Wie findet man möglichst schnell heraus, ob beispielsweise n=58483 eine Primzahl ist? Eine Möglichkeit ist der sogenannte Fermat-Test. In seiner einfachsten Version überprüft er, ob n ein Teiler von 2n-1-1 ist. Fermat hat nämlich bewiesen, daß dies für ungerade Primzahlen n (also alle außer 2) immer zutrifft. Zum Beispiel ist 3 ein Teiler von 23-1-1=3. Ist n also kein Teiler von 2n-1-1, kann n keine Primzahl sein. Über ihre Primfaktoren weiß man dadurch aber noch nichts. Beispielsweise erhält man für das triviale Beispiel n=6 die Zahl 25-1=31. Da 6 kein Teiler von 31 ist, ist 6 keine Primzahl. Das hätte man zur Not auch ohne Fermat-Test gewußt. Nehmen wir ein etwas schwierigeres Beispiel. Wenn ich den Test etwa auf 58483 anwenden will, muß ich 258482-1 berechnen und prüfen, ob das Ergebnis durch 58483 teilbar ist. Das würde auf die naive Weise extrem lange dauern; die Zahl 258482-1 hat nämlich 17604 Dezimalstellen. Statt dessen rechnet man mit Kongruenzen [=K] (Kasten auf dieser Seite) und verwendet einen raffinierten, sehr schnellen Algorithmus: Es ist zu überprüfen, ob 58483 ein Teiler von 258482-1 ist, ob also 258482 bei der Division durch 58483 den Rest 1 läßt. Diesen Rest berechnet man nun durch binäre Exponentiation. Zuerst schreibt man die Binärdarstellung des Exponenten hin: 58482=215+214+213+210+26+25+24+2. Also ist 4 5 6 10 13 14 15 258482=22×2(2 )×2(2 )×2(2 )×2(2 )×2(2 )×2(2 )×2(2 ). Dann berechnet man der Reihe nach die Reste von 22, 24, 28 und so weiter bei der Division durch 58483, indem man den jeweils vorhergehenden Rest quadriert und das Ergebnis mit Rest durch 58483 teilt (Bild 3). Jetzt braucht man nur noch die Potenzen, die in der Binärzerlegung des Exponenten vorkommen, miteinander zu multiplizieren und nach jeder Multiplikation zu reduzieren, das heißt den Rest bezüglich Division durch 58483 zu bilden. Dadurch bleiben alle Zwischenergebnisse von erträglicher Größe. Man erhält 258482=K4×7053×34259×42237×34763×53664×5010×10893=K11669 mod 58483. Also kann 58483 keine Primzahl sein, weil sonst das Ergebnis 1 gewesen wäre. Das Verfahren geht relativ schnell, liefert aber noch nicht die Primfaktorzerlegung von 58483. Probedivision Nun geht es darum, n in ein Produkt von zwei echten Teilern zu zerlegen, also solchen, die beide weder gleich 1 noch gleich n sind (die Zahlen 1 und n selbst heißen unechte Teiler von n). Zum Beispiel ist 3 ein echter Teiler von 12. Man untersucht dann, ob die Teiler Primzahlen sind. Wenn nicht, zerlegt man sie ihrerseits, und so weiter, bis alle gefundenen Teiler Primzahlen sind. Zum Beispiel ist 12=3&times4. Die 3 ist eine Primzahl. Doch 4 ist zusammengesetzt und muß weiter zerlegt werden. Die Zerlegung ist 4=2&times2. Die vollständige Zerlegung von 12 lautet also 12=2&times2&times3. Der wesentliche Schritt eines Faktorisierungsalgorithmus besteht somit darin, einen echten Teiler einer zusammengesetzten Zahl zu finden. Das nächstliegende Verfahren ist die Probedivision: Man teilt n der Reihe nach durch alle Primzahlen 2, 3, 5, 7, 11, 13, 17,..., bis eine der Divisionen aufgeht. Die Primzahlen speichert man vorher in einer Tabelle. Im Falle von n=58483 stellt man fest, daß die einundfünzigste Primzahl, nämlich 233, ein Teiler von n ist (der andere ist 251). Man muß also 51 Divisionen mit Rest durchführen, um diesen Teiler zu finden. Das ist noch zumutbar. Je größer aber der kleinste Primfaktor p von n ist, desto mehr Divisionen sind erforderlich (Bild 4), und desto größer muß die Primzahltabelle sein, mit der man arbeitet. Probedivision ist mithin nur geeignet, kleine Faktoren zu finden; für große Faktoren braucht man grundsätzlich andere Verfahren. Elliptische Kurven Hendrik W. Lenstra hat 1985 ein Verfahren gefunden, das mit elliptischen Kurven arbeitet. Das sind sehr interessante und nützliche mathematische Objekte. Der britische Mathematiker Andrew Wiles verwendete sie an entscheidender Stelle in seinem letztlich geglückten Beweis der Fermatschen Vermutung (Spektrum der Wissenschaft, August 1993, Seite 14). Sie werden auch für Verschlüsselungsverfahren eingesetzt - und eben zur Faktorisierung. Ähnlich wie beim Fermat-Test führt man bei dem Verfahren mit elliptischen Kurven (elliptic curve method, ECM) eine Berechnung aus, die gelingen würde, wenn n eine Primzahl wäre. Weil n aber zusammengesetzt ist - was man zum Beispiel aus einem vorangegangenen Fermat-Test weiß -, kann die Rechnung scheitern. Was bedeutet das? Im Verlauf der Berechnung muß man immer wieder den größten gemeinsamen Teiler (ggT) von n mit anderen Zahlen ausrechnen. Die Rechnung kann nur fortgesetzt werden, wenn der ggT gleich 1 ist, die beiden Zahlen also teilerfremd sind. Anderenfalls hat man einen Teiler von n gefunden und - wenn der Zufall es will sogar einen echten. Damit ist man am Ziel. Der Zufall spielt bei dieser Methode wirklich mit. Es gibt nämlich sehr viele elliptische Kurven zur Auswahl, an denen man die Berechnungen durchführen kann (Bild 7). Man wählt sich eine nach dem Zufallsprinzip aus. Liefert sie keinen echten Teiler, probiert man die nächste aus. Lenstra konnte zeigen, daß es für jedes zusammengesetzte n Kurven gibt, die einen Teiler liefern. Wie bei der Probedivision hängt die Zeit, die man mit der ECM braucht, um einen Faktor zu finden, von dessen Größe ab. Allerdings sind Faktoren mit bis zu 30 Dezimalstellen in erträglicher Zeit aufzuspüren (Bild 5). Was ist nun eine elliptische Kurve? Zunächst tatsächlich eine Kurve, das heißt eine Menge von Punkten (x,y) in der Ebene, deren Koordinaten eine bestimmte Gleichung erfüllen. Im Falle der elliptischen Kurven ist es die Gleichung y2=x3+ax+b. Dabei müssen die Parameter a und b ganze Zahlen und derart gewählt sein, daß nicht gerade 4a3+27b2=0 ist (Bild 5). Ihrem Namen zum Trotz sind übrigens elliptische Kurven keine Ellipsen; sie haben mit ihnen nur sehr entfernt zu tun. Man spricht auch dann von einer Kurve, wenn die Punktmenge, wie in Bild 6, aus mehreren nicht zusammenhängenden Zweigen besteht. Interessant werden elliptische Kurven dadurch, daß man auf ihnen in einem abstrakten Sinne addieren kann: Zu je zwei Punkten P1 und P2 der Kurve findet man durch eine geometrische Konstruktion stets einen dritten, der ebenfalls auf der Kurve liegt und P1+P2 genannt wird. Die so definierte Addition folgt den üblichen Regeln: Sie ist assoziativ, kommutativ, es gibt ein neutrales Element, also eines, das, zu einem beliebigen Punkt addiert, diesen nicht verändert, und zu jedem Punkt ein Negatives (Inverses), so daß die Summe beider Punkte aus dem neutralen Element besteht. Eine elliptische Kurve bildet also eine kommutative Gruppe bezüglich dieser Addition. Das Inverse -P eines Kurvenpunktes P ist dessen Spiegelbild an der x-Achse. Die Summe P1+P2 zweier Punkte P1 und P2 findet man im allgemeinen, indem man die Gerade durch P1 und P2 zieht. Sie schneidet die Kurve in einem dritten Punkt Q. Dessen Spiegelbild -Q bezüglich der x-Achse ist die gesuchte Summe P1+P2 (Bild 6). In dem Sonderfall P1=P2 tritt an die Stelle der Geraden durch P1 und P2 die Tangente an die Kurve im Punkt P1=P2. Wenn schließlich P1=-P2 ist, schneidet die Gerade durch P1 und P2 keinen weiteren Punkt der Kurve. Man stellt sich ersatzweise vor, daß die Gerade die Kurve im Unendlichen schneidet. Darum fügt man den Punkten der Kurve noch einen weiteren hinzu, den man sich im Unendlichen denkt, nennt ihn O und setzt P1-P1=O. Der Punkt O ist also das Nullelement (neutrale Element) der additiven Gruppe. Die geometrische Definition der Punktaddition kann in Formeln umgesetzt werden. Wenn P1=(x1,y1) und P2=(x2,y2) Punkte der elliptischen Kurve sind, dann gilt ((Formel 1)) In den anderen Fällen berechnet man ((Formel 2, erster Teil)) ((Formel 2, zweiter Teil)) Diese Formeln können nun eine Art Eigenleben gewinnen. Man darf sie anwenden, ohne sich unter x und y Koordinaten von Punkten in der Ebene vorstellen zu müssen. Die Bestandteile der Formeln müssen auch nicht unbedingt, wie bisher, reelle Zahlen sein; es genügt, wenn man mit ihnen addieren, subtrahieren, multiplizieren und dividieren kann. Wir haben beim Rechnen mit Kongruenzen (Kasten auf Seite 83) schon gesehen, daß man mit Divisionsresten addieren, subtrahieren und multiplizieren kann. Genauer: Die Reste bei der Division einer ganzen Zahl durch eine natürliche Zahl n können die Werte 0, 1, 2,... , n-1 annehmen. Man rechnet mit diesen Resten so wie gewohnt; nur wenn das Ergebnis der Rechnung über den Bereich von 0 bis n-1 hinausgeht, dividiert man es durch n und nimmt den Rest. Wenn beispielsweise n=12 ist, dann ist 10+5=3 und 1-2=11, wie man es von den Uhrzeiten gewohnt ist: 5 Stunden nach 10 Uhr ist 3 Uhr, und 2 Stunden vor 1 Uhr ist 11 Uhr. Entsprechend ist 4×5=8. Nur die Division erfordert etwas mehr Aufmerksamkeit. Dividieren ist dasselbe wie Multiplizieren mit dem Kehrwert, und der Kehrwert von x ist das Element y, das die Gleichung xy=1 erfüllt. Für n=12 ist beispielsweise 5 der Kehrwert von 5, denn 5×5=25=K1 mod 12. Aber einen Kehrwert von 4 gibt es nicht, denn 4y ist immer 4, 8 oder 0 mod 12. Insbesondere ist 4×3=0. Nur wenn n eine Primzahl ist, kann man uneingeschränkt dividieren. Der Kehrwert läßt sich mit einer Modifikation des euklidischen Algorithmus berechnen. Zu der Menge dieser Reste mit den entsprechend umdefinierten Grundrechenarten ist nun ebenfalls eine elliptische Kurve definierbar - ganz abstrakt, aber genauso wie zu den reellen Zahlen. Am einfachsten ist es, wenn der Modul n, das heißt die Zahl, bezüglich der man die Reste bildet, eine Primzahl p ist. Die Parameter a und b der Kurve müssen dann ganze Zahlen zwischen 0 und p-1 sein und die Bedingung 4a3+27b2 /=K 0 mod p erfüllen [/=K bedeutet nicht Kongruent]. Die Kurve - die mit der landläufigen Vorstellung von einer gekrümmten Linie nichts mehr gemein hat - besteht aus allen Paaren (x, y) von ganzen Zahlen zwischen 0 und p-1, welche die Kongruenz y2=Kx3+ax+b mod p erfüllen. Zusätzlich gibt es noch den Punkt O. Die Formeln für die Addition bleiben unverändert; man ersetzt nur alle auftretenden Zahlen durch ihre Reste bei der Division durch p. Ein Beispiel: Für p=5, a=1 und b=-1 (=K4 mod 5) sind P1=(1,1) und P2=(2,2) Punkte der elliptischen Kurve. Zur Berechnung von P3=P1+P2 muß man durch 2y1=4 dividieren. Der Kehrwert von 4 ist 4, denn 4×4=16=K1 mod 5. Also ist x3=R(-1-2+1, 5)=3 und y3=R(-1+1-3, 5)=2. Tatsächlich ist (3, 2) ein Punkt der Kurve. Wieder ist die Menge E(p) der Punkte auf der elliptischen Kurve modulo p eine kommutative Gruppe. Sie hat aber nur endlich viele Elemente. Ihre Anzahl liegt zwischen p-2&timesSQRT(p)+1 und p+2&timesSQRT(p)+1. Indem man alle Zahlenpaare, die überhaupt in Frage kommen, durchprobiert, findet man, daß für p=5 die genannte elliptische Kurve E(5) aus den Elementen (3,3), (3,2), (0,3), (0,2), (1,4), (1,1), (2,3), (2,2) und O besteht; sie hat also neun Elemente (Bild 7). Die Grundlage für ECM ist ein Satz des französischen Mathematikers Joseph Louis Lagrange (1736 bis 1813): Wenn man ein Element einer endlichen Gruppe so oft zu sich selbst addiert, wie die Gruppe Elemente hat, dann muß das neutrale Element dabei herauskommen. In unserem Falle: 9 mal ein Element von E(5) ist stets gleich O. (Man schreibt, wie sonst auch üblich, 2P für P+P, 3P für P+P+P und so weiter.) Ich rechne das für P=(1,1) vor. Modulo 5 ist 2P=(2,2), 4P=2×(2P)=(0,2), 8P=2×(4P)=(1,-1), schließlich 9P=8P+P=(1,-1)+ (1,1)=O. Man sieht, daß es nicht nötig ist, neunmal P zu addieren. Vielmehr verwendet man denselben Trick wie bei der binären Exponentiation: Man berechnet der Reihe nach 2P, 4P, ..., 2mP und addiert für das Endergebnis diejenigen Zweierpotenzen zusammen, die man braucht. So hält sich der Rechenaufwand auch dann in Grenzen, wenn an die Stelle der Neun sehr große Zahlen treten. Wie verwendet man nun elliptische Kurven, um Teiler zusammengesetzter Zahlen zu finden? Das will ich am Beispiel n=35 zeigen. Man wählt zuerst eine elliptische Kurve modulo n, das heißt zwei ganze Zahlen a und b mit 4a3+27b2 /=K 0 mod n, und einen Punkt auf der Kurve, also eine Lösung P=(x,y) der Kongruenz y2=Kx3+ax+b mod n. Für n=35 wähle ich wieder a=1, b=-1, x=1 und y=1. Das ergibt zwar eine elliptische Kurve, aber man kann ihre Punkte nicht immer addieren. Nach den Formeln muß man nämlich einen Kehrwert modulo n bilden, und den gibt es nicht immer, weil n zusammengesetzt ist. Die Idee ist: Man versucht es trotzdem; die Berechnung scheitert, aber die Art des Scheiterns gibt einem die Information, die man eigentlich haben will. Man wählt sich eine natürliche Zahl k - wie, beschreibe ich unten. Im Beispiel nehme ich k=9. Den Punkt P versucht man k-mal zu sich selbst zu addieren, und zwar nach der Methode, die ich oben für E(5) beschrieben habe. Im Beispiel berechne ich das Neunfache von P=(1,1) modulo 35. Es ergibt sich 2P=(2,2), 4P=(0,22), 8P=(16,19). Will man nun 9P=8P+P= (16,-16) +(1,1) berechnen, muß man zuerst l bestimmen und dazu durch 16-1=15 mod 35 dividieren. Das geht aber nicht. Es gibt keinen Kehrwert von 15 mod 35, weil der größte gemeinsame Teiler von 15 und 35 nicht 1, sondern 5 ist. Aber bei dem Versuch, den Kehrwert zu finden, hat man mit dem euklidischen Algorithmus den echten Teiler 5 von 35 gefunden, den man eigentlich haben wollte. Die Berechnung ist nun gerade bei k=9 gescheitert, weil 5 ein Teiler von n ist und 9 die Anzahl der Elemente dieser Realisierung von E(5). Das liegt am Satz von Lagrange. Sie wäre bei jedem Vielfachen von 9 ebenfalls gescheitert. Wenn man etwa nach sechsstelligen Primfaktoren sucht, wählt man die Testzahl k so, daß sie Vielfaches möglichst vieler sechsstelliger Zahlen ist, die ihrerseits nicht allzugroße Primfaktoren haben. Dann hat man eine gute Chance, daß k ein Vielfaches der Elementeanzahl von E(p) ist (die wir nicht kennen). Indem man das k-fache eines Elements von E(n) zu berechnen versucht, testet man die Teilbarkeit von n durch alle diese Primzahlen in einem Aufwasch. Um ein geeignetes k zu finden, wählt man eine Zahl B und berechnet k als Produkt aller Primzahlpotenzen, die nicht größer als B sind. Sucht man zum Beispiel nach Faktoren mit höchstens sechs Dezimalstellen, wählt man B=147. Dann ist k=27×34×53×72×112×13×17×19×...×139. Im allgemeinen hat ECM mit der ersten Kurve keinen Erfolg. Man probiert mehrere Kurven, das heißt mehrere Paare von Parametern a und b. Je größer B ist, desto mehr Kurven muß man durchprobieren (Bild 8). Hat ECM dann immer noch keinen Teiler gefunden, so ist man ziemlich sicher, daß die untersuchte Zahl n in der entsprechenden Größenordung auch keinen Teiler hat. Die Rechenzeit von ECM hängt also hauptsächlich von der Größe des gesuchten Primteilers und kaum von der zu faktorisierenden Zahl ab. Wenn eine Zahl mit 1000 Dezimalstellen einen 20stelligen Teiler hat, kann man ihn mit ECM finden. Andererseits wächst die Rechenzeit beträchtlich mit der Größe des kleinsten Faktors. ECM ist für Faktoren mit bis zu 30 Dezimalstellen geeignet. Der größte bisher mit diesem Verfahren gefundene Primfaktor hat 47 Dezimalstellen und wurde von Peter Montgomery am Zentrum für Mathematik und Informatik (CWI) in Amsterdam entdeckt. Das quadratische Sieb Für die Suche nach noch größeren Teilern einer Zahl n verwendet man ein anderes Verfahren. Die Idee ist: Man finde natürliche Zahlen X und Y mit der Eigenschaft, daß n ein Teiler von X2-Y2 ist. Nach der dritten binomischen Formel ist nämlich X2-Y2=(X-Y)(X+Y). Die Zahl n muß also in (X-Y)(X+Y) aufgehen. Wenn n nicht selbst Teiler von X-Y oder X+Y ist, muß ein echter Teiler von n in X-Y und ein anderer in X+Y aufgehen. Also ist zum Beispiel der größte gemeinsame Teiler von X-Y und n größer als 1, und so einen hatte man ja gesucht. Wählt man zum Beispiel n=7429, X=227 und Y=210, so ist X2-Y2=7429. Also ist 7429 ein Teiler von X2-Y2. Die Zahl 7429 ist aber kein Teiler von X-Y=17 und auch kein Teiler von X+Y=437; das geht gar nicht, sie ist ja größer als die beiden anderen Zahlen. Tatsächlich ist ggT(17,7429)=17 ein echter Teiler von 7429. Wie aber findet man X und Y? Zunächst stellt man ein lineares Gleichungssystem auf; dann bestimmt man X und Y aus den Lösungen dieses Systems. Die Anzahl der Gleichungen hängt von der Größe der zu faktorisierenden Zahl ab; für 120stellige Zahlen ergeben sich ungefähr 245000 Gleichungen für ebensoviele Unbekannte (Bild 9). Anders als bei ECM ist also die Größe der zu faktorisierenden Zahl und nicht die des gesuchten Primfaktors maßgebend für den Rechenaufwand. Man bestimmt zunächst eine Reihe von Quadratzahlen mit zwei Eigenschaften: Sie liegen in der Nähe von n, und ihre Differenz zu n ist bis auf das Vorzeichen ein Produkt kleiner Primzahlen. Für n=7429 wären geeignete Quadratzahlen 832, 872, und 882, denn die Differenzen sind sämtlich Produkte der kleinsten Primzahlen 2, 3, 5 und 7: 832-7429 =-540 =(-1)×22×33×5 872-7429 = 140 =22×5×7 882-7429 = 315 =32×5×7 Die Zeilen dieser Tabelle heißen Relationen. Wenn man einige dieser Zeilen miteinander multipliziert, addieren sich die Exponenten in der Zerlegung. Ist die Summe der Exponenten jedes Primfaktors gerade, so ist das Produkt ein Quadrat. Beispielsweise ist (872-7429)×(882-7429)=22×32×52×72= (2×3×5×7)2=2102. Um X und Y zu finden, braucht man jetzt nur noch die Regeln der Kongruenzrechnung anzuwenden. Danach gilt (87×88)2=K(872-7429)×(882-7429) mod 7429. Also gilt (87×88)2=K2102 mod 7429. Hierin kann man auch noch 87×88 durch seinen Rest bei der Division durch 7429 ersetzen und erhält 2272=K2102 mod 7429, das heißt, 7429 ist ein Teiler von 2272-2102. Man kann also X=227 und Y=210 wählen. Diese Werte für X und Y liefern, wie oben gezeigt, den Teiler 17 von 7429. Unter typischerweise sehr vielen Relationen sind also solche auszusuchen, die sich in der dargestellten Weise zu einem Quadrat kombinieren lassen. Zu diesem Zweck stellt man das erwähnte lineare Gleichungssytem auf. Für jede Relation gibt es eine Unbekannte, deren Wert 1 ist, wenn die Relation zur Bildung des Quadrats verwendet wird, und 0 im anderen Fall. Im Beispiel hat das System also drei Unbekannte, nämlich l1, l2 und l3. Das Produkt aller Relationen, die verwendet werden, kann man dann allgemein so schreiben: (((Formel 3))) oder umgeformt unter Verwendung der Potenzgesetze: (((Formel 4))) Die Bedingung, daß dieses Produkt ein Quadrat sein soll und damit alle Exponenten gerade sein müssen, liefert das lineare Gleichungssystem l1 =K 0 mod 2 l1 + l2 + l3 =K 0 mod 2 l2 + l3 =K 0 mod 2. Dabei ist die erste Gleichung für den Faktor -1 zuständig, die zweite für 5 und die dritte für 7. Die Exponenten zu den Faktoren 2 und 3 sind in jedem Falle gerade und benötigen deshalb keine eigene Gleichung. Das Gleichungssystem kann man mit einem üblichen Verfahren, zum Beispiel dem Gaußschen Eliminationsverfahren, lösen, wobei man modulo 2 rechnen muß. Das funktioniert, denn das Eliminationsverfahren besteht nur aus Anwendung der vier Grundrechenarten, und modulo 2 kann man immer dividieren, weil 2 eine Primzahl ist. Als Lösung erhält man l1=0, l2=l3=1 und damit die oben angegebenen Werte für X und Y. Es bleibt zu klären, wie die Relationen selbst gefunden werden. Das geschieht mit Hilfe eines Siebverfahrens, dem der Algorithmus seinen Namen "Quadratisches Sieb" verdankt. Gesucht sind Quadratzahlen, die um n vermindert nur in kleine Primfaktoren zerfallen. Man legt zuerst fest, welche Primzahlen in den Relationen vorkommen dürfen. Im Beispiel sind das 2, 3, 5 und 7. Zur Behandlung des Vorzeichens nimmt man noch die Zahl -1 hinzu. Die Menge dieser Primzahlen heißt Faktorbasis. Als nächstes berechnet man Quadratzahlen, die in der Nähe von n liegen. Man bestimmt dazu die größte ganze Zahl m, die noch unterhalb von SQRT-n liegt. Im Beispiel ist m=86. Quadratzahlen in der Nähe von n sind dann zum Beispiel (m-3)2 = 832, (m-2)2 = 842, (m-1)2=852, m2=862, (m+1)2=872, (m+2)2=882, ..., also allgemeiner (m+u)2, wobei u eine - positive oder negative - ganze Zahl ist, die klein ist im Vergleich zu m. Schließlich legt man das Siebintervall fest, also den Bereich der u, die man bearbeiten will. Die Differenzen der Quadratzahlen zu n (man nennt sie die reduzierten Quadratzahlen) schreibt man in eine Liste (Bild 10). Es sind nun diejenigen reduzierten Quadrate zu bestimmen, deren sämtliche Primfaktoren in der Faktorbasis liegen. Das könnte man mittels Probedivision machen. Schneller geht ein Siebverfahren. Um herauszufinden, welche reduzierten Quadrate durch eine Primzahl p teilbar sind, bestimmt man alle u zwischen 0 und p-1, für die (m+u)2-n durch p teilbar ist. Geht man von diesen u-Werten in Schritten der Länge p nach rechts und links durch die Liste der u, erhält man alle reduzierten Quadrate, die durch p teilbar sind. Im Beispiel ist (m+1)2-n durch 2 teilbar. Also sind auch (m-1)2-n, (m-3)2-n und (m+3)2-n gerade. (Das folgt mit einigen Umrechnungen aus der dritten binomischen Formel.) Diese Zahlen dividiert man so lange durch 2, bis sich eine ungerade Zahl ergibt. Das nennt man das Sieb mit 2, denn es hat eine Verwandtschaft mit dem Sieb des Eratosthenes, dem Standardverfahren für das Auslesen von Primzahlen. Das Sieb mit 3 funktioniert genauso: Man stellt fest, daß m2-n und (m+2)2-n durch 3 teilbar sind. Ausgehend von u=0 und u=2 geht man in Schritten der Länge 3 nach rechts und links und teilt an den entsprechenden Stellen, solange es geht, durch 3. Entsprechend siebt man mit den anderen Primzahlen der Faktorbasis (Bild 8). Überall, wo in der entstehenden Liste am Schluß eine Eins steht, kann man das entsprechende reduzierte Quadrat über der Faktorbasis zerlegen. Die Zerlegung rekonstruiert man durch Probedivision. Hier wurde nur die allereinfachste Version des quadratischen Siebs beschrieben. Die Technik selbst ist deutlich älter als der Computer: Der französische Offizier Eugène Olivier Carissan (1880 bis 1925) hat ein mechanisches Gerät gebaut, mit dem man das Aussieben mit mehreren Primzahlen auf einmal durchführen kann (Bilder 1 und 2). Um eine Zahl mit 100 Dezimalstellen zu zerlegen, muß man noch viele Verbesserungen anbringen. Faktorbasis und Siebintervall werden riesig (Bild 11). Ich gebe noch die Parameter an, die bei der Faktorisierung von RSA-120 verwendet wurden, der 120stelligen Zahl, die RSA zur Faktorisierung ausgeschrieben hatte. Arjen K. Lenstra, B. Dodson von der Lehigh University, Mark S. Manasse und Thomas Denny von der Universität Saarbrücken hatten Mitte 1993 mit der erfolgreichen Faktorisierung dieser Zahl einen Weltrekord erzielt. Die Faktorbasis enthielt 245810 Elemente, und das Gleichungssystem, das am Schluß gelöst werden mußte, hatte 245810 Unbekannte und 252222 Gleichungen. Die Berechnung hätte auf einem einzelnen Rechner etwa 50 Jahre gedauert. Auch die Faktorisierer der eingangs genannten 129stelligen Zahl haben das quadratische Sieb verwendet. Parallelisierung Außer der Verbesserung der Algorithmen ist der gleichzeitige Einsatz vieler Rechner ein wichtiges Mittel zur Beschleunigung der Faktorisierung. Man kann entweder Parallelrechner verwenden, die aber sehr teuer sind, oder verteilte Systeme, zum Beispiel Netze von Arbeitsplatzrechnern, die ohnehin vorhanden und nachts und am Wochenende oft sehr wenig ausgelastet sind. In Saarbrücken verwenden wir für ECM und quadratische Siebe ein Netz von 250 Workstations, die überall auf dem Campus stehen. Das System LiPS (Library for parallel systems), das in meiner Saarbrücker Arbeitsgruppe innerhalb eines Projekts des Sonderforschungsbereichs "VLSIEntwurf und Parallelität" unter der Leitung von Thomas Setz entwickelt wird, erkennt automatisch, wenn einer der Rechner nicht von seinem Hauptnutzer gebraucht wird. Es startet dann zum Beispiel eine Faktorisierung. Will der Hauptnutzer wieder an seinem Rechner arbeiten, legt LiPS das Faktorisierungsprogramm schlafen und weckt es erst wieder auf, sobald der Rechner frei ist. LiPS ist auch dafür zuständig, Berechnungsergebnisse an den Computer zu schicken, der die Resultate auswertet (vergleiche Spektrum der Wissenschaft, Februar 1990, Seite 24). Perspektiven Selbst auf unserem verteilten System braucht das quadratische Sieb für die Faktorisierung einer Zahl mit 130 Dezimalstellen mehrere Wochen. Die Rechenzeit verdoppelt sich bei drei zusätzlichen Dezimalstellen. Das liegt daran, daß die reduzierten Quadrate, die gesiebt werden, etwa von der Größe SQRT-n sind. Algorithmen, die auf demselben Prinzip beruhen wie das quadratische Sieb, aber beträchtlich schneller sein sollen, müssen Relationen durch Zerlegung wesentlich kleinerer Zahlen gewinnen. Der einzige Algorithmus, der in dieser Hinsicht dem quadratischen Sieb deutlich überlegen ist, ist das Zahlkörpersieb, das John Pollard erfunden und unter anderem für die Zerlegung der Fermat-Zahl F9 eingesetzt hat. Mit dem Zahlkörpersieb gelang am 11. April dieses Jahres in einer Gemeinschaftsanstrengung, an der auch unsere Saarbrücker Arbeitsgruppe beteiligt war, die Zerlegung einer 130stelligen Zahl, für die RSA zu diesem Zeitpunkt ein Preisgeld von etwa 6600 Dollar ausgelobt hatte: 1 807 082 088 687 404 805 951 656 164 405 905 566 278 102 516 769 401 349 170 127 021 450 056 662 540 244 048 387 341 127 590 812 303 371 781 887 966 563 182 013 214 880 557. Die Fachleute erwarten, daß ein weiterentwickeltes Zahlkörpersieb in fünf Jahren beliebige Zahlen mit 160 Dezimalstellen faktorisieren kann. Dies ist insofern bedeutsam, als die zusammengesetzten Zahlen, die zur Zeit im RSA-Kryptosystem meist verwendet werden, weniger als 160 Dezimalstellen haben. Solche RSA-Anwendungen werden also bald nicht mehr sicher sein. Ist Faktorisieren natürlicher Zahlen also ein schwieriges Problem? Zur Zeit ja. Noch kann kein Algorithmus der Welt aus dem Produkt zweier Primzahlen mit je 150 Dezimalstellen die Faktoren rekonstruieren. Vorerst bilden solche Produkte also eine gute Basis für die Sicherheit kryptographischer Verfahren. Aber wie geht es weiter? Eines stimmt gewiß nicht, was immer wieder in diesem Zusammenhang zu hören ist: Weil Mathematiker seit Jahrhunderten nach Faktorisierungsalgorithmen suchen und bislang keine wirklich schnellen gefunden haben, müsse man das Problem als schwer ansehen. Erst seit es Computer gibt, werden Algorithmen erfunden, die deren Stärken nutzen; vorher gab es nur Verfahren zur Beschleunigung von Berechnungen mit Stift und Papier. Es gibt keinen Grund anzunehmen, daß der dramatische Fortschritt der letzten zwanzig Jahre schon an seinem Ende angelangt sei. Literaturhinweise - Factorizations and Primality Testing. Von D. M. Bressoud. Springer, Heidelberg 1989. - A Course in Computational Algebraic Number Theory. Von H. Cohen. Springer, Heidelberg 1993. - The Development of the Number Field Sieve. Von Arjen K. Lenstra und Hendrik W. Lenstra Jr. Springer Lecture Notes in Mathematics, Band 1554. Springer, Heidelberg 1993. - The Book of Prime Number Records. Von P. Ribenboim. Springer, Heidelberg 1989. - Prime Numbers and Computer Methods for Factorization. Von Hans Riesel. 2. Auflage, Birkhäuser, Basel 1994. - Die Programmbibliotheken LiDIA und LiPS sind erhältlich über http://www.informatik.thdarmstadt.de/TI/Forschung. Aus: Spektrum der Wissenschaft 9 / 1996, Seite 80 © Spektrum der Wissenschaft Verlagsgesellschaft mbH