Lettere d’amore fra Alice e Bob

Un modo per non avere la suocera sempre fra i piedi

Alice e Bob sono 2 innamorati, nuovi Romeo e Giulietta del ventunesimo secolo. ( La tentazione di scrivere “ventesimo secolo” è stata forte, nonostante sian passati già 13 anni dalla fine di quel secolo. Uno psicologo potrà disquisire non poco sulla mia inerzia mentale 😀 ) Le loro famiglie, come i loro “antenati d’elezione” non sono favorevoli al loro rapporto e cercano di ostacolarli o quantomeno di spiarli in ogni modo.

Come possono Alice e Bob comunicare fra loro, fissare in segreto i loro appuntamenti quando hanno dei ragionevoli dubbi anche sulla imparzialità del postino ?

Come possono escogitare un modo che il messaggio spedito a destinazione sia letto solo dal destinatario ?

Un sistema che è stato inventato è il seguente. ( Descrivo il metodo per punti a scapito della forma italiana in modo che sia ben chiaro tutto il procedimento )

  • Alice mette il suo messaggio in una scatoletta di metallo e la chiude con un suo lucchetto che ha una sua chiave a prova di scasso.
  • Alice manda la scatoletta a Bob
  • Bob riceve la scatoletta e riconosce che il lucchetto è quello di Alice. Se non fosse stato il lucchetto di Alice saprebbe che il messaggio non è autentico.
  • Bob la chiude a sua volta con un lucchetto analogo a quello che ha messo Alice e di cui solo lui ha la chiave
  • Bob rimanda la scatoletta ad Alice
  • Alice riconosce il lucchetto di Bob e quindi sa che il messaggio verrà letto da lui in persona. Se il lucchetto non fosse quello di Bob, potrebbe comunque distruggere la scatoletta o decidere di non rimandarla indietro.
  • Alice toglie il proprio lucchetto e rimanda la scatola a Bob
  • Bob riceve la scatola ancora chiusa con il proprio lucchetto e finalmente apre la scatola e legge in messaggio ben sicuro che sia stato lontano da occhi indiscreti, nonostante tutto il tempo che la scatola ha passato in viaggio.

Questo metodo è stato inventato da sono 3 ricercatori del MIT (Ronald Rivest, Adi Shamir e Leonard Adleman) ed viene conosciuto come metodo di criptazione RSA ( le loro iniziali ) che lo hanno brevettato nel 1983.

Vediamo in pratica come funziona.

Immaginiamo che Alice voglia dire a Bob “alle 5 dietro casa tua” come potrebbe fare a criptare questo  messaggio col metodo esposto fino ad ora ?

Inanzitutto potrebbe trasformare il messaggio in testo scrivendolo in forma numerica col sistema ascii e questo ci darebbe la seguente traslitterazione (rappresentata in forma decimale per comodità):

097 108 108 101 020 053 020 100 105 101 116 114 111 020 099 097 115 097 020 116 117 097

e per essere sicuri che ogni lettera sia rappresentata da 3 cifre possiamo aggiungere uno zero dove la codifica ne prevede solo 2

097 108 108 101 020 053 020 100 105 101 116 114 111 020 099 097 115 097 020 116 117 097

che è la stessa identica cosa che abbiamo scritto prima.

Se ora eliminiamo gli spazi:

097108108101020053020100105101116114111020099097115097020116117097

Che è già un “numeraccio” di 66 cifre che alla maggioranza della gente non direbbe assolutamente nulla, ma esistono dei programmi che a “scovare” il messaggio contenuto in questo numero ci impiegherebbero giusto il tempo di scriverlo.

ora immaginiamo che la chiave di Alice sia

574568305917719414663869203891887438968846998090090160088967875657

Cosa ha di particolare questo numero ? È un numero primo !!! Ovvero si può dividere solo per 1 e per se stesso. Ed ha 66 cifre…

