Xifratge simètric i asimètric

De wikijoan
Salta a la navegació Salta a la cerca

Xifratge simètric

$ echo "aquest és el missatge que volem xifrar" > missatge.txt
$ gpg -c missatge.txt (ens demana un password)

S'ha generat el fitxer missatge.txt.gpg

Ara volem esborrar el missatge original. Ho farem amb l'eina srm (secure rm):

$ sudo apt-get install secure-delete
$ srm -v missatge.txt
Using /dev/urandom for random input.
Wipe mode is secure (38 special passes)
Wiping missatge.txt ************************************** Removed file missatge.txt ... Done

Ara desxifrem el missatge, per tal de recuperar el missatge original:

$ gpg -d missatge.txt.gpg > missatge.txt
gpg: dades xifrades amb AES256
gpg: xifrat amb 1 contrasenya

$ cat missatge.txt
aquest és el missatge que volem xifrar

Nota: si al descrifrar no te pide la clave, no te preocupes, es porque la está “recordando” por un período de tiempo; si reinicias la PC esto cambiará. Es como cuando usas sudo y se guardan los privilegios por unos minutos.

Xifratge asimètric

El que farem:

  • Generar un parell de claus públiques i privades
  • Exportar la clau pública per tal de què altres persones puguin xifrar arxius amb la nostra clau, i només nosaltres els puguem desxifrar
  • Importar la clau pública d'una altra persona i xifrar dades amb aquesta clau pública.
  • Desencriptar un arxiu amb la nostra clau privada.

Generar clau pública i privada

$ gpg --full-generate-key
gpg (GnuPG) 2.2.19; Copyright (C) 2019 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.

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)
  (14) Existing key from card
La vostra selecció? 

Escollim l'opció 1 (clau pública i privada). També escollim clau de 4096 bytes, i que la clau mai caduca. Ens demana introduir un password.

...
gpg: key 1570CB5745D5619E marked as ultimately trusted
gpg: directory '/home/joan/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/joan/.gnupg/openpgp-revocs.d/5C81A0CF5E19744FF8A364AD1570CB5745D5619E.rev'
s'han creat i signat les claus pública i secreta.

pub   rsa4096 2021-10-26 [SC]
      5C81A0CF5E19744FF8A364AD1570CB5745D5619E
uid                      Joan Quintana (clau) <joanqc@gmail.com>
sub   rsa4096 2021-10-26 [E]

Exportar la clau pública

Ara hem d'exportar la clau pública:

$ gpg -a --export joanqc@gmail.com > clau_publica.gpg.asc
$ cat clau_publica.gpg.asc

-----BEGIN PGP PUBLIC KEY BLOCK-----

mQINBGF33GEBEADH8m6Zfw537XCGg3c19xneaxlbNPMLFO3mtc/hlE7htjPOif9/
8hN9GaJPjEc1n3cFflCzu/l5w8LrHWxWS28iFmE2+wP2VXgh+4o3pFK5xJU8VljQ
...
2IY/oPFHCFMZTskabyeSJYZRoHJt+OtnJMwHi6zVG1pRk0YOKz/WCpnRpywsia3G
mjdrHSK2MFLKotva+AdadZuP3auLZw/y8gx6a8z+NAzJvE5F/GQUP3z3jPCRPGv+
JWxe
=4fDz
-----END PGP PUBLIC KEY BLOCK-----

Importar la clau pública d'un altre usuari

Si otro usuario nos envía su clave pública (o si queremos mostrarle a alguien cómo se importa nuestra clave que acabamos de exportar) la manera de importarla es fácil.

Tenim la clau: clau_publica_parzybyte.gpg.asc

gpg --import clau_publica_parzybyte.gpg.asc
gpg: clau FA1321BF19520E34: clau pública "Luis Cabrera Benito (Hola mundo) <contacto@parzibyte.me>" importada
gpg: Nombre total processat: 1
gpg:               importades: 1

Xifrar arxiu de manera asímètrica

Ja tenim una clau pública, i podem xifrar un document:

$ gpg -a -r joanqc@gmail.com --encrypt todo.txt
gpg: s'està comprovant la base de dades de confiança
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u

s'ha generat el fitxer todo.txt.asc.

Això no té massa sentit. La idea és que sigui un altre usuari que xifri un fitxer amb la nostra clau pública. O bé som nosaltres que xifrem un fitxer amb la clau pública de l'altre usuari:

$ gpg -a -r contacto@parzibyte.me --encrypt suma.c
gpg: F40A010E89538516: There is no assurance this key belongs to the named user

sub  rsa4096/F40A010E89538516 2019-06-05 Luis Cabrera Benito (Hola mundo) <contacto@parzibyte.me>
 Empremta digital de la clau primària: B127 E30E B5CE 7820 5DBD  126E FA13 21BF 1952 0E34
      Empremta digital de la subclau: B656 D884 0F77 2441 0DA2  4D30 F40A 010E 8953 8516

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

i s'ha generat el fitxer suma.c.asc.

Aquests dos arxius encriptats que hem generat només els podrà desencriptar la persona que tingui la clau privada.

Desxifrar els arxius

Nosaltres només podrem desxifrar els arxius que s'han generat amb la nostra clau pública. Ja sigui que els hem xifrat nosaltres mateixos, o bé algú altre els ha xifrat amb la nostra clau pública.

Desxifrem l'arxiu que hem xifrat abans amb la nostra clau pública:

$ gpg -a --decrypt todo.txt.asc > todo_desencriptat.txt

gpg: xifrat amb 4096-bit de la clau RSA , ID A1AB2D8998C436EE, creada el 2021-10-26
      "Joan Quintana (clau) <joanqc@gmail.com>

Ens ha demanat el password. Efectivament:

$ cat todo_desencriptat.txt
...

creat per Joan Quintana Compte, octubre 2021