Introducció

La criptografia simètrica és una tècnica de xifratge on el mateix clau s'utilitza tant per xifrar com per desxifrar la informació. Aquesta tècnica és coneguda per la seva velocitat i eficiència en el processament de dades, però també presenta desafiaments en la gestió segura de les claus.

Objectius d'aquest tema:

  1. Entendre els conceptes bàsics de la criptografia simètrica.
  2. Conèixer els algoritmes més comuns utilitzats en la criptografia simètrica.
  3. Aprendre a implementar un algoritme de criptografia simètrica.
  4. Identificar els avantatges i desavantatges de la criptografia simètrica.

Conceptes Bàsics

Definició

La criptografia simètrica, també coneguda com a criptografia de clau secreta, utilitza una única clau per a les operacions de xifratge i desxifratge. Aquesta clau ha de ser compartida entre les parts que desitgen comunicar-se de manera segura.

Funcionament

  1. Xifratge: El missatge original (text pla) es transforma en un missatge xifrat (text xifrat) utilitzant una clau secreta.
  2. Desxifratge: El text xifrat es transforma de nou en text pla utilitzant la mateixa clau secreta.

Exemple Visual

Text Pla Clau Secreta Text Xifrat
"Hola, món!" "123456" "XyZ123"

Algoritmes Comuns

DES (Data Encryption Standard)

  • Descripció: DES és un algoritme de xifratge simètric que utilitza una clau de 56 bits.
  • Avantatges: Va ser àmpliament utilitzat i és senzill d'implementar.
  • Desavantatges: Actualment es considera insegur degut a la seva curta longitud de clau.

AES (Advanced Encryption Standard)

  • Descripció: AES és un algoritme de xifratge simètric que pot utilitzar claus de 128, 192 o 256 bits.
  • Avantatges: És molt segur i eficient, i és l'estàndard actual per a la criptografia simètrica.
  • Desavantatges: Pot ser més complex d'implementar que DES.

Blowfish

  • Descripció: Blowfish és un algoritme de xifratge simètric que utilitza claus variables de fins a 448 bits.
  • Avantatges: És ràpid i flexible.
  • Desavantatges: Pot ser vulnerable a certs tipus d'atacs si no es configura correctament.

Implementació Pràctica

Exemple en Python amb AES

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes

# Generar una clau secreta de 16 bytes (128 bits)
key = get_random_bytes(16)

# Crear un objecte de xifratge AES en mode CBC
cipher = AES.new(key, AES.MODE_CBC)

# Text pla a xifrar
text_pla = b"Hola, món!"

# Xifrar el text pla
text_xifrat = cipher.encrypt(pad(text_pla, AES.block_size))

# Desxifrar el text xifrat
cipher_dec = AES.new(key, AES.MODE_CBC, cipher.iv)
text_desxifrat = unpad(cipher_dec.decrypt(text_xifrat), AES.block_size)

print(f"Text Pla: {text_pla}")
print(f"Text Xifrat: {text_xifrat}")
print(f"Text Desxifrat: {text_desxifrat}")

Explicació del Codi

  1. Generació de la clau: Utilitzem get_random_bytes per generar una clau de 16 bytes.
  2. Creació de l'objecte de xifratge: Utilitzem AES.new per crear un objecte de xifratge en mode CBC.
  3. Xifratge del text pla: Utilitzem pad per ajustar el text pla a la mida del bloc i després el xifrem.
  4. Desxifratge del text xifrat: Creem un nou objecte de xifratge per desxifrar i utilitzem unpad per obtenir el text pla original.

Avantatges i Desavantatges

Avantatges

  • Velocitat: Els algoritmes de criptografia simètrica són generalment més ràpids que els asimètrics.
  • Eficiència: Requereixen menys recursos computacionals.

Desavantatges

  • Gestió de Claus: La distribució segura de la clau secreta és un gran desafiament.
  • Escalabilitat: En un entorn amb molts usuaris, la gestió de claus es complica exponencialment.

Exercicis Pràctics

Exercici 1: Implementació de DES en Python

Implementa un algoritme de xifratge i desxifratge utilitzant DES en Python. Utilitza la biblioteca pycryptodome.

Exercici 2: Comparació de Rendiment

Compara el temps de xifratge i desxifratge entre DES i AES per a un text pla de 1 MB.

Solucions

Exercici 1: Implementació de DES en Python

from Crypto.Cipher import DES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes

# Generar una clau secreta de 8 bytes (64 bits)
key = get_random_bytes(8)

# Crear un objecte de xifratge DES en mode CBC
cipher = DES.new(key, DES.MODE_CBC)

# Text pla a xifrar
text_pla = b"Hola, món!"

# Xifrar el text pla
text_xifrat = cipher.encrypt(pad(text_pla, DES.block_size))

# Desxifrar el text xifrat
cipher_dec = DES.new(key, DES.MODE_CBC, cipher.iv)
text_desxifrat = unpad(cipher_dec.decrypt(text_xifrat), DES.block_size)

print(f"Text Pla: {text_pla}")
print(f"Text Xifrat: {text_xifrat}")
print(f"Text Desxifrat: {text_desxifrat}")

Exercici 2: Comparació de Rendiment

import time
from Crypto.Cipher import DES, AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes

# Generar text pla de 1 MB
text_pla = b"A" * (1024 * 1024)

# DES
key_des = get_random_bytes(8)
cipher_des = DES.new(key_des, DES.MODE_CBC)
start_time = time.time()
text_xifrat_des = cipher_des.encrypt(pad(text_pla, DES.block_size))
cipher_dec_des = DES.new(key_des, DES.MODE_CBC, cipher_des.iv)
text_desxifrat_des = unpad(cipher_dec_des.decrypt(text_xifrat_des), DES.block_size)
des_time = time.time() - start_time

# AES
key_aes = get_random_bytes(16)
cipher_aes = AES.new(key_aes, AES.MODE_CBC)
start_time = time.time()
text_xifrat_aes = cipher_aes.encrypt(pad(text_pla, AES.block_size))
cipher_dec_aes = AES.new(key_aes, AES.MODE_CBC, cipher_aes.iv)
text_desxifrat_aes = unpad(cipher_dec_aes.decrypt(text_xifrat_aes), AES.block_size)
aes_time = time.time() - start_time

print(f"Temps DES: {des_time} segons")
print(f"Temps AES: {aes_time} segons")

Conclusió

En aquest tema, hem explorat la criptografia simètrica, els seus conceptes bàsics, els algoritmes més comuns, i hem vist exemples pràctics d'implementació. També hem identificat els avantatges i desavantatges d'aquesta tècnica. Amb aquesta base, estem preparats per aprofundir en la criptografia asimètrica en el següent tema.

© Copyright 2024. Tots els drets reservats