Shor-Algorithmus
Für dieses Qiskit-in-Classrooms-Modul benötigen Studierende eine funktionierende Python-Umgebung mit den folgenden installierten Paketen:
qiskitv2.1.0 oder neuerqiskit-ibm-runtimev0.40.1 oder neuerqiskit-aerv0.17.0 oder neuerqiskit.visualizationnumpypylatexenc
Zum Einrichten und Installieren der oben genannten Pakete siehe die Anleitung Qiskit installieren. Um Jobs auf echten Quantencomputern auszuführen, müssen Studierende ein Konto bei IBM Quantum® einrichten, indem sie den Schritten in der Anleitung IBM Cloud-Konto einrichten folgen.
Dieses Modul wurde getestet und verbrauchte drei Sekunden QPU-Zeit. Dies ist nur eine Schätzung. Dein tatsächlicher Verbrauch kann abweichen.
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-ibm-runtime
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'
Einführung
In den frühen 1990er Jahren wuchs die Begeisterung über das Potenzial von Quantencomputern, Probleme zu lösen, die für klassische Computer schwierig waren. Einige talentierte Informatiker hatten Algorithmen entwickelt, die die Leistungsfähigkeit des Quantencomputings für einige Nischen- und konstruierte Probleme demonstrierten, aber niemand hatte eine einzige „Killeranwendung" des Quantencomputings gefunden, die das Feld sicher revolutionieren würde. Das änderte sich 1994, als Peter Shor das entwickelte, was heute als Shor-Algorithmus zur Faktorisierung großer Zahlen bekannt ist.
Es war damals allgemein bekannt, dass das Finden der Primfaktoren einer großen Zahl für einen klassischen Computer extrem schwierig war. Tatsächlich beruhten die Internet-Sicherheitsprotokolle auf dieser Schwierigkeit. Shor fand einen Weg, diese Faktoren exponentiell effizienter zu finden, indem er einige der schwierigeren Schritte auf einen theoretischen, zukünftigen Quantencomputer auslagerte.
In diesem Modul werden wir den Shor-Algorithmus erkunden. Zunächst geben wir etwas mehr Kontext zum Algorithmus, formalisieren das Problem, das er löst, und erklären die Relevanz für die Cybersicherheit. Dann geben wir eine Einführung in die modulare Mathematik und wie man sie auf das Faktorisierungsproblem anwendet, wobei wir zeigen, wie sich die Faktorisierung auf ein anderes Problem namens „Ordnungsfindung" reduziert. Wir zeigen, wie die Quanten-Fourier-Transformation und die Quanten-Phasenschätzung, die wir in einem früheren Modul kennengelernt haben, ins Spiel kommen und wie man sie zur Lösung des Ordnungsfindungsproblems verwendet.
Schließlich werden wir den Shor-Algorithmus auf einem echten Quantencomputer ausführen! Bedenke jedoch, dass dieser Algorithmus wirklich erst nützlich sein wird, wenn wir einen großen, fehlertoleranten Quantencomputer haben, was noch einige Jahre entfernt ist. Daher werden wir nur eine kleine Zahl faktorisieren, um die Funktionsweise des Algorithmus zu demonstrieren.
Das Faktorisierungsproblem
Das Ziel des Faktorisierungsproblems ist es, die Primfaktoren einer Zahl zu finden. Für einige Zahlen ist das ziemlich einfach. Wenn zum Beispiel gerade ist, wird einer seiner Primfaktoren 2 sein. Wenn eine Primzahlpotenz ist, also für eine Primzahl , ist es auch recht einfach, zu finden: Wir approximieren einfach die -Wurzel von und suchen nach nahegelegenen Primzahlen, die sein könnten.
Wo klassische Computer jedoch Schwierigkeiten haben, ist wenn ungerade und keine Primzahlpotenz ist. Dies ist der Fall, den der Shor-Algorithmus behandelt. Der Algorithmus findet zwei Faktoren und , sodass . Er kann rekursiv angewendet werden, bis alle Faktoren Primzahlen sind. In den nächsten Abschnitten werden wir sehen, wie dieses Problem angegangen wird.
Relevanz für die Cybersicherheit
Viele kryptografische Verfahren wurden auf der Grundlage der Tatsache entwickelt, dass die Faktorisierung großer Zahlen schwierig ist, darunter eines, das heute häufig verwendet wird, namens RSA. Bei RSA wird ein öffentlicher Schlüssel erstellt, indem zwei große Primzahlen miteinander multipliziert werden, um zu erhalten. Dann kann jeder diesen öffentlichen Schlüssel verwenden, um Daten zu verschlüsseln. Aber nur jemand mit dem privaten Schlüssel, und , kann diese Daten entschlüsseln.
Wenn leicht zu faktorisieren wäre, könnte jeder bestimmen, was und sind, und die Verschlüsselung brechen. Aber das ist es nicht. Dies ist ein bekanntermaßen schwieriges Problem. Tatsächlich wurden die Primfaktoren einer Zahl namens RSA1024, die 1024 Binärstellen und 309 Dezimalstellen lang ist, noch immer nicht gefunden, obwohl bereits 1991 ein Preisgeld von $100.000 für ihre Faktorisierung ausgesetzt wurde.
Shors Lösung
Im Jahr 1994 erkannte Peter Shor, dass ein Quantencomputer eine große Zahl exponentiell effizienter faktorisieren könnte als ein klassischer Computer. Seine Erkenntnis beruhte auf der Beziehung zwischen diesem Faktorisierungsproblem und der modularen Arithmetik. Wir werden eine kurze Einführung in die modulare Arithmetik geben und dann sehen, wie wir sie nutzen können, um zu faktorisieren.
Modulare Arithmetik
Modulare Arithmetik ist ein Zählsystem, das zyklisch ist, was bedeutet, dass das Zählen zwar auf die übliche Weise beginnt, mit den ganzen Zahlen 0, 1, 2, usw., aber irgendwann, nach einer Periode , das Zählen von vorne beginnt. Sehen wir uns an, wie das mit einem Beispiel funktioniert. Unsere Periode sei 5. Dann beginnen wir beim Zählen dort, wo wir normalerweise 5 erreichen würden, wieder bei 0:
Das liegt daran, dass in der „Modulo-5"-Welt 5 äquivalent zu 0 ist. Wir sagen, dass . Tatsächlich sind alle Vielfachen von 5 äquivalent zu .
Überprüfe dein Verständnis
Lies die folgende(n) Frage(n), denke über deine Antwort nach und klicke dann auf das Dreieck, um die Lösung anzuzeigen.
Verwende modulare Arithmetik, um das folgende Problem zu lösen:
Du startest eine lange, transkontinentale Zugfahrt um 8 Uhr morgens. Die Zugfahrt dauert 60 Stunden. Wie spät ist es, wenn du ankommst?
Antwort:
Die Periode ist 24, da ein Tag 24 Stunden hat. Dieses Problem kann also in modularer Arithmetik geschrieben werden als:
Du würdest also um 20:00 Uhr an deinem Ziel ankommen.
und
Es ist oft nützlich, zwei Mengen einzuführen, und . ist einfach die Menge der Zahlen, die in einer „Modulo-"-Welt existieren. Zum Beispiel, als wir modulo-5 gezählt haben, wäre die Menge . Ein weiteres Beispiel: . Wir können Addition und Multiplikation (modulo ) auf den Elementen in durchführen, und das Ergebnis jeder dieser Operationen ist ebenfalls ein Element in , was zu einem mathematischen Objekt namens Ring macht.
Es gibt eine spezielle Teilmenge von , die für den Shor-Algorithmus von besonderem Interesse ist. Das ist die Teilmenge der Zahlen in , bei denen der größte gemeinsame Teiler zwischen jedem Element und gleich 1 ist, jedes Element also „teilerfremd" zu ist. Wenn wir die Menge dieser Zahlen zusammen mit der modularen Multiplikationsoperation nehmen, bildet dies ein weiteres mathematisches Objekt, eine sogenannte Gruppe. Wir nennen diese Gruppe . Es stellt sich heraus, dass bei (und endlichen Gruppen im Allgemeinen), wenn wir ein beliebiges Element wählen und wiederholt mit sich selbst multiplizieren, wir immer irgendwann die Zahl erhalten. Die minimale Anzahl, wie oft man mit sich selbst multiplizieren muss, um zu erhalten, wird als Ordnung von bezeichnet. Diese Tatsache wird für unsere Diskussion über die Faktorisierung von Zahlen weiter unten sehr wichtig sein.
Überprüfe dein Verständnis
Lies die folgende(n) Frage(n), denke über deine Antwort nach und klicke dann auf das Dreieck, um die Lösung anzuzeigen.
Was ist ?
Antwort:
Wir haben die folgenden Zahlen ausgeschlossen:
Was ist die Ordnung jedes Elements in ?
Antwort:
Die Ordnung ist die kleinste Zahl, für die für jedes Element gilt.
Beachte, dass wir zwar die Ordnung der Zahlen in finden konnten, dies aber im Allgemeinen für größere KEINE einfache Aufgabe ist. Dies ist der Kern des Faktorisierungsproblems und der Grund, warum wir einen Quantencomputer brauchen. Wir werden sehen warum, wenn wir den Rest des Notebooks durcharbeiten.
Modulare Arithmetik auf das Faktorisierungsproblem anwenden
Der Schlüssel zum Finden der Faktoren und mit liegt darin, eine andere ganze Zahl zu finden, sodass
und
Wie hilft uns das Finden von , die Faktoren und zu finden? Gehen wir das Argument jetzt durch. Da , bedeutet das, dass . Mit anderen Worten, ist ein Vielfaches von . Also gilt für eine ganze Zahl :
Wir können faktorisieren und erhalten:
Aus unseren anfänglichen Annahmen wissen wir, dass , also teilt weder noch ohne Rest. Die beiden Faktoren von , und , müssen also jeweils und teilen. Entweder ist ein Faktor von und ein Faktor von , oder umgekehrt. Wenn wir also die größten gemeinsamen Teiler (GGT) zwischen und sowohl als auch berechnen, erhalten wir die Faktoren und . Die Berechnung des GGT zweier Zahlen ist eine klassisch einfache Aufgabe, die zum Beispiel mit dem Euklidischen Algorithmus durchgeführt werden kann.
Überprüfe dein Verständnis
Lies die folgende(n) Frage(n), denke über deine Antwort nach und klicke dann auf das Dreieck, um die Lösung anzuzeigen.
Es kann schwierig sein, jeden logischen Schritt oben zu verstehen, also versuche, es mit einem Beispiel durchzuarbeiten. Verwende und . Überprüfe zunächst, dass und . Überprüfe dann weiterhin jeden Schritt. Berechne schließlich und überprüfe, dass es sich um die Faktoren von handelt.
Antwort:
, was ist, also .