La criptografia te com objectiu la integritat, la confidencialitat i el no repudi de les dades.
Introducció
La criptografia és un tema molt estens, però tens sort ja que només cal entendre algunes parts concretes de la criptografia per poder fer-la servir.
La criptografia en general té tres objectius:
- Integritat. Demostrar que el missatge no ha estat modificat, ni accidentalment ni deliberadament.
- Confidencialitat. Fer que el missatge sigui il·legible per a ningú, excepte el destinatari previst.
- No repudi. Poder demostrar que el missatge prové del remitent declarat.
Les diferents eines de criptografia admeten diferents aspectes d’aquests objectius.
Funcions hash
Una funció hash és com una caixa negra que pren una sola entrada i dóna una única sortida.
Una funció hash pren una entrada de longitud arbitrària (un fitxer, un missatge, un vídeo, etc.) i produeix una sortida de longitud fixa (per exemple, 256 bits per a SHA-256).
Una funció hash pren com a entrada qualsevol seqüència de bytes que vulguis i produeix una seqüènica única de pocs bytes com a resultat.
Per exemple la funció SHA-256 sempre torna 32 bytes com a resultat, dona igual que la seqüència d’entrada sigui de 1000 bytes com de 2 Terabytes.
La seqüència de bytes por ser qualsevol cosa, un fitxer de video, audio, etc. perquè a la fi tots son bytes.
I el que és més important, donada la mateixa entrada, la funció hash sempre produeix la mateixa seqüència de bytes.
A un fitxer li pots canviar el nom, però sempre tindrà el mateix hash a no ser que el modifiquis.
Per això el hash pot identificar de manera unívoca un fitxer i el nom del fitxer no
Per qué serveix una funció hash?
Ves a la pàgina web Ubuntu 22.04 LTS (Jammy Jellyfish) daily.
Desde la pàgina web em puc descarregar una ova, i com que és de la pàgina oficial d’Ubuntu puc suposar que no està manipulada.
...[============================================================>]
De totes maneres, i encara que gairebé ningú ho fa, en aquesta pàgina a més de baixar-te una ISO d’Ubuntu et pots baixar el hash de la ISO per confirmar que la còpia que et baixaràs d’un dels llocs de distribució d’Ubuntu no està manipulada:
Si mires el contingut del fitxer SHA256SUMS pots veure que té un hash de la iso.
|
El hash és de 32 bytes encara que l’ova sigui de 620MB!
openssl és una aplicació que està instal.lada a tots els Linux, que entre altres coses em permet computar resums.
Per confirmar que tinc una còpia autèntica vaig a computar el hash de l’ova amb l’algorisme SHA-256:
SHA2-256(jammy-server-cloudimg-amd64.ova)=
|
Els resums coincideixen!
Encara que canviï el nom del fitxer, el hash del fitxer continua sent el mateix:
SHA2-256(ubuntu-jammy.ova)=
|
De moment només farem servir -sha256 encara que hi ha altres funcions hash implementades:
Propietats de la funció hash
Treballar amb ovas, isos, videos, audios, etc. està bé, excepte que són molt grans i requereixen bastant ample de banda.
Per aquest motiu baixarem el llibre Moby Dick; Or, The Whale i computar el hash del llibre:
SHA2-256(moby-dick.txt)= Per què serveix aquest hash que hem computat?
Ens proporciona integritat i autenticitat.
Si algú baixa la La Ilíada amb el nom de moby-dick.txt, jo puc saber que han canviat el llibre sense necessitat d’obrir-lo si si quin és el hash de “Moby Dick”:
SHA2-256(moby-dick.txt)= Pots veure que el hash c333.. no coincideix amb el hash 15e0.. de l’autèntic moby-dick.txt.
Recupero el llibre original i problema soluctionat …
a no ser que algú modifiqui la meva còpia sense que jo ho sapiga.
Si guardo el tamany del fitxer puc saber que ha estat manipulat si aquesta canvia …
Estás segur?
El tamany del fitxer és el mateix, però ara on deia Moby diu Toby !
|
|
Algún TOBY s’ha escapat, en concret 3.
Queda clar que l’identificador del llibre ‘Moby Dick’ és 61d5ab6a3910fab66eabc9d2fc708b68b756199cb754fd5ff51751dbe5f766cd.
Inclús en el Windows és el mateix:
Hem utilitzat la funció hash SHA-256 per transformar l’entrada (el fitxer descarregat) en un identificador únic.
Resistència a la segona preimatge
Un hash pot garantir la integritat i l’autenticitat d’un fitxer si es gairebé imposible manipular un altre fitxer perquè computi el mateix hash, i així poder suplantar el fitxer original.
Les funcion hash segures tenen una propietat anomenada resistència a la segona preimatge.
Això vol dir que a partir del hash 362f76079b45e8d8b6c3380f0cec2dae4a12385bf06f200082b74f00fee2ed44 és gairebé impossible trobar o manipular un fitxer que computi el hash 362f76079b45e8d8b6c3380f0cec2dae4a12385bf06f200082b74f00fee2ed44.
El hash sempre té la mateixa mida
Si apliquem la funció hash a la mateixa entrada sempre obtenim el mateix resum.
En el nostre exemple, SHA-256 sempre proporciona una sortida de 256 bits (32 bytes), que es codifiquen com 64 caràcters alfanumèrics en hexadecimal.
|
SHA2-256(stdin)=
|
SHA2-256(stdin)=
|
SHA2-256(stdin)=
|
SHA2-256(stdin)= Si vols ho podem provar 50 vegades si encara no estas convençut:
; do | ; done
SHA2-256(stdin)=
SHA2-256(stdin)=
SHA2-256(stdin)=
Notació hexadecimal
Per representar el resum o hash, openssl fa servir notació hexadecimal.
Si contes la quantitat de caràcters que té la seqüència
362f76079b45e8d8b6c3380f0cec2dae4a12385bf06f200082b74f00fee2ed44 pots verificar que la longitut és de 64
caràcters.
Cada caràcter representa 4 bits, per tant la seqüencia és de (64 *4 ) = 256 bits (o 32 bytes). (256bits/8=32
bytes)
8 bits = 1 byte 🙄
Per aixó l’algoritme s’anomena SHA-256.
Un petit canvi a l’entrada canvia completament la sortida:
|
SHA2-256(stdin)=
|
SHA2-256(stdin)=
|
SHA2-256(stdin)=
|
SHA2-256(stdin)= La sortida de SHA-256 és sempre de la mateixa mida, independentment de la mida de l’entrada …
|
SHA2-256(stdin)=
|
SHA2-256(stdin)=
|
SHA2-256(stdin)=
|
SHA2-256(stdin)= Funció unidireccional
Una de les propietats principals d’una funció hash és que no es pot revertir l’algorisme.
A partir d’un hash és impossible recuperar l’arxiu original.
Si esborres un video sense voler, però tens els seu hash f76f035ceef4e6f816ab4adf5f859a28f9fb248602af36aebf820661a172f3d0, ¿creus que podries recuperar aquest video a partir d’aquests 32 bytes 🤔 ?
És impossible 😲!
Creus que podries escriure Don Quijote a partir d’aquesta frase:
“En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha mucho tiempo que vivía un hidalgo de los de lanza en astillero, adarga antigua, rocín flaco y galgo corredor.”
Funcions hash estandaritzades
Fins ara només hem utilitzat la funció SHA-256, que és una de les més utilitzades, però n’hi ha moltes altres.
Una funció hash dedica molt de temps a moure bits amunt i avall, barrejar-los, etc. tal com pots veure en aquest recurs web: https://sha256algorithm.com.
Precisament una de les característiques principals d’un bon algorisme hash és que sigui el més ràpid possible com veurem a continuació.
Funcions de detecció d’errors
No totes les funcions hash són criptogràfiques.
Per exemple, funcions com CRC32, són funcions de codi de detecció d’errors.
gzip fa servir crc32 en els últims 8 bytes per detectar si hi ha hagut un error en la compressió:
| | |
Aquestes funcions, tot i que detecten de manera útil alguns errors senzills, no proporcionen cap de les propietats de seguretat esmentades anteriorment i no s’han de confondre amb les funcions hash de les quals estem parlant (tot i que de vegades poden compartir el nom).
La seva sortida s’anomena normalment cheksum.
També pots instal·lar l’eina crc32:
Funcions hash criptogràfiques insegures
En la dècada de 1990 les funcions MD5 i SHA-1 eren les més utilitzades, però avui en dia es consideren que ja no són segures.
El 2004 es va demostrar que MD5 no era segur quan es van publicar col·lisions per diferents equips de recerca.
El 2016 va passar el mateix amb SHA1.
Aquests atacs van tenir èxit en part a causa dels avenços en la informàtica, però sobretot perquè es van trobar defectes en la manera com es van dissenyar les funcions hash.
Una col.lisió es produeix quan dos fitxers diferents tenen el mateix hash, i normalment no passa de manera accidental.
Ves a https://gitlab.com/xtec/security/-/tree/main/crypto i observa com les imatges de allan.jpg i james.jpg són diferents.
Descarrega les imatges allan.jpg i james.png i verifica que tenen el mateix hash md5:
MD5(allan.jpg)=
MD5(james.jpg)= En canvi amb sha-256 no hi ha col.lisió:
SHA2-256(allan.jpg)=
SHA2-256(james.jpg)= Tenen el mateix hash perquè la imatge de James ha estat manipulada (s’han retocat alguns bits) perquè doni el mateix hash md5 que la imatge d’Allan.
Hi ha una col.lisió: el hash de md5 no identifica de manera unívoca una sól fitxer.
Recordes que el primer que hem fet en aquesta activitat era baixar una ova i verificar amb el hash que no havia estat manipulada?
Quan instal.les software amb apt penses que no verifica de forma automàtica amb un hash el que està instal.lant?
I per quin motiu seguim parlant d’aquestes funcions 😒?
Entre altres motius perquè encara es fan servir i les pots trobar perquè són resistents a la preimatge (encara que no a la col.lisió).
SHA-2
És la funció hash més utilitzada i és la que hem estat fent servir fins ara.
Va ser desenvolupada per la NSA i estandarditzada pel NIST l’any 2001.
SHA-2 ofereix 4 versions diferents en funció del tamnay de la sortida: 224, 256, 384 o 512 bits.
El seus noms són: SHA-224, SHA-256, SHA-384 i SHA-512.
Normalment es fa servir el SHA-256 que proporciona els 128 bits de seguretat mínims necessaris avui en dia.
Encara que les aplicacions més paranoiaques fan servir SHA-512.
Pots veure a continuació com per la mateixa entrada produeixen un hash de tamany diferent (el que li pertoca):
|
SHA2-224(stdin)=
|
SHA2-256(stdin)=
|
SHA2-384(stdin)=
|
SHA2-512(stdin)= Com hem explicat abans, una funció hash consumeix molt de temps.
La funció SHA-512 és més ràpida que la SHA-256:
SHA2-256(ubuntu-jammy.ova)=
SHA2-512(ubuntu-jammy.ova)=
Això passa perqè fem servir un processador de 64 bits.
Ara són molt habituals les CPUs de 64 bits, però a l’any 2001 la majoria de CPUs eren de 32 bits.
SHA-3
Un hash secret et permet fer un hash ràpidament d’un text sense exposar el text, el hash generat i l’algorisme utilitzat.
SHA-2 no es adequat per hash secrets degut a un problema de la construcció Merkle-Damgård, que fa que SHA-2 sigui vulnerable a un atac (anomenat atac d’extensió de longitud) si s’utilitza per hash secrets.
Aquí tens un video amb un exemple:
L’any 2007 el NIST va promoure un nou estàndard, i l’any 2015 l’algorisme SHA-3 es va estandarditzar a la Publicació FIPS 202.
SHA-3 és tant segur com SHA-2 i no és vulnerable als atacs d’extensió de longitud.
Per tant és pot utilitzar per hash secrets.
Ofereix les mateixes variants que SHA-2, però hem d’indicar que es tracta de SHA-3:
|
SHA3-224(stdin)=
|
SHA3-256(stdin)=
|
SHA3-384(stdin)=
|
SHA3-512(stdin)= Però només es fa servir en casos molts concrets perquè és molt més lent que SHA-2:
SHA2-512(ubuntu-jammy.ova)=
SHA3-512(ubuntu-jammy.ova)=
Funcions hash no estandaritzades
El 2013, després de les revelacions d’Edward Snowden, es va descobrir que la NSA havia impulsat deliberadament i amb èxit la inclusió d’algoritmes de “backdoor” (porta del darrere) als estàndards (vegeu “Dual EC: A Standardized Back Door” de Bernstein et al.)
Aquests portes del darrere es poden considerar contrasenyes màgiques que permeten al govern (i només a ell, suposadament) subvertir el vostre xifratge.
Arran d’això, la comunitat criptogràfica va perdre molta confiança en els estàndards i els suggeriments procedents dels organismes governamentals.
Blake 2
BLAKE2 és una funció hash criptogràfica més ràpida que MD5, SHA-1, SHA-2 i SHA-3, i almenys tan segura com SHA-3.
BLAKE2 ha sigut adoptat per molts projectes per la seva alta velocitat, seguretat i senzillesa tal com pots veure en aquest enllaç: Blake2 - Users
Important! BLAKE2 es l’estandard de “facto”, però en àmbits públic com administracions públiques potser has de fer servir els estàndards oficials per obligació legal.
BLAKE2S-256(ubuntu-jammy.ova)=
BLAKE2B-512(ubuntu-jammy.ova)= A continuació anem a verificar la velocitat de cada funcio hash:
MD5(ubuntu-jammy.ova)=
SHA1(ubuntu-jammy.ova)=
SHA2-512(ubuntu-jammy.ova)=
SHA3-512(ubuntu-jammy.ova)=
BLAKE2B-512(ubuntu-jammy.ova)=
SHA3-512 és la funció hash més lenta, i BLAKE2B-512 és la segona més ràpida i tan segura com SHA3-512.
Ja pots intuïr perquè blake2 es la funció hash criptogràfica preferida si pots escollir.
Propietats d’una funció hash segura
Aquestes són les propietats que ha de tenir una funció hash perquè sigui criptogràficament segura.
Farem servir aquest dades d’exemple:
|
BLAKE2B-512(stdin)= Recorda! És un exemple i el text d’entrada és molt petit.
Resistència prèvia a la imatge
Per genera el digest fem servir una funció hash aplicada a l’input:
Però si només tens el digest no pots reconstruir l’input que es va fer servir per genera el digest.
Per exemple, encara que et mostri el hash tardarás uns quants dies en poder saber que estava escrit en el que havia on estan els ?:
|
BLAKE2B-512(stdin)= Resistència prèvia a la segona imatge
Encara que tinguis linput i el digest :
No podrás trobar un altre input que generi el mateix digest:
No et serveix de res tenir la seqüència original per produïr una altra seqüència que tingui el mateix hash:
|
BLAKE2B-512(stdin)=
|
BLAKE2B-512(stdin)= Resistència a la col·lisió
Ningú poc crear expressament una seqüència de bytes que produeixi el mateix hash que una altra seqüència de bytes.
Això no pot passar:
Ja vam veure que això no és cert en MD5, per això des de fa anys ja no és una funció hash segura.
Xifratge simètric
El xifratge “simètric” és el xifratge tradicional que existeix desde fa més de 4000 anys.

