política de cookies

Utilitzem cookies per a facilitar l'ús de la nostra pàgina web.

Les cookies que utilitzem no emmagatzemen cap dada personal, ni cap mena d'informació que pugui identificar-li. En cas de no voler rebre cookies, si us plau configuri el seu navegador d'Internet perquè les esborri del disc dur del seu ordinador, les bloquegi o li avisi en cas d'instal·lació d'aquestes. Per a continuar sense canvis en la configuració de les cookies, simplement continuï en la pàgina web. En visitar la nostra pàgina web, accepta la instal·lació d'aquestes cookies en el seu dispositiu.

x
Bitendian logo

Seguretat en la web

58 - 058-seguridad-en-la-web.jpg

Introducció a la seguretat en la web

En aquest article farem una breu introducció d'alguns conceptes de seguretat en la web. Concretament ens centrarem en l'ús de la comunicació xifrada en les aplicacions web, l'ús del protocol HTTPS, els certificats i les autoritats certificadores.

Febleses de la comunicació a través d'internet

Des del principi dels temps de la comunicació, entre éssers humans, ha existit la necessitat de mantenir comunicacions secretes. Per raons més o menys legítimes, és habitual la necessitat de comunicar alguna cosa a algú sense que els altres s'assabentin.

En les comunicacions personals, la millor manera de conservar el secret és, de fet, mantenir en secret l'acte de la comunicació en si. Comentar alguna cosa "en privat" garanteix que el nostre missatge es mantindrà ocult perquè ningú sap, ni tan sols, que s'ha produït una comunicació. Si no podem assegurar una comunicació vetllada sí que podem, almenys, ocultar el missatge de manera que no sigui interceptable. Com, per exemple, quan diem alguna cosa a algú "en veu baixa". És a dir, els altres saben que existeix una comunicació però no poden escoltar-la, saben que hi ha hagut missatge, però no saben com és.

No obstant això aquesta idea, a distància, la seguretat és més complexa. Per a mantenir la seguretat en aquestes comunicacions hauríem d'assegurar-nos que es compleixen una sèrie de punts:

  • El receptor és qui diu ser i no un impostor: en mantenir aquesta comunicació a distància no podem simplement "veure" que estem parlant amb qui volíem parlar i que efectivament és qui diu ser. Necessitem un mecanisme que ens garanteixi que qui rep el missatge és aquell a qui volem enviar-l'hi.

  • El missatge no ha de ser interceptat per un tercer: fins i tot sabent que li estem enviant el missatge a la persona correcta, hauríem d'assegurar-nos que no hi ha un tercer que també reculli aquest missatge.

  • El missatge que arriba és el que enviem: podria passar que algú faci arribar un altre missatge al receptor, missatge que el receptor pensarà que és nostre.

Webs no segures

En primer lloc parlarem de les webs que no són segures. Són aquelles webs en les quals no existeix la necessitat de mantenir en secret cap comunicació. Sigui perquè el missatge és de poca importància o perquè és públic. Per exemple; quan algú entra en un diari a llegir una notícia, el lector no envia cap informació al diari, amb la qual cosa no hi ha missatge per a mantenir en secret, i la notícia en si és pública, el diari no té necessitat de mantenir la notícia en secret, no té sentit en aquest cas. Una web de publicitat d'una empresa també compleix aquesta característica, no hi ha cap necessitat de mantenir ocult allò que l'empresa vol fer públic a través de la web, precisament el que necessita és que el missatge sigui llegible i arribi a com més persones millor.

 

Aquestes webs que no tenen cap necessitat de seguretat en les comunicacions treballen sobre el canal HTTP (Hypertext Transfer Protocol). Així, el nostre navegador sap que no ha de preocupar-se per la comunicació amb aquesta web.

Webs segures

No obstant això altres webs sí que necessiten ser segures. Un exemple és la comunicació amb el nostre banc. Avui dia qualsevol entitat bancària ofereix als seus clients la possibilitat de controlar el seu compte telemàticament a través de la web. El banc ens proveeix d'un usuari i una contrasenya de manera que ningú tingui accés al nostre compte si no coneix la nostra contrasenya, perfecte, hem de ser gelosos a l'hora de mantenir la nostra contrasenya en secret. Però és això suficient?

