Algoritmo di Shor
Per questo modulo di Qiskit in Classrooms, gli studenti devono disporre di un ambiente Python funzionante con i seguenti pacchetti installati:
qiskitv2.1.0 o successivoqiskit-ibm-runtimev0.40.1 o successivoqiskit-aerv0.17.0 o successivoqiskit.visualizationnumpypylatexenc
Per configurare e installare i pacchetti indicati, consulta la guida Installare Qiskit. Per eseguire job su veri computer quantistici, gli studenti dovranno creare un account IBM Quantum® seguendo i passaggi descritti nella guida Configura il tuo account IBM Cloud.
Questo modulo è stato testato e ha utilizzato tre secondi di tempo QPU. Si tratta di una stima indicativa. Il consumo effettivo può variare.
# 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'
Introduzione​
All'inizio degli anni '90 cresceva l'entusiasmo attorno al potenziale dei computer quantistici di risolvere problemi difficili per i computer classici. Alcuni talentuosi informatici avevano ideato algoritmi che dimostravano la potenza del calcolo quantistico per problemi di nicchia e artificiosi, ma nessuno aveva ancora trovato la "killer app" definitiva del calcolo quantistico, destinata a rivoluzionare il settore. Fino al 1994, quando Peter Shor formulò quello che oggi è chiamato algoritmo di Shor per la fattorizzazione di numeri grandi.
Era noto all'epoca che trovare i fattori primi di un numero grande fosse estremamente difficile per un computer classico. I protocolli di sicurezza su Internet si basavano proprio su questa difficoltà . Shor trovò un modo per trovare questi fattori in modo esponenzialmente più efficiente, delegando alcune delle operazioni più complesse a un futuro, teorico computer quantistico.
In questo modulo esploreremo l'algoritmo di Shor. Prima forniremo un po' di contesto sull'algoritmo, formalizzando il problema che risolve e spiegandone la rilevanza per la cybersecurity. Poi daremo un'introduzione alla matematica modulare e a come applicarla al problema della fattorizzazione, mostrando come la fattorizzazione si riduca a un altro problema chiamato "ricerca dell'ordine". Mostreremo come entrino in gioco la Quantum Fourier Transform e la Quantum Phase Estimation, studiate in un modulo precedente, e come usarle per risolvere il problema della ricerca dell'ordine.
Infine, eseguiremo l'algoritmo di Shor su un vero computer quantistico! Tieni presente, però, che questo algoritmo sarà davvero utile solo quando avremo a disposizione un grande computer quantistico fault-tolerant, che è ancora a qualche anno di distanza. Quindi, fattorizzeremo soltanto un numero piccolo per dimostrare il funzionamento dell'algoritmo.
Il problema della fattorizzazione​
L'obiettivo del problema della fattorizzazione è trovare i fattori primi di un numero . Per alcuni numeri questo è piuttosto semplice. Ad esempio, se è pari, uno dei suoi fattori primi sarà 2. Se è una potenza di un primo, cioè per qualche numero primo , è anche abbastanza facile trovare : basta approssimare la radice di e cercare i numeri primi vicini che potrebbero essere .
Il punto in cui i computer classici faticano, però, è quando è dispari e non è una potenza di un primo. Questo è il caso che l'algoritmo di Shor affronta. L'algoritmo trova due fattori e tali che . Può essere applicato ricorsivamente finché tutti i fattori non sono primi. Nelle sezioni successive vedremo come affrontare questo problema.
Rilevanza per la cybersecurity​
Molti schemi crittografici sono stati costruiti basandosi sul fatto che fattorizzare numeri grandi è difficile, tra cui uno ampiamente usato oggi, chiamato RSA. In RSA, una chiave pubblica viene creata moltiplicando due grandi numeri primi per ottenere . Chiunque può usare questa chiave pubblica per cifrare dati. Ma solo chi possiede la chiave privata, cioè e , può decifrare quei dati.
Se fosse facile da fattorizzare, chiunque sarebbe in grado di determinare e e rompere la cifratura. Ma non è così. Si tratta di un problema notoriamente difficile. In effetti, i fattori primi di un numero chiamato RSA1024, lungo 1024 bit e 309 cifre decimali, non sono stati ancora trovati, nonostante un premio di $100.000 fosse stato offerto per la sua fattorizzazione già nel 1991.
La soluzione di Shor​
Nel 1994, Peter Shor si rese conto che un computer quantistico avrebbe potuto fattorizzare un numero grande in modo esponenzialmente più efficiente rispetto a un computer classico. La sua intuizione si basava sulla relazione tra questo problema di fattorizzazione e l'aritmetica modulare. Daremo una breve introduzione all'aritmetica modulare, poi vedremo come usarla per fattorizzare .
Aritmetica modulare​
L'aritmetica modulare è un sistema di conteggio ciclico: il conteggio inizia nel modo consueto, con gli interi 0, 1, 2, ecc., ma a un certo punto, dopo un periodo , ricomincia da capo. Vediamolo con un esempio. Supponiamo che il periodo sia 5. Allora, nel conteggio, dove normalmente arriveremmo a 5, ricominciamo invece da 0:
Questo perché nel "mondo modulo-5", 5 è equivalente a 0. Si dice che . In effetti, tutti i multipli di 5 saranno equivalenti a .
Metti alla prova la tua comprensione​
Leggi la/le domanda/e qui sotto, pensa alla risposta, poi fai clic sul triangolo per rivelare la soluzione.
Usa l'aritmetica modulare per risolvere il seguente problema:
Parti per un lungo viaggio in treno transcontinentale alle 8:00. Il viaggio dura 60 ore. A che ora arrivi a destinazione?
Risposta:
Il periodo è 24, poiché ci sono 24 ore in un giorno. Quindi, questo problema può essere scritto in aritmetica modulare come:
Quindi arriveresti a destinazione alle 20:00.
e ​
Spesso è utile introdurre due insiemi, e . è semplicemente l'insieme dei numeri che esistono nel "mondo modulo-". Ad esempio, quando contavamo modulo-5, l'insieme sarebbe . Un altro esempio: . Possiamo eseguire addizione e moltiplicazione (modulo ) sugli elementi di , e il risultato di ciascuna di queste operazioni è anch'esso un elemento di , rendendo un oggetto matematico chiamato anello.
Esiste un sottoinsieme speciale di di particolare interesse per l'algoritmo di Shor. Si tratta del sottoinsieme dei numeri in tali che il massimo comune divisore tra ciascun elemento e sia 1, cioè ogni elemento è "coprimo" con . Se prendiamo l'insieme di questi numeri insieme all'operazione di moltiplicazione modulare, otteniamo un altro oggetto matematico, chiamato gruppo. Chiamiamo questo gruppo . Si scopre che con (e con i gruppi finiti in generale), se scegliamo un qualsiasi elemento e lo moltiplichiamo ripetutamente per se stesso, otterremo sempre il numero . Il numero minimo di volte in cui occorre moltiplicare per se stesso per ottenere è chiamato ordine di . Questo fatto sarà molto importante nella nostra discussione su come fattorizzare numeri.
Metti alla prova la tua comprensione​
Leggi la/le domanda/e qui sotto, pensa alla risposta, poi fai clic sul triangolo per rivelare la soluzione.
Cos'è ?
Risposta:
Abbiamo escluso i seguenti numeri:
Qual è l'ordine di ciascuno degli elementi di ?
Risposta:
L'ordine è il numero più basso tale che per ogni elemento .
Nota che, sebbene siamo riusciti a trovare l'ordine dei numeri in , questo NON è un compito facile in generale, per più grandi. Questo è il punto cruciale del problema della fattorizzazione e il motivo per cui abbiamo bisogno di un computer quantistico. Lo vedremo man mano che percorreremo il resto del notebook.
Applicare l'aritmetica modulare al problema della fattorizzazione​
La chiave per trovare i fattori e tali che consiste nel trovare un altro intero tale che
e
Come ci aiuta trovare a trovare i fattori e ? Vediamo il ragionamento. Poiché , ciò significa che . In altre parole, è un multiplo di . Quindi, per qualche intero ,
Possiamo fattorizzare per ottenere:
Dalle nostre ipotesi iniziali sappiamo che , quindi non divide esattamente né né . Pertanto, i due fattori di , e , devono ciascuno dividere e . O è un fattore di e è un fattore di , o viceversa. Quindi, se calcoliamo il massimo comune divisore (MCD) tra e sia che , otterremo i fattori e . Calcolare il MCD tra due numeri è un compito classicamente semplice che può essere svolto, ad esempio, con l'algoritmo di Euclide.
Metti alla prova la tua comprensione​
Leggi la/le domanda/e qui sotto, pensa alla risposta, poi fai clic sul triangolo per rivelare la soluzione.
Potrebbe non essere facile seguire ogni passaggio logico di cui sopra, quindi prova a ragionare con un esempio. Usa e . Prima, verifica che e . Poi continua a verificare ogni passaggio. Infine, calcola e verifica che siano i fattori di .
Risposta:
, che è , quindi .
, che non è equivalente a .
, che non è equivalente a .
Ora sappiamo che per qualche intero . Ciò si verifica inserendo e : quando .
Ora dobbiamo calcolare e .
Abbiamo trovato i fattori di !
L'algoritmo​
Ora che abbiamo visto come trovare un intero tale che ci aiuti a fattorizzare , possiamo descrivere l'algoritmo di Shor. Essenzialmente si riduce a trovare :
- Scegli un intero casuale Scegli un intero casuale tale che .
- Calcola in modo classico.
- Se , hai già trovato un fattore. Fermati.
- Altrimenti, continua.
-
Trova l'ordine di modulo Trova il più piccolo intero positivo che soddisfa .
-
Verifica se l'ordine è pari
- Se è dispari, torna al passaggio 1 e scegli un nuovo .
- Se è pari, continua al passaggio 4.
- Calcola
- Verifica che e .
- Se , torna al passaggio 1 e scegli un nuovo .
- Altrimenti, calcola i MCD per estrarre i fattori:
Questi saranno fattori non banali di .
- Fattorizza ricorsivamente se necessario
- Se e/o non sono primi, applica l'algoritmo ricorsivamente per fattorizzarli completamente.
- Una volta che tutti i fattori sono primi, la fattorizzazione è completa.
In base a questa procedura, potrebbe non essere ovvio perché sia necessario un computer quantistico per completare il compito. È necessario perché il passaggio 2, trovare l'ordine di modulo , è classicamente un problema molto difficile. La complessità cresce esponenzialmente con . Ma con un computer quantistico, dobbiamo solo usare la Quantum Phase Estimation per risolverlo. Il passaggio 4, trovare il MCD di due interi, è in realtà un'operazione abbastanza semplice da fare in modo classico. Quindi, l'unico passaggio che richiede davvero la potenza di un computer quantistico è quello della ricerca dell'ordine. Si dice che il problema della fattorizzazione si "riduce" al problema della ricerca dell'ordine.
La parte difficile: la ricerca dell'ordine​
Ora vedremo come usare un computer quantistico per la ricerca dell'ordine. Prima di tutto, chiariamo cosa intendiamo per "ordine". Naturalmente, ti ho già spiegato il significato matematico dell'ordine: è il primo intero non nullo tale che Ma vediamo se riusciamo a sviluppare un po' più di intuizione per questo concetto.
Per abbastanza piccoli, possiamo determinare l'ordine semplicemente calcolando ogni potenza di , prendendo il modulo di quel numero, poi fermandoci quando troviamo la potenza che soddisfa . È quello che abbiamo fatto con il nostro esempio, , sopra. Diamo un'occhiata ad alcuni grafici di queste potenze modulari per alcuni valori campione di e :
Noti qualcosa? Sono funzioni periodiche! E l'ordine è uguale al periodo! Quindi, la ricerca dell'ordine è equivalente alla ricerca del periodo.
I computer quantistici sono particolarmente adatti a trovare il periodo delle funzioni. Per questo, possiamo usare una subroutine algoritmica chiamata Quantum Phase Estimation. Abbiamo discusso della QPE e della sua relazione con la Quantum Fourier Transform nel modulo precedente. Per un ripasso dettagliato, vai al modulo sulla QFT o alla lezione di John Watrous sulla Quantum Phase Estimation nel suo corso di Algoritmi Quantistici. Qui riassumiamo il procedimento:
Nella Quantum Phase Estimation (QPE), partiamo da un unitario e da un autostato di quell'unitario . Poi usiamo QPE per approssimare l'autovalore corrispondente, che, poiché l'operatore è unitario, sarà della forma . Quindi, trovare l'autovalore è equivalente a trovare il valore di nella funzione periodica. Il circuito ha questo aspetto:

