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 nel 1981.

Negli anni novanta l'idea divenne più appetibile perché si dimostrò 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 ed anche 127)), e la generazione dei numeri casuali. Renderà più veloce la ricerca di informazioni nei database molto ampi, il calcolo di logaritmi discreti e 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 riduce 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 fornisce alcuni rudimenti tecnici sullo stato dell'arte:

Quantum Computing tra Sogno e Realtà

 

 

 

 

anno 2006

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 binario, il solo che la macchina è capace di eseguire. Il lavoro viene svolto principalmente dal compilatore e di seguito dal linker il quale aggiunge alcuni moduli già compilati che completano il programma che esce dalla fase di compilazione. 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

 

Il compilatore tradizionale traduce il programma sorgente preparato dal programmatore a partire dalla prima fino all'ultima istruzione. Sin dagli anni sessanta fu introdotto un secondo tipo di compilatore noto con il nome di interprete il quale non traduce l'intero programma sorgente, ma lo traduce frase per frase, cioè acquisisce una frase non appena il programmatore ha finito di scriverla. L'interprete controlla la frase del programma simbolico, la traduce e la esegue subito da sola oppure con 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 [Si è fatto cenno al programma interprete anche nella risposta 19 sebbene il contesto fosse alquanto differente].

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, cioè i prodotti intermedi del trattamento completo riportato in figura, 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 lui tratta. Infine l'interprete non ottimizza il suo output perché lavora a pezzi. Ad esempio non può togliere le ridondanze le quali emergono soltanto 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.

 

 

 

 

anno 2006

Già a metà degli anni settanta fui chiamato ad interessarmi alla firma digitale, trovandomi tra i primi che affrontavano il problema della sicurezza informatica. Ma passato qualche tempo, il tema andò in soffitta.
Con il diffondersi di Internet la firma digitale è tornata alla ribalta ed ha avuto una significativa diffusione. Vediamo di che si tratta.

Gran parte dei documenti elettronici scambiati tra due privati vengono accettati sulla base della reciproca fiducia e di accordi personali. Questo metodo non si può applicare agli atti ufficiali. Ad esempio, un dirigente pubblico non può accettare e riconoscere come integro un testo per il solo fatto che glielo fornisce il computer. Le notevoli responsabilità e gli oneri legati a quel documento richiedono che esso sia certificato come autentico.

Questa necessità ha avuto un ruolo talmente importante da pregiudicare l'intero sviluppo informatico per alcuni anni. La modernizzazione dell'amministrazione pubblica e privata non poteva procedere se non veniva superato lo scoglio della certificazione del testo elettronico come integro ed autentico.

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 in via definitiva.


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 privata viene usata per decifrare il messaggio.
 

Grosso modo le cose vanno così.
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 (cioè con un metodo di crittazione inverso a quello sopra ricordato) e diventa la firma digitale del documento. Quindi al ricevente viene inviato:

  • il documento ufficiale,
  • l'impronta digitale,
  • la firma 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 sia esattamente uguale all'impronta. In questo modo non può che riconoscerne l'autenticità. Infatti soltanto chi aveva la chiave privata giusta poteva cifrare l'impronta digitale nel modo giusto. Nessuna altra chiave privata avrebbe permesso che la firma, 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 e nella pratica si avvale di diversi elementi tecnici che qui tralasciamo.

Poniamo un sintetico confronto 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 che però sono diversi.

 

 

 

anno 2006

121. La
firma
digitale è
legalmente
valida?