Criptografia

La criptografia (del grec "kryptos" - amagat, secret - i "graphin" - escriptura. Per tant seria "escriptura oculta") és l'estudi de formes de convertir informació des de la seva forma original cap a un codi incomprensible, de forma que sigui incomprensible pels que no coneguin aquesta tècnica.

Quan parlem d'aquesta àrea de coneixement com a ciència, hauríem de parlar de criptologia que engloba la criptografia i el criptoanàlisis (estudia els mètodes utilitzats per trencar texts xifrats amb l'objectiu de recuperar la informació original en absència de claus).

La criptografia moderna utilitza les disciplines de les matemàtiques, informàtica i telemàtica.

En la terminologia de criptografia, trobem els següents aspectes:

  • La informació original que ha de protegir-se i que es denomina text en clar o text pla.
  • El xifrat és el procés de convertir el text pla en un text il·legible, anomenat text xifrat o criptograma.
  • Algorismes de xifrat:
    • De xifrat en bloc: divideix el text origen en blocs de bits d'una mida fixa i els xifren de forma independent.
    • De xifrat de flux: el xifrat és realitza bit a bit, byte a byte o caràcter a caràcter.
  • Les dues tècniques més senzilles de xifrat, en la criptografia clàssica, són:
    • La substitució: suposa el canvi de significat dels elements bàsics del missatge, les lletres, els dígits o els símbols.
    • La transposició: suposa una reordenació dels mateixos, però els elements bàsics no es modifiquen en sí mateixos.
  • El desxifrat: és el procés invers, recupera el text pla a partir del criptograma i la clau.

Algorismes de Xifrat

La història de la criptografia es molt antiga. Ja les primeres civilitzacions l'utilitzaven per xifrar els missatges durant les campanyes militars, així si interceptaven el missatger, eren incapaços de descobrir el missatge. Un dels mes coneguts és el mètode Cèsar, anomenat així perquè se li atribueix a Juli Cèsar, que utilitzava durant les seves campanyes.

Era un sistema simple però efectiu, simplement desplaça tres lletres de l'abecedari per fer la substitució de les originals (imatge al peu del document).

Exemple: En GNU/Linux podem utilitzar la comanda tr per realitzar xifratge de substitució com el Cèsar:

Creem un fitxer (Document.txt) amb un text després executem

cat Document.txt | tr [a-z] [d-zabc] | tr [A-Z] [D-ZABC] > document_cesar.txt 

Veurem que ens ha creat el document_cesar.txt on apareix la informació del fitxer Document.txt xifrada segons el sistema Cèsar.

Existeixen dos grans grups d'algorismes de xifrat:

  • Simètrics o de clau simètrica o privada: els algorismes que utilitzen una única clau per xifrar la informació i la mateixa per desxifrar-la.
  • Asimètrics o de clau asimètrica o pública: els que utilitzen una clau pública per xifrar el missatge i una clau privada per desxifrar-lo. Aquest és la base de les tècniques de xifrat modernes.

Segons el principi de Kerckhoffs, la fortalesa d'un sistema o algorisme de xifrat ha de recaure en la clau i no en l'algorisme. Ja que els principis de funcionament d'aquest són coneguts normalment, però en el cas de no conèixer la clau no podrem desxifrar el missatge:

  1. Si el sistema no és teòricament irrompible, almenys ha de ser-ho en la pràctica.
  2. L'efectivitat del sistema no ha de dependre que el seu disseny romangui en secret.
  3. La clau ha de ser fàcilment memoritzable de manera que no calgui recórrer a notes escrites.
  4. Els criptogrames hauran de donar resultats alfanumèrics.
  5. El sistema ha de ser operable per una única persona.
  6. El sistema ha de ser fàcil d'utilitzar.

Màxima de Shannon: l'adversari coneix el sistema.

Criptografia Simètrica

La criptografia simètrica és un mètode criptogràfic en el qual s'utilitza una mateixa clau per xifrar i desxifrar missatges. Les dues parts que es comuniquen han de posar-se d'acord en la clau que utilitzaran.

Un bon sistema de xifrat posa tota la seguretat en la clau no en l'algorisme. És per això que la clau ha de ser molt complicada d'esbrinar. Per aconseguir-ho, hem de tenir en compte la longitud i el conjunt de caràcters que s'utilitzi. Actualment els ordinadors són molt potents i poden desxifrar una clau amb molta velocitat, per això la mida de la clau és molt important.

