• Non ci sono risultati.

Capitolo  4.   Applicazioni Web 26

4.8   Gestione della sicurezza 44

4.8.2   Crittografia SSL 46

La   crittografia   è   considerata   fin   dalla   sua   origine   un’arte   e   una   scienza   vera   propria   dell’ambito  della  cifratura,  anche  se  evolvendo  si  è  ampliata  arrivando  a  comprendere   l’autenticazione,  firme  digitali  e  molte  altre  funzioni  di  sicurezza  più  elementari.  

La   crittografia   per   essere   utile   deve   essere   utilizzata   all’interno   di   un   sistema   molto   più   ampio.   Come   una   serratura,   che   di   per   se   è   un   oggetto   inutile,   dimostra   la   sua   importanza  nel  momento  in  cui  viene  a  far  parte  di  un  sistema  molto  più  ampio,  come   ad  esempio  una  porta,  una  catena  o  qualcosa  del  genere,  la  crittografia  è  soltanto  una   piccola  parte  di  un  sistema  di  sicurezza  più  ampio.  [24]  

La   crittografia   deve   essere   in   grado   di   distinguere   gli   accessi   consentiti   da   quelli   indesiderati.  

Naturalmente   la   crittografia   è   sicura   se   inserita   in   un   sistema   sicuro.   È   inutile   possedere  una  porta  blindata  che  si  apre  solamente  con  una  determinata  chiave  se  poi   viene   lasciata   la   finestra   aperta.   Questo   non   giustifica   in   ogni   modo   l’utilizzo   di   una   crittografia  debole.  Gli  attacchi  che  colpiscono  la  crittografia  non  lasciano  tracce  poiché   l’accesso  compiuto  dal  mal  intenzionato  viene  considerato  da  parte  del  sistema  come   “buono”.   Un   attacco   che   non   lascia   tracce   è   molto   pericoloso   in   quanto   può   essere   ripetuto  tranquillamente  più  volte.  

Un  sistema  di  sicurezza  è  forte  quando  lo  è  il  suo  elemento  più  debole. [24]  

In  ambito  web  un  elemento  debole  può  essere  considerato  il  canale  in  cui  transitano  le   informazioni.    

Le  connessioni  sono  bidirezionali:  vi  è  un  invio  di  dati  da  parte  del  client  verso  il  server   e  viceversa.    

Il  problema  nasce  quando  una  terza  parte  cerca  di  mettersi  in  mezzo  fra  il  mittente  e  il   destinatario   della   richiesta,   leggendo   tutte   le   comunicazioni   e   manipolandole   in   maniera  arbitraria,  cancellando,  aggiungendo  o  modificando  i  dati  trasmessi.  

Per   realizzare   un   canale   sicuro   occorre   un   segreto   condiviso,   rappresentato   da   una   chiave  segreta  che  nessuno  conosce  al  di  fuori  del  mittente  e  del  destinatario.  

La  chiave  segreta  deve  essere:  

• nota  solamente  al  mittente  e  al  destinatario  del  messaggio   • generata  ogni  volta  che  viene  inizializzato  un  canale  sicuro  

Le  reti  per  la  trasmissione  dati  sono  organizzate  in  livelli,  ognuno  costruito  su  quello   inferiore,  ovvero  il  livello  inferiore  fornisce  dei  servizi  al  livello  superiore.  Il  TCP/IP  è   un  tipo  di  protocollo  utilizzato  per  il  trasferimento  dei  dati  e  in  particolare  il  termine   TCP  sta  a  rappresentare  il  livello  di  trasporto  impiegato,  ovvero  si  occupa  di  fornire  un   ordinamento  dei  pacchetti  ed  eventualmente  di  richiedere  pacchetti  andati  persi  nella   rete,    mentre  IP  (Internet  Protocol)  si  riferisce  al  livello  di  rete  permettendo  ad  un  host   di  inserire  pacchetti  in  una  qualsiasi  rete.  

Dal   punto   di   vista   crittografico,   il   protocollo   di   comunicazione   TCP/IP   non   è   considerato  affidabile,  ovvero  non  è  considerato  un  canale  sicuro.  TCP/IP  è  affidabile   solo  per  quanto  riguarda  eventi  casuali  come  la  perdita  di  pacchetti,  ma  non  è  in  grado   di   proteggere   da   un   avversario   attivo,   in   quanto   questo   può,   senza   interrompere   il   flusso  TCP,  modificare,  aggiungere  o  eliminare  dati.  [24]  

Per  sua  natura  il  protocollo  TCP/IP  non  è  affidabile  sotto  l’aspetto  di  riservatezza  della   comunicazione,  ma  sono  comunque  disponibili  diversi  approcci  in  grado  di  migliorare   la   sicurezza.   L’approccio   Security   Socket   Layer,   noto   come   SSL,   è   una   soluzione   che   permette   di   implementare   la   sicurezza   appena   sopra   al   livello   TCP   attraverso   autenticazione,  integrità  dei  dati  e  cifratura.  