Precisament, l’origen de la paraula criptografia el trobem en el grec antic: krypto, «ocult», i graphos, «escriure»; es a dir, escriptura oculta.
Funcionament
Un algorisme de xifratge (també anomenat xifrat) transforma una seqüència de bytes en quelcom que sembla aleatori.
L’algorisme de xifratge necessita:
- Una clau secreta (key) que es farà servir per xifrar el text
- Un text en clar (plaintext) que es que vos xifrar.
Aquest procés de xifratge produeix text xifrat (chipertext)
El text xifrat sembla aleatori per a qualsevol persona que no coneix la clau secreta i no revela cap informació sobre el text original.
Pots utilitzar un algorisme de desxifrat per revertir el text xifrat al text pla original.
L’algorisme necessita:
- La mateixa clau secreta (key) que es va fer servir per crear el text xifrat.
- El text xifrat (chipertext) amb la clau secreta.
El resultat és el text pla original (plaintext).
AES
Un dels algorismes més utilitzats per xifrar és l’AES (estàndard de xifratge avançat).
Va ser publicat com estàndar pel NIST l’any 2001.
AES ofereix tres versions diferents:
- AES-128 pren una clau de 128 bits (16 bytes)
- AES-192 pren una clau de 192 bits (24 bytes)
- AES-256 pren una clau de 256 bits (32 bytes).
La longitud de la clau determina el nivell de seguretat: com més gran, més fort.
No obstant això, la majoria de les aplicacions fan servir AES-128 ja que proporciona prou seguretat (128 bits de seguretat).
Xifra el text
Podem xifrar un text amb openssl tal com es mostra a continuació:
|
U2FsdGVkX19oc9l8D8va99zJEsT5kQTUWK8UEhVdDak=
|
L’opció -base64 indica a openssl que el resultat del xifratge es mostri en Base64.
D’aquesta manera tenim una seqüència de caràcters ASCII que es poden imprimir a la pantalla. Si no fem servir aquesta opció el resultat és una seqüència de bytes que no es poden mostrar per pantalla:
|
&L’opció -pbkdf2 es per utilitzar un mètode de derivació de clau concret.
Si no t’en recordes openssl ja t’avisa!
U2FsdGVkX19IC6/ldMNq1yA3i5BUS96Y2FecqTfIxjk=
|
U2FsdGVkX1/vdI65EMgqCGZVQcrSgzXFJt2sTIVdTBs=A més de l’avís pots veure que el hash comença igual però acaba diferent.
Xifrar un fitxer
Normalment el que volem es xifrar un fitxer.
Crear un fitxer data.txt i encripta el fitxer:
Per desencriptar el fitxer has de fer servir la mateixa clau:
Ús d’un fitxer de claus
Les persones fem servir claus de xifratge curtes i fàcils de recordar.
Si volem xifrar una seqüència de bytes de manera segura és millor fer servir una bona clau de xifratge per si el “ciphertext” es interceptat d’alguna manera.
La forma de fer-ho és generar un fitxer que té la clau de xifratge i guardar aquest fitxer de manera segura.
/iv�1'-=�-�"wi��<��sg��9-�:
;
Per desxifrar el text el procés és el mateix:
ChaCha20
AES és l’estàndard oficial, però ChaCha20 és més ràpid.
ChaCha és una família d’algorismes de xifrats creat per Daniel J. Bernstein per ser ràpid quan s’utilitza en programari, al contrari de l’AES, que és lent quan el suport de maquinari no està disponible.
Avui en dia, és àmpliament adoptat per protocols d’Internet com Transport Layer Security i Wireguard.
L’únic que canvia a efecte pràctic es que enlloc de -aes-256-cbc hem de posar -chacha20:
Velocitat
Anem a veure quin dels dos és més ràpid!
Xifratge asimètric
El xifratge asimètric es va inventar a finals de 1970 (RSA) i ha permés que les comunicacions per Internet siguin xifrades.
Factorització d’enters 🐣 🐤 🐥 🦅
-
El xifratge simètrica (la clàssica) utilitza una única clau per xifrar i desxifrar.
-
El xifratge asimètric:
-
Utilitza dues claus: una per xifrar i l’altre per desxifrar.
-
Una és pública (la puc compartir amb qui vulgui) i l’altre és privada (la guardo per mi).
I la pública és per xifrar o desxifrar 😐?
Per les dos coses 😳.
A la “Uni” és un rotllo matemàtic de bastantes hores de classe que es diu Factorització d’enters.
Per tant, presta un moment d’atenció!
Claus
Primer haig de generar la clau privada:
NqJthDb9w5BZAQbw0+DK+BQ=
Aquesta clau és la privada perquè ha de ser secreta, no la puc compartir.
Per quin motiu ha de ser secreta?
Perquè la segona clau, la “publica” la genero a partir d’aquesta clau!
Puc generar la clau privada a partir de la pública?
<p className="fs-5">La clau privada genera la clau pública, però la clau pública no pot generar la privada.</p>
🌈Xifrar dades
Si la Laura em vol enviar un missatge secret pot utilitzar la meva clau pública que tinc accessible a tothom.
Important! Recorda de borrar el fitxer message.txt.enc si existeix perquè openssl per precaució no sobreesciurà el fitxer.
Només qui té la clau privada, se suposa que només jo 🙄, pot desencriptar aquest missatge:
Una de les coses sorprenents del xifratge asimètric és que cada cop que xifro el mateix missatge el missatge xifrat és diferent:
BLAKE2S-256(message.txt.enc)=
BLAKE2S-256(message.txt.enc)=
BLAKE2S-256(message.txt.enc)=
Això és molt important perquè puc escriure el mateix missatge encriptat tantes vegades com vulgui i ningú pot saber que és el mateix missatge.
Missatges petits
La criptografía asimètrica (o de clau pública) és molt poc eficient en temps de computació.
Necessita milers de vegades més potència de càlcul per xifrar, desxifrar i validar que els algorismes simètrics.
I openssl es nega a fer-ho si l’arxiu és una mica gran:
openssl diu que no! Motiu: data too large for key size.
El problema és que una clau RSA pot ser de de 1024, 2048 o 4096 bits (per defecte és de 2048 bits).
I té uns limits molt petits respecte el tamany del missatge que pot encriptar: (TODO simplificar)
-
Una clau RSA de 1024-bit fent servir padding OAEP pot encriptar com a màxim (1024/8) – 42 = 128 – 42 = 86 bytes.
-
Una clau RSA de 2048-bit pot encriptar com a màxim (2048/8) – 42 = 256 – 42 = 214 bytes.
Per això la criptografia pública només es pot fer servir per encriptar:
- Hash
- Claus simètriques
- Missatges molt curts
Compartir una clau secreta
Si per exemple la Laura em vol enviar “Moby Dick” encriptat el que ha de fer és:
- Crear una clau simètrica temporal (AES o ChaCha20)
- Encriptar ‘Moby Dick’ amb la clau simètrica temporal
- Publicar ‘Moby Dick’ encriptat.
Pots veure que tothom que tingui l’enllaç pot tenir el fitxer encriptat, però no pots saber que hi ha en aquest fitxer.

