L'idea di costruire un computer sulla base della tecnologia quantistica risale a Richard Feynman che presentò una relazione "Simulating Physics with Computers" al Massachusetts Institute of Technology
(MIT) nel 1981.

Negli anni novanta le idee divennero più chiare perché si dimostrò in via teorica come il computer quantistico può risolvere problemi di calcolo insolubili con strumenti tradizionali. Tale macchina renderà agevole la fattorizzazione di numeri molto alti (oggi importanti per la crittografia (vedi risposta 98)), la generazione dei numeri casuali, renderà più veloce la ricerca di informazioni nei database molto ampi, il calcolo di logaritmi discreti, dei cicli Hamiltoniani, infine faciliterà la simulazione di eventi complessi.

Tanto per fare un esempio, la fattorizzazione di un numero di 129 cifre ha richiesto 1600 workstations al lavoro in parallelo per 8 mesi. Peter Shor, diventato famoso per i suoi studi sull'argomento, ha calcolato che per fattorizzare un numero di 250 cifre un computer tradizionale impiegherebbe 800 mila anni. Per un numero di 1000 cifre occorrerebbe un tempo superiore all' età dell'universo. Invece per quest'ultima operazione con un algoritmo quantistico basterebbero pochi milioni di passi.

I problemi risolvibili con i computer quantistici per ora sembrano riguardare soprattutto settori avanzati e molto speciali, ma ciò non ha ridotto l'interesse per la sua realizzazione pratica. Infatti aziende ed enti di ricerca (soprattutto statunitensi) hanno progressivamente aumentato i loro investimenti. E' spontaneo domandarsi: a che punto siamo con il quantum computing ?

La seguente nota:

Quantum Computing tra Sogno e Realtà

fornisce alcuni rudimenti tecnici sullo stato dell'arte.

 

 

Indietro

119. E'
realistico
pensare al
computer
quantistico?  

120. Gradirei un commento sulle differenze esistenti tra il compilatore e l'interprete

Nella risposta 86 abbiamo fugacemente accennato ai compilatori, è dunque necessario riprendere il discorso.

Il programma, usualmente scritto in un linguaggio simbolico (es. Cobol, Java ecc.), necessita di essere tradotto in linguaggio macchina. Il lavoro viene svolto normalmente dal compilatore e questa traduzione viene ripresa dal linker il quale aggiunge alcuni moduli. Infine il loader aggiunge alcuni numeri per eseguire il programma esattamente nell'indirizzo di memoria prescelto. Il compilatore, il linker ed il loader sono programmi che fanno parte del sistema operativo.


I tecnici chiamano
programma sorgente, la versione simbolica, programma oggetto e programma linkato le due versioni intermedie, infine la versione definitiva è il programma eseguibile. Raccogliamo in questo schemino il processo subito da un normale programma software.

 

PROGRAMMATORE

PROGRAMMA  SORGENTE

 

COMPILATORE

PROGRAMMA  OGGETTO

 

LINKER

PROGRAMMA  LINKATO

 

LOADER

PROGRAMMA  ESEGUIBILE

 

Sin dagli anni sessanta si preparò un secondo tipo di compilatore noto con il nome di interprete il quale non traduce l'intero programma sorgente, ma tratta il programma sorgente frase per frase, cioè scquisisce una frase non appena il programmatore la finisce di scrivere. L'interprete prende una frase del programma simbolico, la traduce e la esegue subito oppure esegue tutte quelle fino allora scritte. Poi prende la frase successiva, la traduce e la esegue subito, e così via, integrando le fasi di traduzione con le fasi di esecuzione, che nel processo classico sopra riportato sono invece ben separate.

I vantaggi del compilatore rispetto all'interprete sono: minore occupazione di memoria, esecuzione molto veloce, e prodotto finale ottimizzato.
Lo svantaggio è che i programmi oggetto, linkato ed eseguibile non sono modificabili. Cioè i tre passaggi sono rigidi ed in caso di una seppure piccola variazione del programma sorgente, occorre rifare la compilazione e tutto il resto per intero. Inoltre molto spesso il programma oggetto non è esportabile. Si può usare soltanto su computer identici a quello in cui viene preparato.

 

L'interprete offre il vantaggio di poter inserire e provare subito le modifiche apportate al programma perché dopo ogni modifica non occorre rifare tutto daccapo.
Ha gli svantaggi di richiedere più tempo per la esecuzione ed una maggiore occupazione di memoria perché l'interprete gira in parallelo al programma che lancia. Infine l'interprete non ottimizza il suo output perché lavora a pezzi. Ad esempio non può togliere le ridondanze che emergono solo dal programma simbolico completo.