L’SSL  è  rappresentato  da  un  protocollo  a  due  livelli:  

• SSL   Record   Protocol   (livello   subito   superiore   al   TCP)   che   fornisce   i   servizi   di   basilari  di  sicurezza  ai  livelli  superiori  

• Handshake  Protocol  che  permette  al  server  e  al  client  di  autenticarsi  a  vicenda  e   di  negoziare  un  algoritmo  di  crittografia  e  le  relative  chiavi  prima  che  il  livello  di   applicazione  trasmetta  o  riceva  il  suo  primo  byte    

 

Capitolo 4.  Applicazioni Web    

   

4.8.2.1 SSL  Record  Protocol  

L’SSL  Record  Protocol  si  occupa  di  fornire  il  servizio  di  confidenzialità,  definendo  una   chiave  segreta  comune  usata  per  il  criptaggio,  e  il  servizio  di  integrità  dei  messaggi.   Il   Record   Protocol   frammenta   i   dati   del   messaggio   che   deve   essere   trasmesso   in   blocchi  manipolabili  ed  eventualmente  ne  effettua  una  compressione.  A  questo  punto   calcola   un   Message   Autentication   Code   (MAC)   sui   dati   compressi.   Infine   effettua   una   criptazione  simmetrica  sul  messaggio  e  sul  MAC  e  dopo  aver  aggiunto  un  header  e  li   trasmette  al  livello  TCP.  

I   dati   ricevuti   subiscono   il   trattamento   inverso.   Vengono   decriptati,   verificati,   decompressi,  riassemblati  e  infine  consegnati  all’utente  del  livello  più  alto.  

4.8.2.2 Handshake  Protocol  

L’avvio   di   una   connessione   può   essere   richiesto   da   parte   del   client   o   da   parte   del   server  e  inizia  sempre  con  uno  scambio  di  messaggi  chiamati  SLL  handshake.  

L’inizio   di   una   connessione   avviene   attraverso   la   fase   Hello,   con   l’invio   da   parte   del   client   di   un   messaggio   di   client   Hello   inviato   al   server   e   la   risposta   di   quest’ultimo   tramite  un  messaggio  del  tipo  server  Hello.  

Lo  scambio  di  questi  messaggi  serve  alle  due  parti  per  mettersi  d’accordo  sul  tipo  di   algoritmi   da   utilizzare   per   la   generazione   delle   chiavi.   La   scelta   dell’algoritmo   da   utilizzare  è  indicata  dal  server  in  base  alla  lista  di  algoritmi  proposta  dal  client.  

Nella   fase   di   autenticazione   viene   verifica   l’identità   del   server   controllando   che   il   certificato  presentato  dal  server  sia  valido  e  che  sia  firmato  da  un’autorità  fidata  (CA).   In  questo  caso  si  parla  di  autenticazione  del  server  con  client  non  autenticato  ed  è  utile   nel  caso  in  cui  vi  è  l’invio  di  dati  sensibili  verso  il  server  e  quindi  si  ha  la  necessità  di   essere  certi  dell’identità  del  destinatario.  

Nel   caso   di   autenticazione   di   entrambi   le   parti   anche   il   client   deve   presentare   il   proprio   certificato   svelando   la   propria   identità.   Un’autenticazione   di   questo   tipo   potrebbe   essere   utile   se   il   server   è   ad   esempio   una   banca   che   deve   inviare   dati   finanziari  confidenziali  a  un  suo  cliente  che  necessita  quindi  di  essere  autenticato.  [11]   Sia   nel   caso   di   autenticazione   del   client   che   nel   caso   di   autenticazione   del   server   avviene   la   cifratura   di   alcuni   dati   condivisi   con   una   chiave   pubblica   o   privata   e   la  

successiva   decifratura   con   la   chiave   corrispondente.   Nel   caso   di   autenticazione   del   server   questo   mette   a   disposizione   una   chiave   pubblica   con   la   quale   il   client   cifra   i   propri  dati  segreti.  La  corretta  decifrazione  dei  dati  è  possibile  solamente  attraverso  la   chiave  privata  del  server,  assicurando  l’identità  del  destinatario.  

Il  passo  successivo  all’autenticazione  è  la  generazione  di  chiavi  per  la  cifratura  e  per   l’autenticazione  dei  dati  provenienti  dal  livello  di  applicazione,  attraverso  i  messaggi  di  

server  key  exchange  e  client  key  exchange.    

Infine,   attraverso   l’invio   del   messaggio   server   hello   done,   vi   è   da   parte   del   server   l’annuncio   della   fine   della   fase   di   Hello   al   client.   Con   l’invio   di   un   messaggio   change  

CipherSpec  sia  il  server  che  il  client  verificano  la  correttezza  dei  dati  ricevuti,  e  in  caso  

di  successo,  iniziano  ad  utilizzare  gli  algoritmi  concordati.  

La   fase   di   handshake   si   conclude   con   l’invio   da   entrambi   le   parti   del   messaggio   di  

finished,  il  quale  il  primo  dato  ad  essere  cifrato.  

Documenti correlati