El problema es que per desencriptar necessito la clau moby.key 😆!
Ara el problema és com la Laura em pot enviar la clau moby.key de manera segura.
Com que la clau és petita la Laura pot utilitzar la criptografia asimètrica:
- Encripta
moby.keyamb la meva clau pública - Publica la clau simètrica encriptada
Borra tots els fitxers “moby”:
⊞ Windows
Obre una sessió de Powershell en un Windos o inicia sessió en una altre màquina (per exemple, a Isard).
El que haig de fer a continuació per recuperar “Moby Dick” és:
- Baixar els dos fitxers
- Desencriptar
moby.key.encamb la clau privadaprivate.pemque has creat - Desencriptar el fitxer
moby-dick.text.encamb la clau simètricamoby.key.
# (1) Baixo els dos fitxers
# (2) Desencripto la clau simètrica (AES)
# (3) Desencripto el llibre amb la clau simètrica (AES)
# (4) Ja tinc accés al llibre
|
; Resum
🦄
Pots veure que per enviar qualsevol fitxer encriptat a alguna persona només necessito que ell em doni una clau pública RSA.
Puc enviar el que vulgui a aquella persona que només ell podrà desencriptar el fitxer encara que tothom pugui tenir una còpia del fitxer encriptat.
A l’activitat GPG veurem com l’eina gpg ens permet fer tot això i molt més de manera molt
senzilla (si saps el que estàs fent, per això fem aquesta activitat).
Signatura
En l’activitat anterior la Laura m’ha enviat un missatge i un llibre.
Però com puc estar segur que me l’ha enviat la Laura?
La criptografia asimètrica de clau pública també s’ocupa de solucionar el problema de l’autenticitat.
Primer fem que la Laura generi les seves claus:
Si la laura em vol enviar un missatge que només jo pugui llegir i que jo pugui confirmar que l’ha escrit la Laura:
-
La Laura ha de generar un hash del missatge i encriptar el hash del missatge amb la seva clau privada (això es coneix com firmar un missatge).
-
Ha de tonar a encriptar el missatge amb la meva clau pública.
El primer que ha de fer és firmar el missatge:
8+rkAO477QT/OHh4YnX4bg==El contingut del missatge és el hash SHA256 del fitxer message.txt codificat amb la clau privada laura_private.pem:
SHA2-256(message.txt)= Puc verificar que la Laura ha firmat el missatge perquè la clau pública de la Laura, i només la Laura, pot decodificar el contingut del fitxer message.txt.signed i que el resultat sigui el hash de message.txt:
Si per exemple provo amb la meva clau pública dona error:
Que és una signatura?
🦄
És un hash d’un fitxer encriptat amb la clau privada d’alguna persona.
Com que només la clau publica d’aquesta persona pot “desencriptar” el hash, sabem que aquella signatura pertany a aquella persona.
Altre cosa és qui té accés a aquella clau privada … no està ben guardada, la tenim vàries persones, etc.
Però això ja no són coses d’informàtica.
🙄
Windows
Fes el mateix amb el Windows.
Consulta tot el que vulguis a Internet, excepte les solucions que tens en aquest document.
Baixa els dos fitxers:
Show solution
Si intento obrir el fitxer moby-dick.txt.enc …