Come facciamo a sapere che questo è un numero primo di 66 cifre ? perché lo abbiamo preso da un sito http://wims.unice.fr/wims/it_tool~number~primes.it.html,  che come tanti siti specializzati su internet, mettono a disposizione degli untenti dei tools che trovano numeri primi ed altro. Se 66 cifre vi paiono una bella quantità di cifre, sappiate che quando vi compare in alto sulla barra di navigazione del browser la scritta HTTPS invece che la solita HTTP… voi state utilizzando una criptazione a 512 cifre per comunicare in maniera criptata  con il sito con cui siete in comunicazione. E tale standard viene considerato “sufficiente” per la sicurezza, ma non “sovrabbondante” 😉

e se moltiplichiamo il messaggio di alice per la sua chiave di criptazione otteniamo:

(097108108101020053020100105101116114111020099097115097020116117097)  *  (574568305917719414663869203891887438968846998090090160088967875657) =

9429984658959396447888265466124905424911182184961221281302906470174464682481171260031489929802336808435631532681684985060215707409

 

Ed ora.. il numero rosso può essere diviso solo per 1 per la chiave (il numero arancio) e per il messaggio (il numero verde) !! Praticamente non c’è modo in tempi ragionevoli ( alcuni mesi ) di risalire al contenuto originale! Quello rosso vi pare un “numeraccio impressionante, eh ? Eppure, sinteticamente non è altro che il prodotto:

(Messaggio di Alice) * (Chiave di Alice) =
( Messaggio di Alice criptato da Alice )

che equivale a dire che Alice ha chiuso la sua cassettina contenente il messaggio con il suo lucchetto. A questo punto Alice può spedire a Bob il suo messaggio con la sicurezza che prima di alcuni mesi nessuno riesca a capire quello che ha scritto.

Quando bob riceve questo messaggio cosa fa ? Metterà alla “scatolina” anche il suo lucchetto. In pratica sceglierà un numero primo ( che non è detto debba essere lungo quanto quello di Alice, ma che lo sia quanto basta per rendere comunque il messaggio indecifrabile per tutti gli altri )

Se il numero che Bob sceglie è 3492256858578744213687088238727147146801 allora Bob farà questa semplice operazione:

(Messaggio di Alice criptato da Alice) * (Chiave di Bob) =
(Messaggio di Alice criptato da Alice e Bob)

ovvero:

(9429984658959396447888265466124905424911182184961221281302906470174464682481171260031489929802336808435631532681684985060215707409) *
( 3492256858578744213687088238727147146801 )=

32931928601543292445209395538535786421937549884944878683881075513337977266700360780475114690410433926111047464846848090471325997714881286626773729456191518162058186348609

La “scatolina” ora è chiusa da due lucchetti differenti! ( AH… che bel numerone, eh ? )

Ora Bob rimanda ad Alice la “scatolina” per fargli togliere il suo lucchetto. In pratica

(Messaggio di Alice criptato da Alice e BOB) / (Chiave di Alice) =
(Messaggio di Alice criptato da Bob)

Ovvero:

(32931928601543292445209395538535786421937549884944878683881075513337977266700360780475114690410433926111047464846848090471325997714881286626773729456191518162058186348609)

DIVISO

( 574568305917719414663869203891887438968846998090090160088967875657 )

che è uguale a:

339126456539393392620533817929484919435630210959332544668602305531309851088701262121059136934798364956697

 

Ahhh! Ancora un numeraccio incomprensibile!!  Alice e Bob sono ancora sicuri che nessuno capisca quello che il messaggio significhi. Quindi Alice potrà rispedire a Bob questo messaggio con la sicurezza che anche questa volta nessuno capisca il contenuto del messaggio stesso. A questo punto Bob può togliere il suo lucchetto e leggere il messaggio di Alice.

 

(Messaggio di Alice criptato da BOB) / (Chiave di BOB) =
(Messaggio di Alice in chiaro)

 

339126456539393392620533817929484919435630210959332544668602305531309851088701262121059136934798364956697

diviso

( 3492256858578744213687088238727147146801 ) =

097108108101020053020100105101116114111020099097115097020116117097 = (e dividendo il numero 3 a 3 e togliendo gli zeri “di riempimento”)=

97 108 108 101 020 053 20 100 105 101 116 114 111 20 99 97 115 97 20 116 117 97 =

alle 5 dietro casa tua

 

Che è esattamente il messaggio di Alice!