Tal com hem apuntat en la introducció no podem estar segurs que ningú escolta i intercepta els nostres missatges, llavors, per molta cura que posem a l'hora de mantenir la nostra contrasenya en secret, qui ens garanteix que ningú la veu quan la hi enviem al banc?, no podem no enviar-la-hi!

També hauríem d'estar segurs que quan parlem amb el banc parlem realment amb ell i no amb un impostor. Una de les tècniques més conegudes de hacking és el conegut com phishing que es descriu en la Wikipedia com: terme informàtic que denomina un model d'abús informàtic i que es comet mitjançant l'ús d'una mena d'enginyeria social caracteritzat per intentar adquirir informació confidencial de manera fraudulenta (com pot ser una contrasenya o informació detallada sobre targetes de crèdit o una altra informació bancària). El cibercriminal, conegut com a phisher, es fa passar per una persona o empresa de confiança en una aparent comunicació oficial electrònica, comunament un correu electrònic, o algun sistema de missatgeria instantània o fins i tot utilitzant també trucades telefòniques. És a dir, algú es fa passar pel banc, el teu creus que estàs parlant amb ell, quan envies les teves dades d'accés (l'usuari i la contrasenya) les hi estàs donant a un delinqüent que tindrà control total dels teus comptes.

Com podem protegir-nos davant tanta possibilitat que ens robin la identitat? La solució passa pel xifrat de missatges.

Comunicacions xifrades

Xifrar un missatge, segons la Wikipedia és: utilitzar un algorisme de xifrat amb certa clau (clau de xifrat) que transforma un missatge, sense atendre la seva estructura lingüística o significat, de tal forma que sigui incomprensible o, almenys, difícil de comprendre a tota persona que no tingui la clau secreta (clau de desxifrat) de l'algorisme. És a dir, lliurar un missatge il·legible sabent que el nostre receptor legítim - i només ell - coneix la manera de recuperar el missatge llegible original. En realitat la manera és aplicar una clau que mitjançant una transformació matemàtica encripta (fa il·legible) o desencripta (fa llegible) el missatge. Per tant la manera de transformar el missatge és coneguda per tots, però en ser necessària la clau només podrà desxifrar-se per aquelles persones que la conegui.

Aquestes comunicacions xifrades es realitzen mitjançant el canal HTTPS (Hypertext Transfer Protocol Secure). El nostre navegador sap que quan una web es comunica per aquest canal ha d'aplicar els mecanismes de seguretat pertinents.

Claus simètriques

Com s'apunta en el paràgraf anterior l'encriptació va lligada íntimament a l'ús de claus. Si l'encriptació i desencriptacions es realitza mitjançant la mateixa clau, estem parlant de claus simètriques. En aquest cas el xifrat funcionaria com un cadenat o un pany normal i corrent. Un cadenat es tanca amb una clau i és amb la mateixa clau que s'obre. Només és necessària una clau. Podem tenir dues claus, però totes dues claus seran iguals, és igual com de les dues usem per a obrir o tancar.

El funcionament és exactament el mateix que amb el cas del cadenat. Enviem un paquet (missatge) tancat (xifrat) amb un cadenat a un amic, el receptor té la mateixa clau que nosaltres (o bé la hi hem fet arribar d'altra banda o bé hi havien dues còpies de la mateixa clau) i quan li arriba el paquet (missatge) ho obre (desxifra) amb aquesta clau i pot veure el contingut. Ningú més ha pogut obrir el paquet, ningú més ha pogut veure el contingut. És una manera de xifrar perfectament vàlida i segura (sempre que tinguem molta cura en guardar les claus).

No obstant això aquesta manera de xifrar té desavantatges i la més evident és la quantitat de claus que hem de cuidar. Suposem que volem enviar els nostres paquets tancats, però que en comptes d'un amic tenim uns milers (un banc té milers de clients). Necessito una clau per cada amic o el sistema es tornarà insegur, si jo només usés una clau per a tancar tots els paquets i tots els meus amics tinguessin còpia d'aquesta clau ocorreria que un dels meus amics pot obrir el paquet d'un altre! Entre amics pot no semblar greu, però entre clients de banc la cosa canvia. A ningú li agradaria que altres clients del mateix banc tinguessin la clau dels nostres comptes.

Intentant posar-ho en un llenguatge pseudomatemàtic podem dir que si m és el missatge que volem xifrar, xifrar-lo és aplicar-li una clau F, que podem escriure com a F(m) que ho fa il·legible. Així, m és llegible, però F(m) és il·legible, ningú que capturi la comunicació (almenys en el món civil) podrà deduir m a partir de F(m). Quan diem que s'usa la mateixa clau per a xifrar i desxifrar ens referim al fet que: F(F(m)) == m (aplicar la clau a un missatge al qual ja li havíem aplicat la clau retorna el missatge original)

Claus asimètriques

Continuant amb l'exemple del cadenat imaginem un cadenat més complex, necessita dues claus, i es comporta de la següent manera: si tanquem el cadenat amb la primera clau, el cadenat només s'obrirà si usem la segona clau, i viceversa, és a dir, si tanquem el cadenat amb la segona clau llavors el cadenat només es pot obrir utilitzant la primera clau.

En llenguatge pseudomatemàtic podem dir que tenint el missatge m i les claus F i G, direm que m és llegible, que F(m) és il·legible i G(m) també és il·legible. A més diríem que G(F(m)) == m (aplicar la clau G al missatge xifrat F(m) retorna el missatge original) i que F(G(m)) == m (aplicar la clau F al missatge xifrat G(m) retorna el missatge original). Amb aquesta mena de claus no podem usar només una, és a dir F(F(m)) != m i G(G(m)) != m al contrari que les claus simètriques. És aquest tipus de claus el que utilitzem per a xifrar les comunicacions via web.

Això podria semblar una mica contradictori, quin avantatge ens atorga el fet que necessitem dues claus en comptes d'una? al final i al cap el nostre problema era guardar claus i ara manegem el doble. Veurem que aplicant una mica d'enginy, i fent alguna concessió quant a seguretat, podem manejar només dues claus i no obstant això mantenir comunicacions segures amb tots els nostres amics.

Claus públiques i privades

Veurem com és possible que el banc m'asseguri la comunicació amb ells mantenint només un parell de claus. Per a això és necessari entendre que aquest parell de claus (quan parlem d'una clau asimètrica en realitat parlem d'un parell de claus, un cadenat que necessita un parell de claus) té la següent característica: una de les claus és pública (la coneix tothom) i l'altra clau és privada (només la coneix el banc).

Per a les nostres fórmules en llenguatge pseudomatemàtic direm que el missatge és m que la clau pública és P i que la clau privada és p. Recordem del punt anterior que llavors P(m) és il·legible, que p(m) també és il·legible, que P(p(m)) == m (aplicar la clau pública a un missatge al qual ja se li havia aplicat la clau privada retorna el missatge original) i que p(P(m)) == m (aplicar la clau privada a un missatge al qual ja se li havia aplicat la clau pública retorna el missatge original).

Certificats

Com hem dit el banc té una clave pública P. Aquesta clau la coneix tothom i és el que es denomina certificat.

Quan ens connectem per primera vegada a una web segura el nostre navegador rep un certificat i ens pregunta si confiem que la web a la qual ens connectem és realment a la qual ens volíem connectar i, si és així, guardarà el certificat per a futures connexions. A partir d'aquest moment sempre que ens vulguem comunicar amb aquesta web el nostre navegador usés aquest certificat com a clau per a xifrar o desxifrar les comunicacions, si canviem de navegador, cal tornar a començar el procés.

A partir d'aquest moment el banc ens enviarà missatges del tipus p(m) (aplicarà la seva clau privada als missatges) i com nosaltres coneixem la clau pública P (la tenim guardada mitjançant el certificat corresponent)

Podrem aplicar-la al que ens enviïn i tindrem P(p(m)) que com hem vist en paràgrafs anteriors és igual a m, és a dir, podem llegir el missatge. És molt important entendre el que això implica: tothom disposa de la clau pública del banc, qualsevol persona pot veure que és el que el banc ens envia.

Hi ha cert mite que diu que les webs que van per HTTPS estan encriptades i no és veritat. Qualsevol pot llegir els missatges que ens envia el banc, qualsevol, tothom. Per això el banc mai envia informació realment crítica a través de la web. Mai veuràs escrita en pantalla les contrasenyes, els números PIN, les claus de seguretat de la targeta de crèdit... res. I sí, qualsevol hacker que intercepti la nostra comunicació pot saber quants diners tenim en el compte o qins són els nostres moviments. Aquestes són les concessions a la seguretat que s'han comentat abans.

Llavors de què serveix tot això?. De moment ja sabem que el que ens envia el banc no és privat, on està la seguretat que busquem?. Doncs bé, aquest mecanisme ens garanteix tres coses:

  • El missatge ve de la persona que posseeix el certificat (en aquest cas el banc): si el missatge es pot desxifrar amb la clau pública del banc, necessàriament s'ha xifrat amb la clau privada del banc. Si s'hagués xifrat amb qualsevol altra clau, la que tenim nosaltres no serviria per a desxifrar-ho. Per tant ja tenim la garantia que parlem amb la mateixa organització que ens va donar el certificat. Atès que la clau del banc és privada i ningú més la té, ningú que no sigui el banc pot haver xifrat aquest missatge.

  • El missatge no ha estat modificat: això no és tan evident i de fet s'utilitza una tècnica anomenada signatura mitjançant la qual podem garantir la integritat del missatge. El banc genera el seu missatge (allò que veurem en el navegador) i genera un hash sobre aquest missatge, per exemple un MD5 (una funció de hash retorna valors molt distants amb entrades molt semblants, o cosa que és el mateix, el més mínim canvi en el missatge original fa que el resultat del hash sigui molt diferent) i després xifra aquest MD5. A nosaltres ens envia el missatge m i el MD5 xifrat o signa p(MD5(m)). El nostre navegador rep el missatge i calcula el seu MD5 MD5(m), d'altra banda desxifra el MD5 que ha rebut del banc mitjançant la clau pública del banc P(p(MD5(m))) que com ja sabem és MD5(m), tot seguit compara tots dos resultats. Si el MD5 calculat per nosaltres és igual al MD5 desxifrat mitjançant el certificat és que el missatge és exactament aquell que se'ns va enviar originalment. Ningú pot signar en nom del banc, ja que per a això hauria de conèixer la seva clau privada.

  • Les nostres comunicacions cap al banc sí que estan encriptades: efectivament quan nosaltres enviem un missatge al banc, en realitat li enviem P(m). Com hem vist en paràgrafs anteriors els missatges xifrats amb una clau només es poden desxifrar amb l'altra (el fet de tenir la clau amb la qual es va tancar el cadenat no ens permet obrir-lo) amb el que, encara que milers de persones coneguin la clau pública només el banc, mitjançant la clau privada, pot desxifrar el nostre missatge. Aquesta es la màgia que permet que tots ens comuniquem amb el banc de manera segura, malgrat que tots tenim una de les claus per a obrir els missatges, i el banc només ha de tenir una clau per a obrir els missatges de tots. Amb un únic parell de claus milers de persones es comuniquen de manera segura.

Entitats certificadores

Aquest mecanisme que hem descrit anteriorment té una feblesa evident. Hi ha un pas al principi que podrien explotar els delinqüents per a enganyar-nos. Suposem que per algun ardit hacker com DNS poisoning (per la qual s'enganya a un ordinador perquè quan es connecti a una adreça web vagi a una IP controlada pel hacker) nosaltres la primera vegada que ens connectem al nostre banc rebem el certificat i li diem que confiem que és qui diu ser (l'URL és la del nostre banc i el hacker s'ha assegurat que l'aparença del seu web sigui exactament igual que la del nostre banc) i el navegador es guarda la clau del hacker. A partir d'aquí viurem enganyats, nosaltres creurem que estem mantenint una comunicació segura, per un canal segur, amb el nostre banc i en realitat ens estarem comunicant amb un impostor... Com es soluciona això?

En realitat quan ens comuniquem amb un banc no utilitzem el mecanisme descrit anteriorment. En realitat el banc ens envia un certificat segur. Un certificat amb garanties que realment és aquest i no un altre és el certificat del banc. Com ho fa? A través d'una autoritat certificadora.

Les entitats certificadores són grans empreses de la legalitat de les quals ens hem de fiar (ells paguen molts diners perquè estats, bancs i altres organitzacions confiïn que realment són legals. Cal fiar-se. És com quan posem una alarma a casa, ens hem de fiar que aquell que instal·la l'alarma és legal). Aquestes entitats són tan fiables que el nostre navegador porta incorporats els seus certificats (les seves claus públiques). No és necessari instal·lar-les la primera vegada que visitem cap web, no ens poden enganyar perquè el nostre navegador sap per endavant com és el certificat. Això pot comprovar-ho el lector si va als certificats del seu navegador (menú configuració >; seguretat >; certificats) i observa l'apartat "Entitats de certificació arrel de confiança" (això pot canviar segons el navegador). Aquí tindrà una sèrie de certificats que ell no va instal·lar i que pertanyen a entitats certificadores.

Mitjançant aquests certificats el banc pot garantir-nos que és qui diu ser fins i tot la primera vegada que ens connectem. Recordem que el banc ens envia un certificat o clau pública que hem anomenat P. Doncs bé, en realitat el banc ens envia un certificat que al seu torn està encriptat amb la clau privada d'una entitat certificadora.

En llenguatge pseudomatemàtic suposem que existeixen el parell de claus G/g (la G és de Go Daddy, entitat certificadora) i que, seguint la nomenclatura anterior, G és la clau pública de Go Daddy i g és la clau privada de Go Daddy; en aquest cas el banc no envia P sinó que envia g(P) aplica la clau privada de Go Daddy al seu certificat). Com pot enviar un banc una cosa encriptada amb la clau privada de Go Daddy, si aquesta clau només la posseeix Go Daddy?, molt senzill, el banc compra el certificat. El banc va amb el seu certificat a Go Daddy i li paga perquè aquests li donin el resultat d'encriptar-lo amb la seva clau privada (mai li donen la clau, clar, si el banc necessita un altre certificat haurà de passar de nou per caixa).

Una vegada el banc ha pagat a l'entitat certificadora el banc ja té un certificat segur. Quan ens connectem per primera vegada, el banc ens envia g(P). com el nostre navegador ja té la clau pública de Go Daddy G pot aplicar-la i així tenir G(g(P)). Com ja sabem aplicar la clau pública després d'aplicar la privada retorna el missatge original, és a dir P amb el que el nostre navegador ja sap P, ja té la clau pública del banc, i com ha necessitat usar la clau pública de Go Daddy, tenim la garantia que aquest missatge l'ha encriptat Go Daddy, i com ens fiem que Go Daddy no donarà claus a persones que no acreditin ser qui són (ja hem comentat que cal fer un exercici de confiança respecte a les entitats certificadores) el nostre navegador confia plenament que estem mantenint una comunicació segura amb qui ha pagat per tenir un certificat segur.

Webs molt segures

Llavors no és possible mantenir una comunicació completament privada?. Ja sabem com mantenir una comunicació en què els missatges que enviem al banc siguin segurs (encara que els que ens envia el banc no ho són), Com podem mantenir una comunicació encriptada en tots dos sentits?. La solució que s'aplica actualment és un doble joc de certificats. Un exemple és la hisenda pública (a Espanya, almenys). Per a poder realitzar operacions amb hisenda el ciutadà necessita tenir un certificat que li ha de demanar a hisenda. Amb aquest certificat el ciutadà xifra els seus missatges amb la seva clau privada (és responsabilitat del ciutadà guardar gelosament la clau que hisenda li dóna) i l'estat posseeix la clau.