Necessito la clau simètrica per desencriptar el fitxer.
Però el fitxer moby.key.enc també està encriptat.
Necessito la clau privada que ha encriptat moby.key.enc i només qui tingui aquesta clau podrà accedir.
Doncs ja pots passar la clau private.pem del Linux al Windows, i no preguntis al professor com fer-ho que ja t’has de poder espabilar per tu mateix.
Show solution
()
;
TODO RSA Encrypt Text In PowerShell
Python
Per treballar amb Python farem servir la llibreia pycryptdome.
Instal·la la llibreria amb pip:
RSA
Primer generem les claus RSA (1024 bits) i les imprimim a la consola (com a números hexadecimals i en el format PKCS#8 PEM ASN.1).
Crea un nou fitxer crypto.py:
=
=
=
=
Executa el codi:
Pots veure que el tamany de la clau és bastant llarg encara que sigui de 1024 bits.
Peró en un ús real tindries que utilitzar una clau RSA de 3072 o 4096 bits.
Factorització d’enters
Però el més important és que pots veure el contingut real de les claus:
- La clau pública es composa de 2 números:
nie. - La clau privada es composa de 2 números:
nid.
Quan fem les activitats SSH, Transport Layer Security, etc. veurás molts cops les claus en format ASCII.
Però ara pots veure que es tracta de números, no de lletres, i que la criptografia asimètrica es basa en fer servir números molts grans que són especials per fer uns càlculs senzills mijantçant Factorització d’enters.
Per conduïr un cotxe no cal ser un enginyer, només tenir uns conceptes bàsics de com funciona un cotxe.
Per cert, el número que s’ha de mantenir secret és el d 🤐.
A continuació, xifra el missatge mitjançant l’esquema de xifratge RSA-OAEP (RSA amb padding PKCS#1 OAEP) amb la clau pública RSA:
=
=
= b
=
=
Executa l’script crypto.py:
A continuació desxifra el missatge fent servir RSA-OAEP amb la clau privada RSA:
=
=
= b
=
=
=
=
Pots veure que el missatge es desxifra sense problemes:
$
: b
: bPer saber més
[TODO] Article s’ha d’adaptar (versió 0.03 pycoin problema import) https://cryptobook.nakov.com/digital-signatures/ecdsa-sign-verify-examples
Activitats
1.- Has aconseguit obtenir una clau que et permet desxifrar un missatge molt secret que utilitza ChaCha20, però et falta l’últim digit: very-secret-
El missatge és U2FsdGVkX1+c11lZXqn7akxqW+3Z8RjqGvGF16/RSeReLnDC
Quin és el contingut del missatge?
Show solution
|
2.- Descarrega el llibre A Tail of Two Cities en format text UTF-8 i computa el hash blake2b512.
Show solution
BLAKE2B-512(book.txt)=
Encripta el llibre amb AES i ChaCha
Show solution
Pots veure que el fitxer encriptat i els encriptats tenen gairebé el mateix tamany!
Elimina el llibre original, recupera els llibres encriptats i verifica que les còpies desencriptades són el mateix que l’original.
Show solution
BLAKE2B-512(book.txt)=
BLAKE2B-512(book.txt)=
BLAKE2B-512(book.txt)=