Quantenschlüsselverteilung
Für dieses Qiskit-in-Classrooms-Modul benötigst du eine funktionierende Python-Umgebung mit folgenden installierten Paketen:
qiskitv2.1.0 oder neuerqiskit-ibm-runtimev0.40.1 oder neuerqiskit-aerv0.17.0 oder neuerqiskit.visualizationnumpypylatexenc
Anleitungen zur Einrichtung und Installation der oben genannten Pakete findest du im Qiskit installieren-Leitfaden. Um Jobs auf echten Quantencomputern auszuführen, müssen Studierende ein Konto bei IBM Quantum® einrichten. Die notwendigen Schritte dazu sind im Leitfaden IBM Cloud-Konto einrichten beschrieben.
Dieses Modul wurde getestet und hat 5 Sekunden QPU-Zeit verbraucht. 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-aer 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'
Sieh dir unten die Modul-Einführung von Dr. Katie McCormick an, oder klicke hier, um sie auf YouTube anzuschauen.
Einführung und Motivation
Es gibt unendlich viele Wege, Informationen zu ver- und entschlüsseln, und buchstäblich Tausende davon wurden eingehend erforscht. Hier beschränken wir uns auf eine sehr frühe und sehr einfache Verschlüsselungsmethode, die sogenannte „einfache Substitution", um uns auf den Quantenteil dieses Protokolls konzentrieren zu können. Der Quantenteil ließe sich mit relativ wenigen Änderungen auf viele andere Protokolle übertragen.
Einfache Substitution
Bei einer einfachen Substitutionsverschlüsselung wird ein Buchstabe oder eine Zahl durch einen anderen ersetzt, sodass eine 1:1-Zuordnung zwischen den Buchstaben und Zahlen einer Nachricht und den Buchstaben und Zahlen der verschlüsselten Sequenz besteht. Ein bekanntes Beispiel aus der Popkultur ist das Kryptogramm-Rätsel, bei dem ein Zitat oder eine Phrase mit einfacher Substitution verschlüsselt wird und die Spielerin oder der Spieler die Aufgabe hat, es zu entschlüsseln. Wenn sie lang genug sind, lassen sich solche Rätsel relativ leicht lösen. Betrachte das folgende Beispiel:
R WVXRWVW GSZG R'W YVGGVI NZPV GSRH KIVGGB OLMT. GSZG DZB, KVLKOV DROO SZEV ZM VZHRVI GRNV HLOERMT RG. R SLKV R NZWV RG HRNKOV VMLFTS.
Menschen, die solche Rätsel von Hand lösen, nutzen meist Tricks, die auf ihrer Vertrautheit mit der Struktur der Originalsprache beruhen. Im Englischen etwa sind die einzigen einbuchstabigen Wörter wie das verschlüsselte „R" die Buchstaben „a" und „I". Die Doppelbuchstaben, die beispielsweise in „KIVGGB" verschlüsselt sind, können nur bestimmte Werte annehmen. Subtilere Hinweise liefern etwa die Tatsache, dass das häufigste Wort, das dem Muster „GSZG" entspricht, „that" ist. Wer Code zum Lösen einsetzt, hat noch mehr Möglichkeiten, zum Beispiel das einfache Durchprobieren von Möglichkeiten, bis ein englisches Wort erkannt wird, mit anschließender Aktualisierung unter Beibehaltung dieses Wortes. Eine einfache, aber wirkungsvolle Methode ist die Buchstabenhäufigkeitsanalyse, insbesondere wenn die Nachricht lang genug ist, um ein repräsentatives Muster des Englischen darzustellen.
Verständnisfrage
Versuche das Rätsel zu entschlüsseln, wenn du möchtest – es ist für den Rest des Moduls jedoch nicht erforderlich. Klicke unten auf „Antwort", um die Lösung zu sehen.
Answer
I decided that I'd better make this pretty long. That way, people will have an easier time solving it. I hope I made it simple enough.
Das obige Beispiel ist mit einem „Schlüssel" verknüpft – einer Zuordnung von den verschlüsselten zu den entschlüsselten Buchstaben. In diesem Fall lautet der Schlüssel:
- A (nicht verwendet, nennen wir ihn Z)
- B->Y
- C (nicht verwendet, nennen wir ihn X)
- D->W
- E->V
- F->U
- ...
Und so weiter. Gelinde gesagt ist das kein guter Schlüssel. Schlüssel, bei denen die verschlüsselten und entschlüsselten Buchstaben einfach verschobene Versionen des Alphabets sind (wie A->B und B->C), werden als „Caesar-Verschiebungs-Chiffren" bezeichnet.
Beachte, dass diese sehr schwer zu knacken sind, wenn sie kurz sind. Wenn sie sehr kurz sind, sind sie sogar unbestimmt. Betrachte:
URYYP
Es gibt viele mögliche Entschlüsselungen mit verschiedenen Schlüsseln: HELLO, PETTY, HAPPY, JIGGY, STOOL. Fallen dir noch weitere ein?
Wenn du jedoch viele solcher Nachrichten sendest, wird die Verschlüsselung irgendwann geknackt. Du solltest also denselben „Schlüssel" nicht zu oft verwenden. Am besten ist es, eine bestimmte Substitution nur einmal zu verwenden – nicht nur in einer einzigen Nachricht, sondern nur für ein einziges Zeichen! Das bedeutet: Du hast für jedes Zeichen der Nachricht ein eigenes Verschlüsselungsschema oder einen eigenen Schlüssel, der in der Reihenfolge der Nachricht angewendet wird. Wenn du deiner Freundin oder deinem Freund eine Nachricht schicken möchtest, bräuchtet ihr beide einen Notizzettel (in alten Zeiten), auf dem dieser sich ständig ändernde Schlüssel steht. Du verwendest ihn nur einmal. Das nennt man einen „Einmalschlüssel" (engl. „one-time pad").
Der Einmalschlüssel
Schauen wir uns anhand eines Beispiels an, wie das funktioniert. Man könnte das vollständig mit Buchstaben durchführen, aber es ist üblich, Buchstaben in Zahlen umzuwandeln, etwa indem man A=0, B=1, C=2… zuweist. Angenommen, wir sind befreundet und in geheimnisvollen Aktivitäten verwickelt, und wir haben einen gemeinsamen Notizzettel. Idealerweise hätten wir viele solcher Zettel, aber der für heute lautet:
EDGRPOJNCUWQZVMK…
Oder, in Zahlen umgerechnet nach Position im Alphabet:
4,3,6,17,15, 14, 9, 13, 2, 20, 22, 16, 25, 21, 12, 10…
Angenommen, ich möchte dir folgende Nachricht mitteilen:
„I love quantum!"
Oder gleichwertig:
8, 11, 14, 21, 4, 16, 20, 0, 13, 19, 20, 12
Wir wollen den obigen Code nicht direkt senden; das wäre eine einfache Substitution, die überhaupt nicht sicher ist. Wir wollen ihn auf irgendeine Weise mit unserem Schlüssel kombinieren. Eine gängige Methode ist die Addition modulo 26. Wir addieren den Wert der Nachricht zum Wert des Schlüssels, mod 26, bis wir das Ende der Nachricht erreichen. Wir würden also senden:
8+4 (mod 26) = 12, 11+3 (mod 26) = 14, 14+6 (mod 26) = 20, 21+17 (mod 26) = 12…
= 12, 14, 20, 12, 19, 4, 3, 13, 15, 13, 16, 2
Beachte: Wenn jemand das abfängt und den Schlüssel NICHT hat, ist eine Entschlüsselung völlig hoffnungslos! Nicht einmal die beiden „u"s in „quantum" werden mit derselben Zahl codiert! Das erste ist eine 3, das zweite eine 16 – im selben Wort!
Ich sende dir das also, und du hast denselben Schlüssel wie ich. Du machst die Addition modulo 26 rückgängig, von der du weißt, dass ich sie durchgeführt habe:
12, 14, 20, 12, 19, 4, 3, 13, 15, 13, 16, 2
=(4+x1) (mod 26), (3+x2) (mod 26), (6+x3) (mod 26), (17+x4) (mod 26),…
Sodass die Nachricht x1, x2, x3, x4… lauten muss:
8, 11, 14, 21…
Und nach Umwandlung in Text ergibt das:
„I love quantum".
Das ist ein Einmalschlüssel.
Beachte: Wenn der Schlüssel kürzer als die Nachricht ist, beginnen wir unsere Codierung zu wiederholen. Das wäre immer noch ein schwer zu lösendes Entschlüsselungsproblem, aber nicht unmöglich, wenn es oft genug wiederholt wird. Du benötigst also einen langen Schlüssel (oder „Zettel").
In vielen Kontexten sind Studierende mit dieser Verschlüsselung bereits vertraut, sodass diese Aktivität übersprungen werden kann. Sie ist jedoch eine relativ schnelle und einfache Auffrischung.
Schritt 1: Such dir eine Partnerin oder einen Partner und teile eine Folge von 4 Buchstaben als Schlüssel. Jede schulisch angemessene 4-Buchstaben-Folge ist geeignet.
Schritt 2: Wähle ein geheimes 4-Buchstaben-Wort, das du deiner Partnerin oder deinem Partner schicken möchtest (beide machen das, sodass ihr euch gegenseitig unterschiedliche Geheimwörter schickt).
Schritt 3: Wandle den 4-Buchstaben-Schlüssel/Zettel und die jeweiligen 4-Buchstaben-Geheimwörter mit A = 1, B = 2 usw. in Zahlen um.
Schritt 4: Kombiniere dein 4-Buchstaben-Wort mit dem Einmalschlüssel mittels Addition modulo 26.
Schritt 5: Übergib deiner Partnerin oder deinem Partner die Zahlenfolge, die dein Geheimwort codiert, und erhalte im Gegenzug deren oder dessen Folge.
Schritt 6: Entschlüsselt gegenseitig eure Wörter mit Subtraktion modulo 26.
Schritt 7: Überprüft das Ergebnis. Hat es funktioniert?
Nachbereitung
Tauscht verschlüsselte Wörter mit einer anderen Gruppe aus, die keinen Zugang zu eurem Einmalschlüssel hat. Könnt ihr diese entschlüsseln? Erkläre, warum oder warum nicht.
Die obige Aktivität macht hoffentlich deutlich, dass ein Einmalschlüssel eine unknackbare Verschlüsselungsform ist – unter bestimmten Voraussetzungen:
- Der Schlüssel ist genauso lang wie die zu sendende Nachricht oder länger
- Der Schlüssel ist wirklich zufällig
- Der Schlüssel wird nur einmal verwendet und danach verworfen
Das ist also großartig. Wir haben eine unknackbare Verschlüsselung… es sei denn, jemand erhält unseren Schlüssel. Wenn jemand unseren Schlüssel bekommt, ist alles entschlüsselt. Dieser Unterschied zwischen unknackbarer Verschlüsselung und der vollständigen Preisgabe aller Geheimnisse macht den Austausch eines sicheren Schlüssels äußerst wichtig. Das Ziel der Quantenschlüsselverteilung (Quantum Key Distribution) ist es, die Einschränkungen, die die Natur quantenmechanischer Information auferlegt, zur Absicherung eines gemeinsamen Schlüssels bzw. Einmalzettels zu nutzen.
Quantenzustände als Schlüssel verwenden
Gehen wir davon aus, dass wir mit Qubits arbeiten (wobei zu betonen ist, dass Qubits zwei Eigenzustände haben). Man könnte Quantensysteme mit einer höheren Anzahl von Quantenzuständen verwenden, aber die modernsten Quantencomputer von IBM® nutzen Qubits. Unsere Buchstaben A, B, C lassen sich problemlos in Folgen von 0en und 1en codieren. Es reicht also aus, einen Schlüssel aus 0en und 1en auszutauschen und für jedes Bit, das einen Buchstaben speichert, die Addition modulo 2 durchzuführen.
Verständnischeck
Wie viele Bits brauchen wir, wenn uns nur englische Buchstaben interessieren?
Answer
Unsere Freunde Alice und Bob möchten einen Quantenschlüssel so austauschen, dass niemand sonst ihn abfangen kann (zumindest nicht ohne ihr Wissen). Sie benötigen eine Möglichkeit, Quantenzustände aneinander zu senden. Das mit hoher Treue und ohne Rauschen/Fehler zu tun, ist alles andere als trivial. Aber es gibt zwei Ansätze, die wir an diesem Punkt verstehen können sollten:
- Ein Glasfaserkabel ermöglicht die Übertragung von Licht – das sehr quantenmechanisch ist. Einzelne Photonen können über viele Kilometer Glasfaserkabel mit hoher Treue detektiert werden. Das ist kein perfekter, fehlerfreier Quantenkanal, aber er kann sehr gut sein.
- Wir könnten Quantenteleportation verwenden, wie in einem vorherigen Modul beschrieben. Das heißt, Alice und Bob könnten verschränkte Qubits teilen, und ein Zustand könnte mithilfe des Teleportationsprotokolls von Alice zu Bob übertragen werden.
Für dieses Modul wollen wir nicht voraussetzen, dass du hochpräzise optische Aufbauten zum Austauschen von Photonen hast, deshalb nutzen wir die zweite Methode zum Austauschen von Quantenzuständen. Das bedeutet aber nicht, dass sie für den Austausch von Quantenschlüsseln über große Entfernungen am realistischsten ist.
Wir werden nun ein Protokoll erkunden, das erstmals von Charles Bennett und Gilles Brassard im Jahr 1984 beschrieben wurde und den Austausch von Zuständen beinhaltet, die in verschiedenen Basen von Alice zu Bob gemessen werden. Wir verwenden ein cleveres Messverfahren, um schrittweise einen Schlüssel für die spätere Verschlüsselung aufzubauen. Mit anderen Worten: Wir verteilen einen Quantenschlüssel zwischen zwei Parteien, die kommunizieren möchten – daher der Begriff „Quantum Key Distribution" (QKD).
QKD-Schritt 1: Alices zufällige Bits und zufällige Basen
Alice beginnt damit, eine zufällige Folge von 0en und 1en zu erzeugen. Anschließend wählt sie zufällig eine Basis aus, in der sie einen Quantenzustand vorbereitet – basierend auf jedem zufälligen Bit und unter Verwendung der folgenden Tabelle (die auch Bob kennt):
| Basis | bit = 0 | bit = 1 |
|---|---|---|
| Z | ||
| X |
Angenommen, Alice hat zufällig eine 0 erzeugt und zufällig die X-Basis ausgewählt. Dann würde sie den Quantenzustand vorbereiten. Man kann durchaus Quantenzufälligkeit nutzen, um eine zufällige Folge von 0en und 1en sowie eine zufällige Basiswahl zu erzeugen. Nehmen wir zunächst einfach an, dass eine zufällige Folge wie folgt erzeugt wurde:
| Alices Bits | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | ... |
|---|---|---|---|---|---|---|---|---|---|---|
| Alices Basen | X | X | Z | Z | Z | X | Z | Z | X | ... |
| Alices Zustände | ... |
Diese Folge zufälliger Bits, Basen und resultierender Zustände würde in einer langen Sequenz fortgesetzt werden, um einen ausreichend langen Schlüssel zu erzeugen.
QKD-Schritt 2: Bobs zufällige Basen
Bob trifft ebenfalls eine zufällige Basiswahl. Während Alice die Basiswahl jedoch zur Vorbereitung ihres Zustands nutzte, wird Bob in diesen Basen tatsächlich Messungen durchführen. Wählt Bob dieselbe Basis, in der Alice ihren Zustand vorbereitet hat, so lässt sich das Ergebnis von Bobs Messung vorhersagen. Wenn Bob zufällig eine andere Basis als die von Alice verwendete wählt, können wir das Ergebnis von Bobs Messung nicht vorhersagen.
| Alices Bits | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | ... |
|---|---|---|---|---|---|---|---|---|---|---|
| Alices Basen | X | X | Z | Z | Z | X | Z | Z | X | ... |
| Alices Zustände | ... | |||||||||
| Bobs Basen | X | Z | X | Z | X | X | Z | X | X | ... |
| Bobs Zustände (a priori) | ? | ? | ? | ? | ... | |||||
| Bobs Zustände (gemessen) | ... | |||||||||
| Betrachte in der folgenden Tabelle die erste Spalte. Alice hat den Zustand vorbereitet, der ein Eigenzustand von X ist. Da Bob zufällig ebenfalls entschieden hat, in der X-Basis zu messen, gibt es für Bobs gemessenen Zustand nur ein mögliches Ergebnis: In der zweiten Spalte haben sie jedoch unterschiedliche Basen gewählt. Der von Alice gesendete Zustand ist |