Alguns dels algorismes de xifrat simètric són:

  • Algorisme de xifrat DES: utilitza una clau de 56 bits, és a dir que hi han 256= 72.057.594.037.927.936 claus possibles. Però un ordinador normal ho pot desxifrar en qüestió de dies.
  • Algorismes de xifrat 3DES, Blowfish i IDEA: utilitzen claus de 128 bits , és a dir 2128 claus possibles (les targetes de crèdit i altres mitjans de pagament electrònic tenen com a estandar l'algorisme 3DES).
  • Algorismes de xifrat RC5 i AES[16]: Aquest últim conegut també com a Rijndael és l'estandar de xifrat del govern dels Estats Units (A manera d'exemple: Desxifrar una clau de 128 bits AES amb un supercomputador estàndard actual, portaria més temps que la presumpta edat de l'univers).

Els principals problemes d'aquest sistema de xifrat no és la seva seguretat, sinó:

  • L'intercanvi de claus: Quan l'emissor i el receptor han intercanviat les claus podran comunicar-se amb seguretat, però quin canal de comunicació segur han utilitzat per l'intercanvi de claus? Si un atacant intercepta l'intercanvi de claus, ja podrà desxifrar qualsevol missatge que s'envii.
  • El nombre de claus que es necessiten: per un grup de persones reduït que necessiten comunicar-se entre sí aquest sistema podria funcionar. Però si és gran seria impossible portar-ho a terme ja que es necessiten n/2 (n = nombre de persones que s'han de comunicar entre sí) claus per a cada parella de persones que intervinguin.

Per tan per solucionar aquests problemes utilitzarem la criptografia asimètrica i la híbrida.

Exemple de criptografia simètrica amb la comanda GPG:

Crear un fitxer encriptat a partir d'un document:
$ gpg -c document
 Ens generarà un arxiu document.gpg en format binari

Si volem generar un arxiu en encriptat en ASCII utilitzarem el modificador -a:
$ gpg -ca document
 Ens generarà un arxiu document.asc

Per desencriptar l'arxiu:
$ gpg -d document.gpg
 o
$ gpg -d document.asc

Criptografia de clau Asimètrica

En aquest cas s'utilitza un parell de claus, una per xifrar i una per desxifrar:

  • Clau Privada: estarà disponible només per al seu propietari i no es donarà a conèixer a ningú més.
  • Clau pública: serà coneguda per tots els usuaris.

Aquest dues són claus complementaries, el que xifra una ho desxifra l'altre i al revés. s'obtenen mitjançant algorismes i operacions matemàtiques complexes, és gairebé impossible conèixer una clau sense l'altre.

Les dues branques principals de criptografia clau pública són:

  • Xifratge amb clau pública: un missatge xifrat amb la clau pública d'un receptor no pot ser desxifrat per ningú tret del receptor que posseeix la clau privada corresponent. Això s'utilitza per assegurar la confidencialitat.
  • Signatura digital: un missatge signat (xifrat) amb la clau privada d'un remitent pot ser verificat (desxifrat) per qualsevol que té accés a la clau pública del remitent, demostrant així que el remitent és qui l'ha signat (xifrat) i que el missatge no s'ha manipulat(perquè la clau pública només pot servir per desxifrar el missatge si s'ha xifrat amb la clau privada que no coneix ningú mes i si no ha estat alterat). Això s'utilitza per assegurar l'autenticitat.

Aquest sistemes de xifrat de clau pública, es basen en funcions resum o funcions hash (els algorismes més comuns utilitzats com a funcions hash són MD5 i SHA) d'un únic sentit que aprofiten propietats particulars, per exemple dels nombres primers. Una funció d'un sol sentit és aquella en la qual la seva computació és fàcil, mentre que la seva inversió resulta extremadament difícil.

En GNU/Linux, podem utilitzar l'aplicació md5sum per calcular-nos el valor resum (o Hash) d'un arxiu (En Windows podem utilitzar l'aplicació md5sum.exe).

 $ md5sum document.txt
Ens mostrarà fc851301032be1df24da571c053c0fc9  document.txt

Ara per poder validar la integritat del fitxer per assegurar-nos que no ha esta modificat guardarem el resultat en un arxiu nomhash.md5. Després validarem que l'arxiu no ha estat modificat i per últim el modificarem i tornarem a fer la comprovació del md5:

 $ md5sum document.txt > nomhash.md5
 $ md5sum -c nomhash.md5
document.txt: CORRECTE
 $ echo "modificacio del fitxer" >> document.txt 
 $ md5sum -c nomhash.md5 
document.txt: INCORRECTE
md5sum: avís: 1 de 1 suma calculada NO coincideix

En un atac de força bruta sobre un xifrat de clau pública amb una clau de mida de 512 bits, l'atacant ha de factoritzar un nombre compost codificat amb 512 bits. Mentre que 128 bits és suficient per xifrats simètrics, donada la tecnologia de factorització d'avui en dia, es recomana utilitzar claus públiques de 1024 bits per la majoria de casos.

La major avantatge de la criptografia asimètrica es que es pot xifrar amb una clau i desxifrar amb l'altre, però aquest sistema té desavantatges:

  • Per una mateixa longitud de clau i missatge, requereix major temps de procés.
  • Les claus han de ser de major mida que les simètriques.
  • El missatge xifrat ocupa més espai que l'original.

La criptografia asimètrica està implementada en algorismes com Diffie-Helman, RSA, DSA, ElGamal

Eines de software com PGP o en comunicacions TCP/IP, protocols com SSH o la capa de seguretat TLS/SSL, utilitzen un xifrat híbrid format per la criptografia asimètrica per intercanviar claus simètriques i la criptografia simètrica per a la transmissió de la informació.

Exemple de generació de parell de claus amb la comanda gpg en GNU/Linux:

Creació de claus
$ gpg --gen-key

Llistar claus públiques
$ gpg --list-keys
o
$ gpg -k

 Llistar claus privades
$ gpg --list-secret-keys

Ara cal fer pública la clau:
$ gpg --keyserver pgp.mit.edu --send-keys ClauID
ClauID és l'identificador de la clau que acabem de crear
pgp.mit.edu és una web on es publiquen claus públiques.

Per buscar claus públiques:
$ gpg --keyserver NomDelServidor --search-keys ClauID 

Per baixar-nos una clau pública:
$ gpg --keyserver NomDelServidor --recv-keys ClauID

Per copiar la nostra clau pública, executarem:
$ gpg --armor --output FitxerDeClau --export ClauID

Per fer una una còpia de seguretat de la nostra clau privada:
$ gpg --armor --output FitxerDeClau --export-secret-key ClauID

Per revocar la nostra clau pública:
$ gpg -o revocacio.asc --gen-revoke ClauID

Per importar una clau:
$ gpg --import FitxerdeClaus

La informació de GPG és guarda a la carpeta:
/home/[nom usuari]/.gnupg

La clau privada és guarda a:
~/.gnupg/secring.gpg

i la pública a:
~/.gnupg/pubring.gpg

Signatura Digital

La signatura digital és un mecanisme de xifrat per autentificar informació digital. El mecanisme utilitzat és la criptografia de clau pública. Per això aquest tipus de signatura també rep el nom de signatura digital de clau pública.

S'utilitza també el terme signatura electrònica com a sinònim de signatura digital, tot i que la signatura electrònica inclouria també altres mecanismes per identificar l'autor d'un missatge electrònic que no són purament criptogràfics.

Hi ha tres motius per utilitzar signatures digitals en les comunicacions:

  • Autenticitat: Un sistema criptogràfic de clau pública permet a qualsevol enviar missatges utilitzant una clau pública. La signatura permet al receptor d'un missatge estar segur que el remitent és qui diu ser. Tot i així, el receptor no pot estar completament segur que el remitent és qui diu ser ja que el sistema criptogràfic es pot haver trencat.
  • Integritat: Emissor i receptor voldran estar segurs que el missatge no s'ha alterat durant la transmissió.
  • No repudiació: En un context criptogràfic, la paraula repudiació fa referència a l'acció de negar la relació amb un missatge (per exemple dient que ha estat enviat per un tercer). El receptor d'un missatge pot insistir que l'emissor adjunti una signatura per prevenir que més endavant l'emissor pugui repudiar el missatge, així, el receptor pot mostrar el missatge a un tercer i provar el seu origen.

La signatura digital és un xifrat del missatge que està firmant però utilitzant la clau privada en lloc de la pública.

Exemple de signatura digital amb gpg en GNU/Linux (parell de claus creada abans):

Signem el document però no el xifrem
$ gpg --clearsign [document]

Signem el document i el xifrem en un arxiu binari:
$ gpg -s [document]

Signem i xifrem, però el missatge i signatura van en fitxers separats:
$ gpg -b [document]

Per verificar la validesa de la signatura digital:
$ gpg --verify [document]

Certificat Digital

Un Certificat Digital és un document digital mitjançant el qual un tercer confiable (una autoritat de certificació) garanteix la vinculació entre la identitat d'un subjecte o entitat i la seva clau pública.

Si voleu utilitzar el vostre certificat digital i que sigui vàlid, cal que primer aneu a una autoritat certificadora. Us haureu d’identificar correctament i, tot seguit, ells certificaran que sou qui dieu ser i us donaran el certificat digital corresponent. Aleshores, quan envieu missatges que vulgueu que us identifiquin davant altres persones, només caldrà que hi afegiu una còpia pública del vostre certificat digital. D’aquesta manera, la persona que rebi el missatge sabrà de segur que l’emissor del missatge és qui diu ser, garanteix altres persones, entitats, o administracions públiques quina és la vostra identitat.

El format més comunament emprat és l'estàndard X.509 i la seva distribució és possible realitzar-la:

  • Amb clau privada (acostuma a tenir extensió *.pfx o *.p12), més segur i destinat a una utilització privada d'exportació i importació posterior com a mètode de còpia de seguretat.
  • Només amb clau pública (acostuma a ser extensió *.cer o *.crt), destinat a la distribució no segura, per a que altres entitats o usuaris només puguin verificar la identitat, en els arxius o missatges signats.

Un certificat emès per una entitat de certificació autoritzada, a més d'estar signat digitalment per aquesta, ha de contenir almenys el següent:

  • Nom, adreça i domicili del subscriptor.
  • Identificació del subscriptor nomenat en el certificat.
  • El nom, l'adreça i el lloc on realitza activitats l'entitat de certificació.
  • La clau pública de l'usuari.
  • La metodologia per a verificar la signatura digital del subscriptor imposada en el missatge de dades.
  • El nombre de sèrie del certificat.
  • Data d'emissió i expiració del certificat.

Entre les aplicacions dels certificats digitals i el DNIe trobem, realitzar compres i comunicacions segures, com tràmits amb la banca online, amb l'administració pública (hisenda, seguretat social, etc) a través d'Internet, etc.

DNIe

El desenvolupament de la Societat de la Informació i la difusió dels efectes positius que d'ella es deriven exigeixen la generalització de la confiança dels ciutadans en les comunicacions telemàtiques.

Com a resposta a aquesta necessitat, i en el marc de les directives de la Unió Europea, l'Estat espanyol ha aprovat un conjunt de mesures legislatives, com la Llei de Signatura Electrònica i el RD sobre el Document Nacional d'Identitat electrònic, per a la creació d'instruments capaços d'acreditar la identitat dels intervinents en les comunicacions electròniques i assegurar la procedència i la integritat dels missatges intercanviats.

El naixement del Document Nacional d'Identitat electrònic (DNIe) respon, per tant, a la necessitat d'atorgar identitat personal als ciutadans per al seu ús en la nova Societat de la Informació, a més de servir d'impulsor de la mateixa. Així, el DNIe és l'adaptació del tradicional document d'identitat a la nova realitat d'una societat interconnectada per xarxes de comunicacions.

D'aquesta manera, cada ciutadà podrà fer realitzar múltiples gestions de forma segura a través de mitjans telemàtics i assegurant la identitat dels participants en la comunicació.

És semblant al DNI clàssic amb la novetat que incorpora un xip capaç de guardar de manera segura:

  • Un certificat electrònic per autenticar la personalitat del ciutadà.
  • Un certificat electrònic per signar electrònicament, amb la mateixa validesa jurídica que la signatura manuscrita.
  • Certificat de l'Autoritat de Certificació emissora.
  • Claus per la seva utilització.
  • La plantilla biomètrica de la impressió dactilar.

Per utilitzar el DNIe es necessari tenir:

  • Hardware específic: lector de targetes intel·ligents que cumpleixin l'ISO-7816.
  • Software específic: En Windows és el servei Cryptographic Service Provide (CSP), i en GNU/Linux o MAC el mòdul PKCS#11.

Mètode Cèsar