dove il numero di qubit di controllo (gli qubit superiori nella figura sopra) determina la precisione dell'approssimazione.
Nell'algoritmo di Shor, usiamo QPE sull'operatore unitario :
Qui, denota uno stato della base computazionale del registro multi-qubit, dove il valore binario dei qubit corrisponde all'intero . Ad esempio, se e , allora è rappresentato dallo stato della base a quattro qubit , poiché quattro qubit sono necessari per codificare numeri fino a 15. (Se questo concetto non è familiare, consulta il modulo introduttivo di Qiskit in classrooms per un ripasso sulla codifica binaria degli stati quantistici.)
Ora dobbiamo trovare un autostato di questo unitario. Se partiamo dallo stato , possiamo vedere che ogni successiva applicazione di moltiplicherà lo stato del nostro registro per , e dopo applicazioni torneremo allo stato . Ad esempio con e :
Quindi le sovrapposizioni degli stati in questo ciclo () della forma:
sono tutti autostati di . (Ci sono più autostati di questi. Ma a noi interessano solo quelli della forma precedente.)
Metti alla prova la tua comprensione​
Leggi la/le domanda/e qui sotto, pensa alla risposta, poi fai clic sul triangolo per rivelare la soluzione.
Trova un autostato dell'unitario corrispondente a e .
Risposta:
Quindi, l'ordine è . Gli autostati che ci interessano saranno una sovrapposizione uguale di tutti gli stati attraversati sopra, con varie fasi:
Supponiamo di riuscire a inizializzare il nostro stato di qubit in uno di questi autostati (spoiler — non è possibile. O almeno non facilmente. Spiegheremo perché e cosa possiamo fare in alternativa a breve). Potremmo quindi usare QPE per stimare l'autovalore corrispondente, dove . Poi saremo in grado di determinare l'ordine con la semplice equazione:
Ma ricorda, ho detto che QPE stima — non ci dà un valore esatto. La stima deve essere sufficientemente buona da distinguere tra e . Più qubit di controllo abbiamo, migliore sarà la stima. Nei problemi alla fine della lezione ti verrà chiesto di determinare il minimo necessario per fattorizzare un numero .
Ora dobbiamo affrontare un problema. Tutta la spiegazione precedente su come trovare inizia preparando l'autostato . Ma non sappiamo come farlo senza già conoscere . Il ragionamento è circolare. Abbiamo bisogno di un modo per stimare l'autovalore senza inizializzare l'autostato.
Invece di partire da un autostato di , possiamo preparare lo stato iniziale nello stato a qubit corrispondente a in binario (cioè, ). Sebbene questo stato non sia ovviamente un autostato di , è una sovrapposizione di tutti gli autostati :
Metti alla prova la tua comprensione​
Leggi la/le domanda/e qui sotto, pensa alla risposta, poi fai clic sul triangolo per rivelare la soluzione.
Verifica che sia equivalente alla sovrapposizione degli autostati che hai trovato per e nella domanda di verifica precedente.
Risposta:
I quattro autostati erano: