És molt possible que en alguna ocasió ens hagi sorgit la necessitat d'incrementar la seguretat en les nostres comunicacions per correu electrònic, o garantir l'autoria d'algun document, o la seva integritat.
Aquests són problemes antics i fa temps que se'ls ha donat respostes raonablement satisfactòries. Mai es pot garantir amb certesa absoluta la seguretat de les comunicacions, o l'autoria d'un document o la seva integritat, sobretot per la presència de factors humans. Però per la part del software, almenys es poden posar les coses prou difícils com per a que amb una tecnologia determinada no sigui possible vulnerar la seguretat en un temps finit i raonablement "curt".
Les comunicacions segures amb organismes oficials o amb entitats financeres passen per l'utilització de certificats digitals. En aquest cas, unes institucions internacionals, les autoritats de certificació, ens proporcionaran, per un preu, uns certificats digitals temporals de caràcter "universal" que vindran avalats per la confiança que hom té arreu del món en aquestes autoritats de certificació.
Aquesta solució que és inevitable seguir quan hom tracta amb organismes oficials, o en solucions de comerç electrònic, pot resultar excessiva, o no gens convenient, quan es tracta de garantir la privacitat personal.
¿I si volem restringir estrictament la privacitat de les comunicacions entre nosaltres i els nostres interlocutors sense la intervenció de terceres parts i sense que calgui posar-se contínuament d'acord amb passwords o claus secretes?
GnuPG
Vet aquí el plantejament de GnuPG: Nosaltres, i ningú més que nosaltres, som els guardians de la nostra clau privada que només coneixem nosaltres. No cal intercanviar cap password amb ningú.
La nostra clau pública, en canvi, la pot conèixer tothom.
Per a poder enviar un missatge xifrat a algú, ens cal la seva clau pública.
Per a poder dexifrar un missatge adreçat a nosaltres, ens cal la nostra clau privada.
Per a certificar que un missatge l'enviem nosaltres i que no ha estat alterat, el signem amb la nostra clau privada.
Per a verificar que un missatge l'ha enviat qui diu que l'ha enviat el verifiquem amb la clau pública de l'emissor.
Es pot signar (amb la nostra clau privada) i xifrar (amb la clau pública del destinatari) a l'hora un missatge que enviem.
Es pot verificar (amb la clau pública de l'emissor) i dexifrar (amb la nostra clau privada) a l'hora un missatge que rebem.
Tota l'estona estic parlant de "missatge" i hom podria pensar que em refereixo a missatges de correu electrònic. Però no és el cas. El "missatge" pot ser qualsevol fitxer que rebem per qualsevol via.
Criptografia de clau simètrica
Tanmateix, GnuPG també permet xifrar missatges mitjançant el sistema d'intercanvi de claus. Aquest sistema és el que es coneix com a
criptografia de clau simètrica. És el que fem servir quan enviem o rebem un zip protegit amb password. Ens han de donar, o hem de donar, la clau per a poder-lo llegir.
Aleshores, WinZip o GnuPG? No hi ha una avantatge d'un sobre l'altre en quant a l'us de claus simètriques. L'algorisme de xifrat de clau simètrica que fa servir GnuPG per defecte és el
CAST5. Que és superior a l'algorisme de xifrat que emprava originalment WinZip (
zip 2.0). Tanmateix, les versions actuals de WinZIP fan servir l'algorisme de xifrat
AES. Una altre eina a tenir en compte és OpenSSL. Es tracta de programari lliure per a, entre moltes d'altres opcions, xifrar i desxifrar missatges fent servir criptografia de clau simètrica.
Criptografia híbrida
En realitat, GnuPG combina el xifrat simètric amb el xifrat de clau pública. Els missatges enviats es xifren amb una clau simètrica de sessió (només per a aquell missatge), que a la seva vegada es xifrada amb la clau pública. Tot plegat, missatge i clau, s'empaqueta i s'envia junt. Aleshores el destinatari fa servir la clau privada per desxifrar la clau de sessió i, a continuació, fent servir la clau de sessió, desxifrar el missatge. GnuPG és doncs, de forma més precisa, un esquema de
criptografia híbrida. El motiu de fer-ho així és que és menys costós computacionalment xifrar amb clau simètrica que amb asimètrica.
El criteri per a usar GnuPG, doncs, és per a emprar l'esquema de criptografia de clau pública en el que no cal intercanviar la clau simètrica. En criptografia de clau simètrica, el moment de l'intercanvi de la clau és el moment en que la comunicació és més vulnerable a un atac. En canvi, en la criptografia de clau pública, la vulnerabilitat depèn de la capacitat que tinguem de mantenir les claus privades en secret.
El programa gpg
Anem a tocar l'eina. Acabo d'instal·lar GnuPG amb synaptic. Faig un cop d'ull a les opcions de gpg:
albert@apolo:~$ gpg --help
gpg (GnuPG) 1.4.11
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Home: ~/.gnupg
Algoritmes suportats:
Clau pública: RSA, RSA-E, RSA-S, ELG-E, DSA
Xifratge: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128,
CAMELLIA192, CAMELLIA256
Dispersió: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compressió: No comprimit, ZIP, ZLIB, BZIP2
Sintaxi: gpg [opcions] [fitxers]
signa, comprova, xifra o desxifra
l'operació predeterminada depén de les dades introduïdes
Ordres:
-s, --sign [fitxer] crea una signatura
--clearsign [fitxer] crea una signatura en text clar
-b, --detach-sign crea una signatura separada
-e, --encrypt xifra dades
-c, --symmetric xifra només amb xifratge simètric
-d, --decrypt desxifra dades (predeterminat)
--verify verifica una signatura
--list-keys llista claus
--list-sigs llista claus i signatures
--check-sigs list and check key signatures
--fingerprint llista claus i empremtes digitals
-K, --list-secret-keys llista claus secretes
--gen-key genera un nou parell de claus
--delete-keys elimina claus de l'anell públic
--delete-secret-keys elimina claus de l'anell secret
--sign-key signa una clau
--lsign-key signa una clau localment
--edit-key signa o edita una clau
--gen-revoke genera un certificat de revocació
--export exporta claus
--send-keys exporta claus a un servidor de claus
--recv-keys importa claus d'un servidor de claus
--search-keys cerca claus en un servidor de claus
--refresh-keys actualitza totes les claus des d'un servidor de claus
--import importa/fon claus
--card-status print the card status
--card-edit change data on a card
--change-pin change a card's PIN
--update-trustdb actualitza la base de dades de confiança
--print-md algo [fitxers]
imprimeix resums de missatges
Opcions:
-a, --armor crea eixida amb armadura ascii
-r, --recipient NOM xifra per a NOM
-u, --local-user usa aquest id per a signar o desxifrar
-z N nivell de compressió N (0 no comprimeix)
--textmode usa el mode de text canònic
-o, --output fitxer d'eixida
-v, --verbose detall
-n, --dry-run no fa cap canvi
-i, --interactive pregunta abans de sobreescriure
--openpgp use strict OpenPGP behavior
--pgp2 generate PGP 2.x compatible messages
(En la pàgina del man hi ha una llista completa d'ordres i d'opcions)
Exemples:
-se -r Bob [fitxer] signa i xifra per a l'usuari Bob
--clearsign [fitxer] crea una signatura en text clar
--detach-sign [fitxer] crea una signatura separada
--list-keys [noms] mostra claus
--fingerprint [noms] mostra empremtes digitals
Si us plau, informeu sobre els errors a <gnupg-bugs@gnu.org>.
Tanmateix, amb --help no s'obtenen totes les opcions. Per a obtenir un llistat de totes les opcions de gpg, cal consultar el manual: a un terminal fem
man pgp.
Generar claus
El primer de tot: Genero les claus amb gpg --gen-key. Fixem-nos com ens permet seleccionar el tipus de clau, el temps de validesa (he triat 1 any), un ID que es construeix amb el nom i cognoms, adreça electrònica i un comentari, i ens demana també un password per xifrar la clau privada. Aquesta password ens la demanarà sempre que ens calgui la clau privada. El password NO és la clau privada. Però ens caldrà el password per a poder-la utilitzar. Trobem novament una clau simètrica per protegir, en aquest cas, la clau privada; però aquí no hem d'intercanviar la password amb ningú. Al contrari. El que cal és que ningú més que nosaltres conegui aquest password.
albert@athena:~$ gpg --gen-key
gpg (GnuPG) 1.4.11; Copyright (C) 2010 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
gpg: directory `/home/albert/.gnupg' created
gpg: s'ha creat el nou fitxer d'opcions «/home/albert/.gnupg/gpg.conf»
gpg: AVÍS: les opcions en «/home/albert/.gnupg/gpg.conf» encara no estan actives durant aquesta execució
gpg: s'ha creat l'anell «/home/albert/.gnupg/secring.gpg»
gpg: s'ha creat l'anell «/home/albert/.gnupg/pubring.gpg»
Seleccioneu quin tipus de clau voleu:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (només signar)
(4) RSA (només signar)
La vostra selecció? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
La grandària sol·licitada és 4096 bits
Especifiqueu el temps de validesa de la clau.
0 = la clau no caduca
<n> = la clau caduca als n dies
<n>w = la clau caduca a les n setmanes
<n>m = la clau caduca als n mesos
<n>y = la clau caduca als n anys
Indiqueu la validesa de la clau (0) 1y
Key expires at dj 21 feb 2013 21:30:51 CET
Is this correct? (y/N) y
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
Nom i cognoms: Albert Baranguer Codina
Adreça electrònica: abaranguer@gmail.com
Comentari: clau personal
Heu triat l'identificador d'usuari:
"Albert Baranguer Codina (clau personal) <abaranguer@gmail.com>"
Canvia (N)om, (C)omentari, (E)mail o (O) d'acord / (X) ix o
Cal una contrasenya per a protegir la clau secreta.
Cal generar molts bits aleatòriament. És bona idea fer alguna altra cosa
(teclejar, moure el ratolí, usar els discos) durant la generació de
nombres primers; açò dóna oportunitat al generador de nombres aleatoris
d'aconseguir prou entropia.
..+++++
......+++++
Cal generar molts bits aleatòriament. És bona idea fer alguna altra cosa
(teclejar, moure el ratolí, usar els discos) durant la generació de
nombres primers; açò dóna oportunitat al generador de nombres aleatoris
d'aconseguir prou entropia.
...................................+++++
..............+++++
gpg: /home/albert/.gnupg/trustdb.gpg: s'ha creat la base de dades de confiança
gpg: key 7FCC9B65 marked as ultimately trusted
s'han creat i signat les claus pública i secreta.
gpg: s'està comprovant la base de dades de confiança
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: la pròxima comprovació de la base de dades de confiança serà el 2013-02-21
pub 4096R/7FCC9B65 2012-02-22 [expires: 2013-02-21]
Key fingerprint = *********** demana'm el fingerprint! ***************
uid Albert Baranguer Codina (clau personal) <abaranguer@gmail.com>
sub 4096R/B092F31D 2012-02-22 [expires: 2013-02-21]
albert@athena:~$
La meva clau pública!
Obtinc la clau pública, és el bloc en negreta:
albert@athena:~$ gpg --armor --output public-key.asc --export abaranguer
albert@athena:~$ cat public-key.asc
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.11 (GNU/Linux)
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
=+LAQ
-----END PGP PUBLIC KEY BLOCK-----
Si algú em vol enviar missatges xifrats amb GnuPG, ja pot fer-ho! ;-)
Fingerprint
Tothom que em vulgui enviar missatges xifrats haurà de tenir la meva clau pública. Ara bé, si l'agafa de la web com pot estar-ne segur que és de veritat la meva clau pública? Haurà de verificar-ne el "fingerprint". L'empremta dactilar. Quan he generat la clau una de les línies m'ha informat del fingerprint de la clau:
pub 4096R/7FCC9B65 2012-02-22 [expires: 2013-02-21]
Key fingerprint = *********** demana'm el fingerprint! ***************
Que he decidit no publicar a la web...
Aleshores, algú que rebi la meva clau pública hauria de posar-se en contacte amb mi d'alguna forma segura per verificar que el fingerprint de la clau que té correspon amb el fingerprint que jo posseeixo. Si coincideixen l'usuari podrà la confiar que ha rebut la meva clau pública.
Suposant que copia la clau pública a un fitxer de text anomenat abaranguer@gmail.com.pub.asc l'usuari haurà d'importar la meva clau pública al seu clauer.
Llistar les claus
... i podria començar per verificar les claus que són al clauer.
albert@apolo:~/Documents$ gpg --list-key
/home/albert/.gnupg/pubring.gpg
-------------------------------
pub 4096R/6E28AAB8 2012-02-26 [expires: 2017-02-24]
uid Albert Baranguer Codina (Clau Personal 2) <albert.baranguer@josoc.cat>
sub 4096R/3B954851 2012-02-26 [expires: 2017-02-24]
albert@apolo:~/Documents$
Només hi té la seva clau. El que ha de fer és...
Importar una clau
Tinc abaranguer@gmail.com.pub.asc a la carpeta Documents i faig:
albert@apolo:~/Documents$ gpg --import abaranguer@gmail.com.pub.asc
gpg: key 7FCC9B65: public key "Albert Baranguer Codina (clau personal) <abaranguer@gmail.com>" imported
gpg: Nombre total processat: 1
gpg: importades: 1 (RSA: 1)
albert@apolo:~/Documents$
Verifico que he importat la clau
albert@apolo:~/Documents$ gpg --list-key
/home/albert/.gnupg/pubring.gpg
-------------------------------
pub 4096R/6E28AAB8 2012-02-26 [expires: 2017-02-24]
uid Albert Baranguer Codina (Clau Personal 2) <albert.baranguer@josoc.cat>
sub 4096R/3B954851 2012-02-26 [expires: 2017-02-24]
pub 4096R/7FCC9B65 2012-02-22 [expires: 2013-02-21]
uid Albert Baranguer Codina (clau personal) <abaranguer@gmail.com>
sub 4096R/B092F31D 2012-02-22 [expires: 2013-02-21]
albert@apolo:~/Documents$
Obtenir el fingerprint
Quin és el fingerprint de la clau que acabo d'importar?
albert@apolo:~/Documents$ gpg --fingerprint
/home/albert/.gnupg/pubring.gpg
-------------------------------
pub 4096R/6E28AAB8 2012-02-26 [expires: 2017-02-24]
Key fingerprint = ************* fingerprint 1 *************
uid Albert Baranguer Codina (Clau Personal 2) <albert.baranguer@josoc.cat>
sub 4096R/3B954851 2012-02-26 [expires: 2017-02-24]
pub 4096R/7FCC9B65 2012-02-22 [expires: 2013-02-21]
Key fingerprint = ******* fingerprint clau importada ******
uid Albert Baranguer Codina (clau personal) <abaranguer@gmail.com>
sub 4096R/B092F31D 2012-02-22 [expires: 2013-02-21]
O bé una de sola
albert@apolo:~/Documents$ gpg --fingerprint abaranguer@gmail.com
pub 4096R/7FCC9B65 2012-02-22 [expires: 2013-02-21]
Key fingerprint = ******* fingerprint clau importada ******
uid Albert Baranguer Codina (clau personal) <abaranguer@gmail.com>
sub 4096R/B092F31D 2012-02-22 [expires: 2013-02-21]
Servidors de claus
Recapitulem: fins ara he creat un parell de claus, una de privada que només conec jo i una de pública que he publicat a la web. Tothom que vulgui enviar-me missatges pot fer servir la clau pública per xifrar-los. Si vol estar-ne segur que la clau pública "és bona", hauria de posar-se en contacte amb mi per a verificar-ne el fingerprint.
Hi ha una altre opció per a fer això: puc publicar la clau a un
servidor de claus. Els servidors de claus emmagatzemen i permeten examinar claus públiques. A més els servidors de claus repliquen la informació entre ells, de forma que quan hom publica la seva clau a un servidor, en pocs dies aquesta clau és disponible a la resta de servidors.
El camí contrari, "despublicar" del keyserver, demana pujar al servidor el certificat de revocació de la clau. El certificat de revocació el podem generar amb el mateix GnuPG. Es recomana generar el certificat just al mateix moment en que hom crea el parell de claus.
Si hagués publicat la clau a un keyserver ara, en comptes de publicar la clau a la web, en tindria prou amb publicar-ne l'ID. L'ID de la clau és aquest número que he obtingut al generar.
pub 4096R/7FCC9B65 2012-02-22 [expires: 2013-02-21]
Aleshores qualsevol usuari podria utilitzar l'ID per cercar la clau i descarregar-se-la dels keyservers.
I un usuari amb qui no ens coneixem de res, perquè se n'hauria de refiar d'aquesta clau descarregada d'un keyserver?
Xarxa de confiança
Per a poder respondre a aquesta pregunta cal explicar primer que quan un usuari rep una clau pública, en verifica el fingerprint i te confiança en el propietari, aleshores pot signar la clau pública rebuda amb la seva pròpia clau privada. Aquesta clau pública té un plus afegit de confiança: un usuari en certifica la seva validesa. Aquesta clau pública signada es podria passar a un altre usuari que, en cas de verificar el fingerprint o, senzillament, perquè confia en l'usuari que ha signat la clau podria, a la seva vegada, signar ell també la clau.
Cada cop que algú signa la nostra clau pública està certificant que la clau és de confiança. Com més signatures té la clau, vol dir que més gent certifica que "és bona". A més, cadascun d'aquest usuaris pot tenir la seva pròpia clau pública amb signatures d'altres usuaris. Aquesta xarxa de signatures de la que participa la nostra clau és la seva
"xarxa de confiança" (web of trust).
Tanmateix, hom podria desconfiar d'algunes de les claus de la xarxa de confiança. En aquest cas GnuPG permet afegir un
indicador de "confiança" (mireu també
aquí) sobre les diferents persones que han signat. Des del "desconegut", passant pel "cap confiança", "hi confio" fins al "confio com si fos jo mateix". En tot cas, aquest indicador és d'us personal i no es posa a la clau.
La resposta, doncs, a la pregunta de perquè un usuari se n'hauria de refiar de la clau descarregada del key server és que no té perquè fer-ho, però pot pensar que una clau pública que estigui signada per uns quants usuaris, o que pertany o toca a la seva xarxa de confiança pot ser, raonablement, de confiança.
Festa de firmes!
Els grups d'usuaris de PGP / GnuPG convoquen de tant en tant les
"Festes de Firmes" (
key signing party). Que es un esdeveniment en que els participants s'intercanvien les seves fingerprint després d'haver verificat mutuament les identitats, per exemple amb el DNI, de forma que, en acabar l'acte, amb els fingerprint de les claus públiques d'altres participants, les descarreguen del keyserver, en verifiquen els fingerprint, les signen i les redifonen. Es tracta d'una forma lúdica d'ampliar la xarxa de confiança (podríem veure-ho com una xarxa social més, en definitiva).
En to cas, podem fer servir GnuPG sense que calgui la xarxa de confiança.
Signar
Un cop explicats aquests conceptes, passem a qüestions més pràctiqes
Com signo un document? Vaig a generar un document de prova (loremipsum.txt) en que hi posaré un paràgraf del Lorem ipsum (el genero amb aquesta web:
http://ca.lipsum.com/)
Per a signar-lo amb la clau privada faig
gpg --sign loremipsum.txt
Observem que gpg ens demana la password de la clau privada. El resultat eś el fitxer xifrat amb extensió loremipsum.txt.gpg.
Si volgués que el fitxer fos ilegible i amb un altre nom faria:
gpg --armor --output signat.txt --sign loremipsum.txt
També podria voler que el text original es pogués llegir "en clar", i que la signatura estigués separada en el mateix fitxer. Aleshores faria
gpg --output signat.2.txt --clearsign loremipsum.txt
Però si el document original amb el missatge no admetés la inclusió de cap signatura, el que es podria fer és posar la signatura en un fitxer signatura.txt apart. A més el vull fer legible. Ho faig així:
gpg --armor --output signatura.txt --detach-sign loremipsum.txt
Depenent del cas, enviaré el document signat, o la signatura i el document en fitxers separats, al seu destinatari. Aquest, un cop rebi el document signat, el verificarà amb la meva clau pública.
Verificar la signatura
El receptor del missatge podria verificar amb
gpg --verify loremipsum.txt.gpg
( o amb signat.txt, o signat.2.txt )
En aquest cas obtindrem un missatge
albert@apolo:~/Documents$ gpg --verify signatura.txt loremipsum.txt
gpg: Signature made dt 28 feb 2012 22:55:35 CET using RSA key ID 7FCC9B65
gpg: Good signature from "Albert Baranguer Codina (Clau Personal) <abaranguer@gmail.com>"
o bé, si venen per separat:
gpg --verify signatura.txt loremipsum.txt
Primer ha d'anar la signatura, i després el document que s'ha signat. En cas de posar-los en l'ordre invers, obtindrem un missatge d'error:
albert@apolo:~/Documents$ gpg --verify loremipsum.txt signatura.txt
gpg: no s'han trobat dades OpenPGP vàlides.
gpg: no s'ha pogut verificar la signatura.
Recordeu que el fitxer de signatura (.sig o .asc)
ha de ser el primer que figure en la línia d'ordres.
Xifrar un missatge
Per a fer la prova, enviaré el loremipsum.txt xifrat a l'usuari unaltrecompte@servidor.com, del qual tinc la clau pública.
Tinc algunes claus públiques més al clauer. Per tant he de triar la del destinatari. Ho faig amb l'opció --recipient i l'ID de la clau.
Vet aquí:
albert@athena:~/Documents$ gpg --armor --output xifrat.txt --recipient 6E28AAB8 --encrypt loremipsum.txt
gpg: 3B954851: There is no assurance this key belongs to the named user
pub 4096R/3B954851 2012-02-26 Albert Baranguer Codina (Clau Personal 2) <unaltrecompte@servidor.com>
Empremta digital de la clau primària: xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx
Empremta digital de la subclau: xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx
It is NOT certain that the key belongs to the person named
in the user ID. If you *really* know what you are doing,
you may answer the next question with yes.
Use this key anyway? (y/N) y
Les claus públiques del meu clauer no les he signat ni tenen cap signatura de ningú de "confiança absoluta", per tant rebo un missatge d'advertència. Podria signar la clau i marcar el destinatari com "de confiança absoluta, com si fos jo mateix", (de fet, ho soc! ;-) de forma que m'estalviaria aquest missatge.
Signar una clau pública
Primer miro les claus del clauer
albert@athena:~$ gpg --list-keys
/home/albert/.gnupg/pubring.gpg
-------------------------------
pub 4096R/7FCC9B65 2012-02-22 [expires: 2013-02-21]
uid Albert Baranguer Codina (clau personal) <abaranguer@gmail.com>
sub 4096R/B092F31D 2012-02-22 [expires: 2013-02-21]
pub 2048R/D826822A 2012-02-23 [expires: 2017-02-21]
uid Serveis TIC i Programari Lliure <stsoftlliure@gmail.com>
sub 2048R/9D8D4AA0 2012-02-23 [expires: 2017-02-21]
pub 4096R/6E28AAB8 2012-02-26 [expires: 2017-02-24]
uid Albert Baranguer Codina (Clau Personal 2) <unaltrecompte@servidor.com>
sub 4096R/3B954851 2012-02-26 [expires: 2017-02-24]
I em fixo en els seus ID. Abans de signar-les hauria de comprovar-ne els fingerprint per estar-ne segur de la seva autenticitat. En aquest cas ho considero fet. Totes són claus de prova.
Per tant, puc passar a signar la clau corresponent
albert@athena:~$ gpg --sign-key 6E28AAB8
pub 4096R/6E28AAB8 created: 2012-02-26 expires: 2017-02-24 usage: SC
trust: desconeguda validity: desconeguda
sub 4096R/3B954851 created: 2012-02-26 expires: 2017-02-24 usage: E
[ unknown] (1). Albert Baranguer Codina (Clau Personal 2) <unaltrecompte@servidor.com>
pub 4096R/6E28AAB8 created: 2012-02-26 expires: 2017-02-24 usage: SC
trust: desconeguda validity: desconeguda
Empremta digital de la clau primària: C6EC 5EAF 31BE C8D9 6644 200F 1849 3E7D 6E28 AAB8
Albert Baranguer Codina (Clau Personal 2) <unaltrecompte@servidor.com>
Aquesta clau caducarà el 2017-02-24.
Are you sure that you want to sign this key with your
key "Albert Baranguer Codina (clau personal) <abaranguer@gmail.com>" (7FCC9B65)
Really sign? (y/N) y
Cal una contrasenya per desblocar la clau secreta de
l'usuari: «Albert Baranguer Codina (clau personal) <abaranguer@gmail.com>» "
4096-bit RSA key, ID 7FCC9B65, created 2012-02-22
gpg: gpg-agent no està disponible en aquesta sessió
albert@athena:~$
Veifico que realment ha signat
albert@athena:~$ gpg --list-sigs
gpg: s'està comprovant la base de dades de confiança
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 1 signed: 2 trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1 valid: 2 signed: 0 trust: 2-, 0q, 0n, 0m, 0f, 0u
gpg: la pròxima comprovació de la base de dades de confiança serà el 2013-02-21
/home/albert/.gnupg/pubring.gpg
-------------------------------
pub 4096R/7FCC9B65 2012-02-22 [expires: 2013-02-21]
uid Albert Baranguer Codina (clau personal) <abaranguer@gmail.com>
sig 3 7FCC9B65 2012-02-22 Albert Baranguer Codina (clau personal) <abaranguer@gmail.com>
sub 4096R/B092F31D 2012-02-22 [expires: 2013-02-21]
sig 7FCC9B65 2012-02-22 Albert Baranguer Codina (clau personal) <abaranguer@gmail.com>
pub 2048R/D826822A 2012-02-23 [expires: 2017-02-21]
uid Serveis TIC i Programari Lliure <stsoftlliure@gmail.com>
sig 3 D826822A 2012-02-23 Serveis TIC i Programari Lliure <stsoftlliure@gmail.com>
sub 2048R/9D8D4AA0 2012-02-23 [expires: 2017-02-21]
sig D826822A 2012-02-23 Serveis TIC i Programari Lliure <stsoftlliure@gmail.com>
pub 4096R/6E28AAB8 2012-02-26 [expires: 2017-02-24]
uid Albert Baranguer Codina (Clau Personal 2) <unaltrecompte@servidor.com>
sig 3 6E28AAB8 2012-02-26 Albert Baranguer Codina (Clau Personal 2) <unaltrecompte@servidor.com>
sig 7FCC9B65 2012-02-29 Albert Baranguer Codina (clau personal) <abaranguer@gmail.com>
sub 4096R/3B954851 2012-02-26 [expires: 2017-02-24]
sig 6E28AAB8 2012-02-26 Albert Baranguer Codina (Clau Personal 2) <unaltrecompte@servidor.comt>
albert@athena:~$
Aquí podem comprovar que tota signatura públic té, almenys, una signatura, que,es la de la seva parella clau privada. El compte unaltrecompte@servidor.com té, doncs dues signatures, la de la seva parella privada i la que li acabo de posar.
Ara que tinc la clau pública de unaltrecompte@servicor.com signada, repeteixo el xifrat del loreipsum.txt
albert@athena:/media/ADATA UFD/docs$ gpg --armor --output xifrat.2.txt --recipient 6E28AAB8 --encrypt loremipsum.txt
albert@athena:/media/ADATA UFD/docs$
El resultat és que obtinc el fitxer xifrat.2.txt netament, sense cap missatge d'advertència.
Xifrar i signar un missatge
Però, i si el destinatari volgués tenir la certesa que el fitxer l'he enviat jo? Ben mirat, algú em podria haver suplantat i enviar el missatge enlloc meu. El que cal fer, per a eliminar aquest dubte, és signar i xifrar a l'hora el document.
A l'exemple, faig:
albert@athena:/media/ADATA UFD/docs$ gpg --armor --output xifrat.4.txt --recipient 6E28AAB8 --sign --encrypt loremipsum.txt
Cal una contrasenya per desblocar la clau secreta de
l'usuari: «Albert Baranguer Codina (clau personal) <abaranguer@gmail.com>» "
4096-bit RSA key, ID 7FCC9B65, created 2012-02-22
gpg: gpg-agent no està disponible en aquesta sessió
albert@athena:/media/ADATA UFD/docs$
i obtinc el fitxer xifrat i signat xifrat4.txt. Com sempre que cal fer alguna acció amb la clau privada, gpg m'ha demanat la password per a poder fer-la servir.
I què hauria passat si la clau no hagués estat signada?
albert@athena:~/Documents$ gpg --armor --output xifrat.2.txt --recipient 6E28AAB8 --sign --encrypt loremipsum.txt
Cal una contrasenya per desblocar la clau secreta de
l'usuari: «Albert Baranguer Codina (clau personal) <abaranguer@gmail.com>» "
4096-bit RSA key, ID 7FCC9B65, created 2012-02-22
gpg: gpg-agent no està disponible en aquesta sessió
gpg: 3B954851: There is no assurance this key belongs to the named user
pub 4096R/3B954851 2012-02-26 Albert Baranguer Codina (Clau Personal 2) <unaltrecompte@servidor.com>
Empremta digital de la clau primària: xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx
Empremta digital de la subclau: xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx
It is NOT certain that the key belongs to the person named
in the user ID. If you *really* know what you are doing,
you may answer the next question with yes.
Use this key anyway? (y/N) y
albert@athena:~/Documents$
Primer em demana la password de la clau privada. A continuació m'adverteix que la clau pública del destinatari no està signada. El resultat, en tot cas, és el fitxer xifrat.2.txt
Desxifrar
Ara tinc uns quants fitxers xifrats que només podrà dexifrar unaltrecompter@servidor.com.
És el més senzill de tot: dexifrar és l'opció per defecte de gpg, per tant, n'hi ha prou amb fer...
albert@apolo:/media/ADATA UFD/docs$ gpg xifrat.txt
Cal una contrasenya per desblocar la clau secreta de
l'usuari: «Albert Baranguer Codina (Clau Personal 2) <unaltrecompte@servidor.com>» "
4096-bit RSA key, ID 3B954851, created 2012-02-26 (main key ID 6E28AAB8)
gpg: gpg-agent no està disponible en aquesta sessió
gpg: encrypted with 4096-bit RSA key, ID 3B954851, created 2012-02-26
"Albert Baranguer Codina (Clau Personal 2) <unaltrecompte@servidor.com>"
gpg: xifrat.txt: el sufix és desconegut
Introduïu el nou nom del fitxer [loremipsum.txt]: loremipsum.decrypt.txt
albert@apolo:/media/ADATA UFD/docs$
Com que per a dexifrar cal la clau privada, el gpg demana el password corresponent.
En examinar loremipsum.decrypt.txt obtinc, com era d'esperar el paràgraf de Lorem Ipsum original.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque dignissim lobortis auctor. Nunc sem sapien, egestas eu dignissim non, molestie sit amet mi. In diam lacus, fermentum et mollis quis, pellentesque id enim. Nullam pretium, dolor non malesuada viverra, eros odio convallis arcu, eu tincidunt libero purus sit amet purus. Praesent eu aliquet nunc. Sed vitae augue lacus. Duis fermentum purus sed ligula malesuada nec ornare orci posuere. Etiam ac facilisis turpis.
Per acabar
En el post dedicat a gpg he fet un repàs dels principals conceptes que cal conèixer per a utilitzar GnuPG. He esmentat altres eines relacionades, com Enigmail. He distingit entre criptografia de clau simètrica, de clau pública, i híbrida. També he parlat de les xarxes de confiança que es poden implementar els intercanvis de claus públiques de GnuPG. He presentat les accions principals que es poden realitzar amb GnuPG, que són signar, xifrar, verificar i dexifrar.
En cap cas he pretès realitzar una anàlisi exhaustiva de l'eina. Hi han molts i bons manuals fets que acompleixen aquesta missió i n'he citat alguns.
Finalment, el resultat d'aquest post és que penjaré la meva clau pública a la web. Per si algú prefereix entrar en contacte amb Serveis TIC i Programari Lliure de forma privada.