Distribuzione quantistica delle chiavi
Per questo modulo di Qiskit in Classrooms, gli studenti devono avere un ambiente Python funzionante con i seguenti pacchetti installati:
qiskitv2.1.0 o più recenteqiskit-ibm-runtimev0.40.1 o più recenteqiskit-aerv0.17.0 o più recenteqiskit.visualizationnumpypylatexenc
Per configurare e installare i pacchetti sopra indicati, consulta la guida Installare Qiskit. Per eseguire job su veri computer quantistici, gli studenti dovranno creare un account con IBM Quantum® seguendo i passaggi nella guida Configura il tuo account IBM Cloud.
Questo modulo è stato testato e ha utilizzato 5 secondi di tempo QPU. Si tratta solo di una stima. Il tuo utilizzo effettivo potrebbe variare.
# 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'
Guarda la presentazione del modulo della dott.ssa Katie McCormick qui sotto, oppure clicca qui per vederla su YouTube.
Introduzione e motivazione​
Esistono infiniti modi di cifrare e decifrare informazioni, e letteralmente migliaia di metodi sono stati ben studiati. Qui ci limiteremo a un metodo di cifratura molto antico e molto semplice, chiamato "sostituzione semplice", per concentrarci sulla parte quantistica di questo protocollo. La parte quantistica potrebbe essere adattata a molti altri protocolli con modifiche relativamente poche.
Sostituzione semplice​
Una cifratura a sostituzione semplice è quella in cui una lettera o un numero viene sostituito con un altro, in modo tale che esista una corrispondenza 1:1 tra le lettere e i numeri in un messaggio e le lettere e i numeri utilizzati in una sequenza cifrata. Un esempio di cultura pop sono i puzzle crittografici (cryptoquote o cryptogram), in cui una citazione o una frase è cifrata usando la sostituzione semplice, e il giocatore deve decifrarla. Questi sono facili da risolvere se sono abbastanza lunghi. Considera l'esempio:
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.
Le persone che risolvono questi puzzle a mano usano principalmente trucchi legati alla familiarità con la struttura della lingua del messaggio originale. Per esempio, in inglese, le uniche parole di una lettera come la "R" cifrata sono "a" e "I". Le doppie lettere cifrate in, per esempio, "KIVGGB" possono assumere solo certi valori. Ci sono cose più sottili che danno indizi, come il fatto che la parola più comune che corrisponde al pattern "GSZG" è "that". Le persone che usano codice per risolvere questi puzzle hanno molte più opzioni, tra cui semplicemente scorrere le possibilità finché non viene recuperata una parola in inglese, e aggiornare preservando quella parola. Un metodo semplice ma potente è l'utilizzo della frequenza delle lettere, specialmente quando il messaggio è abbastanza lungo da costituire un campione rappresentativo dell'inglese.
Domanda di verifica​
Prova a decifrare questo se vuoi, anche se non è necessario per il resto del modulo. Clicca sul triangolo qui sotto per vedere il messaggio.
Risposta:
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.
L'esempio sopra è associato a una "chiave", una mappatura dalle lettere cifrate a quelle decifrate. In questo caso, la chiave è:
- A (non usata, diciamo Z)
- B->Y
- C (non usata, diciamo X)
- D->W
- E->V
- F->U
- ...
E così via. Per dirla con delicatezza, questa non è una buona chiave. Le chiavi in cui le lettere cifrate e quelle decifrate sono semplicemente versioni spostate dell'alfabeto (come A->B e B->C) sono chiamate cifrari a "spostamento di Cesare".
Nota che questi sono molto difficili se sono brevi. In effetti, se sono molto brevi, sono indeterminati. Considera:
URYYP
Esistono molte possibili decifrature, usando chiavi diverse: HELLO, PETTY, HAPPY, JIGGY, STOOL. Riesci a pensarne altre?
Ma se invii molti messaggi così, alla fine la cifratura verrà decifrata. Quindi non dovresti usare la stessa "chiave" troppo spesso. In effetti, la cosa migliore è usare una certa sostituzione solo una volta. Non in un solo messaggio, ma solo per un singolo carattere! Con questo intendiamo che avrai uno schema di cifratura o chiave per ogni carattere usato nel messaggio, in ordine. Se vuoi inviare un messaggio a un amico usando questo sistema, tu e il tuo amico avreste bisogno di un blocco di carta (nei tempi antichi) su cui è scritta questa chiave sempre mutevole. Lo userete una sola volta. Questo si chiama "one-time pad".
Il one-time pad​
Vediamo come funziona con un esempio. Si potrebbe fare tutto con lettere, ma è comune convertire le lettere in numeri, ad esempio assegnando A=0, B=1, C=2…. Supponiamo di essere amici coinvolti in attività clandestine e di aver condiviso un blocco. Idealmente, condivideremmo molti blocchi, ma quello di oggi è:
EDGRPOJNCUWQZVMK…
Oppure, convertendo in numeri per posizione nell'alfabeto:
4,3,6,17,15, 14, 9, 13, 2, 20, 22, 16, 25, 21, 12, 10…
Supponiamo che io voglia condividere con te il messaggio:
"I love quantum!"
Oppure, equivalentemente:
8, 11, 14, 21, 4, 16, 20, 0, 13, 19, 20, 12
Non vogliamo inviare il codice sopra; è una sostituzione semplice, che non è affatto sicura. Vogliamo combinarlo con la nostra chiave in qualche modo. Un modo comune è l'addizione modulo 26. Aggiungiamo il valore del messaggio al valore della chiave, mod 26, fino alla fine del messaggio. Quindi invieremmo
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
Nota che se qualcuno intercetta questo e NON ha la chiave, decifrarlo è assolutamente impossibile! Nemmeno le due "u" in "quantum" sono codificate con lo stesso numero! La prima è un 3, e la seconda è un 16… nella stessa parola!
Quindi, ti invio questo, e tu hai la stessa chiave che ho io. Annulli l'addizione modulo 26 che sai che ho eseguito:
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),…
In modo tale che il messaggio x1, x2, x3, x4… deve essere
8, 11, 14, 21…
Infine, convertendo in testo, otteniamo
"I love quantum".
Questo è un one-time pad.
Nota che se la chiave è più corta del messaggio, iniziamo a ripetere la nostra codifica. Sarebbe ancora un problema di decifratura difficile da risolvere, ma non impossibile se viene ripetuta abbastanza volte. Quindi, hai bisogno di una chiave (o "blocco") lunga.
In molti contesti, gli studenti avranno già familiarità con questa cifratura, tale che questa attività può essere saltata. Ma è un ripasso relativamente rapido e semplice.
Passo 1: Trova un partner e condividete una sequenza di 4 lettere da usare come chiave. Qualsiasi sequenza di 4 lettere adatta alla classe andrà bene.
Passo 2: Scegli una parola segreta di 4 lettere che vuoi inviare al tuo partner (entrambi i partner lo fanno, così vi inviate parole segrete diverse)
Passo 3: Converti la chiave/blocco di 4 lettere e ciascuna delle parole segrete di 4 lettere in numeri usando A = 1, B = 2, e così via.
Passo 4: Combina la tua parola di 4 lettere con il one-time pad usando l'addizione modulo 26.
Passo 5: Consegna al tuo partner la sequenza di numeri che codifica la tua parola segreta, e il tuo partner ti consegnerà la sua.
Passo 6: Decodificate le parole reciproche usando la sottrazione modulo 26.
Passo 7: Verifica. Ha funzionato?
Domanda di approfondimento​
Scambia le parole cifrate con un altro gruppo che non ha accesso al tuo one-time pad. Riesci a decifrarle? Spiega perché sì o perché no?
Si spera che l'attività sopra renda chiaro che un one-time pad è una forma di cifratura inviolabile, date alcune assunzioni, come:
- La chiave è della stessa lunghezza del messaggio da inviare, o più lunga
- La chiave è veramente casuale
- La chiave viene utilizzata una sola volta e poi scartata
Quindi questo è ottimo. Abbiamo una cifratura inviolabile... a meno che qualcuno non ottenga la nostra chiave. Se qualcuno ottiene la nostra chiave, tutto viene decifrato. Questa differenza tra una cifratura inviolabile e l'avere tutti i nostri segreti esposti rende la condivisione di una chiave sicura estremamente importante. L'obiettivo della distribuzione quantistica delle chiavi è sfruttare i vincoli che la natura ha imposto sull'informazione quantistica per proteggere una chiave condivisa/one-time pad.
Utilizzo degli stati quantistici come chiave​
Assumiamo di lavorare con i qubit (sottolineando che i qubit hanno due autostati). Si potrebbero usare sistemi quantistici con un numero maggiore di stati quantistici, ma i computer quantistici all'avanguardia di IBM® usano i qubit. Non è un problema codificare le nostre A, B, C in sequenze di 0 e 1. Quindi è sufficiente per noi condividere una chiave di 0 e 1 ed eseguire l'addizione modulo 2 su ogni bit che memorizza una lettera.
Verifica della comprensione​
Leggi la domanda qui sotto, pensa alla tua risposta, poi clicca sul triangolo per rivelare la soluzione.
Se ci interessano solo le lettere inglesi, di quanti bit abbiamo bisogno?
Risposta:
I nostri amici, Alice e Bob, vorrebbero condividere una chiave quantistica in modo tale che nessun altro possa intercettarla (almeno non senza che loro lo sappiano). Hanno bisogno di un modo per inviarsi stati quantistici. Farlo con alta fedeltà e senza rumore/errori NON è banale. Ma ci sono due approcci che dovremmo essere in grado di comprendere a questo punto:
- Un cavo a fibra ottica ti permette di inviare luce… che è molto quantomeccanica. Singoli fotoni possono essere rilevati con alta fedeltà su molti chilometri di cavo a fibra ottica. Questo non è un canale quantistico perfetto e privo di errori, ma potrebbe essere molto buono.
- Potremmo usare la teleportazione quantistica, come descritto in un modulo precedente. Cioè, Alice e Bob potrebbero condividere qubit entangled e uno stato potrebbe essere inviato da Alice a Bob usando il protocollo di teleportazione.
Per questo modulo, non vogliamo richiedere di avere configurazioni ottiche ad alta fedeltà per la condivisione di fotoni, quindi useremo il secondo metodo per condividere stati quantistici. Ma questo non vuol dire che sia il più realistico per la condivisione a lunga distanza di chiavi quantistiche.
Esploreremo ora un protocollo descritto per la prima volta da Charles Bennett e Gilles Brassard nel 1984 per la condivisione di stati misurati in basi diverse tra Alice e Bob. Useremo un intelligente regime di misurazione per costruire una chiave da utilizzare nelle successive cifrature. In altre parole, stiamo distribuendo una chiave quantistica tra due parti che desiderano comunicare, da cui "distribuzione quantistica delle chiavi" (QKD).
QKD passo 1: i bit casuali e le basi casuali di Alice​
Alice inizierà generando una sequenza casuale di 0 e 1. Sceglierà poi casualmente una base in cui preparare uno stato quantistico, basandosi su ogni bit casuale, usando la tabella seguente (una tabella che ha anche Bob):
| Base | bit = 0 | bit = 1 |
|---|---|---|
| Z | ||
| X |
Per esempio, supponiamo che Alice abbia generato casualmente uno 0, e abbia selezionato casualmente la base X. Allora preparerebbe uno stato quantistico . Si può certamente sfruttare la casualità quantistica per generare un insieme casuale di 0 e 1, e una scelta casuale di base. Per ora, assumiamo semplicemente che un insieme casuale sia stato generato, come segue:
| Bit di Alice | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | ... |
|---|---|---|---|---|---|---|---|---|---|---|
| Basi di Alice | X | X | Z | Z | Z | X | Z | Z | X | ... |
| Stati di Alice | ... |
Questo insieme di bit casuali, basi e stati risultanti continuerebbe in una lunga sequenza, per fornire una chiave di lunghezza sufficiente.
QKD passo 2: le basi casuali di Bob​
Anche Bob fa una scelta casuale di basi. Tuttavia, mentre Alice usava la scelta della base per preparare il suo stato, Bob effettuerà delle misurazioni in queste basi. Se Bob effettua una misurazione nella stessa base in cui Alice ha preparato lo stato, possiamo prevedere il risultato della misurazione di Bob. Quando Bob sceglie una base diversa da quella usata da Alice nella preparazione, non possiamo conoscere il risultato della misurazione di Bob.
| Bit di Alice | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | ... |
|---|---|---|---|---|---|---|---|---|---|---|
| Basi di Alice | X | X | Z | Z | Z | X | Z | Z | X | ... |
| Stati di Alice | ... | |||||||||
| Basi di Bob | X | Z | X | Z | X | X | Z | X | X | ... |
| Stati di Bob (a priori) | ? | ? | ? | ? | ... | |||||
| Stati di Bob (misurati) | ... | |||||||||
| Nella tabella seguente, considera la prima colonna. Alice ha preparato lo stato che è un autostato di X. Poiché anche Bob ha scelto casualmente di misurare nella base X, c'è un solo possibile risultato per lo stato misurato da Bob: Nella seconda colonna, tuttavia, hanno scelto basi diverse. Lo stato che Alice ha inviato è |