Ora potrete obbiettarmi: “che complicazione!” È vero solo in apparenza, perché abbiamo dovuto fare tutti i calcoli a mano, ma per un computer quelle viste sono operazioni che vengono svolte in qualche decina di microsecondi: a livello di calcolo si tratta solo di eseguire:

  • una codifica in ascii ( che il computer effettua mentre digitate il testo )
  • due moltiplicazioni fra interi ( una fatta da Alice ed una da Bob )
  • due divisioni fra interi ( una fatta da Alice ed una da Bob )
  • ed una decodifica ( che il computer effettua mentre visualizza il testo )

 

Nulla di concettualmente complicato.

Se consideriamo che il tempo medio per trasmettere una stringa di queste dimensioni da un pc all’altro è di qualche millisecondo ( di solito una ventina ) si vede che il tempo di calcolo è trascurabile rispetto al tempo di trasmissione. Ed anche sommando i tempi di trasmissione ripetuta per tutto il processo si nota che stiamo ancora in tempi fortemente al disotto del secondo. Quindi, automatizzato, questo sistema è conveniente per la trasmissione sicura dei dati.

Esistono altri modi più complessi per trasmettere ( e ricevere i propri dati in sicurezza ) altri sistemi di criptazione, ma anche solo di mascheramento dei dati. E tali sistemi possono essere combinati fra loro per aumentare ia sicurezza della trasmissione.  Ne parleremo più estesamente in altri post. 🙂

 

 

Advertisements

10 pensieri su “Lettere d’amore fra Alice e Bob

  1. Ciao
    spiegazione molto chiara, ma c’è solo un punto per cui mi rimane un dubbio nella tua esemplificazione (non nella procedura, ma nell’esempio scelto) ed è quando B “riconosce” il lucchetto di A. Procedendo nella storia, B lo può riconoscere solo se lo conosceva già, e allora che senso avrebbe il resto della procedura? Ti do la mia chiave di decrittazione e ti mando il messaggio crittato, poi ti arrangi e se il messaggio non arriva da me la decrittazione produrrebbe qualcosa di incomprensibile… (che poi altro non è che il metodo classico di cifrare le varie comunicazioni). Si capisce quale è il mio dubbio?

  2. Si, capisco quale e’ il tuo dubbio: qui non ne ho parlato per questioni di semplicità, volevo parlarne in un post separato, per ora ti accenno solo il metodo.
    Siccome questo descritto e’ un sistema a chiave “simmetrica” ovvero una UNICA chiave che cripta e decripta significa che essa NON DEVE ASSOLUTAMENTE essere condivida con alcuno! Ed è la debolezza del metodo – debolezza che viene superata usando una coppia di chiavi asimmetriche, una per criptare ed una per decriptare, la prima delle quali puo’ essere tranquillamente resa pubblica, mentre la seconda deve essere gelosamente conservata.
    In questo caso il riconoscimento della stessa avviene non tramite l’invio della chiave ma di un “digest” della stessa ovvero di uno “sgorbio” (come lo chiamo io) che letto con un certo algoritmo che contiene ad esempio una email di riferimento. Questa procedura e’ detta di “autenticazione” o “firma digitale”.
    La firma digitale si puo’ apporre anche ad un documento in chiaro, per impedire che il famoso/famigerato Charles ( il man-in-the-middle ) possa in qualche modo alterare il contenuto del messaggio.
    Buonanorma prevede che il messaggio prima venga criptato e poi firmato, in modo tale da impedire quasiasi manipolazione da parte di terzi.

    Oddio… sto cominciando a dilungarmi :)… che dici, scrivo un altro post ? 😀

  3. Mi associo a Gio: l’argomento mi interessa e mi sono sempre ripromesso di capirci un po’ di più. Per ora ho messo il primo tassellino con la RSA grazie alla chiara spiegazione del tuo post. Ti dirò, io proverei a buttarci dentro qualche dettaglio tecnico in più, magari preceduto da un piccolo “WARNING!” 😉

  4. Pingback: Visto nel Web – 124 | Ok, panico

  5. Pingback: Invisibile ma sotto gli occhi di tutti | Num3ri v 2.0

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...