Indietro | Indice | Home PHC | Avanti |
Sono disponibili i lucidi in formato Postscript e LaTeX-2e.
Protocolli a due, codici simmetrici.
Protocolli pubblici, codici asimmetrici.
Per crittografia si intende etimologicamente scrittura segreta. Di fatto la crittografia non si è discostata da questo fino al 1976 quando esce un articolo [Whitfield Diffie and Martin E. Hellman, New Directions in Cryptography, IEEE Transactions on Information Theory 22 (1976), no.6, 644-654] che introduce l'idea di crittografia asimmetrica. Quest'ultima permette, oltre alle classiche tecniche di segretezza, anche procedure di autenticazione.
chiaro Codifica cifrato Decodifica chiaro ,---. ,---. m -->| C |--> x -->| D |--> m `---' `---'
,----. ,----. | s | | s | m -->| C |--> x -->| D |--> m | K | | K | `----' `----'
Si usa una sola chiave, nota sia a chi deve cifrare sia a chi deve decifrare
,----. ,----. | | | | m -->| C |--> x -->| D |--> m | Kc| | Kd| `----' `----'
Le due chiavi sono distinte, una può essere resa pubblica mentre la seconda rimane segreta
La cosa veramente innovativa dei protocolli simmetrici è proprio la separazione tra le due chiavi: quella per cifrare e quella per decifrare. Tra i vantaggi abbiamo:
I protocolli asimmetrici vengono spesso detti piú semplicemente protocolli a chiave pubblica.
I protocolli simmetrici sono piú efficienti; i due sistemi vengono usati in coppia. Il protocollo asimmetrico cifra una chiave effimera.
,----. | | Ks -->| C |--> k | Kc| | `----' | \|/ \|/ ,---. ` ,---. | s | | s | m -->|C |--> x --> (k,x) --> x -->|D |--> m | Ks| | Ks| `---' `---' | /|\ \|/ ,----. | ` | | k -->| D |--> Ks | Kd| `----'
testo Firma firmato Verifica ,----. ,----. | | | | m -->| F |--> (m,f) -->| V |--> Sí/No | Kf| | Kv| `----' `----'
Uno degli svantaggi dei protocolli asimmetrici è invece l'estrema complessità computazionale delle operazioni necessarie, che porterebbe a una lentezza insostenibile per le trasmissioni cifrate. In realtà il protocollo asimmetrico viene usato solo per cifrare un numero casuale, che verrà usato come chiave per un protocollo simmetrico.
In definitiva il messaggio cifrato consiste nella coppia: k che è la chiave di sessione cifrata con la chiave pubblica del destinatario, seguita da x che è il messaggio cifrato con la chiave di sessione
Nei protocolli di firma digitale il messaggio firmato consiste nella coppia messaggio-firma. Il messaggio può benissimo essere in chiaro, la cosa importante è che la firma sia indissolubilmente legata al messaggio: la stessa firma legata a un messaggio diverso non deve passare la verifica.
,----. ,----. | | c | | cd m -->| C |--> m -->| D |--> m | Kc| | Kd| `----' `----'
Il protocollo RSA è il piú semplice da descrivere e il piú usato dei protocolli asimmetrici, ma non il piú sicuro.
Il piú antico, piú studiato e piú usato dei protocolli asimmetrici è sicuramente l'RSA. Risale al 1978. Nel frattempo sono state trovate molte debolezze nel possibile cattivo uso del protocollo, ma usato bene resta un protocollo affidabile.
Il protocollo è piuttosto semplice, la sicurezza risiede nel fatto che conoscendo solo la chiave pubblica (n,c) non è facile calcolare l'esponente privato d. L'unico modo che si conosce per decifrare i messaggi consiste nel fattorizzare n per poi calcolarne la phi ed invertire l'esponente pubblico. Questo procedimento è considerato troppo difficile e ciò rende sicuro il protocollo se la fattorizzazione di n non viene divulgata.
In realtà non è necessario che venga trasmesso anche il messaggio, può essere ricavato dalla firma f.
testo Firma firmato Verifica ,----. ,----. | | d | | cd m -->| F |--> m -->| V |--> m =m | Kf| | Kv| `----' `----'
Uno dei vantaggi di RSA è l'avere associato in modo naturale un protocollo di firma digitale. È sufficiente osservare che le operazioni di codifica e decodifica (per RSA) commutano per comprendere come funzioni.
In realtà è sufficiente lambda(n)= mcd( phi(p), phi(q))
Il funzionamento di RSA si basa su una estensione del teorema di Fermat. Da quest'ultimo sappiamo che per ogni esponente congruo a 1 modulo la phi di Eulero di un primo p vale la relazione di cui sopra. Grazie al teorema cinese possiamo mettere insieme queste relazioni per diversi primi. Di fatto la relazione:
mphi(n)+1=m (mod n)
vale per ogni n libero da quadrati.
Osservando meglio l'uso del teorema cinese, si può notare che alla phi di Eulero possiamo sostituire la lambda di Carmichael.
bodrato@socrate 12:07:36 ~>ls .ssh authorized_keys identity known_hosts config identity.pub random_seed
Lo scopo di SSH consiste nel far sí che la password di un utente non cada nelle mani sbagliate e che chi non è autorizzato non possa accedere alle risorse dell'account. In questa ottica SSH è piú che altro un programma che garantisce autenticazione, piú che segretezza.
Che la comunicazione venga cifrata serve principalmente se vogliamo effettuare piú collegamenti in cascata. Se vogliamo una password non possa essere intercettata è necessario che ogni canale attraverso cui questa passa sia cifrato
SSH ha comunque anche un metodo di autenticazione continua della comunicazione che impedisce anche infiltrazioni ad identificazione avvenuta.
I file di configurazione e gestione di ssh si trovano nella directory dell'utente nella sottodir .ssh
bodrato@socrate 11:39:58 ~>ssh gauss.dm.unipi.it Host key not found from the list of known hosts. Are you sure you want to continue connecting? no
bodrato@socrate 11:42:04 ~>ssh posso.dm.unipi.it @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the host key has just been changed. Please contact your system administrator. Add correct host key in /home/bodrato/.ssh/known_hosts to get rid of this message. Agent forwarding is disabled to avoid attacks by corrupted servers. X11 forwarding is disabled to avoid attacks by corrupted servers. Are you sure you want to continue connecting (yes/no)? no
Il primo di questi messaggi appare la prima volta che ci connettiamo ad una macchina. SSH non può ancora riconoscere l'host e ci chiede se contiuare. Se non siamo i sistemisti della macchina in questione non abbiamo molte altre possibilità che accettare e sperare che l'host non fosse vulnerabile proprio in quel momento.
Il secondo invece rivela che c'è effettivamente qualche cosa che non va. In questo caso la risposta corretta sarebbe no, a meno di non poter contattare direttamente il sistemista della macchina in questione per sapere se effettivamente il messaggio non dipende da un attacco ma da una reinstallazione o altri effetti che hanno fatto dimenticare la propria identità alla macchina.
@socrate>ssh-keygen Initializing random number generator... Generating p: .........++ (distance 260) Generating q: ...++ (distance 64) Computing the keys... Testing the keys... Key generation complete. Enter file in which to save the key (/home/bodrato/.ssh/identity): Enter passphrase: Enter the same passphrase again: Your identification has been saved in /home/bodrato/.ssh/identity. Your public key is: 1024 33 152589...644337 bodrato@socrate Your public key has been saved in /home/bodrato/.ssh/identity.pub @socrate>scp .ssh/identity.pub posso: bodrato@posso.dm.unipi.it's password: @posso>cat identity.pub >>.ssh/authorized_keys @posso>rm identity.pub @socrate>ssh posso Last login: Mon Mar 13 11:15:43 2000 from linuz @posso>
Una delle cose possibili con SSH è il collegamento da una macchina all'altra senza uso di password, tramite autenticazione RSA. Nell'esempio vogliamo poterci collegare da socrate a posso. Il primo passo consiste nel creare la coppia di identità su socrate con ssh-keygen. Quindi l'identità pubblica viene trasferita su posso e aggiunta alla lista delle chiavi autorizzate. A questo punto SSH non chiederà piú la password.
~/.kde/share/applnk/apps/postaremota.kdelnk
SwallowExec=ssh -n cibs xbiff -name cibsbiff SwallowTitle=cibsbiff Exec=ssh -C -t -x cibs pine Terminal=1
Una volta abilitata l'autenticazione RSA, si può usare SSH per eseguire programmi su una macchina remota senza problemi di sicurezza. Qui userò come esempi xbiff e pine, usati per gestire la posta su una macchina remota.
Il primo esempio si basa su KDE. l'obiettivo è di incastonare xbiff nel pannello e far sí che premendolo venga lanciato pine. Il tutto si ottiene creando un link per KDE e quindi inserendolo nel pannello.
Il nome della macchina remota in questo caso è cibs per usare unprogramma remoto che gira sotto X si usa il parametro -n per evitare che ssh legga dallo standard input ed eventualmente -f per permettere l'inserimento della password.
Se il programma ha bisogno di un terminale, la maggiore efficienza si ottiene lanciando il terminale in locale, quindi dicendo a ssh di comprimere la connessione (-C) e di far partire il programma in un terminale virtuale con -t.
In primo luogo va detto che per il momento non esistono sistemi la cui sicurezza sia dimostrabile matematicamente, si sa che non sono mai stati pubblicati algoritmi efficienti per rompere alcuni dei sistemi di crittografia piú: in voga, ma questo non significa che tali algoritmi non esistano.
Dalle definizioni formali di sicurezza di un crittosistema si vede che la segretezza dell'algoritmo è del tutto ininfluente rispetto alla sicurezza. Questa considerazione unita alla successiva, ci fanno capire perché il miglior software crittografico in circolazione sia quello di cui ci viene fornito il sorgente. Se vi tengono nascosto il sorgente, sotto può esserci qualunque inghippo (incapacità di programmatori/progettisti o addirittura dolo) e la sicurezza non può essere garantita.
Come ultima considerazione non possiamo non ricordare che un uso non corretto dei programmi di crittografia può renderli del tutto inefficaci, con il fastidioso effetto collaterale del falso senso di sicurezza.