Ci sono linguaggi che hanno soltanto compilatori come l'Assembler, ci sono linguaggi che hanno solo l'interprete come il Basic, e linguaggi che hanno l'uno e l'altro come il Pascal.

Un posto a parte è occupato da Java che segue un processo assolutamente originale di cui abbiamo già scritto in 64.

 

 

 

Indietro

Già a metà degli anni settanta fui chiamato ad interessarmi alla firma digitale, trovandomi tra i pionieri di questa materia.

Passato qualche tempo, la firma digitale andò in soffitta e soltanto da pochi anni, con Internet, ha avuto una significativa diffusione. Vediamo di che si tratta.

Gran parte dei documenti elettronici scambiati tra due privati vengono verificati sulla base di accordi personali, ben diverso è il discorso per gli atti ufficiali scambiati tra due enti. Parlando terra terra, si capisce che un dirigente pubblico non può accettare un testo per il solo fatto che glielo fornisce il computer. Le notevoli responsabilità e gli oneri che quell'atto coinvolgono richiedono che esso sia certificato come autentico.

Il fatto è talmente importante da pregiudicare l'intero sviluppo informatico. La modernizzazione dell'amministrazione pubblica e privata in qualsiasi paese non poteva procedere se non veniva superato questo scoglio.

La cosidetta 'firma digitale' risolve tecnicamente il problema e nel corso degli anni novanta veniva riconosciuta dai vari ordinamenti giuridici. Ormai è entrata nella prassi quotidiana anche nel nostro paese. Infatti dopo una prima legge emanata nel 1997 e successivi aggiornamenti per adeguarsi alle normative europee, il decreto legislativo n. 82 del 7 marzo 2005 disciplina la materia.


Resta ora da spiegare come la firma digitale funziona.
La firma digitale è il risultato di una procedura informatica, che consente all'autore di rendere manifesta l'autenticità del documento informatico e al destinatario di verificarne la provenienza e l'integrità. Il meccanismo base della procedura è quello della crittografia a chiave pubblica esaminata nella risposta 98.
Facendo il riassunto di quanto abbiamo già scritto, si può dire che un algoritmo a chiave pubblica funziona grazie a due chiavi diverse (per tale ragione viene chiamato anche algoritmo a chiavi asimmetriche). La chiave pubblica viene usata per cifrare il messaggio trasmesso e la chiave segreta, conosciuta solo dal ricevente autorizzato, viene usata per decifrare il messaggio. A
d esempio nel primo algoritmo illustrato nella risposta 98, i numeri p ed n formano la chiave pubblica, mentre a e b formano la chiave segreta. Per creare la firma digitale viene usato lo stesso meccanismo ma al rovescio.

Grosso modo le cose vanno in questo modo.
La prima operazione per generare una firma digitale è l’estrazione, dal documento originario, della cosiddetta impronta digitale, una stringa di poco più di 100 byte
. Questa viene crittatta con la chiave segreta e diventa la firma digitale del documento. Quindi al ricevente viene inviato:

  • il documento ufficiale,
  • la firma digitale,
  • l'impronta digitale.
  • eventuali indicazioni per acquisire la chiave pubblica se non l'avesse già in mano.

Il ricevente decifra la firma con la chiave pubblica e verifica che combacia con l'impronta. In questo modo non può che riconoscerne l'autenticità, infatti soltanto chi aveva la chiave segreta giusta poteva cifrare l'impronta digitale nel modo giusto. Altre chiavi segrete non avrebbero permesso che, una volta decrittata, risultasse uguale all'impronta. La firma digitale è dunque un meccanismo ferreo per collegare il testo al suo autore.


Il meccanismo è concettualmente semplice ma si avvale di diversi elementi, per cui riassumiamo le principali differenze tra la firma digitale e quella convenzionale.

  Firma autografa Firma digitale
Creazione Manuale. Meccanizzata.
Apposizione La firma è parte integrante del documento. La firma digitale e l'impronta si aggiungono al documento.
Verifica Mediante confronto [incerto] con una firma autenticata. Mediante algoritmo [sicuro].
Validità temporale Illimitata. Limitata dalle chiavi crittografiche che hanno una scadenza.

 

Quando si vuole che il documento ufficiale, inviato insieme alla firma digitale, sia riservato allora va crittato a parte secondo il metodo normale già illustrato nella risposta 98. In conclusione la firma digitale e la crittografia del documento utilizzano identici algoritmi per raggiungere scopi diversi.

 

 

Indietro

121. La
firma
digitale è
legalmente
valida?